diff --git a/.env.example b/.env.example index c22449f..b9c3b65 100644 --- a/.env.example +++ b/.env.example @@ -50,3 +50,61 @@ AZURE_OPENAI_API_VERSION= # Legacy OpenAI key is unused for Stackfast's Azure-only setup but # is kept for operators who swap in the standard OpenAI endpoint. OPENAI_API_KEY= + +# ── Rate limit backend (Phase 8) ────────────────────────────────── +# See docs/decisions/003-deployment-architecture.md § 3 "Rate-limit backend" +# and .kiro/specs/phase-8-deployment/design.md § "Configuration surface". +# +# memory — in-process, single instance only (dev default, also used by tests). +# upstash — distributed, survives restarts. Requires the two Upstash vars below. +RATE_LIMIT_BACKEND=memory + +# Upstash Redis credentials (only read when RATE_LIMIT_BACKEND=upstash). +# Create a database at https://console.upstash.com; copy the REST URL + token. +# Leaving these unset while RATE_LIMIT_BACKEND=upstash triggers a one-time +# `[rate-limit] upstash env missing, falling back to memory` warn on boot +# (design § 9 step 2) so the API never fails to start. +UPSTASH_REDIS_REST_URL= +UPSTASH_REDIS_REST_TOKEN= + +# ── Error tracking — Sentry (Phase 8, optional) ─────────────────── +# See docs/decisions/003-deployment-architecture.md § 5 "Error tracking". +# Every Sentry variable below is optional. When SENTRY_DSN is empty the +# `initSentry()` calls on the API and web become silent no-ops. + +# API Sentry project DSN (server-side @sentry/node). +SENTRY_DSN= + +# Web Sentry project DSN (browser @sentry/react). This is exposed in +# the bundled JS, so only use the DSN, never any secret tokens. +VITE_SENTRY_DSN= + +# Sentry Release tag. In production, Railway injects RAILWAY_GIT_COMMIT_SHA +# automatically; VITE_APP_RELEASE is read at Vite build time. +RAILWAY_GIT_COMMIT_SHA= +VITE_APP_RELEASE= + +# Source-map upload credentials (only needed at build time, never at +# runtime). If any of these are missing, the Sentry Vite plugin is +# skipped and source maps stay local. +SENTRY_AUTH_TOKEN= +SENTRY_ORG= +SENTRY_PROJECT_API= +SENTRY_PROJECT_WEB= + +# ── Web build-time API URLs (Phase 8, VITE_*) ───────────────────── +# See docs/decisions/003-deployment-architecture.md § 4 "Cookie and CORS +# strategy" and .kiro/specs/phase-8-deployment/design.md § "Configuration +# surface". These are read by Vite at BUILD time and baked into the bundle; +# they are never read by the API at runtime. +# +# Local dev does NOT use these root values — apps/web/.env.development sets +# them to the same-origin proxy paths (VITE_API_URL=/api/v1, VITE_AUTH_URL=/) +# so Better Auth cookies flow through Vite's proxy without CORS preflight. +# +# In PRODUCTION the web service does NOT proxy: it calls the API origin +# directly (R3.7), so these must be the absolute api.stackfast.app URLs: +# VITE_API_URL=https://api.stackfast.app/api/v1 +# VITE_AUTH_URL=https://api.stackfast.app +VITE_API_URL=/api/v1 +VITE_AUTH_URL=/ diff --git a/.kiro/specs/phase-8-deployment/tasks.md b/.kiro/specs/phase-8-deployment/tasks.md index 57d003e..73d6530 100644 --- a/.kiro/specs/phase-8-deployment/tasks.md +++ b/.kiro/specs/phase-8-deployment/tasks.md @@ -1,8 +1,14 @@ -# Phase 8 Deployment — Tasks +# Implementation Plan: Phase 8 Deployment + +## Overview + +Phase 8 turns the green-on-`main` MVP into a running deployment at `stackfast.app` + `api.stackfast.app` by executing the architecture already decided in [ADR 003](../../../docs/decisions/003-deployment-architecture.md). The work is dependency-ordered into batches A–I: code-first batches (A rate limiter, B Sentry, C auth hardening + deploy tests) land before the infrastructure batches (D manifests + scripts, E docs), which precede the operator-driven provisioning and cutover batches (F provisioning, G staging, H production, I cleanup). + +This plan is the implementation contract for [`requirements.md`](./requirements.md) and [`design.md`](./design.md). Every task names the acceptance criteria (R-IDs) it satisfies and the files it touches. ## How to use this document -This file is consumed by the `spec-task-execution` sub-agent one task at a time. Each task is self-contained: a short title, a one- or two-sentence description, the acceptance criteria (R-IDs from [`requirements.md`](./requirements.md)), the files touched (from [`design.md`](./design.md) § 2), a verification line, and an explicit dependency list. Tasks are dependency-ordered: when starting a batch, pick the lowest-numbered task whose dependencies are all closed and execute it end-to-end before moving on. +This file is consumed by the `spec-task-execution` sub-agent one task at a time. Each task is self-contained: a short title, a one- or two-sentence description, the acceptance criteria (R-IDs from [`requirements.md`](./requirements.md)), the files touched (from [`design.md`](./design.md) § Code layout), a verification line, and an explicit dependency list. Tasks are dependency-ordered: when starting a batch, pick the lowest-numbered task whose dependencies are all closed and execute it end-to-end before moving on. Tags used below: @@ -10,9 +16,9 @@ Tags used below: - `[external]` — requires an external provisioning action (Railway, Neon, Upstash, Sentry, GitHub, DNS). Operator drives; no code lands. - `[pbt]` — adds or runs property-based tests; the test harness will surface its property-testing warning and the run is slower than a normal unit test. -Design cross-references: [§ 2 Code layout](./design.md#code-layout), [§ 8 Testing strategy](./design.md#testing-strategy), [§ 9 Migration plan for the rate limiter](./design.md#migration-plan-for-the-rate-limiter), and [ADR 003](../../../docs/decisions/003-deployment-architecture.md). +Status markers: `[x]` complete, `[~]` in progress / pending, `[ ]` not started. ---- +Design cross-references: [§ Code layout](./design.md#code-layout), [§ Module boundaries and interfaces](./design.md#module-boundaries-and-interfaces), [§ Configuration surface](./design.md#configuration-surface), [§ Data flow — cross-origin cookie round trip](./design.md#data-flow--cross-origin-cookie-round-trip), [§ Testing strategy](./design.md#testing-strategy), [§ Migration plan for the rate limiter](./design.md#migration-plan-for-the-rate-limiter), and [ADR 003](../../../docs/decisions/003-deployment-architecture.md). ## Batch A — Rate limiter module (memory backend default) @@ -41,143 +47,147 @@ Design cross-references: [§ 2 Code layout](./design.md#code-layout), [§ 8 Test - Description: Implement `@upstash/ratelimit` + `@upstash/redis` sliding-window counter behind the `RateLimitBackend` interface. Do not switch `apps/api/src/app.ts` to it yet — the factory in A6 picks the backend from `RATE_LIMIT_BACKEND`. - Files: `apps/api/src/rate-limit/upstash.ts` (new), `apps/api/src/rate-limit/upstash.test.ts` (new), `apps/api/package.json` (edit: add `@upstash/ratelimit`, `@upstash/redis`). - Acceptance criteria: R4.1, R4.6. - - Verification: unit tests mock `@upstash/redis`, assert that missing `UPSTASH_REDIS_REST_URL` / `_TOKEN` causes the factory to refuse construction (silently falling back to memory per design § 9), and that a successful response returns a `RateLimitDecision` whose `resetAtEpochMs` matches the window. `pnpm --filter @stackfast/api test` passes. + - Verification: unit tests mock `@upstash/redis`, assert that missing `UPSTASH_REDIS_REST_URL` / `_TOKEN` causes the factory to refuse construction (silently falling back to memory per design § Migration plan step 1), and that a successful response returns a `RateLimitDecision` whose `resetAtEpochMs` matches the window. `pnpm --filter @stackfast/api test` passes. - Dependencies: A1, A3. - [x] **A5** Add property-based test suite for the rate limiter `[pbt]` - - Description: Add the fast-check suite covering Property 1 from design § 8 — "Upstash failures never produce a 429 (fail-open)". This is the rate-limit PBT file; the Sentry PBT (Property 2) lands in B2 and the app-level PBTs (Properties 3–5) land in C2 and alongside them. + - Description: Add the fast-check suite covering Property 1 from design § Testing strategy — "Upstash failures never produce a 429 (fail-open)". This is the rate-limit PBT file; the Sentry PBT (Property 2) lands in B2 and the app-level PBTs (Properties 3–5) land in C2. This task also registers `fast-check` as the canonical devDependency for the API package. - Files: `apps/api/src/rate-limit/rate-limit.pbt.test.ts` (new), root Vitest wiring if fast-check is not yet registered: `apps/api/package.json` (edit: add `fast-check` devDependency). - Acceptance criteria: R4.5 (as a property, not just the unit test from A3). - - Verification: fast-check suite runs for the generator in design § 8 Property 1; every indexed request whose injected backend threw has final status in `{200, 401, 404}` and never `429`. Note that the test harness will flag the property-testing warning on this run. + - Verification: fast-check suite runs for the generator in design § Testing strategy Property 1; every indexed request whose injected backend threw has final status in `{200, 401, 404}` and never `429`. Note that the test harness will flag the property-testing warning on this run. - Dependencies: A3, A4. - [x] **A6** Wire the new factory into the app and tighten contract tests - - Description: Replace the inline `rateLimit(bucket, limit)` factory body in `apps/api/src/app.ts` with a call to `createRateLimitMiddleware(bucket, limit)` (default backend = memory via `RATE_LIMIT_BACKEND`). Delete the dead `rateLimitBuckets` export and the `setInterval` cleanup in `apps/api/src/index.ts` — the memory backend rolls over lazily per request (design § 9 step 1). Add the four contract test cases named in design § 8. + - Description: Replace the inline `rateLimit(bucket, limit)` factory body in `apps/api/src/app.ts` with a call to `createRateLimitMiddleware(bucket, limit)` (default backend = memory via `RATE_LIMIT_BACKEND`). Delete the dead `rateLimitBuckets` export and the `setInterval` cleanup in `apps/api/src/index.ts` — the memory backend rolls over lazily per request (design § Migration plan step 1). Add the four contract test cases named in design § Testing strategy. - Files: `apps/api/src/app.ts` (edit: swap factory body, drop `rateLimitBuckets` export), `apps/api/src/index.ts` (edit: remove `setInterval` and the stale-key cleanup TODO), `apps/api/src/app.test.ts` (edit: add cases `admin 401 before rate-limit counter increments`, `Retry-After only on 429`, `exempt routes never counted`, `bucket count survives backend swap`), `apps/api/src/rate-limit/index.ts` (new: public barrel exporting `createRateLimitMiddleware`, `rateLimitHealth`). - Acceptance criteria: R4.1, R4.7, R4.8, R4.9, R6.4, R8.1. - Verification: `pnpm --filter @stackfast/api test` passes with the four new contract cases green; existing `rate limits generation endpoints` test stays green; `pnpm --filter @stackfast/api type-check` + `lint` + `build` stay green. - Dependencies: A1, A2, A3, A4, A5. ---- - ## Batch B — Sentry wiring behind `SENTRY_DSN` -- [~] **B1** Add API Sentry module (init, scrubber, attach helper) +- [x] **B1** Add API Sentry module (init, scrubber, attach helper) - Description: Add `apps/api/src/observability/sentry.ts` exposing `initSentry()`, `attachSentryToHono(app)`, and `scrubEvent(event)`. Module is a no-op whenever `SENTRY_DSN` is falsy and idempotent across repeat calls. - Files: `apps/api/src/observability/sentry.ts` (new), `apps/api/src/observability/sentry.test.ts` (new), `apps/api/package.json` (edit: add `@sentry/node`). - Acceptance criteria: R7.1, R7.3, R7.4, R7.5, R7.6. - Verification: unit tests assert `Sentry.getCurrentHub().getClient()` is `undefined` when DSN is unset; exactly one client after any number of `initSentry()` calls with the same DSN; `release` equals `process.env.RAILWAY_GIT_COMMIT_SHA`; `scrubEvent` strips `idea` and `constraints` keys from `event.request.data` without mutating the input reference. - Dependencies: none (parallel with Batch A). -- [~] **B2** Add property-based test for Sentry init idempotence `[pbt]` - - Description: Add fast-check Property 2 from design § 8 — "Sentry init is idempotent and a no-op without DSN". +- [x] **B2** Add property-based test for Sentry init idempotence `[pbt]` + - Description: Add fast-check Property 2 from design § Testing strategy — "Sentry init is idempotent and a no-op without DSN". - Files: `apps/api/src/observability/sentry.pbt.test.ts` (new). - Acceptance criteria: R7.3, R7.4. - - Verification: fast-check replays any interleaving of `init` / `set-dsn` events and asserts the active-client invariant (0 clients when DSN always falsy, exactly 1 client once any non-empty DSN has been set). Note that the test harness will surface the property-testing warning on this run. + - Verification: fast-check replays any interleaving of `init` / `set-dsn` events and asserts the active-client invariant (0 clients when DSN always falsy, exactly 1 client once any non-empty DSN has been set). Assumes `fast-check` is installed (registered in A5; install with `pnpm --filter @stackfast/api add -D fast-check` if this task runs first). Note that the test harness will surface the property-testing warning on this run. - Dependencies: B1. -- [~] **B3** Wire Sentry into the API process +- [x] **B3** Wire Sentry into the API process - Description: Call `initSentry()` in `apps/api/src/index.ts` before `serve()`, and call `attachSentryToHono(app)` in `apps/api/src/app.ts` so captured events include `requestId`. No-op stays silent when DSN is unset. - Files: `apps/api/src/index.ts` (edit), `apps/api/src/app.ts` (edit). - Acceptance criteria: R7.1, R7.3. - Verification: contract test asserts that with `SENTRY_DSN` unset, `Sentry.getCurrentHub().getClient()` is still `undefined` after `app.request("/health")`. With a stubbed DSN, one client is registered and a thrown error inside a route produces a captured event whose payload has `idea` / `constraints` removed. - Dependencies: B1, B2. -- [~] **B4** Add web Sentry module +- [x] **B4** Add web Sentry module - Description: Add `apps/web/src/lib/sentry.ts` exposing a browser `initSentry()` that reads `import.meta.env.VITE_SENTRY_DSN` and `VITE_APP_RELEASE`. Idempotent; no-op when DSN is missing. - Files: `apps/web/src/lib/sentry.ts` (new), `apps/web/src/lib/sentry.test.ts` (new), `apps/web/package.json` (edit: add `@sentry/react`, `@sentry/vite-plugin`). - Acceptance criteria: R7.2, R7.3, R7.4. - Verification: unit tests cover the DSN-unset and double-init branches on the browser side the same way B1 does for the API. - Dependencies: none (can parallel B1). -- [~] **B5** Wire Sentry into the web build and entrypoint +- [x] **B5** Wire Sentry into the web build and entrypoint - Description: Call `initSentry()` in `apps/web/src/main.tsx` before `ReactDOM.createRoot`. Register `sentryVitePlugin` conditionally in `apps/web/vite.config.ts` — enabled only when `SENTRY_DSN`, `SENTRY_AUTH_TOKEN`, `SENTRY_ORG`, and `SENTRY_PROJECT_WEB` are all set at build time. - Files: `apps/web/src/main.tsx` (edit), `apps/web/vite.config.ts` (edit). - Acceptance criteria: R7.2, R7.3, R7.6. - Verification: `pnpm --filter @stackfast/web build` with no Sentry env vars builds cleanly (plugin not registered, source maps still emitted locally via `build.sourcemap: true`). Running the build with all four env vars set loads the Sentry Vite plugin once — asserted via a local dry-run script that greps `dist/assets/*.map.sentry*` metadata. - Dependencies: B4. ---- +## Batch C — Auth hardening (R3 cookies, R11 fail-closed) and app-level deploy tests -## Batch C — Auth fail-closed tightening (R11) - -- [~] **C1** Add production-first fail-closed guard in `requireSession()` - - Description: Apply the two-line edit described in design § 3 ("Module boundaries — auth middleware"): at the very top of `requireSession`, return HTTP 503 when `isProduction(c.env)` is true and `getAuth()` yields a null/throwing result, regardless of the `ALLOW_AUTH_BYPASS` value. The non-production bypass path is unchanged. +- [x] **C1** Add production-first fail-closed guard in `requireSession()` + - Description: Apply the two-line edit described in design § Module boundaries ("auth middleware"): at the very top of `requireSession`, return HTTP 503 when `isProduction(c.env)` is true and `getAuth()` yields a null/throwing result, regardless of the `ALLOW_AUTH_BYPASS` value. The non-production bypass path is unchanged. - Files: `apps/api/src/middleware/auth.ts` (edit). - Acceptance criteria: R11.2, R11.3, R11.4, R11.5. - Verification: existing test case `fails protected generation closed in production when auth is unavailable` stays green; the local-dev bypass path still works with the default `.env.example` values. - Dependencies: none (parallel with A and B). -- [~] **C2** Add fail-closed contract + property tests `[pbt]` - - Description: Add the app-level contract tests for "admin 401 before any middleware", "CORS never wildcard in prod", and "prod auth 503 when Better Auth init throws" (design § 8). Add the fast-check suites for Properties 3 (CORS never wildcard), 4 (admin-key gating), and 5 (auth fail-closed in prod) since these target app-level behavior rather than a single rate-limit module. - - Files: `apps/api/src/app.test.ts` (edit: add the three contract cases), `apps/api/src/app.pbt.test.ts` (new: holds Properties 3, 4, 5). - - Acceptance criteria: R8.1, R10.3, R10.4, R11.4 (contract), R10.3, R8.1, R8.3, R8.4, R8.5, R8.6, R11.2, R11.3, R11.4 (properties). - - Verification: `pnpm --filter @stackfast/api test` passes; the PBT run triggers the property-testing warning for the new `.pbt.test.ts` file. +- [x] **C2** Add fail-closed contract + property tests `[pbt]` + - Description: Add the app-level contract tests for "admin 401 before any middleware", "CORS never wildcard in prod", "CORS allowed-headers list", and "prod auth 503 when Better Auth init throws" (design § Testing strategy). Add the fast-check suites for Properties 3 (CORS never wildcard), 4 (admin-key gating), and 5 (auth fail-closed in prod) since these target app-level behavior rather than a single rate-limit module. + - Files: `apps/api/src/app.test.ts` (edit: add the four contract cases), `apps/api/src/app.pbt.test.ts` (new: holds Properties 3, 4, 5). + - Acceptance criteria: R8.1, R10.3, R10.4, R10.5, R11.4 (contract), R10.3, R8.1, R8.3, R8.4, R8.5, R8.6, R11.2, R11.3, R11.4 (properties). + - Verification: `pnpm --filter @stackfast/api test` passes; a contract case asserts `Access-Control-Allow-Headers` includes `X-Admin-API-Key`, `X-Request-ID`, `X-AI-Provider`, `Content-Type`, and `Authorization` (R10.5); the PBT run triggers the property-testing warning for the new `.pbt.test.ts` file. Assumes `fast-check` is installed (registered in A5). + - Dependencies: C1. + +- [x] **C3** Configure cross-subdomain session cookies for production + - Description: Extend `createAuth()` in `apps/api/src/middleware/auth.ts` with Better Auth's `advanced.crossSubDomainCookies` (`enabled` + `domain: ".stackfast.app"`) and `advanced.defaultCookieAttributes` (`secure`, `httpOnly`, `sameSite: "none"`), all gated on `isProduction(env)`. Non-production keeps the existing host-only same-origin cookie behavior so Vite's proxy and unit tests are unaffected. This is the code that realizes the cookie tuple described in design § Data flow steps 4–6. + - Files: `apps/api/src/middleware/auth.ts` (edit: `createAuth()` config), `apps/api/src/middleware/auth.test.ts` (new: assert cookie config branches). + - Acceptance criteria: R3.3, R3.4, R3.6. + - Verification: a unit test asserts the Better Auth options passed in production set `crossSubDomainCookies.enabled = true`, `crossSubDomainCookies.domain = ".stackfast.app"`, and `defaultCookieAttributes` with `secure`/`httpOnly`/`sameSite: "none"`; the same test asserts non-production omits `SameSite=None` and the cross-subdomain domain (R3.6). `pnpm --filter @stackfast/api test` + `type-check` + `lint` stay green. - Dependencies: C1. ---- +- [x] **C4** Write Playwright deploy E2E specs + - Description: Add the four `tests/e2e/deploy-*.spec.ts` files enumerated in design § Code layout and § Testing strategy ("End-to-end"). The cross-origin auth spec stubs the GitHub round trip via `page.route("**/github.com/**", ...)` and asserts the session cookie is readable on both origins; the rate-limit spec uses the in-memory backend; the health spec asserts unauthenticated `200 OK`; the admin spec asserts 401 on every missing/wrong-key variant. These specs are executed against staging in G5. + - Files: `tests/e2e/deploy-cross-origin-auth.spec.ts` (new), `tests/e2e/deploy-rate-limit.spec.ts` (new), `tests/e2e/deploy-health.spec.ts` (new), `tests/e2e/deploy-admin-401.spec.ts` (new). + - Acceptance criteria: R3.8, R5.1, R5.3, R6.1, R6.2, R6.3, R8.1, R8.3. + - Verification: `pnpm test:e2e` runs the four new specs green against a local dev server (`pnpm dev`); cross-origin spec confirms the cookie is present for both `stackfast.app` and `api.stackfast.app` origins via `page.context().cookies()`; health spec confirms `status === 200 && body === "OK"` without cookies; admin spec confirms 401 for none/wrong `X-Admin-API-Key`/wrong `Bearer` and 202 for the matching key. + - Dependencies: A6, C1, C3. ## Batch D — Railway manifests + runbook scripts -- [~] **D1** Add API service Railway manifest +- [x] **D1** Add API service Railway manifest - Description: Declare the Node 20 runtime, build/start commands, and `/health` healthcheck path for `stackfast-api` so `railway up` is deterministic regardless of Railway's autodetection. - Files: `apps/api/railway.toml` (new). - Acceptance criteria: R1.1, R5.1. - - Verification: `railway up --service stackfast-api --dry-run` against a local Railway link (or a `railway config validate` equivalent) reports the manifest as valid. File is reviewed against ADR 003 § 1 and design § "API Service". + - Verification: `railway up --service stackfast-api --dry-run` against a local Railway link (or a `railway config validate` equivalent) reports the manifest as valid. File is reviewed against ADR 003 § 1 and design § Railway service topology ("API Service"). - Dependencies: A6 (must not ship the manifest before the rate-limit module that the service will run). -- [~] **D2** Add Web service Railway manifest +- [x] **D2** Add Web service Railway manifest - Description: Declare the static-hosting build and serve configuration for `stackfast-web` so the web service is redeployable by `railway up` with no manual dashboard fiddling. - Files: `apps/web/railway.toml` (new). - Acceptance criteria: R1.2. - - Verification: manifest is reviewed against design § "Web Service"; `railway up --service stackfast-web --dry-run` reports valid. + - Verification: manifest is reviewed against design § Railway service topology ("Web Service"); `railway up --service stackfast-web --dry-run` reports valid. - Dependencies: B5 (web Sentry wiring must exist before the manifest declares the build that will upload source maps). -- [~] **D3** Add migration one-shot script +- [x] **D3** Add migration one-shot script - Description: Add `scripts/deploy/migrate.ts` — a `tsx`-runnable wrapper around `drizzle-kit push` with a 30-second connection-retry loop per R2.3. Exits non-zero on any failure. - Files: `scripts/deploy/migrate.ts` (new). - Acceptance criteria: R2.3, R2.4, R2.5. - Verification: running `pnpm exec tsx scripts/deploy/migrate.ts --dry-run` against a local Neon branch prints the pending DDL (or "no changes"); forcing `DATABASE_URL` to an unreachable host causes the script to retry for ~30s before exiting non-zero; exit code is captured in the runbook. - Dependencies: none (parallel with D1, D2). -- [~] **D4** Add post-deploy smoke script - - Description: Add `scripts/deploy/smoke.ts` implementing the six assertions in design § 8 "Deploy smoke" — health, 31-req generation burst, 101-req read burst, admin 401, same-origin CORS ACAO, evil-origin ACAO absent. Exits 0/non-zero, prints a one-line JSON summary, and writes a timestamped report to `test-results/deploy-smoke-.json`. +- [x] **D4** Add post-deploy smoke script + - Description: Add `scripts/deploy/smoke.ts` implementing the six assertions in design § Testing strategy "Deploy smoke" — health, 31-req generation burst, 101-req read burst, admin 401, same-origin CORS ACAO, evil-origin ACAO absent. Exits 0/non-zero, prints a one-line JSON summary, and writes a timestamped report to `test-results/deploy-smoke-.json`. - Files: `scripts/deploy/smoke.ts` (new). - Acceptance criteria: R5.4, R6.1, R6.2, R6.3, R8.3, R10.2, R10.3. - Verification: run against the local dev server (`pnpm dev` + `pnpm exec tsx scripts/deploy/smoke.ts --base http://localhost:3000 --web http://localhost:5173`); all six assertions pass, the JSON summary lands in `test-results/`, and the script exits 0. A second run with the API stopped exits non-zero and the summary marks the health assertion as failed. - Dependencies: A6 (rate limiter wired in so R6.1/R6.3 are testable), C1 (admin + CORS behavior finalized), D3 (so `migrate` → `smoke` order is clear in the runbook). -- [~] **D5** Add rollback runbook `[docs]` - - Description: Document `railway rollback --service stackfast-api` and `railway rollback --service stackfast-web`, the two-phase schema-compatibility rule from design § "Rollback, observability, and runbook notes", and the manual intervention point from R12.4. +- [x] **D5** Add rollback runbook `[docs]` + - Description: Document `railway rollback --service stackfast-api` and `railway rollback --service stackfast-web`, the two-phase schema-compatibility rule from design § Rollback, observability, and runbook notes (column drops/renames ship across two sequential deploys), and the manual intervention point from R12.4. - Files: `scripts/deploy/rollback.md` (new). - - Acceptance criteria: R12.1, R12.2, R12.3, R12.4, R12.5, R12.6, R12.7. - - Verification: operator reviewer confirms each R12 acceptance criterion has a named step in the runbook and that the runbook cross-references ADR 003 § "Rollback strategy". + - Acceptance criteria: R2.6, R2.7, R12.1, R12.2, R12.3, R12.4, R12.5, R12.6, R12.7. + - Verification: operator reviewer confirms each R12 acceptance criterion has a named step in the runbook, that the two-deploy schema rule (R2.6, R2.7) is stated explicitly, and that the runbook cross-references ADR 003 § "Rollback strategy". - Dependencies: D1, D2 (rollback applies per-service, so manifests must exist). ---- - ## Batch E — `.env.example` and README `[docs]` -- [~] **E1** Extend `.env.example` with Phase 8 variables `[docs]` - - Description: Add the new rows from design § "Configuration surface" — `UPSTASH_REDIS_REST_URL`, `UPSTASH_REDIS_REST_TOKEN`, `RATE_LIMIT_BACKEND`, `SENTRY_DSN`, `SENTRY_AUTH_TOKEN`, `SENTRY_ORG`, `SENTRY_PROJECT_API`, `SENTRY_PROJECT_WEB`, `RAILWAY_GIT_COMMIT_SHA`, `VITE_SENTRY_DSN`, `VITE_APP_RELEASE`. Each row has a short comment linking to ADR 003 § 3 (Upstash) or § 5 (Sentry). +- [x] **E1** Extend `.env.example` with Phase 8 variables `[docs]` + - Description: Add the new rows from design § Configuration surface — `UPSTASH_REDIS_REST_URL`, `UPSTASH_REDIS_REST_TOKEN`, `RATE_LIMIT_BACKEND`, `SENTRY_DSN`, `SENTRY_AUTH_TOKEN`, `SENTRY_ORG`, `SENTRY_PROJECT_API`, `SENTRY_PROJECT_WEB`, `RAILWAY_GIT_COMMIT_SHA`, `VITE_SENTRY_DSN`, `VITE_APP_RELEASE`. Each row has a short comment linking to ADR 003 § 3 (Upstash) or § 5 (Sentry). - Files: `.env.example` (edit). - Acceptance criteria: R14.1. - - Verification: reviewer diffs `.env.example` against design § "Configuration surface" and confirms every new row is present with a comment. + - Verification: reviewer diffs `.env.example` against design § Configuration surface and confirms every new row is present with a comment. - Dependencies: none (parallel with A–D). -- [~] **E2** Add production-deployment section to the README `[docs]` - - Description: Add the Railway CLI deploy flow (steps 1-9 from design § "End-to-end `railway link` → deployed story"), the Drizzle one-shot migration command, the per-service rollback commands, and the full production env var table. Link to ADR 001, ADR 002, and ADR 003. +- [x] **E2** Add production-deployment section to the README `[docs]` + - Description: Add the Railway CLI deploy flow (steps 1-9 from design § Railway service topology "End-to-end `railway link` → deployed story"), the Drizzle one-shot migration command, the per-service rollback commands, and the full production env var table. Document that the web service calls `api.stackfast.app` directly (no proxy) in production via `VITE_API_URL` (R3.7). Link to ADR 001, ADR 002, and ADR 003. - Files: `readme.md` (edit). - - Acceptance criteria: R14.1, R14.2, R14.3, R14.4, R14.5. - - Verification: reviewer confirms every R14 acceptance criterion is addressed by a named subsection; the three ADR links resolve. + - Acceptance criteria: R3.7, R14.1, R14.2, R14.3, R14.4, R14.5. + - Verification: reviewer confirms every R14 acceptance criterion is addressed by a named subsection; the production env var table shows `VITE_API_URL=https://api.stackfast.app/api/v1` (R3.7); the three ADR links resolve. - Dependencies: D3, D4, D5 (README cites the scripts and runbook by path). ---- - ## Batch F — External provisioning `[external]` - [~] **F1** Provision Railway project + production and staging environments `[external]` - - Description: Create (or link to) the `stackfast` Railway project; create `production` and `staging` Railway environments inside it; link the repo from the operator's workstation with `railway link`. + - Description: Create (or link to) the `stackfast` Railway project; create `production` and `staging` Railway environments inside it; link the repo from the operator's workstation with `railway link`. The two services (`stackfast-api`, `stackfast-web`) are provisioned as distinct services so each can be built, redeployed, and rolled back independently. - Preconditions: Railway account, Railway CLI installed and `railway login` completed, operator has project-create permission in the target team/workspace. - Acceptance criteria: R1.3, R1.4, R13.1. - Verification: operator records the project id, environment names, and the output of `railway status` (showing both services attached to both environments) in the deploy log. No code lands. @@ -232,22 +242,20 @@ Design cross-references: [§ 2 Code layout](./design.md#code-layout), [§ 8 Test - Verification: `dig api.stackfast.app` and `dig stackfast.app` resolve to Railway edge; `curl -I http://stackfast.app` returns 301 or 308 to the HTTPS URL; TLS certificate on both origins is Railway-issued. - Dependencies: F1. ---- - ## Batch G — Staging cutover - [~] **G1** Set staging environment variables in Railway `[external]` - - Description: Set every variable in the "Staging" column of design § "Configuration surface" on both `stackfast-api` and `stackfast-web` in the Railway staging environment. Leave `RATE_LIMIT_BACKEND` at its default (`memory`) for this first deploy; leave `SENTRY_DSN` optional. + - Description: Set every variable in the "Staging" column of design § Configuration surface on both `stackfast-api` and `stackfast-web` in the Railway staging environment, including `VITE_API_URL`/`VITE_AUTH_URL` pointing at the staging API host so the web service calls the API directly with no proxy (R3.7). Leave `RATE_LIMIT_BACKEND` at its default (`memory`) for this first deploy; leave `SENTRY_DSN` optional. - Preconditions: F1, F3, F4, F5, F7. - - Acceptance criteria: R3.2, R3.5, R11.1, R13.2, R13.3, R13.4, R13.5. - - Verification: `railway variables list --service stackfast-api --environment staging` reports every required variable (operator redacts secrets); `ALLOW_AUTH_BYPASS=false`. + - Acceptance criteria: R3.2, R3.5, R3.7, R11.1, R13.2, R13.3, R13.4, R13.5. + - Verification: `railway variables list --service stackfast-api --environment staging` reports every required variable (operator redacts secrets); `ALLOW_AUTH_BYPASS=false`; the web service's `VITE_API_URL` is the absolute staging API URL. - Dependencies: F1, F3, F4, F5, F7. - [~] **G2** Deploy API and Web to staging `[external]` - - Description: `railway up --service stackfast-api --environment staging` and `railway up --service stackfast-web --environment staging`. Confirm both services reach healthy state. + - Description: `railway up --service stackfast-api --environment staging` and `railway up --service stackfast-web --environment staging`. Confirm both services reach healthy state, then validate independent redeploy. - Preconditions: D1, D2, G1. - - Acceptance criteria: R1.1, R1.2, R1.4, R5.1, R5.2. - - Verification: operator records the two `railway up` build ids; `GET https://api.staging.stackfast.app/health` returns 200 `OK` within 15 seconds of the container marking ready. + - Acceptance criteria: R1.1, R1.2, R1.4, R1.5, R1.6, R5.1, R5.2. + - Verification: operator records the two `railway up` build ids; `GET https://api.staging.stackfast.app/health` returns 200 `OK` within 15 seconds of the container marking ready; re-running `railway up --service stackfast-web` leaves the API serving traffic without a restart (R1.5) and re-running `railway up --service stackfast-api` leaves the web service unaffected (R1.6). - Dependencies: D1, D2, G1. - [~] **G3** Run migrations against Neon staging branch `[external]` @@ -260,33 +268,31 @@ Design cross-references: [§ 2 Code layout](./design.md#code-layout), [§ 8 Test - [~] **G4** Flip `RATE_LIMIT_BACKEND=upstash` in staging `[external]` - Description: Set `RATE_LIMIT_BACKEND=upstash`, `UPSTASH_REDIS_REST_URL`, and `UPSTASH_REDIS_REST_TOKEN` on the staging API service. Railway restarts the instance automatically. - Preconditions: A6 (factory reads the flag), F4, G2. - - Acceptance criteria: R4.1, R4.6, design § 9 step 3. + - Acceptance criteria: R4.1, R4.6, design § Migration plan step 3. - Verification: `railway logs --service stackfast-api --environment staging` shows no `[rate-limit] upstash unavailable` entries in the minute after restart. - Dependencies: A6, F4, G2. - [~] **G5** Run deploy smoke + Playwright E2E against staging `[external]` - - Description: Run `pnpm exec tsx scripts/deploy/smoke.ts --base https://api.staging.stackfast.app --web https://staging.stackfast.app` and `E2E_BASE_URL=https://staging.stackfast.app E2E_API_URL=https://api.staging.stackfast.app/api/v1 pnpm test:e2e`. File the resulting `test-results/deploy-smoke-*.json` in the deploy log. - - Preconditions: D4, G3, G4. - - Acceptance criteria: R5.4, R6.1, R6.2, R6.3, R8.3, R10.2, R10.3, R3.8. - - Verification: smoke script exits 0 and the JSON report shows six passing assertions; Playwright reports all specs green against the staging origins. - - Dependencies: D4, G3, G4. + - Description: Run `pnpm exec tsx scripts/deploy/smoke.ts --base https://api.staging.stackfast.app --web https://staging.stackfast.app` and `E2E_BASE_URL=https://staging.stackfast.app E2E_API_URL=https://api.staging.stackfast.app/api/v1 pnpm test:e2e` (the deploy specs written in C4). File the resulting `test-results/deploy-smoke-*.json` in the deploy log. + - Preconditions: C4, D4, G3, G4. + - Acceptance criteria: R3.8, R5.1, R5.3, R5.4, R6.1, R6.2, R6.3, R8.3, R10.2, R10.3. + - Verification: smoke script exits 0 and the JSON report shows six passing assertions; Playwright reports all C4 specs green against the staging origins. + - Dependencies: C4, D4, G3, G4. - [~] **G6** Soak the rate-limit properties against real Upstash `[external] [pbt]` - - Description: Re-run the rate-limit property-based suite with `RATE_LIMIT_BACKEND=upstash` and the real staging Upstash credentials in the local environment — design § 9 step 3 calls out confirming Property 1 holds end-to-end. The test harness surfaces its property-testing warning on this run. + - Description: Re-run the rate-limit property-based suite with `RATE_LIMIT_BACKEND=upstash` and the real staging Upstash credentials in the local environment — design § Migration plan step 3 calls out confirming Property 1 holds end-to-end. The test harness surfaces its property-testing warning on this run. - Preconditions: A5, F4, G4. - - Acceptance criteria: R4.5 (end-to-end against the real backend), design § 9 step 3. + - Acceptance criteria: R4.5 (end-to-end against the real backend), design § Migration plan step 3. - Verification: `pnpm --filter @stackfast/api test src/rate-limit/rate-limit.pbt.test.ts` passes with the staging Upstash URL/token exported locally; run duration and seed are recorded in the deploy log. - Dependencies: A5, F4, G4. ---- - ## Batch H — Production cutover - [~] **H1** Set production environment variables in Railway `[external]` - - Description: Set every variable in the "Prod" column of design § "Configuration surface" on both services. Leave `RATE_LIMIT_BACKEND=memory` for the first deploy — the flag flip happens after the smoke in H6. Set `ALLOW_AUTH_BYPASS=false`. + - Description: Set every variable in the "Prod" column of design § Configuration surface on both services, including `VITE_API_URL=https://api.stackfast.app/api/v1` so the web service calls the API directly (R3.7). Leave `RATE_LIMIT_BACKEND=memory` for the first deploy — the flag flip happens after the smoke in H6. Set `ALLOW_AUTH_BYPASS=false`. - Preconditions: F1, F2, F4, F5, F6. - - Acceptance criteria: R3.2, R3.5, R8.2, R10.1, R11.1. - - Verification: `railway variables list --service stackfast-api --environment production` shows every required var; admin and auth secrets are distinct from `BETTER_AUTH_SECRET`. + - Acceptance criteria: R3.2, R3.5, R3.7, R8.2, R10.1, R11.1. + - Verification: `railway variables list --service stackfast-api --environment production` shows every required var; admin and auth secrets are distinct from `BETTER_AUTH_SECRET`; the web `VITE_API_URL` is the absolute production API URL. - Dependencies: F1, F2, F4, F5, F6. - [~] **H2** Deploy API and Web to production `[external]` @@ -318,9 +324,9 @@ Design cross-references: [§ 2 Code layout](./design.md#code-layout), [§ 8 Test - Dependencies: D4, H3, H4. - [~] **H6** Flip `RATE_LIMIT_BACKEND=upstash` in production `[external]` - - Description: Set `RATE_LIMIT_BACKEND=upstash` plus `UPSTASH_REDIS_REST_URL` / `_TOKEN` on the production API service. Railway restarts the instance. Per design § 9 step 4 this is reversible by flipping the flag back to `memory`. + - Description: Set `RATE_LIMIT_BACKEND=upstash` plus `UPSTASH_REDIS_REST_URL` / `_TOKEN` on the production API service. Railway restarts the instance. Per design § Migration plan step 4 this is reversible by flipping the flag back to `memory`. - Preconditions: F4, H5. - - Acceptance criteria: R4.1, R4.6, design § 9 step 4. + - Acceptance criteria: R4.1, R4.6, design § Migration plan step 4. - Verification: post-restart `railway logs` show no fail-open warning in the first minute; a single `GET /api/v1/tools/search` round-trip responds 200. - Dependencies: F4, H5. @@ -331,21 +337,19 @@ Design cross-references: [§ 2 Code layout](./design.md#code-layout), [§ 8 Test - Verification: `pnpm exec tsx scripts/deploy/smoke.ts --base https://api.stackfast.app --web https://stackfast.app --only rate-limit` exits 0; the JSON report is attached to the deploy log. - Dependencies: D4, H6. ---- - ## Batch I — Post-deploy cleanup - [~] **I1** Post-deploy verification of dead-code removal - Description: Confirm, after production has been running on `RATE_LIMIT_BACKEND=upstash`, that the `setInterval` cleanup removed in A6 is not being reintroduced and that `rateLimitBuckets` is not imported anywhere outside the memory backend and its tests. Purely a verification task — the removal itself landed in A6. - Files: none edited; verification only. - - Acceptance criteria: design § 9 step 1. + - Acceptance criteria: design § Migration plan step 1. - Verification: `grep -R "rateLimitBuckets" apps/api/src` returns only matches under `apps/api/src/rate-limit/memory*`; `grep -R "setInterval" apps/api/src/index.ts` returns no matches; Railway production logs show no `[rate-limit] Cleaned` lines since H6. - Dependencies: H7. - [~] **I2** Drop memory-mode rows from production-facing docs and configs `[docs]` - - Description: Remove any remaining `RATE_LIMIT_BACKEND=memory` example rows from the production column of `.env.example` and the README production section. The memory backend stays in the codebase for tests (design § 9 step 5) — only the prod-facing docs are trimmed. + - Description: Remove any remaining `RATE_LIMIT_BACKEND=memory` example rows from the production column of `.env.example` and the README production section. The memory backend stays in the codebase for tests (design § Migration plan step 5) — only the prod-facing docs are trimmed. - Files: `.env.example` (edit), `readme.md` (edit). - - Acceptance criteria: R14.1, design § 9 step 5. + - Acceptance criteria: R14.1, design § Migration plan step 5. - Verification: reviewer diffs the updated docs and confirms the production column lists `RATE_LIMIT_BACKEND=upstash` unambiguously. - Dependencies: I1. @@ -355,3 +359,44 @@ Design cross-references: [§ 2 Code layout](./design.md#code-layout), [§ 8 Test - Acceptance criteria: closes the Phase 8 deliverable per ADR 003 § "Implementation notes". - Verification: reviewer confirms the Phase 8 checkbox is ticked and the CHANGELOG entry cites ADR 003 and this spec. - Dependencies: I2. + +## Notes + +- Tasks tagged `[external]` are operator-driven provisioning/cutover steps; no code lands in those tasks. Tasks tagged `[docs]` are documentation-only. Tasks tagged `[pbt]` add or run property-based (fast-check) tests and will surface the harness's property-testing warning. +- Test sub-work is folded into the implementing task (per this spec's batch convention) rather than split into separate optional sub-tasks — each code task's verification line names the tests it must land. +- `fast-check` is registered as a devDependency in task A5; B2 and C2 assume it is present and may install it (`pnpm --filter @stackfast/api add -D fast-check`) if they execute before A5. +- The rate-limiter migration is feature-flagged (`RATE_LIMIT_BACKEND=memory|upstash`) so code (Batches A–C) can ship ahead of Upstash provisioning (F4); the flag is flipped in staging (G4) then production (H6), and is reversible by flipping it back. +- Each task references specific requirements clauses (R-IDs) for traceability back to [`requirements.md`](./requirements.md). + +## Task Dependency Graph + +```json +{ + "waves": [ + { "id": 0, "tasks": ["A1", "B1", "B4", "C1", "D3", "E1"] }, + { "id": 1, "tasks": ["A2", "B2", "B5", "C2", "C3"] }, + { "id": 2, "tasks": ["A3", "B3", "D2"] }, + { "id": 3, "tasks": ["A4"] }, + { "id": 4, "tasks": ["A5"] }, + { "id": 5, "tasks": ["A6"] }, + { "id": 6, "tasks": ["C4", "D1", "D4"] }, + { "id": 7, "tasks": ["D5"] }, + { "id": 8, "tasks": ["E2"] }, + { "id": 9, "tasks": ["F1"] }, + { "id": 10, "tasks": ["F2", "F4", "F5", "F6", "F7", "F8"] }, + { "id": 11, "tasks": ["F3", "H1"] }, + { "id": 12, "tasks": ["G1"] }, + { "id": 13, "tasks": ["G2"] }, + { "id": 14, "tasks": ["G3", "G4"] }, + { "id": 15, "tasks": ["G5", "G6"] }, + { "id": 16, "tasks": ["H2"] }, + { "id": 17, "tasks": ["H3", "H4"] }, + { "id": 18, "tasks": ["H5"] }, + { "id": 19, "tasks": ["H6"] }, + { "id": 20, "tasks": ["H7"] }, + { "id": 21, "tasks": ["I1"] }, + { "id": 22, "tasks": ["I2"] }, + { "id": 23, "tasks": ["I3"] } + ] +} +``` diff --git a/apps/api/drizzle.config.ts b/apps/api/drizzle.config.ts new file mode 100644 index 0000000..305d0c0 --- /dev/null +++ b/apps/api/drizzle.config.ts @@ -0,0 +1,34 @@ +import { defineConfig } from "drizzle-kit"; + +/** + * Drizzle Kit config for the Stackfast API service. + * + * This config is consumed by `drizzle-kit push`, which is wrapped by the + * one-shot migration runner at `scripts/deploy/migrate.ts` (Phase 8, R2.4). + * + * Decision (design.md § "Open questions" item 2): Phase 8 uses `drizzle-kit + * push` rather than `drizzle-kit migrate`. The repo has no `drizzle/` + * migration history yet, and inventing one just to run `migrate` adds process + * weight without value. Promote to `migrate` (and add an `out` migrations + * folder) once the first real migration history appears post-MVP. + * + * The schema lives in the shared `@stackfast/schemas` package. `drizzle-kit` + * loads the schema by file path (not module specifier), so this points at the + * source file relative to this config's directory (apps/api). + */ +export default defineConfig({ + dialect: "postgresql", + // Relative to apps/api — resolves to packages/schemas/src/db.ts. + schema: "../../packages/schemas/src/db.ts", + // `out` is only used by `drizzle-kit generate`/`migrate`. Declared here so a + // future switch to migration files has a home; `push` ignores it. + out: "./drizzle", + dbCredentials: { + // The migration runner validates this is set before invoking drizzle-kit, + // and waits for the connection to come up (R2.3) before pushing. + url: process.env.DATABASE_URL ?? "", + }, + // Surface the SQL drizzle-kit intends to run. The runner adds `--strict` in + // --dry-run mode so nothing is applied without explicit approval. + verbose: true, +}); diff --git a/apps/api/package.json b/apps/api/package.json index 353a144..07001a7 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -15,6 +15,7 @@ "dependencies": { "@hono/node-server": "^1.13.7", "@neondatabase/serverless": "^0.10.4", + "@sentry/node": "^10.53.1", "@stackfast/ai": "workspace:*", "@stackfast/exporter": "workspace:*", "@stackfast/registry": "workspace:*", @@ -30,6 +31,7 @@ }, "devDependencies": { "@types/node": "^22.10.2", + "drizzle-kit": "^0.31.4", "fast-check": "^4.8.0", "tsx": "^4.19.2", "typescript": "^5.6.3" diff --git a/apps/api/railway.toml b/apps/api/railway.toml new file mode 100644 index 0000000..bd0411d --- /dev/null +++ b/apps/api/railway.toml @@ -0,0 +1,67 @@ +# Railway service manifest for `stackfast-api`. +# +# Phase 8 deployment — ties back to: +# - ADR 003 § 1 "Hosting: split web + API, both on Railway" +# (docs/decisions/003-deployment-architecture.md) +# - design.md § "Railway service topology — API Service" +# (.kiro/specs/phase-8-deployment/design.md) +# +# Schema reference: https://railway.com/railway.schema.json +# Config-as-code docs: https://docs.railway.com/config-as-code/reference +# +# Node 20 runtime: Nixpacks auto-detects the Node major version from the +# root `package.json` "engines" field (">=20.0.0"). If the Nixpacks +# autodetection ever regresses, the operator can pin it explicitly via a +# Railway env var: `NIXPACKS_NODE_VERSION=20`. Pinning in the repo is +# intentionally deferred to a follow-up task so this manifest stays +# focused on build/run/healthcheck. +# +# Environment variables are NOT declared here — they are set per +# environment via the Railway CLI/dashboard, per ADR 003 § 6 and +# design § "Configuration surface". Example: +# railway variables \ +# --set NODE_ENV=production \ +# --set DATABASE_URL=... \ +# --service stackfast-api \ +# --environment production +# See Batch G (staging) and Batch H (production) in +# .kiro/specs/phase-8-deployment/tasks.md for the cutover runbook. + +"$schema" = "https://railway.com/railway.schema.json" + +[build] +# Nixpacks is the deterministic path: it reads the repo-root +# package.json "engines" to select Node 20 and runs pnpm from the repo +# root so workspace filters (`--filter @stackfast/api...`) resolve. +builder = "NIXPACKS" + +# Explicit install+build pipeline from design § "API Service". The `...` +# suffix on the filter includes @stackfast/api's workspace dependencies +# (schemas, registry, rules-engine, exporter, ai, shared), so tsc's +# project references compile against the built packages. +buildCommand = "pnpm install --frozen-lockfile --filter @stackfast/api... && pnpm --filter @stackfast/api build" + +[deploy] +# Hono server entrypoint (`node dist/index.js` via the package's `start` +# script, wrapped in `dotenv -e ../../.env --` for local parity; on +# Railway the dotenv step is a no-op because `.env` is not shipped). +startCommand = "pnpm --filter @stackfast/api start" + +# /health is the unauthenticated liveness endpoint exposed by +# apps/api/src/app.ts; it is exempt from rate limiting (R4.9) so the +# Railway edge probe never consumes a generation/read token. +healthcheckPath = "/health" + +# Upper bound (seconds) Railway waits for the first successful /health +# response before marking the deploy failed. The Node cold start +# (pnpm resolve + `node dist/index.js`) finishes in a few seconds on +# Railway's default container; 30 s leaves headroom without letting a +# genuinely broken deploy linger. Tune upward if cold starts regress. +healthcheckTimeout = 30 + +# If the process crashes post-boot, restart up to 3 times before the +# deployment is marked failed. ON_FAILURE matches design § "Rollback, +# observability, and runbook notes" — we do not want ALWAYS-retrying a +# crash loop to mask a real regression from the rollback operator. +restartPolicyType = "ON_FAILURE" +restartPolicyMaxRetries = 3 diff --git a/apps/api/src/app.pbt.test.ts b/apps/api/src/app.pbt.test.ts new file mode 100644 index 0000000..9d85fda --- /dev/null +++ b/apps/api/src/app.pbt.test.ts @@ -0,0 +1,358 @@ +/** + * App-level property-based tests (Phase 8 — task C2). + * + * Scope + * ----- + * This file holds the three **app-level** properties from + * [`design.md` § "Testing strategy — Property-based tests"] + * (../../../../.kiro/specs/phase-8-deployment/design.md). The rate-limit + * fail-open property (Property 1) lives in `rate-limit/rate-limit.pbt.test.ts` + * and the Sentry idempotence property (Property 2) lives in + * `observability/sentry.pbt.test.ts`. The three here target whole-app Hono + * behavior rather than a single module: + * + * - **Property 3** — CORS never echoes `*` with credentials in production. + * - **Property 4** — admin-key gating precedes every other middleware. + * - **Property 5** — production auth fails closed whenever the auth + * subsystem is not ready. + * + * Harness notes + * ------------- + * Two pieces of app state are captured at module-import time and therefore + * cannot be varied through `c.env` on a single shared instance: + * + * 1. `CORS_ORIGIN` — read once into `configuredCorsOrigin` in `app.ts`. + * Property 3 needs to exercise more than one configured origin, so it + * pre-builds one fresh `app` per origin via `vi.resetModules()` + + * dynamic import (see `buildApp`). + * 2. The Better Auth `_auth` singleton in `middleware/auth.ts` — once a + * successful construction caches it, `getAuth()` stops re-reading the + * environment. Property 5 therefore rebuilds a fresh `app` per + * generated case so the `authInitThrows` dimension is honored on every + * iteration regardless of what the previous case constructed. + * + * Property 4 needs neither lever (admin gating is independent of both), so it + * runs against the statically imported `app` for speed and injects a spy + * rate-limit backend to prove no token is consumed on a 401. + */ + +import { afterEach, beforeAll, describe, expect, it, vi } from "vitest"; +import fc from "fast-check"; +import app from "./app.js"; +import { BUCKETS } from "./rate-limit/buckets.js"; +import { __resetBackendForTests } from "./rate-limit/index.js"; +import type { + RateLimitBackend, + RateLimitCheckArgs, + RateLimitDecision, +} from "./rate-limit/types.js"; + +/** + * Minimal structural type for a Hono app's `request()` entry point — enough + * for the fresh, dynamically imported instances without importing Hono's + * generic surface. + */ +type RequestableApp = { + request: ( + input: string, + init?: RequestInit, + env?: Record, + ) => Promise; +}; + +/** + * Rebuild a fresh `app` module with the supplied environment applied at + * import time. Resets the module registry so `configuredCorsOrigin` and the + * Better Auth `_auth` singleton are re-evaluated from scratch. + * + * Passing `undefined` for a key deletes it from `process.env` so the import + * sees the unset state rather than a stale value from a previous case. + */ +function restoreEnvVar( + key: "CORS_ORIGIN" | "DATABASE_URL", + hadKey: boolean, + previousValue: string | undefined, +): void { + if (hadKey) { + process.env[key] = previousValue; + } else { + delete process.env[key]; + } +} + +async function buildApp(env: { + CORS_ORIGIN?: string; + DATABASE_URL?: string; +}): Promise { + const hadCorsOrigin = "CORS_ORIGIN" in process.env; + const hadDatabaseUrl = "DATABASE_URL" in process.env; + const prevCorsOrigin = process.env.CORS_ORIGIN; + const prevDatabaseUrl = process.env.DATABASE_URL; + + if (env.CORS_ORIGIN === undefined) { + delete process.env.CORS_ORIGIN; + } else { + process.env.CORS_ORIGIN = env.CORS_ORIGIN; + } + if (env.DATABASE_URL === undefined) { + delete process.env.DATABASE_URL; + } else { + process.env.DATABASE_URL = env.DATABASE_URL; + } + + try { + vi.resetModules(); + const mod = (await import("./app.js")) as { default: RequestableApp }; + return mod.default; + } catch (error) { + restoreEnvVar("CORS_ORIGIN", hadCorsOrigin, prevCorsOrigin); + restoreEnvVar("DATABASE_URL", hadDatabaseUrl, prevDatabaseUrl); + throw error; + } +} + +// ─────────────────────────────────────────────────────────────────────────── +// Property 3 — CORS never echoes `*` with credentials in production. +// Validates: Requirements R10.3 (and R8.1 path coverage via prod requests). +// ─────────────────────────────────────────────────────────────────────────── + +describe("Property 3 — CORS never wildcards in production (design § 8)", () => { + const ORIGINS = [ + "https://stackfast.app", + "https://staging.stackfast.app", + ] as const; + + // One fresh app per configured origin so the module-level CORS_ORIGIN + // capture matches the generated `configuredOrigin`. + const appsByOrigin = new Map(); + + beforeAll(async () => { + for (const origin of ORIGINS) { + appsByOrigin.set(origin, await buildApp({ CORS_ORIGIN: origin })); + } + }); + + afterEach(() => { + delete process.env.CORS_ORIGIN; + }); + + it("ACAO is never '*'; equals the configured origin when present; ACAC is 'true' when ACAO is present (Validates: Requirements R10.3)", async () => { + await fc.assert( + fc.asyncProperty( + fc.record({ + configuredOrigin: fc.constantFrom(...ORIGINS), + requestOrigin: fc.option(fc.webUrl(), { nil: undefined }), + method: fc.constantFrom("GET", "POST", "OPTIONS"), + }), + async ({ configuredOrigin, requestOrigin, method }) => { + const application = appsByOrigin.get(configuredOrigin)!; + + const headers: Record = {}; + if (requestOrigin !== undefined) { + headers.Origin = requestOrigin; + } + if (method === "OPTIONS") { + headers["Access-Control-Request-Method"] = "GET"; + } + + const res = await application.request( + "/api/v1/tools/search", + { method, headers }, + { NODE_ENV: "production", CORS_ORIGIN: configuredOrigin }, + ); + + const acao = res.headers.get("access-control-allow-origin"); + + // Core invariant (R10.3): a credentialed CORS response must never + // echo the wildcard. + expect(acao).not.toBe("*"); + + // If an allow-origin is emitted it must be the exact configured + // origin, and credentials must be advertised alongside it. + if (acao !== null) { + expect(acao).toBe(configuredOrigin); + expect(res.headers.get("access-control-allow-credentials")).toBe( + "true", + ); + } + }, + ), + { numRuns: 100, seed: 73101 }, + ); + }); +}); + +// ─────────────────────────────────────────────────────────────────────────── +// Property 4 — admin-key gating precedes every other middleware. +// Validates: Requirements R8.1, R8.3, R8.4, R8.5, R8.6. +// ─────────────────────────────────────────────────────────────────────────── + +describe("Property 4 — admin key gating precedes all middleware (design § 8)", () => { + // Header-safe alphabet: keys are placed into HTTP header values, so the + // generator is constrained to ASCII that `Headers` accepts. This keeps the + // property focused on the gating logic instead of header-encoding errors. + const KEY_ALPHABET = + "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_".split(""); + const safeKey = fc + .array(fc.constantFrom(...KEY_ALPHABET), { minLength: 1, maxLength: 40 }) + .map((chars) => chars.join("")); + + afterEach(() => { + __resetBackendForTests(null); + }); + + it("mismatched/empty key → 401 with no rate-limit token consumed; matching key → 2xx (Validates: Requirements R8.1, R8.3, R8.4, R8.5, R8.6)", async () => { + // Spy backend records every check() so we can assert that a 401 path + // never reached the rate-limit middleware (admin/internal routes are not + // under /api/v1/*, so the count must stay flat). + const calls: RateLimitCheckArgs[] = []; + const spy: RateLimitBackend = { + name: "memory", + async check(args: RateLimitCheckArgs): Promise { + calls.push(args); + return { + allowed: true, + remaining: BUCKETS[args.bucket].limit, + limit: BUCKETS[args.bucket].limit, + resetAtEpochMs: Date.now() + BUCKETS[args.bucket].windowMs, + }; + }, + }; + __resetBackendForTests(spy); + + await fc.assert( + fc.asyncProperty( + fc.record({ + path: fc.constantFrom( + "/admin/tools/import", + "/admin/compatibility/recompute", + "/internal/enrich-tool", + ), + providedKey: fc.option(safeKey, { nil: undefined }), + // `""` exercises R8.5: an empty configured key must reject every + // request regardless of what was provided. + configuredKey: fc.oneof(fc.constant(""), safeKey), + headerStyle: fc.constantFrom("x-admin", "bearer", "none"), + }), + async ({ path, providedKey, configuredKey, headerStyle }) => { + const headers: Record = { + "Content-Type": "application/json", + }; + if (headerStyle === "x-admin" && providedKey !== undefined) { + headers["X-Admin-API-Key"] = providedKey; + } else if (headerStyle === "bearer" && providedKey !== undefined) { + headers["Authorization"] = `Bearer ${providedKey}`; + } + + // Per-path valid bodies so the matching-key case reaches a 202 + // handler instead of a 400 body-validation error. + const body = + path === "/admin/tools/import" + ? JSON.stringify({ tools: [{ id: "whatever" }] }) + : path === "/internal/enrich-tool" + ? JSON.stringify({ toolId: "nextjs" }) + : "{}"; + + const callsBefore = calls.length; + const res = await app.request( + path, + { method: "POST", headers, body }, + { ADMIN_API_KEY: configuredKey }, + ); + + // Effective provided key: `none` style never sends a credential. + const sent = headerStyle === "none" ? undefined : providedKey; + const isMatch = + configuredKey !== "" && sent !== undefined && sent === configuredKey; + + if (isMatch) { + // R8.4 / R8.6: a matching key (either header style) authorizes + // the request and the handler runs. + expect([200, 202]).toContain(res.status); + } else { + // R8.1 / R8.3 / R8.5: every mismatch/empty-key request is 401… + expect(res.status).toBe(401); + // …and no rate-limit token was consumed before the rejection. + expect(calls.length).toBe(callsBefore); + } + }, + ), + { numRuns: 100, seed: 99173 }, + ); + }); +}); + +// ─────────────────────────────────────────────────────────────────────────── +// Property 5 — production auth fails closed when the subsystem is not ready. +// Validates: Requirements R11.2, R11.3, R11.4. +// ─────────────────────────────────────────────────────────────────────────── + +describe("Property 5 — production auth fails closed (design § 8)", () => { + afterEach(() => { + delete process.env.DATABASE_URL; + delete process.env.ALLOW_AUTH_BYPASS; + }); + + it("503 whenever the DB is absent or Better Auth init throws, regardless of bypass; 401 otherwise (Validates: Requirements R11.2, R11.3, R11.4)", async () => { + await fc.assert( + fc.asyncProperty( + fc.record({ + allowBypass: fc.constantFrom<"true" | "false" | undefined>( + "true", + "false", + undefined, + ), + databaseUrlPresent: fc.boolean(), + authInitThrows: fc.boolean(), + route: fc.constantFrom( + "/api/v1/blueprints", + "/api/v1/scaffolds", + ), + }), + async ({ allowBypass, databaseUrlPresent, authInitThrows, route }) => { + if (allowBypass === undefined) { + delete process.env.ALLOW_AUTH_BYPASS; + } else { + process.env.ALLOW_AUTH_BYPASS = allowBypass; + } + + // DATABASE_URL drives the three auth-readiness states: + // - absent → getAuth() returns null → 503 + // - present + invalid → neon() throws at construction → 503 + // - present + valid → real Better Auth, no session → 401 + const databaseUrl = !databaseUrlPresent + ? undefined + : authInitThrows + ? "not-a-valid-connection-string" + : "postgresql://user:pass@ep-test.us-east-1.aws.neon.tech/db"; + + const application = await buildApp({ DATABASE_URL: databaseUrl }); + + const res = await application.request( + route, + { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + idea: "fail-closed property test", + toolIds: ["nextjs", "node"], + projectName: "pbt", + }), + }, + { NODE_ENV: "production" }, + ); + + const expect503 = !databaseUrlPresent || authInitThrows; + if (expect503) { + // R11.2 / R11.3 / R11.4: fail closed regardless of bypass. + expect(res.status).toBe(503); + } else { + // Auth is ready but the request carries no session cookie. + expect(res.status).toBe(401); + } + }, + ), + { numRuns: 36, seed: 51877 }, + ); + }); +}); diff --git a/apps/api/src/app.sentry.test.ts b/apps/api/src/app.sentry.test.ts new file mode 100644 index 0000000..ce34aaf --- /dev/null +++ b/apps/api/src/app.sentry.test.ts @@ -0,0 +1,139 @@ +import { afterEach, beforeEach, describe, expect, it } from "vitest"; +import * as Sentry from "@sentry/node"; +import app from "./app.js"; +import { __resetSentryForTests, initSentry } from "./observability/sentry.js"; + +/** + * Contract tests for B3 — Sentry wired into the API process. + * + * Covers the wiring guarantees the unit suites can't reach on their own: + * - With SENTRY_DSN unset, no client is registered after a real request + * hits the app (R7.3) — i.e. `initSentry()` at startup is a true no-op and + * the request path never lazily installs a client. + * - With a stubbed DSN, exactly one client is registered (R7.1) and a thrown + * error inside a route produces a single captured event tagged with the + * request id, while the existing JSON error envelope is still rendered. + * - The wired client's `beforeSend` (= `scrubEvent`) strips `idea` / + * `constraints` from the captured event payload (R7.5). + * + * A syntactically valid but inert DSN is used so `Sentry.init` accepts it + * without ever reaching the network. Captures are observed by wrapping the + * active client's `captureException`; no transport is exercised. + */ + +const TEST_DSN = "https://examplePublicKey@o0.ingest.sentry.io/0"; + +let savedDsn: string | undefined; +let savedNodeEnv: string | undefined; + +beforeEach(() => { + savedDsn = process.env.SENTRY_DSN; + savedNodeEnv = process.env.NODE_ENV; + delete process.env.SENTRY_DSN; + __resetSentryForTests(); +}); + +afterEach(() => { + __resetSentryForTests(); + if (savedDsn === undefined) { + delete process.env.SENTRY_DSN; + } else { + process.env.SENTRY_DSN = savedDsn; + } + if (savedNodeEnv === undefined) { + delete process.env.NODE_ENV; + } else { + process.env.NODE_ENV = savedNodeEnv; + } +}); + +describe("Sentry API wiring (B3 — R7.1, R7.3, R7.5)", () => { + it("registers no client when SENTRY_DSN is unset, even after a request (R7.3)", async () => { + // Mirrors index.ts startup with no DSN configured. + initSentry(); + + const res = await app.request("/health"); + expect(res.status).toBe(200); + expect(await res.text()).toBe("OK"); + + expect(Sentry.getClient()).toBeUndefined(); + }); + + it("keeps the client undefined after a route error when DSN is unset (R7.3)", async () => { + initSentry(); + + // A thrown error inside a route still renders the JSON envelope... + const res = await app.request("/api/v1/stacks/analyze", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: "not-json", + }); + expect(res.status).toBe(400); + const body = await res.json(); + expect(body.error).toContain("Invalid JSON"); + + // ...and no Sentry client was lazily installed. + expect(Sentry.getClient()).toBeUndefined(); + }); + + it("registers exactly one client when a DSN is set (R7.1)", () => { + initSentry({ dsn: TEST_DSN }); + expect(Sentry.getClient()).toBeDefined(); + }); + + it("captures a route error once, tagged with requestId, and still renders the JSON envelope (R7.1)", async () => { + initSentry({ dsn: TEST_DSN }); + const client = Sentry.getClient(); + expect(client).toBeDefined(); + + const captures: Array<{ error: unknown; context: unknown }> = []; + const orig = client!.captureException.bind(client); + (client as unknown as { captureException: typeof orig }).captureException = (( + error: Parameters[0], + context?: Parameters[1], + ) => { + captures.push({ error, context }); + return orig(error, context); + }) as typeof orig; + + // Malformed JSON makes parseJson throw an Error that reaches onError — + // a thrown error originating inside a route. + const res = await app.request("/api/v1/stacks/analyze", { + method: "POST", + headers: { "Content-Type": "application/json", "X-Request-ID": "rid-sentry-1" }, + body: "not-json", + }); + + // The JSON error envelope is preserved (capture did not clobber it). + expect(res.status).toBe(400); + const body = await res.json(); + expect(body.error).toContain("Invalid JSON"); + expect(body.requestId).toBe("rid-sentry-1"); + + // Exactly one capture, tagged with the request id (R7.1). The top-level + // `Sentry.captureException(err, { tags })` routes through the current + // scope, which forwards the capture context to the client under + // `hint.captureContext`. + expect(captures).toHaveLength(1); + const hint = captures[0]?.context as + | { captureContext?: { tags?: Record } } + | undefined; + expect(hint?.captureContext?.tags?.requestId).toBe("rid-sentry-1"); + }); + + it("scrubs idea/constraints from captured event payloads via the wired beforeSend (R7.5)", () => { + initSentry({ dsn: TEST_DSN }); + const beforeSend = Sentry.getClient()?.getOptions().beforeSend; + expect(typeof beforeSend).toBe("function"); + + const event = { + request: { data: { idea: "a secret idea", constraints: ["budget"], keep: "me" } }, + } as Sentry.ErrorEvent; + + const processed = beforeSend!(event, {}) as Sentry.ErrorEvent; + + expect(processed.request?.data).toEqual({ keep: "me" }); + expect(processed.request?.data).not.toHaveProperty("idea"); + expect(processed.request?.data).not.toHaveProperty("constraints"); + }); +}); diff --git a/apps/api/src/app.test.ts b/apps/api/src/app.test.ts index 9c5c4ae..506637a 100644 --- a/apps/api/src/app.test.ts +++ b/apps/api/src/app.test.ts @@ -1,4 +1,4 @@ -import { afterEach, describe, expect, it } from "vitest"; +import { afterEach, describe, expect, it, vi } from "vitest"; import app from "./app.js"; import { BUCKETS } from "./rate-limit/buckets.js"; import { @@ -666,4 +666,149 @@ describe("api", () => { ).toBe(generationLimit + 1); }); }); + + // ─── C2 fail-closed contract tests ───────────────────────────── + // + // These four cases are named verbatim in design.md § "Testing strategy" + // (Contract tests). They pin the security envelope the deploy depends on: + // admin gating runs before anything else, production CORS never wildcards, + // the allow-headers list carries every header the SPA sends, and a broken + // Better Auth init fails closed with 503 in production. The matching + // app-level property suites live in `app.pbt.test.ts`. + + describe("C2 fail-closed contract", () => { + const ADMIN_PATHS = [ + "/admin/tools/import", + "/admin/compatibility/recompute", + "/internal/enrich-tool", + ]; + + afterEach(() => { + __resetBackendForTests(null); + delete process.env.DATABASE_URL; + delete process.env.CORS_ORIGIN; + }); + + it("admin 401 before any middleware (R8.1)", async () => { + // A spy backend proves the rate-limit middleware never ran: admin and + // internal routes are not under /api/v1/*, so the gate rejects before + // any downstream middleware or handler can execute. + const calls: RateLimitCheckArgs[] = []; + const spy: RateLimitBackend = { + name: "memory", + async check(args: RateLimitCheckArgs): Promise { + calls.push(args); + return { + allowed: true, + remaining: BUCKETS[args.bucket].limit, + limit: BUCKETS[args.bucket].limit, + resetAtEpochMs: Date.now() + BUCKETS[args.bucket].windowMs, + }; + }, + }; + __resetBackendForTests(spy); + + for (const path of ADMIN_PATHS) { + const response = await app.request(path, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: "{}", + }); + expect(response.status).toBe(401); + const body = await response.json(); + expect(body.error).toBe("Unauthorized"); + } + + expect(calls).toHaveLength(0); + }); + + it("CORS never wildcard in prod (R10.3, R10.4)", async () => { + // CORS_ORIGIN is captured once at module import, so build a fresh app + // pinned to the production origin. + process.env.CORS_ORIGIN = "https://stackfast.app"; + delete process.env.DATABASE_URL; + vi.resetModules(); + const prodApp = (await import("./app.js")).default; + + // Matching origin → exact-match ACAO + credentials, never a wildcard. + const matching = await prodApp.request( + "/api/v1/tools/search", + { headers: { Origin: "https://stackfast.app" } }, + { NODE_ENV: "production" }, + ); + expect(matching.headers.get("access-control-allow-origin")).toBe( + "https://stackfast.app", + ); + expect(matching.headers.get("access-control-allow-origin")).not.toBe("*"); + expect(matching.headers.get("access-control-allow-credentials")).toBe( + "true", + ); + + // Non-matching origin (R10.4) → ACAO must not name the foreign origin + // and must never be the wildcard. + const mismatching = await prodApp.request( + "/api/v1/tools/search", + { headers: { Origin: "https://evil.example" } }, + { NODE_ENV: "production" }, + ); + const acao = mismatching.headers.get("access-control-allow-origin"); + expect(acao).not.toBe("*"); + expect(acao).not.toBe("https://evil.example"); + expect(acao === null || acao === "https://stackfast.app").toBe(true); + }); + + it("CORS allowed-headers list (R10.5)", async () => { + // Preflight surfaces Access-Control-Allow-Headers from the configured + // allowHeaders list. Origin matches the default dev origin so the + // preflight is fully formed. + const response = await app.request("/api/v1/tools/search", { + method: "OPTIONS", + headers: { + Origin: "http://localhost:5173", + "Access-Control-Request-Method": "GET", + "Access-Control-Request-Headers": "x-admin-api-key", + }, + }); + + const allowHeaders = ( + response.headers.get("access-control-allow-headers") ?? "" + ) + .split(",") + .map((header) => header.trim().toLowerCase()); + + for (const required of [ + "x-admin-api-key", + "x-request-id", + "x-ai-provider", + "content-type", + "authorization", + ]) { + expect(allowHeaders).toContain(required); + } + }); + + it("prod auth 503 when Better Auth init throws (R11.4)", async () => { + // An invalid DATABASE_URL makes neon() throw inside createAuth(), so + // getAuth() throws. In production requireSession() must fail closed + // with 503 rather than fall through to the handler. + process.env.DATABASE_URL = "not-a-valid-connection-string"; + + const response = await app.request( + "/api/v1/blueprints", + { + method: "POST", + headers: { + "Content-Type": "application/json", + "x-forwarded-for": "init-throws-test", + }, + body: JSON.stringify({ idea: "better auth init throws" }), + }, + { NODE_ENV: "production" }, + ); + + expect(response.status).toBe(503); + const body = await response.json(); + expect(body.error).toContain("Authentication is not configured"); + }); + }); }); \ No newline at end of file diff --git a/apps/api/src/app.ts b/apps/api/src/app.ts index e819117..d9257af 100644 --- a/apps/api/src/app.ts +++ b/apps/api/src/app.ts @@ -16,9 +16,11 @@ import { logger } from "hono/logger"; import type { ContentfulStatusCode } from "hono/utils/http-status"; import type { MiddlewareHandler } from "hono/types"; import { z } from "zod"; +import * as Sentry from "@sentry/node"; import { openApiDocument } from "./openapi.js"; import { getAuth, requireSession, optionalSession } from "./middleware/auth.js"; import { createRateLimitMiddleware } from "./rate-limit/index.js"; +import { isEnabled as isSentryEnabled } from "./observability/sentry.js"; type Bindings = { ADMIN_API_KEY?: string; @@ -106,6 +108,25 @@ app.use("/internal/*", requireAdminApiKey()); app.onError((error, c) => { const status = "status" in error && typeof error.status === "number" ? error.status : 500; + + // Forward the error to Sentry tagged with the request id so captured events + // are correlatable with API logs (R7.1). This is a no-op whenever Sentry is + // disabled (SENTRY_DSN unset) — `isSentryEnabled()` is false, so nothing is + // captured and no transport is touched (R7.3). The active client runs + // `scrubEvent` as its `beforeSend` hook, so `idea`/`constraints` are stripped + // from the event payload before transmission (R7.5). + // + // NB: capture happens inside the single Hono `onError` handler rather than via + // a separate re-throwing handler. Hono keeps exactly one `onError`, and a + // re-throwing capture handler both clobbers this JSON formatter and re-fires + // at every middleware frame (multi-capture + dropped response). Capturing here + // keeps one capture per error and preserves the user-facing envelope. + if (isSentryEnabled()) { + Sentry.captureException(error, { + tags: { requestId: c.get("requestId") }, + }); + } + return c.json( { error: status === 500 ? "Internal server error" : error.message, diff --git a/apps/api/src/index.ts b/apps/api/src/index.ts index c386bfb..3117224 100644 --- a/apps/api/src/index.ts +++ b/apps/api/src/index.ts @@ -1,8 +1,14 @@ import { serve } from "@hono/node-server"; import app from "./app.js"; +import { initSentry } from "./observability/sentry.js"; const port = Number(process.env.PORT ?? 3000); +// Initialize error tracking before the server starts handling requests. +// No-op when SENTRY_DSN is unset (R7.3); installs the @sentry/node client +// with the MVP sampling defaults and PII scrubber otherwise (R7.1). +initSentry(); + serve({ fetch: app.fetch, port, diff --git a/apps/api/src/middleware/auth.test.ts b/apps/api/src/middleware/auth.test.ts new file mode 100644 index 0000000..85fda3d --- /dev/null +++ b/apps/api/src/middleware/auth.test.ts @@ -0,0 +1,116 @@ +import { afterEach, beforeEach, describe, expect, it } from "vitest"; +import { buildAuthOptions, getAuth } from "./auth.js"; + +/** + * Phase 8 task C3 — cross-subdomain session cookie configuration. + * + * These tests inspect the Better Auth options object produced by + * `buildAuthOptions(env)` (the pure helper that `createAuth()` spreads into + * `betterAuth()`), so they assert the production vs. non-production cookie + * branches without constructing a real Drizzle/Neon connection. + * + * Covers R3.3 (Secure/HttpOnly/SameSite=None), R3.4 (Domain=.stackfast.app), + * and R3.6 (non-production stays host-only same-origin). + */ +describe("buildAuthOptions cookie configuration", () => { + const originalNodeEnv = process.env.NODE_ENV; + + afterEach(() => { + // Restore whatever NODE_ENV the suite started with so a test that pokes + // process.env does not leak into the others. + if (originalNodeEnv === undefined) { + delete process.env.NODE_ENV; + } else { + process.env.NODE_ENV = originalNodeEnv; + } + }); + + describe("production environment (R3.3, R3.4)", () => { + it("enables cross-subdomain cookies scoped to .stackfast.app", () => { + const options = buildAuthOptions({ NODE_ENV: "production" }); + + expect(options.advanced?.crossSubDomainCookies).toEqual({ + enabled: true, + domain: ".stackfast.app", + }); + }); + + it("sets Secure, HttpOnly, and SameSite=None default cookie attributes", () => { + const options = buildAuthOptions({ NODE_ENV: "production" }); + + expect(options.advanced?.defaultCookieAttributes).toMatchObject({ + secure: true, + httpOnly: true, + sameSite: "none", + }); + }); + + it("honors NODE_ENV from process.env when no env argument is passed", () => { + process.env.NODE_ENV = "production"; + + const options = buildAuthOptions(); + + expect(options.advanced?.crossSubDomainCookies?.enabled).toBe(true); + expect(options.advanced?.crossSubDomainCookies?.domain).toBe(".stackfast.app"); + expect(options.advanced?.defaultCookieAttributes?.sameSite).toBe("none"); + }); + }); + + describe("non-production environment (R3.6)", () => { + it("omits SameSite=None and the cross-subdomain domain in development", () => { + const options = buildAuthOptions({ NODE_ENV: "development" }); + + // No `advanced` block at all -> host-only, same-origin cookies, so Vite's + // dev proxy and unit tests are unaffected. + expect(options.advanced).toBeUndefined(); + }); + + it("omits the advanced cookie block when NODE_ENV is unset", () => { + delete process.env.NODE_ENV; + + const options = buildAuthOptions(); + + expect(options.advanced).toBeUndefined(); + }); + + it("does not enable cross-subdomain cookies for the test environment", () => { + const options = buildAuthOptions({ NODE_ENV: "test" }); + + expect(options.advanced?.crossSubDomainCookies).toBeUndefined(); + expect(options.advanced?.defaultCookieAttributes).toBeUndefined(); + }); + }); + + describe("base options shared across environments", () => { + it("always configures the GitHub social provider and session cookie cache", () => { + const options = buildAuthOptions({ NODE_ENV: "production" }); + + expect(options.socialProviders?.github).toBeDefined(); + expect(options.session?.cookieCache?.enabled).toBe(true); + }); + }); +}); + +describe("getAuth catalog-only fallback", () => { + let originalDatabaseUrl: string | undefined; + + beforeEach(() => { + originalDatabaseUrl = process.env.DATABASE_URL; + }); + + afterEach(() => { + if (originalDatabaseUrl === undefined) { + delete process.env.DATABASE_URL; + } else { + process.env.DATABASE_URL = originalDatabaseUrl; + } + }); + + it("returns null when DATABASE_URL is not configured", () => { + // test-setup.ts deletes DATABASE_URL, so this exercises the catalog-only + // path that must keep working unchanged after the C3 refactor. + delete process.env.DATABASE_URL; + + expect(getAuth()).toBeNull(); + }); +}); diff --git a/apps/api/src/middleware/auth.ts b/apps/api/src/middleware/auth.ts index 1502086..559608c 100644 --- a/apps/api/src/middleware/auth.ts +++ b/apps/api/src/middleware/auth.ts @@ -1,4 +1,4 @@ -import { betterAuth } from "better-auth"; +import { betterAuth, type BetterAuthOptions } from "better-auth"; import { drizzleAdapter } from "better-auth/adapters/drizzle"; import type { MiddlewareHandler } from "hono/types"; import type { ContentfulStatusCode } from "hono/utils/http-status"; @@ -8,13 +8,35 @@ import { getDb, isDatabaseAvailable } from "../db/client.js"; // Better Auth server instance // --------------------------------------------------------------------------- +/** + * Cross-subdomain cookie domain used in production so the session cookie set + * by `api.stackfast.app` is also sent to `stackfast.app` (Phase 8 R3.4 and + * design § Data flow steps 4–6). Leading dot scopes the cookie to the apex + * domain and all of its subdomains. + */ +const CROSS_SUBDOMAIN_COOKIE_DOMAIN = ".stackfast.app"; + // eslint-disable-next-line @typescript-eslint/no-explicit-any let _auth: any = null; -function createAuth() { - const db = getDb(); - return betterAuth({ - database: drizzleAdapter(db, { provider: "pg" }), +/** + * Build the Better Auth options object (everything except the database + * adapter, which requires a live connection). + * + * Factored out as a pure, side-effect-free helper so the production vs. + * non-production cookie branches can be unit-tested without constructing a + * real Drizzle/Neon connection (Phase 8 task C3). + * + * Cookie behavior (R3.3, R3.4, R3.6): + * - Production: cross-subdomain cookies enabled with `Domain=.stackfast.app` + * and default attributes `Secure`, `HttpOnly`, `SameSite=None` so the + * session round-trips between `stackfast.app` and `api.stackfast.app`. + * - Non-production: the `advanced` block is omitted entirely so cookies stay + * host-only and same-origin, keeping Vite's dev proxy and unit tests + * unaffected (no `SameSite=None`, no cross-subdomain domain). + */ +export function buildAuthOptions(env?: AuthBindings): BetterAuthOptions { + const options: BetterAuthOptions = { secret: process.env.BETTER_AUTH_SECRET, baseURL: process.env.BETTER_AUTH_URL ?? "http://localhost:3000", socialProviders: { @@ -29,6 +51,30 @@ function createAuth() { maxAge: 60 * 5, // 5 minutes }, }, + }; + + if (isProduction(env)) { + options.advanced = { + crossSubDomainCookies: { + enabled: true, + domain: CROSS_SUBDOMAIN_COOKIE_DOMAIN, + }, + defaultCookieAttributes: { + secure: true, + httpOnly: true, + sameSite: "none", + }, + }; + } + + return options; +} + +function createAuth() { + const db = getDb(); + return betterAuth({ + database: drizzleAdapter(db, { provider: "pg" }), + ...buildAuthOptions(), }); } @@ -81,19 +127,48 @@ function canBypassAuthForLocalDev(env?: AuthBindings): boolean { /** * Middleware that requires a valid Better Auth session. - * Returns 401 if the user is not authenticated. - * Falls through only in non-production catalog-only local dev mode. + * + * Fail-closed ordering (see Phase 8 design § 3 and R11.2–R11.5): + * 1. Resolve `auth` from `getAuth()`. Both a `null` return and a throw are + * treated identically — some Better Auth construction errors (missing + * secret, unreachable DB) surface as throws rather than null. + * 2. In production, any missing `auth` short-circuits with HTTP 503 + * regardless of `ALLOW_AUTH_BYPASS`. This is deliberately checked + * BEFORE the bypass branch so setting `ALLOW_AUTH_BYPASS=true` in prod + * by mistake cannot open a hole. + * 3. Otherwise (non-production), `canBypassAuthForLocalDev()` may skip auth + * for catalog-only local dev and unit tests. + * 4. If auth is available and bypass is not active, validate the session + * and return 401 for unauthenticated / invalid sessions. */ export function requireSession(): MiddlewareHandler<{ Bindings: AuthBindings; Variables: AuthVariables; }> { return async (c, next) => { - const auth = getAuth(); + let auth: ReturnType | null; + try { + auth = getAuth(); + } catch { + // Treat a throw from getAuth() the same as a null return — some + // Better Auth construction errors (missing secret, bad DB) surface + // as throws rather than null. Production MUST fail closed either way. + auth = null; + } + + // Production-first fail-closed guard (R11.2–R11.5): runs before the bypass + // branch so `ALLOW_AUTH_BYPASS=true` set in prod by mistake cannot open + // a hole. + if (isProduction(c.env) && !auth) { + return c.json( + { error: "Authentication is not configured", requestId: c.get("requestId") }, + 503 as ContentfulStatusCode, + ); + } - // When auth isn't configured (no DATABASE_URL), production must fail closed - // with 503. Non-production with ALLOW_AUTH_BYPASS != "false" skips auth - // so catalog-only local dev and unit tests can run. + // Non-production path: when auth is missing, catalog-only local dev and + // unit tests may proceed if bypass is allowed; otherwise still 503 so the + // misconfiguration is visible. if (!auth) { if (canBypassAuthForLocalDev(c.env)) { await next(); diff --git a/apps/api/src/observability/sentry.pbt.test.ts b/apps/api/src/observability/sentry.pbt.test.ts new file mode 100644 index 0000000..fa9f852 --- /dev/null +++ b/apps/api/src/observability/sentry.pbt.test.ts @@ -0,0 +1,172 @@ +/** + * Sentry init property-based tests. + * + * Scope + * ----- + * This file covers **Property 2** from + * [`design.md` § "Testing strategy — Property-based tests"] + * (../../../../.kiro/specs/phase-8-deployment/design.md): + * + * > **Property 2 — Sentry init is idempotent and a no-op without DSN.** + * > For any interleaving of `initSentry()` calls and any combination of + * > DSN presence/absence, the active Sentry client count is 0 when DSN is + * > falsy and exactly 1 once a non-empty DSN has been set at least once + * > before an `init`. Repeat inits return the same client reference. + * + * This is the Sentry PBT file. The sibling rate-limit PBT (Property 1) + * lives in `../rate-limit/rate-limit.pbt.test.ts`; the app-level PBTs + * (Properties 3–5) land in C2 alongside `app.pbt.test.ts`. + * + * Acceptance criteria + * ------------------- + * **Validates: Requirements R7.3, R7.4** + * - R7.3 — when `SENTRY_DSN` is missing/empty/undefined, `initSentry()` + * skips initialization and registers no client. + * - R7.4 — invoking `initSentry()` more than once leaves exactly one + * active client. + * + * B1 already covers both criteria with example unit tests in + * `sentry.test.ts`; this file re-asserts the same invariants across the + * whole interleaving space that fast-check can reach. + * + * Model + * ----- + * The property replays a generated sequence of two event kinds against the + * real module: + * + * "set-dsn" — writes (or clears) `process.env.SENTRY_DSN`. A `null` or + * empty payload clears it (a falsy DSN); a valid DSN string + * sets it. + * "init" — calls `initSentry()`, which reads the *current* env DSN. + * + * Because the module latches `initialized = true` on the first successful + * init and never tears the client down, the oracle is: a client is bound + * iff some `init` event fired while the env DSN was truthy — and once + * bound, `Sentry.getClient()` returns the same reference for the rest of + * the run. Clearing the DSN *after* a successful init does NOT un-init + * (latched), and inits while the DSN is falsy stay no-ops (R7.3). + * + * Every assertion reads `Sentry.getClient()` (the Sentry v10 scope-bound + * client accessor) so the suite is hermetic — no transport is ever + * exercised. Valid-shape DSNs are used so `Sentry.init` accepts them + * without logging an invalid-DSN error; the property only cares about + * DSN truthiness, not the specific URL. + */ + +import { afterEach, beforeEach, describe, expect, it } from "vitest"; +import * as Sentry from "@sentry/node"; +import fc from "fast-check"; +import { __resetSentryForTests, initSentry, isEnabled } from "./sentry.js"; + +// Two syntactically valid DSNs. Sentry parses but never reaches the network +// in tests, and a valid shape avoids invalid-DSN warnings during shrinking. +const VALID_DSNS = [ + "https://examplePublicKey@o0.ingest.sentry.io/0", + "https://otherPublicKey@o1.ingest.sentry.io/1", +] as const; + +const ENV_KEYS = ["SENTRY_DSN", "SENTRY_RELEASE", "RAILWAY_GIT_COMMIT_SHA", "NODE_ENV"] as const; + +let savedEnv: Record; + +beforeEach(() => { + savedEnv = {}; + for (const key of ENV_KEYS) { + savedEnv[key] = process.env[key]; + delete process.env[key]; + } + __resetSentryForTests(); +}); + +afterEach(() => { + __resetSentryForTests(); + for (const key of ENV_KEYS) { + if (savedEnv[key] === undefined) { + delete process.env[key]; + } else { + process.env[key] = savedEnv[key]; + } + } +}); + +type SentryEvent = { kind: "init" } | { kind: "set-dsn"; dsn: string | null }; + +/** + * Generator for one event. `set-dsn` payloads cover the three meaningful + * cases: a valid (truthy) DSN, the empty string, and `null` (cleared) — + * the latter two being the falsy variants R7.3 must treat as no-ops. + */ +const eventArb: fc.Arbitrary = fc.oneof( + fc.constant({ kind: "init" }), + fc + .oneof( + fc.constantFrom(...VALID_DSNS), + fc.constant(""), + fc.constant(null), + ) + .map((dsn): SentryEvent => ({ kind: "set-dsn", dsn })), +); + +// Silent logger so the "different DSN" / "no release" warnings the module +// emits do not spam output while fast-check shrinks counterexamples. +const silentLogger = () => { + /* intentionally silent in tests */ +}; + +describe("sentry init idempotence + no-op property (design § Testing strategy Property 2)", () => { + it("binds exactly one client iff an init fired with a truthy DSN, and never re-binds (Validates: Requirements R7.3, R7.4)", () => { + fc.assert( + fc.property(fc.array(eventArb, { minLength: 1, maxLength: 20 }), (events) => { + // Fresh module + env state per run so `initialized` never leaks + // across fast-check iterations. + __resetSentryForTests(); + delete process.env.SENTRY_DSN; + + // Oracle state, mirroring the module's latching behavior. + let envDsn: string | null = null; // current env DSN (null = unset/cleared) + let expectInitialized = false; // becomes true on first init-with-truthy-dsn + let boundClient: ReturnType | undefined; + + for (const event of events) { + if (event.kind === "set-dsn") { + envDsn = event.dsn; + if (event.dsn === null || event.dsn === "") { + delete process.env.SENTRY_DSN; + } else { + process.env.SENTRY_DSN = event.dsn; + } + } else { + // "init" — reads current env DSN. Latches on first success. + initSentry({ logger: silentLogger }); + if (!expectInitialized && envDsn !== null && envDsn !== "") { + expectInitialized = true; + } + } + + // Invariant 1: feature-flag state tracks the model exactly. + expect(isEnabled()).toBe(expectInitialized); + + const client = Sentry.getClient(); + if (expectInitialized) { + // Invariant 2 (R7.4): exactly one client, stable by reference. + expect(client).toBeDefined(); + if (boundClient === undefined) { + boundClient = client; + } else { + expect(client).toBe(boundClient); + } + } else { + // Invariant 3 (R7.3): no client while no truthy-DSN init has run. + expect(client).toBeUndefined(); + } + } + }), + { + numRuns: 200, + // Fixed seed so any counterexample is reproducible across CI runs. + seed: 424242, + verbose: true, + }, + ); + }); +}); diff --git a/apps/api/src/observability/sentry.test.ts b/apps/api/src/observability/sentry.test.ts new file mode 100644 index 0000000..51177cf --- /dev/null +++ b/apps/api/src/observability/sentry.test.ts @@ -0,0 +1,248 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import * as Sentry from "@sentry/node"; +import { + __resetSentryForTests, + attachSentryToHono, + initSentry, + isEnabled, + scrubEvent, +} from "./sentry.js"; + +/** + * Unit tests for the API Sentry module (design § "apps/api/src/observability/sentry.ts", + * requirements R7.1, R7.3, R7.4, R7.5, R7.6). + * + * Every assertion reads `Sentry.getClient()` (the Sentry v10 accessor for the + * client bound to the current scope) rather than making any network call, so + * the suite is hermetic. A syntactically valid but inert DSN is used so + * `Sentry.init` accepts it without attempting a real transport. + */ + +// A syntactically valid DSN. Sentry parses but never reaches the network in tests. +const TEST_DSN = "https://examplePublicKey@o0.ingest.sentry.io/0"; +const OTHER_DSN = "https://otherPublicKey@o1.ingest.sentry.io/1"; + +const ENV_KEYS = [ + "SENTRY_DSN", + "SENTRY_RELEASE", + "RAILWAY_GIT_COMMIT_SHA", + "NODE_ENV", +] as const; + +let savedEnv: Record; + +beforeEach(() => { + savedEnv = {}; + for (const key of ENV_KEYS) { + savedEnv[key] = process.env[key]; + delete process.env[key]; + } + __resetSentryForTests(); +}); + +afterEach(() => { + __resetSentryForTests(); + for (const key of ENV_KEYS) { + if (savedEnv[key] === undefined) { + delete process.env[key]; + } else { + process.env[key] = savedEnv[key]; + } + } +}); + +describe("initSentry — DSN gating (R7.3)", () => { + it("is a no-op when SENTRY_DSN is unset", () => { + initSentry(); + + expect(Sentry.getClient()).toBeUndefined(); + expect(isEnabled()).toBe(false); + }); + + it("is a no-op when SENTRY_DSN is the empty string", () => { + process.env.SENTRY_DSN = ""; + initSentry(); + + expect(Sentry.getClient()).toBeUndefined(); + expect(isEnabled()).toBe(false); + }); + + it("does not register a client when an explicit empty dsn option is passed", () => { + initSentry({ dsn: "" }); + + expect(Sentry.getClient()).toBeUndefined(); + expect(isEnabled()).toBe(false); + }); +}); + +describe("initSentry — initialization and idempotence (R7.1, R7.4)", () => { + it("initializes exactly one client when a DSN is present", () => { + initSentry({ dsn: TEST_DSN }); + + expect(Sentry.getClient()).toBeDefined(); + expect(isEnabled()).toBe(true); + }); + + it("leaves exactly one active client after any number of init calls with the same DSN", () => { + initSentry({ dsn: TEST_DSN }); + const firstClient = Sentry.getClient(); + + initSentry({ dsn: TEST_DSN }); + initSentry({ dsn: TEST_DSN }); + initSentry({ dsn: TEST_DSN }); + + expect(Sentry.getClient()).toBe(firstClient); + expect(isEnabled()).toBe(true); + }); + + it("keeps the first client and warns when a repeat call passes a different DSN", () => { + const logger = vi.fn(); + initSentry({ dsn: TEST_DSN, logger }); + const firstClient = Sentry.getClient(); + + initSentry({ dsn: OTHER_DSN, logger }); + + expect(Sentry.getClient()).toBe(firstClient); + expect(logger).toHaveBeenCalledTimes(1); + expect(String(logger.mock.calls[0]?.[0])).toContain("different DSN"); + }); + + it("reads the DSN from process.env.SENTRY_DSN when no option is given", () => { + process.env.SENTRY_DSN = TEST_DSN; + initSentry(); + + expect(Sentry.getClient()).toBeDefined(); + expect(isEnabled()).toBe(true); + }); +}); + +describe("initSentry — release tag (R7.6)", () => { + it("sets release to process.env.RAILWAY_GIT_COMMIT_SHA", () => { + process.env.RAILWAY_GIT_COMMIT_SHA = "abc123def456"; + initSentry({ dsn: TEST_DSN }); + + expect(Sentry.getClient()?.getOptions().release).toBe("abc123def456"); + }); + + it("prefers an explicit release option over the env var", () => { + process.env.RAILWAY_GIT_COMMIT_SHA = "from-env"; + initSentry({ dsn: TEST_DSN, release: "from-option" }); + + expect(Sentry.getClient()?.getOptions().release).toBe("from-option"); + }); + + it("falls back to SENTRY_RELEASE when RAILWAY_GIT_COMMIT_SHA is unset", () => { + process.env.SENTRY_RELEASE = "fallback-sha"; + initSentry({ dsn: TEST_DSN }); + + expect(Sentry.getClient()?.getOptions().release).toBe("fallback-sha"); + }); + + it("warns but still initializes when no release tag is set in production", () => { + process.env.NODE_ENV = "production"; + const logger = vi.fn(); + initSentry({ dsn: TEST_DSN, logger }); + + expect(Sentry.getClient()).toBeDefined(); + expect(logger).toHaveBeenCalledTimes(1); + expect(String(logger.mock.calls[0]?.[0])).toContain("release"); + }); +}); + +describe("initSentry — MVP sampling defaults (R7.1)", () => { + it("initializes with error sample rate 1.0 and trace sample rate 0.0", () => { + initSentry({ dsn: TEST_DSN }); + const options = Sentry.getClient()?.getOptions(); + + expect(options?.sampleRate).toBe(1.0); + expect(options?.tracesSampleRate).toBe(0); + expect(options?.sendDefaultPii).toBe(false); + }); +}); + +describe("scrubEvent (R7.5)", () => { + it("strips idea and constraints from event.request.data", () => { + const event: Sentry.Event = { + request: { + data: { idea: "a secret idea", constraints: ["budget"], keep: "me" }, + }, + }; + + const scrubbed = scrubEvent(event); + + expect(scrubbed.request?.data).toEqual({ keep: "me" }); + expect(scrubbed.request?.data).not.toHaveProperty("idea"); + expect(scrubbed.request?.data).not.toHaveProperty("constraints"); + }); + + it("does not mutate the input event or its nested request.data reference", () => { + const data = { idea: "a secret idea", constraints: ["budget"], keep: "me" }; + const request = { data }; + const event: Sentry.Event = { request }; + + const scrubbed = scrubEvent(event); + + // Original references are untouched. + expect(event.request).toBe(request); + expect(event.request?.data).toBe(data); + expect(data).toEqual({ idea: "a secret idea", constraints: ["budget"], keep: "me" }); + + // A new object graph was returned. + expect(scrubbed).not.toBe(event); + expect(scrubbed.request).not.toBe(request); + expect(scrubbed.request?.data).not.toBe(data); + }); + + it("returns the original event reference when there is nothing to scrub", () => { + const event: Sentry.Event = { + request: { data: { harmless: "value" } }, + }; + + expect(scrubEvent(event)).toBe(event); + }); + + it("returns the original event when request is absent", () => { + const event: Sentry.Event = { message: "boom" }; + + expect(scrubEvent(event)).toBe(event); + }); + + it("returns the original event when request.data is a non-JSON body (string)", () => { + const event: Sentry.Event = { + request: { data: "idea=secret&constraints=budget" }, + }; + + expect(scrubEvent(event)).toBe(event); + }); + + it("strips only the present sensitive key when just one is set", () => { + const event: Sentry.Event = { + request: { data: { idea: "secret", keep: "me" } }, + }; + + const scrubbed = scrubEvent(event); + + expect(scrubbed.request?.data).toEqual({ keep: "me" }); + }); +}); + +describe("attachSentryToHono", () => { + it("is a no-op when Sentry is disabled (no DSN)", () => { + const onError = vi.fn(); + const fakeApp = { onError } as unknown as Parameters[0]; + + attachSentryToHono(fakeApp); + + expect(onError).not.toHaveBeenCalled(); + }); + + it("registers an onError handler once Sentry is initialized", () => { + initSentry({ dsn: TEST_DSN }); + const onError = vi.fn(); + const fakeApp = { onError } as unknown as Parameters[0]; + + attachSentryToHono(fakeApp); + + expect(onError).toHaveBeenCalledTimes(1); + }); +}); diff --git a/apps/api/src/observability/sentry.ts b/apps/api/src/observability/sentry.ts new file mode 100644 index 0000000..bee864f --- /dev/null +++ b/apps/api/src/observability/sentry.ts @@ -0,0 +1,187 @@ +/** + * Sentry wiring for the API service. + * + * Behaviour contract (design § 3, requirements R7.1, R7.3, R7.4, R7.5, R7.6): + * + * - `initSentry()` is a no-op when `SENTRY_DSN` is falsy (R7.3). + * - `initSentry()` is idempotent: repeated calls with the same DSN leave + * exactly one active client (R7.4). A repeat call with a *different* + * DSN logs a warning and keeps the first client. + * - `release` is read from `RAILWAY_GIT_COMMIT_SHA || SENTRY_RELEASE`. + * If both are unset in production, emit a warning but still init + * (R7.6). + * - `scrubEvent` removes `idea` and `constraints` from + * `event.request.data` and never mutates the input (R7.5). + * - `attachSentryToHono()` registers a Hono `onError` handler that pipes + * errors into Sentry tagged with the request id. It is a no-op whenever + * `isEnabled()` is false so the module has zero observable effect when + * the feature flag is off. + * + * The module is imported only from `apps/api/src/index.ts` (process startup) + * and `apps/api/src/app.ts` (middleware wiring) in B3. B1 ships the module + * and tests only — no wiring yet. + */ + +import * as Sentry from "@sentry/node"; +import type { Env, Hono, Schema } from "hono"; + +export interface InitSentryOptions { + /** Override env-based DSN for tests. */ + dsn?: string; + /** Override env-based release for tests. */ + release?: string; + /** Override env-based environment for tests. */ + environment?: string; + /** Inject a logger for tests. Defaults to console.warn. */ + logger?: (msg: string, ...args: unknown[]) => void; +} + +type Logger = (msg: string, ...args: unknown[]) => void; + +let initialized = false; +let activeDsn: string | null = null; + +/** Idempotent. No-op when DSN is missing. */ +export function initSentry(options: InitSentryOptions = {}): void { + const dsn = options.dsn ?? process.env.SENTRY_DSN; + const warn: Logger = options.logger ?? ((msg, ...rest) => console.warn(msg, ...rest)); + + if (!dsn) { + // R7.3 — silent no-op. + return; + } + + if (initialized) { + // R7.4 — idempotent. A repeat call with the *same* DSN is silent; + // a repeat call with a *different* DSN is rejected with a warning + // and the first client stays active. + if (activeDsn !== dsn) { + warn("[sentry] initSentry called again with a different DSN; ignoring."); + } + return; + } + + const release = + options.release ?? process.env.RAILWAY_GIT_COMMIT_SHA ?? process.env.SENTRY_RELEASE; + + if (!release && process.env.NODE_ENV === "production") { + warn( + "[sentry] No release tag set (RAILWAY_GIT_COMMIT_SHA / SENTRY_RELEASE unset); continuing without release.", + ); + } + + Sentry.init({ + dsn, + release: release || undefined, + environment: options.environment ?? process.env.NODE_ENV, + // `beforeSend` only ever receives an `ErrorEvent` (transaction events go + // through `beforeSendTransaction`). `scrubEvent` is typed against the + // wider `Sentry.Event` per the design contract, so we narrow the return + // back to `ErrorEvent` — the scrub only ever spreads the input event, so + // the runtime shape is preserved. + beforeSend: (event) => scrubEvent(event) as Sentry.ErrorEvent, + // MVP defaults (ADR 003 § 5): per-error at 100%, tracing disabled, + // no PII forwarded by default. Can be tuned post-MVP. + sampleRate: 1.0, + tracesSampleRate: 0, + sendDefaultPii: false, + }); + + initialized = true; + activeDsn = dsn; +} + +/** + * Hono integration. Registers an `onError` handler that forwards errors to + * Sentry tagged with the request id, then re-throws so downstream handlers + * (including the existing 500 JSON formatter in `apps/api/src/app.ts`) can + * still render a user-facing response. + * + * No-op whenever `isEnabled()` is false — the feature flag completely + * disables the attachment path so tests can run without a DSN and still + * exercise the rest of the app. + */ +export function attachSentryToHono< + E extends Env = Env, + S extends Schema = Schema, + BasePath extends string = string, +>(app: Hono): void { + if (!isEnabled()) { + return; + } + + app.onError((err, c) => { + const requestId = (c as { get(key: string): unknown }).get("requestId") as + | string + | undefined; + Sentry.captureException(err, { + tags: requestId ? { requestId } : undefined, + }); + throw err; + }); +} + +export function isEnabled(): boolean { + return initialized; +} + +/** + * Strips `idea` and `constraints` keys from `event.request.data` (R7.5). + * + * Returns a **new** event object whenever a scrub is performed — the input + * event and its nested `request` / `data` objects are never mutated so a + * caller holding a reference to the original payload keeps it intact. When + * there is nothing to scrub, the original reference is returned verbatim. + * + * `event.request.data` may be a string, `ArrayBuffer`, `FormData`, + * `URLSearchParams`, or an arbitrary JSON record. We only scrub the JSON + * record case; everything else is passed through unchanged. + */ +export function scrubEvent(event: Sentry.Event): Sentry.Event { + const request = event.request; + if (!request || request.data == null) { + return event; + } + + const data: unknown = request.data; + if (typeof data !== "object" || Array.isArray(data)) { + return event; + } + + const record = data as Record; + if (!("idea" in record) && !("constraints" in record)) { + return event; + } + + const scrubbed: Record = { ...record }; + delete scrubbed.idea; + delete scrubbed.constraints; + + return { + ...event, + request: { ...request, data: scrubbed }, + }; +} + +/** + * Test-only: reset module state and detach any registered Sentry client + * from the current, isolation, and global scopes so the next test starts + * from a clean slate. + * + * Sentry v10 does not expose a `close()` that clears the global client — + * clients are attached to scopes, so we detach from all three to fully + * reset (see the v10 carrier model). + */ +export function __resetSentryForTests(): void { + initialized = false; + activeDsn = null; + + const scopes = [ + Sentry.getCurrentScope?.(), + Sentry.getIsolationScope?.(), + Sentry.getGlobalScope?.(), + ]; + for (const scope of scopes) { + scope?.setClient(undefined); + } +} diff --git a/apps/web/package.json b/apps/web/package.json index 72c1269..60b1f82 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -12,36 +12,39 @@ "test": "vitest run --config ../../vitest.package.config.ts" }, "dependencies": { - "@stackfast/shared": "workspace:*", - "@stackfast/schemas": "workspace:*", - "@stackfast/rules-engine": "workspace:*", - "@stackfast/registry": "workspace:*", "@radix-ui/react-collapsible": "^1.1.12", "@radix-ui/react-dialog": "^1.1.15", "@radix-ui/react-slot": "^1.2.4", "@radix-ui/react-toast": "^1.2.15", "@radix-ui/react-tooltip": "^1.2.8", + "@sentry/react": "^10.53.1", + "@sentry/vite-plugin": "^4.0.0", + "@stackfast/registry": "workspace:*", + "@stackfast/rules-engine": "workspace:*", + "@stackfast/schemas": "workspace:*", + "@stackfast/shared": "workspace:*", + "@tanstack/react-query": "^5.60.5", + "better-auth": "^1.1.13", "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", "jszip": "^3.10.1", + "lucide-react": "^0.453.0", "react": "^18.3.1", "react-dom": "^18.3.1", - "wouter": "^3.3.5", - "@tanstack/react-query": "^5.60.5", - "lucide-react": "^0.453.0", - "better-auth": "^1.1.13", "tailwind-merge": "^2.5.4", + "wouter": "^3.3.5", "zod": "^3.24.2" }, "devDependencies": { - "typescript": "^5.6.3", "@types/react": "^18.3.12", "@types/react-dom": "^18.3.1", "@vitejs/plugin-react": "^4.3.3", "autoprefixer": "^10.4.20", + "happy-dom": "^15.11.0", "postcss": "^8.4.47", "tailwindcss": "^3.4.14", "tailwindcss-animate": "^1.0.7", + "typescript": "^5.6.3", "vite": "^5.4.11" } } diff --git a/apps/web/railway.toml b/apps/web/railway.toml new file mode 100644 index 0000000..0a7e882 --- /dev/null +++ b/apps/web/railway.toml @@ -0,0 +1,88 @@ +# Railway service manifest for `stackfast-web`. +# +# Phase 8 deployment — ties back to: +# - ADR 003 § 1 "Hosting: split web + API, both on Railway" +# (docs/decisions/003-deployment-architecture.md): the web app is fully +# static after `vite build`, so it is served by Railway's static hosting +# (Caddy) with NO long-running Node process. +# - design.md § "Railway service topology — Web Service" +# (.kiro/specs/phase-8-deployment/design.md) +# - Satisfies R1.2 (Web Service is Railway static hosting, built with the +# pnpm filter pipeline below, serving the contents of apps/web/dist). +# +# Schema reference: https://railway.com/railway.schema.json +# Config-as-code docs: https://docs.railway.com/config-as-code/reference +# +# Environment variables are NOT declared here — they are set per environment +# via the Railway CLI/dashboard, per ADR 003 § 6 and design § "Configuration +# surface". For the Web Service these are BUILD-TIME vars baked into the +# bundle by Vite: +# railway variables \ +# --set VITE_API_URL=https://api.stackfast.app/api/v1 \ +# --set VITE_AUTH_URL=https://api.stackfast.app \ +# --set VITE_SENTRY_DSN=... \ +# --set VITE_APP_RELEASE=$RAILWAY_GIT_COMMIT_SHA \ +# --service stackfast-web \ +# --environment production +# (R3.7: the web service calls api.stackfast.app DIRECTLY in production — no +# proxy — so VITE_API_URL must be the absolute API URL.) See Batch G (staging) +# and Batch H (production) in .kiro/specs/phase-8-deployment/tasks.md for the +# cutover runbook. + +"$schema" = "https://railway.com/railway.schema.json" + +[build] +# RAILPACK (not NIXPACKS like the API manifest) is deliberate: Railpack ships +# a first-class static-file provider that serves a built SPA through Caddy with +# no application process at runtime — exactly the "Railway static hosting" +# behaviour design § "Web Service" calls for. Nixpacks has no equivalent +# static-serve path. Railpack reads Node 20 from the repo-root package.json +# "engines" field (">=20.0.0") for the build stage. +builder = "RAILPACK" + +# Explicit install+build pipeline from design § "Web Service" (R1.2). The `...` +# suffix on the filter includes @stackfast/web's workspace dependencies +# (schemas, registry, rules-engine, shared) so the Vite build compiles against +# the built packages. Vite emits the bundle to apps/web/dist (default outDir; +# vite.config.ts sets no custom `base`, and `build.sourcemap` is true so Sentry +# source-map upload — wired in task B5 — has maps to attach). +buildCommand = "pnpm install --frozen-lockfile --filter @stackfast/web... && pnpm --filter @stackfast/web build" + +[deploy] +# Static hosting via Caddy means there is no Node start command — Railpack's +# static-file provider boots Caddy to serve the build output. The serve root +# and SPA fallback are configured OUT OF BAND of this file because Railway's +# config-as-code schema has no static-root key (see the two companion settings +# below). On `railway up` Railpack copies the served directory and starts Caddy. +# +# 1. Serve root — set as a service variable (CLI, same as every other env +# var; no dashboard fiddling required): +# railway variables --set RAILPACK_STATIC_FILE_ROOT=apps/web/dist \ +# --service stackfast-web --environment production +# This points Railpack's static-file provider at the Vite output (R1.2). +# +# 2. SPA history-routing fallback — the web app uses wouter path routing +# (/blueprint, /catalog, /compatibility, /migration), so a direct hit or +# refresh on a sub-route must return index.html rather than a 404. Railpack +# enables this via a root `Staticfile` with: +# root: apps/web/dist +# index_fallback: true +# (`index_fallback` defaults to false; it must be true for this SPA.) +# +# Reference: https://railpack.com/languages/staticfile/ + +# Health check path "/" — a 200 on the SPA entry point (index.html) is enough +# liveness signal for a static bundle (design § "Web Service"; verified by the +# deploy-health E2E in task C4). Railway's edge terminates TLS and provides the +# HTTP→HTTPS redirect (R9.5); Caddy here runs with auto_https off. +healthcheckPath = "/" + +# Cold start for a static Caddy server is sub-second; 30 s mirrors the API +# manifest and leaves ample headroom without letting a broken deploy linger. +healthcheckTimeout = 30 + +# Restart at most 3 times on failure before marking the deploy failed, matching +# the API manifest and design § "Rollback, observability, and runbook notes" — +# ON_FAILURE avoids masking a genuine regression from the rollback operator. +restartPolicyType = "ON_FAILURE" +restartPolicyMaxRetries = 3 diff --git a/apps/web/src/lib/sentry.test.ts b/apps/web/src/lib/sentry.test.ts new file mode 100644 index 0000000..e4026b2 --- /dev/null +++ b/apps/web/src/lib/sentry.test.ts @@ -0,0 +1,123 @@ +// @vitest-environment happy-dom +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import * as Sentry from "@sentry/react"; +import { __resetSentryForTests, initSentry, isEnabled } from "./sentry"; + +/** + * Unit tests for the web (browser) Sentry module (design § + * "apps/web/src/lib/sentry.ts", requirements R7.2, R7.3, R7.4). + * + * Mirrors the API-side suite at `apps/api/src/observability/sentry.test.ts`: + * every assertion reads `Sentry.getClient()` (the Sentry v10 accessor for the + * client bound to the current scope) rather than making any network call, so + * the suite is hermetic. A syntactically valid but inert DSN is used so + * `Sentry.init` accepts it without attempting a real transport. + * + * The browser SDK needs DOM globals, so this file runs under happy-dom. + */ + +// A syntactically valid DSN. Sentry parses but never reaches the network in tests. +const TEST_DSN = "https://examplePublicKey@o0.ingest.sentry.io/0"; +const OTHER_DSN = "https://otherPublicKey@o1.ingest.sentry.io/1"; + +beforeEach(() => { + vi.unstubAllEnvs(); + __resetSentryForTests(); +}); + +afterEach(() => { + __resetSentryForTests(); + vi.unstubAllEnvs(); +}); + +describe("initSentry — DSN gating (R7.3)", () => { + it("is a no-op when VITE_SENTRY_DSN is unset", () => { + initSentry(); + + expect(Sentry.getClient()).toBeUndefined(); + expect(isEnabled()).toBe(false); + }); + + it("is a no-op when VITE_SENTRY_DSN is the empty string", () => { + vi.stubEnv("VITE_SENTRY_DSN", ""); + initSentry(); + + expect(Sentry.getClient()).toBeUndefined(); + expect(isEnabled()).toBe(false); + }); + + it("does not register a client when an explicit empty dsn option is passed", () => { + initSentry({ dsn: "" }); + + expect(Sentry.getClient()).toBeUndefined(); + expect(isEnabled()).toBe(false); + }); +}); + +describe("initSentry — initialization and idempotence (R7.2, R7.4)", () => { + it("initializes exactly one client when a DSN is present", () => { + initSentry({ dsn: TEST_DSN }); + + expect(Sentry.getClient()).toBeDefined(); + expect(isEnabled()).toBe(true); + }); + + it("leaves exactly one active client after any number of init calls with the same DSN", () => { + initSentry({ dsn: TEST_DSN }); + const firstClient = Sentry.getClient(); + + initSentry({ dsn: TEST_DSN }); + initSentry({ dsn: TEST_DSN }); + initSentry({ dsn: TEST_DSN }); + + expect(Sentry.getClient()).toBe(firstClient); + expect(isEnabled()).toBe(true); + }); + + it("keeps the first client and warns when a repeat call passes a different DSN", () => { + const logger = vi.fn(); + initSentry({ dsn: TEST_DSN, logger }); + const firstClient = Sentry.getClient(); + + initSentry({ dsn: OTHER_DSN, logger }); + + expect(Sentry.getClient()).toBe(firstClient); + expect(logger).toHaveBeenCalledTimes(1); + expect(String(logger.mock.calls[0]?.[0])).toContain("different DSN"); + }); + + it("reads the DSN from import.meta.env.VITE_SENTRY_DSN when no option is given", () => { + vi.stubEnv("VITE_SENTRY_DSN", TEST_DSN); + initSentry(); + + expect(Sentry.getClient()).toBeDefined(); + expect(isEnabled()).toBe(true); + }); +}); + +describe("initSentry — release tag (R7.2)", () => { + it("sets release from VITE_APP_RELEASE", () => { + vi.stubEnv("VITE_APP_RELEASE", "abc123def456"); + initSentry({ dsn: TEST_DSN }); + + expect(Sentry.getClient()?.getOptions().release).toBe("abc123def456"); + }); + + it("prefers an explicit release option over the env var", () => { + vi.stubEnv("VITE_APP_RELEASE", "from-env"); + initSentry({ dsn: TEST_DSN, release: "from-option" }); + + expect(Sentry.getClient()?.getOptions().release).toBe("from-option"); + }); +}); + +describe("initSentry — MVP sampling defaults (R7.2)", () => { + it("initializes with error sample rate 1.0 and trace sample rate 0.0", () => { + initSentry({ dsn: TEST_DSN }); + const options = Sentry.getClient()?.getOptions(); + + expect(options?.sampleRate).toBe(1.0); + expect(options?.tracesSampleRate).toBe(0); + expect(options?.sendDefaultPii).toBe(false); + }); +}); diff --git a/apps/web/src/lib/sentry.ts b/apps/web/src/lib/sentry.ts new file mode 100644 index 0000000..0e16ae7 --- /dev/null +++ b/apps/web/src/lib/sentry.ts @@ -0,0 +1,109 @@ +/** + * Sentry wiring for the web (browser) bundle. + * + * Behaviour contract (design § "apps/web/src/lib/sentry.ts", requirements + * R7.2, R7.3, R7.4): + * + * - `initSentry()` is a no-op when `import.meta.env.VITE_SENTRY_DSN` is + * falsy (R7.3). No client, transport, or global hook is registered. + * - `initSentry()` is idempotent: repeated calls with the same DSN leave + * exactly one active client (R7.4). A repeat call with a *different* DSN + * logs a warning and keeps the first client. + * - `release` is read from `import.meta.env.VITE_APP_RELEASE` so the + * browser bundle never sees server secrets (R7.2, R7.6). + * + * This mirrors the API-side module at `apps/api/src/observability/sentry.ts`. + * `apps/web/src/main.tsx` calls `initSentry()` before `ReactDOM.createRoot` + * in B5 so React error boundaries pick up the hub — B4 ships the module and + * tests only, with no entrypoint wiring yet. + */ + +import * as Sentry from "@sentry/react"; + +export interface InitSentryOptions { + /** Override env-based DSN for tests. */ + dsn?: string; + /** Override env-based release for tests. */ + release?: string; + /** Override env-based environment for tests. */ + environment?: string; + /** Inject a logger for tests. Defaults to console.warn. */ + logger?: (msg: string, ...args: unknown[]) => void; +} + +type Logger = (msg: string, ...args: unknown[]) => void; + +let initialized = false; +let activeDsn: string | null = null; + +/** Coerce an `import.meta.env` value to a string, or `undefined`. */ +function asString(value: unknown): string | undefined { + return typeof value === "string" ? value : undefined; +} + +/** Idempotent. No-op when `VITE_SENTRY_DSN` is missing. */ +export function initSentry(options: InitSentryOptions = {}): void { + // Static member access (not dynamic indexing) so Vite/Vitest link these to + // the live env — `import.meta.env` is meant to be read by static key. + const dsn = options.dsn ?? asString(import.meta.env.VITE_SENTRY_DSN); + const warn: Logger = options.logger ?? ((msg, ...rest) => console.warn(msg, ...rest)); + + if (!dsn) { + // R7.3 — silent no-op. + return; + } + + if (initialized) { + // R7.4 — idempotent. A repeat call with the *same* DSN is silent; + // a repeat call with a *different* DSN is rejected with a warning + // and the first client stays active. + if (activeDsn !== dsn) { + warn("[sentry] initSentry called again with a different DSN; ignoring."); + } + return; + } + + const release = options.release ?? asString(import.meta.env.VITE_APP_RELEASE); + const environment = options.environment ?? asString(import.meta.env.MODE); + + Sentry.init({ + dsn, + release: release || undefined, + environment: environment || undefined, + // MVP defaults (ADR 003 § 5): per-error at 100%, tracing disabled, + // no PII forwarded by default. Mirrors the API side. + sampleRate: 1.0, + tracesSampleRate: 0, + sendDefaultPii: false, + }); + + initialized = true; + activeDsn = dsn; +} + +export function isEnabled(): boolean { + return initialized; +} + +/** + * Test-only: reset module state and detach any registered Sentry client + * from the current, isolation, and global scopes so the next test starts + * from a clean slate. + * + * Sentry v10 does not expose a `close()` that clears the global client — + * clients are attached to scopes, so we detach from all three to fully + * reset (see the v10 carrier model). + */ +export function __resetSentryForTests(): void { + initialized = false; + activeDsn = null; + + const scopes = [ + Sentry.getCurrentScope?.(), + Sentry.getIsolationScope?.(), + Sentry.getGlobalScope?.(), + ]; + for (const scope of scopes) { + scope?.setClient(undefined); + } +} diff --git a/apps/web/src/main.tsx b/apps/web/src/main.tsx index c7337a4..bfd33a8 100644 --- a/apps/web/src/main.tsx +++ b/apps/web/src/main.tsx @@ -1,8 +1,13 @@ import React from 'react'; import ReactDOM from 'react-dom/client'; import { App } from './App'; +import { initSentry } from './lib/sentry'; import './index.css'; +// Initialize Sentry before React mounts so error boundaries pick up the hub +// (R7.2). No-op when VITE_SENTRY_DSN is unset (R7.3); idempotent (R7.4). +initSentry(); + const rootElement = document.getElementById('root'); if (!rootElement) { diff --git a/apps/web/vite.config.ts b/apps/web/vite.config.ts index 86ca80d..d6580bd 100644 --- a/apps/web/vite.config.ts +++ b/apps/web/vite.config.ts @@ -1,9 +1,40 @@ import { defineConfig } from 'vite'; +import type { PluginOption } from 'vite'; import react from '@vitejs/plugin-react'; +import { sentryVitePlugin } from '@sentry/vite-plugin'; import path from 'node:path'; +// Register the Sentry source-map upload plugin only when all four build-time +// credentials are present (R7.2, R7.6). When any are missing the plugin is +// omitted entirely so local/CI builds run cleanly without Sentry config — +// source maps are still emitted locally via `build.sourcemap: true` below. +function sentryPlugins(): PluginOption[] { + const dsn = process.env.SENTRY_DSN; + const authToken = process.env.SENTRY_AUTH_TOKEN; + const org = process.env.SENTRY_ORG; + const project = process.env.SENTRY_PROJECT_WEB; + + if (!dsn || !authToken || !org || !project) { + return []; + } + + // `@sentry/vite-plugin` is built against its own pinned Vite types, which + // can skew from the workspace Vite's `Plugin` type under pnpm. The plugin is + // runtime-compatible, so cast to the local `PluginOption` to keep tsc happy. + const plugin = sentryVitePlugin({ + org, + project, + authToken, + release: { + name: process.env.VITE_APP_RELEASE || process.env.RAILWAY_GIT_COMMIT_SHA, + }, + }) as unknown as PluginOption; + + return [plugin]; +} + export default defineConfig({ - plugins: [react()], + plugins: [react(), ...sentryPlugins()], resolve: { alias: { '@': path.resolve(__dirname, './src'), diff --git a/graphify-out/.graphify_chunks.json b/graphify-out/.graphify_chunks.json new file mode 100644 index 0000000..de33ee1 --- /dev/null +++ b/graphify-out/.graphify_chunks.json @@ -0,0 +1,26 @@ +[ + [ + "H:\\Stackfast-2026\\Agents.md", + "H:\\Stackfast-2026\\pnpm-workspace.yaml", + "H:\\Stackfast-2026\\readme.md", + "H:\\Stackfast-2026\\ROADMAP.md", + "H:\\Stackfast-2026\\SALVAGE_MANIFEST.md", + "H:\\Stackfast-2026\\Stackfast2026 implementation plan.md", + "H:\\Stackfast-2026\\Stackfast2026.md", + "H:\\Stackfast-2026\\.agents\\skills\\neon-postgres\\SKILL.md", + "H:\\Stackfast-2026\\.github\\workflows\\ci.yml", + "H:\\Stackfast-2026\\.kiro\\specs\\phase-8-deployment\\design.md", + "H:\\Stackfast-2026\\.kiro\\specs\\phase-8-deployment\\requirements.md", + "H:\\Stackfast-2026\\.kiro\\specs\\phase-8-deployment\\tasks.md", + "H:\\Stackfast-2026\\apps\\web\\index.html", + "H:\\Stackfast-2026\\docs\\backlog\\INTEGRATION_PLAN.md", + "H:\\Stackfast-2026\\docs\\decisions\\001-authentication-strategy.md", + "H:\\Stackfast-2026\\docs\\decisions\\002-ai-provider-strategy.md", + "H:\\Stackfast-2026\\docs\\decisions\\003-deployment-architecture.md", + "H:\\Stackfast-2026\\docs\\deferred\\webailyzer.md", + "H:\\Stackfast-2026\\scripts\\deploy\\rollback.md" + ], + [ + "H:\\Stackfast-2026\\apps\\web\\public\\vite.svg" + ] +] \ No newline at end of file diff --git a/graphify-out/.graphify_labels.json b/graphify-out/.graphify_labels.json new file mode 100644 index 0000000..bc07a53 --- /dev/null +++ b/graphify-out/.graphify_labels.json @@ -0,0 +1 @@ +{"0": "Web Visualization Components", "1": "Domain Schemas", "2": "API Contract Tests", "3": "Web App Shell", "4": "Recipe Matching", "5": "API Blueprint Routes", "6": "Export Generator", "7": "Web Dependencies", "8": "Diagnostics Model", "9": "Database Schema", "10": "API Dependencies", "11": "Workspace Tooling", "12": "Worker Evaluation", "13": "Rules Engine", "14": "Selection State", "15": "Toast UI", "16": "Category Schema", "17": "Compatibility Score UI", "18": "Export Dialog UI", "19": "Export State", "20": "Suggestions State", "21": "AI Dependencies", "22": "Schema Dependencies", "23": "Exporter Dependencies", "24": "Registry Validation", "25": "Database Seeding", "26": "Error Boundary", "27": "API Package Dependencies", "28": "Shadcn Components Config", "29": "Rules Package Dependencies", "30": "Migration CLI", "31": "Smoke Tests", "32": "Product Navigation", "33": "Rule Schemas", "34": "Workspace Architecture", "35": "Smart Suggestions", "36": "Evaluation State", "37": "Deployment Architecture", "38": "Auth Service", "39": "Catalog Loader", "40": "Package Metadata", "41": "Neon Postgres", "42": "API Client Types", "43": "Web TSConfig", "44": "Backlog Integration", "45": "Category Section UI", "46": "Production Auth Flow", "47": "AI Provider Strategy", "48": "Base TSConfig", "49": "CI Quality Gate", "50": "Compatibility Heatmap", "51": "Catalog Schemas", "52": "Rollback Strategy", "53": "Public API Surface", "54": "Registry Manifest", "55": "Worker Protocol", "56": "Rate Limiting", "57": "Rules Manifest", "58": "Admin Security", "59": "Cleanup Salvage", "60": "Package TSConfig", "61": "Package TSConfig", "62": "Package TSConfig", "63": "Package TSConfig", "64": "Package TSConfig", "65": "Package TSConfig", "66": "Package TSConfig", "67": "Vite Asset", "68": "Sentry Observability", "69": "Agent Governance", "70": "Drizzle Client", "71": "HTML Security Metadata", "72": "Playwright Config", "73": "Admin E2E Tests", "74": "Rate Limit E2E", "75": "Vite Sentry Config", "76": "Neon Migration", "77": "Railway Topology", "78": "Staging Isolation", "79": "Cutover Plan", "80": "Cross Origin E2E", "81": "Health E2E", "82": "Drizzle Config", "83": "Test Setup", "84": "Vitest Config", "85": "PostCSS Config", "86": "Selections Hook", "87": "Package Index", "88": "Auth Client Exports", "89": "Playwright Setup", "90": "Tailwind Config", "91": "ESLint Config", "92": "README Deployment Docs", "93": "Index Module", "94": "Registry Expansion", "95": "Post MVP Roadmap", "96": "MVP E2E Flows", "97": "Package Vitest Config", "98": "Vitest Workspace"} \ No newline at end of file diff --git a/graphify-out/.graphify_python b/graphify-out/.graphify_python new file mode 100644 index 0000000..5bfa6b2 --- /dev/null +++ b/graphify-out/.graphify_python @@ -0,0 +1 @@ +C:\Users\van_d\AppData\Roaming\uv\tools\graphifyy\Scripts\python.exe \ No newline at end of file diff --git a/graphify-out/.graphify_root b/graphify-out/.graphify_root new file mode 100644 index 0000000..339ca51 --- /dev/null +++ b/graphify-out/.graphify_root @@ -0,0 +1 @@ +H:\Stackfast-2026 \ No newline at end of file diff --git a/graphify-out/GRAPH_REPORT.md b/graphify-out/GRAPH_REPORT.md new file mode 100644 index 0000000..09dc4fa --- /dev/null +++ b/graphify-out/GRAPH_REPORT.md @@ -0,0 +1,443 @@ +# Graph Report - H:\Stackfast-2026 (2026-07-03) + +## Corpus Check +- 211 files · ~118,390 words +- Verdict: corpus is large enough that graph structure adds value. + +## Summary +- 1454 nodes · 2593 edges · 99 communities (86 shown, 13 thin omitted) +- Extraction: 99% EXTRACTED · 1% INFERRED · 0% AMBIGUOUS · INFERRED: 33 edges (avg confidence: 0.85) +- Token cost: 0 input · 0 output + +## Community Hubs (Navigation) +- [[_COMMUNITY_Web Visualization Components|Web Visualization Components]] +- [[_COMMUNITY_Domain Schemas|Domain Schemas]] +- [[_COMMUNITY_API Contract Tests|API Contract Tests]] +- [[_COMMUNITY_Web App Shell|Web App Shell]] +- [[_COMMUNITY_Recipe Matching|Recipe Matching]] +- [[_COMMUNITY_API Blueprint Routes|API Blueprint Routes]] +- [[_COMMUNITY_Export Generator|Export Generator]] +- [[_COMMUNITY_Web Dependencies|Web Dependencies]] +- [[_COMMUNITY_Diagnostics Model|Diagnostics Model]] +- [[_COMMUNITY_Database Schema|Database Schema]] +- [[_COMMUNITY_API Dependencies|API Dependencies]] +- [[_COMMUNITY_Workspace Tooling|Workspace Tooling]] +- [[_COMMUNITY_Worker Evaluation|Worker Evaluation]] +- [[_COMMUNITY_Rules Engine|Rules Engine]] +- [[_COMMUNITY_Selection State|Selection State]] +- [[_COMMUNITY_Toast UI|Toast UI]] +- [[_COMMUNITY_Category Schema|Category Schema]] +- [[_COMMUNITY_Compatibility Score UI|Compatibility Score UI]] +- [[_COMMUNITY_Export Dialog UI|Export Dialog UI]] +- [[_COMMUNITY_Export State|Export State]] +- [[_COMMUNITY_Suggestions State|Suggestions State]] +- [[_COMMUNITY_AI Dependencies|AI Dependencies]] +- [[_COMMUNITY_Schema Dependencies|Schema Dependencies]] +- [[_COMMUNITY_Exporter Dependencies|Exporter Dependencies]] +- [[_COMMUNITY_Registry Validation|Registry Validation]] +- [[_COMMUNITY_Database Seeding|Database Seeding]] +- [[_COMMUNITY_Error Boundary|Error Boundary]] +- [[_COMMUNITY_API Package Dependencies|API Package Dependencies]] +- [[_COMMUNITY_Shadcn Components Config|Shadcn Components Config]] +- [[_COMMUNITY_Rules Package Dependencies|Rules Package Dependencies]] +- [[_COMMUNITY_Migration CLI|Migration CLI]] +- [[_COMMUNITY_Smoke Tests|Smoke Tests]] +- [[_COMMUNITY_Product Navigation|Product Navigation]] +- [[_COMMUNITY_Rule Schemas|Rule Schemas]] +- [[_COMMUNITY_Workspace Architecture|Workspace Architecture]] +- [[_COMMUNITY_Smart Suggestions|Smart Suggestions]] +- [[_COMMUNITY_Evaluation State|Evaluation State]] +- [[_COMMUNITY_Deployment Architecture|Deployment Architecture]] +- [[_COMMUNITY_Auth Service|Auth Service]] +- [[_COMMUNITY_Catalog Loader|Catalog Loader]] +- [[_COMMUNITY_Package Metadata|Package Metadata]] +- [[_COMMUNITY_Neon Postgres|Neon Postgres]] +- [[_COMMUNITY_API Client Types|API Client Types]] +- [[_COMMUNITY_Web TSConfig|Web TSConfig]] +- [[_COMMUNITY_Backlog Integration|Backlog Integration]] +- [[_COMMUNITY_Category Section UI|Category Section UI]] +- [[_COMMUNITY_Production Auth Flow|Production Auth Flow]] +- [[_COMMUNITY_AI Provider Strategy|AI Provider Strategy]] +- [[_COMMUNITY_Base TSConfig|Base TSConfig]] +- [[_COMMUNITY_CI Quality Gate|CI Quality Gate]] +- [[_COMMUNITY_Compatibility Heatmap|Compatibility Heatmap]] +- [[_COMMUNITY_Catalog Schemas|Catalog Schemas]] +- [[_COMMUNITY_Rollback Strategy|Rollback Strategy]] +- [[_COMMUNITY_Public API Surface|Public API Surface]] +- [[_COMMUNITY_Registry Manifest|Registry Manifest]] +- [[_COMMUNITY_Worker Protocol|Worker Protocol]] +- [[_COMMUNITY_Rate Limiting|Rate Limiting]] +- [[_COMMUNITY_Rules Manifest|Rules Manifest]] +- [[_COMMUNITY_Admin Security|Admin Security]] +- [[_COMMUNITY_Cleanup Salvage|Cleanup Salvage]] +- [[_COMMUNITY_Package TSConfig|Package TSConfig]] +- [[_COMMUNITY_Package TSConfig|Package TSConfig]] +- [[_COMMUNITY_Package TSConfig|Package TSConfig]] +- [[_COMMUNITY_Package TSConfig|Package TSConfig]] +- [[_COMMUNITY_Package TSConfig|Package TSConfig]] +- [[_COMMUNITY_Package TSConfig|Package TSConfig]] +- [[_COMMUNITY_Package TSConfig|Package TSConfig]] +- [[_COMMUNITY_Vite Asset|Vite Asset]] +- [[_COMMUNITY_Sentry Observability|Sentry Observability]] +- [[_COMMUNITY_Agent Governance|Agent Governance]] +- [[_COMMUNITY_Drizzle Client|Drizzle Client]] +- [[_COMMUNITY_HTML Security Metadata|HTML Security Metadata]] +- [[_COMMUNITY_Playwright Config|Playwright Config]] +- [[_COMMUNITY_Admin E2E Tests|Admin E2E Tests]] +- [[_COMMUNITY_Neon Migration|Neon Migration]] +- [[_COMMUNITY_Railway Topology|Railway Topology]] +- [[_COMMUNITY_Staging Isolation|Staging Isolation]] +- [[_COMMUNITY_Cutover Plan|Cutover Plan]] +- [[_COMMUNITY_Cross Origin E2E|Cross Origin E2E]] +- [[_COMMUNITY_Health E2E|Health E2E]] +- [[_COMMUNITY_Selections Hook|Selections Hook]] +- [[_COMMUNITY_Auth Client Exports|Auth Client Exports]] +- [[_COMMUNITY_README Deployment Docs|README Deployment Docs]] +- [[_COMMUNITY_Registry Expansion|Registry Expansion]] +- [[_COMMUNITY_Post MVP Roadmap|Post MVP Roadmap]] + +## God Nodes (most connected - your core abstractions) +1. `Tool` - 50 edges +2. `Tool` - 39 edges +3. `Diagnostic` - 22 edges +4. `CategoryId` - 21 edges +5. `CatalogLoader` - 20 edges +6. `generateExport()` - 15 edges +7. `Diagnostic` - 15 edges +8. `ToolId` - 14 edges +9. `evaluateRulesSync()` - 13 edges +10. `Rule` - 13 edges + +## Surprising Connections (you probably didn't know these) +- `Canonical API Surface` --semantically_similar_to--> `Public MVP API Surface` [INFERRED] [semantically similar] + Stackfast2026 implementation plan.md → readme.md +- `packages/* Workspace Package Pattern` --references--> `packages/registry Catalog Loading and Validation` [INFERRED] + pnpm-workspace.yaml → readme.md +- `Unified API Endpoints` --semantically_similar_to--> `Public MVP API Surface` [INFERRED] [semantically similar] + docs/backlog/INTEGRATION_PLAN.md → readme.md +- `Verification Plan` --semantically_similar_to--> `Testing and Quality Gate` [INFERRED] [semantically similar] + Stackfast2026 implementation plan.md → readme.md +- `AI-Assisted Architecture and Starter-Stack Copilot Product Vision` --semantically_similar_to--> `Explainable Stack Intelligence Platform` [INFERRED] [semantically similar] + ROADMAP.md → Stackfast2026.md + +## Import Cycles +- None detected. + +## Hyperedges (group relationships) +- **Rebuild Execution Model** — agents_orchestrator, agents_cleanup_agent, agents_architect_agent, agents_engine_agent, agents_api_agent, agents_ui_agent, agents_qa_agent [EXTRACTED 1.00] +- **Phase 8 Operational Architecture** — kiro_specs_phase_8_deployment_design_railway_service_topology, kiro_specs_phase_8_deployment_design_cross_origin_cookie_flow, kiro_specs_phase_8_deployment_design_rate_limit_module, kiro_specs_phase_8_deployment_design_sentry_observability, kiro_specs_phase_8_deployment_design_migration_one_shot, kiro_specs_phase_8_deployment_design_deploy_smoke_script [EXTRACTED 1.00] +- **AI Explanation Fallback Chain** — docs_decisions_002_ai_provider_strategy_azure_openai_provider, docs_decisions_002_ai_provider_strategy_gemini_provider, docs_decisions_002_ai_provider_strategy_heuristic_provider, docs_decisions_002_ai_provider_strategy_fallback_explainer, docs_decisions_002_ai_provider_strategy_zod_validation [EXTRACTED 1.00] +- **Vite Logo Composition** — apps_web_public_vite_vite_logo, apps_web_public_vite_blue_purple_gradient, apps_web_public_vite_yellow_orange_gradient, apps_web_public_vite_yellow_lightning_bolt [INFERRED 0.85] + +## Communities (99 total, 13 thin omitted) + +### Community 0 - "Web Visualization Components" +Cohesion: 0.06 +Nodes (55): AlternativesComparison(), AlternativesComparisonProps, ArchitecturePreview(), ArchitecturePreviewProps, BlueprintOutputCard(), CostEstimator(), CostEstimatorProps, ImplementationRoadmap() (+47 more) + +### Community 1 - "Domain Schemas" +Cohesion: 0.03 +Nodes (67): AppliedRecipe, AppliedRecipeSchema, BaseRuleSchema, BlueprintAlternative, BlueprintAlternativeSchema, BlueprintCostEstimateSchema, BlueprintResponse, BlueprintResponseSchema (+59 more) + +### Community 2 - "API Contract Tests" +Cohesion: 0.07 +Nodes (33): buildApp(), RequestableApp, BUCKET_NAMES, BucketConfig, BucketName, BUCKETS, HeaderLookup, readHeader() (+25 more) + +### Community 3 - "Web App Shell" +Cohesion: 0.05 +Nodes (39): App(), queryClient, AuthStatus(), Layout(), LayoutProps, useCatalog(), useCategories(), useCompatibility() (+31 more) + +### Community 4 - "Recipe Matching" +Cohesion: 0.06 +Nodes (34): getApplicableRecipes(), ExportError, suggestNearestCombination(), generateExport(), generateExportLog(), generateExportLogFile(), CATEGORY_ORDER, getMostRestrictiveVersion() (+26 more) + +### Community 5 - "API Blueprint Routes" +Cohesion: 0.05 +Nodes (37): aiProvider, app, Bindings, buildAlternatives(), catalogLoader, EnrichToolSchema, explainer, generateSafeExport() (+29 more) + +### Community 6 - "Export Generator" +Cohesion: 0.07 +Nodes (40): generateExport(), generateExportAsText(), generateExportLog(), suggestNearestCombination(), loader, CATEGORY_ORDER, mergeDocsLinks(), mergeEnvTargets() (+32 more) + +### Community 7 - "Web Dependencies" +Cohesion: 0.04 +Nodes (45): dependencies, better-auth, class-variance-authority, clsx, jszip, lucide-react, @radix-ui/react-collapsible, @radix-ui/react-dialog (+37 more) + +### Community 8 - "Diagnostics Model" +Cohesion: 0.10 +Nodes (34): DiagnosticCategory, DiagnosticCategorySchema, DiagnosticCTA, DiagnosticCTASchema, DiagnosticLevel, DiagnosticLevelSchema, DiagnosticSchema, isDiagnostic() (+26 more) + +### Community 9 - "Database Schema" +Cohesion: 0.05 +Nodes (38): account, compatibilities, compatibilitiesRelations, CompatibilityMatrix, CompatibilityRecord, InsertCompatibility, insertCompatibilitySchema, InsertMigrationPath (+30 more) + +### Community 10 - "API Dependencies" +Cohesion: 0.06 +Nodes (34): dependencies, better-auth, drizzle-orm, hono, @hono/node-server, @neondatabase/serverless, @sentry/node, @stackfast/ai (+26 more) + +### Community 11 - "Workspace Tooling" +Cohesion: 0.06 +Nodes (31): dependencies, @better-auth/infra, devDependencies, concurrently, dotenv-cli, eslint, @eslint/js, @playwright/test (+23 more) + +### Community 12 - "Worker Evaluation" +Cohesion: 0.15 +Nodes (19): evaluateRulesWithFallback(), getWorker(), terminateWorker(), evaluateCapabilityCompat(), evaluateCategoryCoverage(), evaluateHardConflict(), evaluateMutualExclusiveCategory(), evaluateRequiresTool() (+11 more) + +### Community 13 - "Rules Engine" +Cohesion: 0.14 +Nodes (22): evaluateCapabilityCompat(), evaluateCategoryCoverage(), evaluateHardConflict(), evaluateMutualExclusiveCategory(), evaluateRequiresTool(), evaluateRulesSync(), evaluateSynergy(), hasTool() (+14 more) + +### Community 14 - "Selection State" +Cohesion: 0.15 +Nodes (16): SelectionsContext, SelectionsContextValue, SelectionsProviderProps, SelectionsState, recipes, nextjsBaseRecipe, nextjsClerkRecipe, nextjsPrismaPostgresRecipe (+8 more) + +### Community 15 - "Toast UI" +Cohesion: 0.13 +Nodes (21): Toast, ToastAction, ToastActionElement, ToastClose, ToastDescription, ToastProps, ToastTitle, toastVariants (+13 more) + +### Community 16 - "Category Schema" +Cohesion: 0.10 +Nodes (20): Cardinality, CardinalitySchema, CategoryIdSchema, CategorySchema, isCategoryId(), isSuggestion(), SuggestionAction, SuggestionActionSchema (+12 more) + +### Community 17 - "Compatibility Score UI" +Cohesion: 0.16 +Nodes (17): CompatibilityScore(), CompatibilityScoreProps, getScoreBarColor(), getScoreColor(), getScoreLabel(), getScoreTextColor(), DiagnosticItem(), DiagnosticList() (+9 more) + +### Community 18 - "Export Dialog UI" +Cohesion: 0.17 +Nodes (15): errorMessage(), ExportDialog(), Badge(), BadgeProps, badgeVariants, DialogContent, DialogDescription, DialogFooter() (+7 more) + +### Community 19 - "Export State" +Cohesion: 0.17 +Nodes (15): ExportContext, ExportContextValue, ExportProvider(), ExportProviderProps, ExportState, useExportContext(), useExport(), UseExportResult (+7 more) + +### Community 20 - "Suggestions State" +Cohesion: 0.13 +Nodes (15): SuggestionsContext, SuggestionsContextValue, SuggestionsProvider(), SuggestionsProviderProps, useSuggestionsContext(), authDatabaseToPaymentsRule, databaseToOrmRule, frontendToDatabaseRule (+7 more) + +### Community 21 - "AI Dependencies" +Cohesion: 0.10 +Nodes (19): dependencies, ai, @ai-sdk/azure, @ai-sdk/google, @stackfast/schemas, @stackfast/shared, zod, devDependencies (+11 more) + +### Community 22 - "Schema Dependencies" +Cohesion: 0.10 +Nodes (19): dependencies, drizzle-orm, drizzle-zod, zod, devDependencies, @types/node, typescript, exports (+11 more) + +### Community 23 - "Exporter Dependencies" +Cohesion: 0.11 +Nodes (18): dependencies, @stackfast/schemas, @stackfast/shared, zod, devDependencies, tsx, typescript, main (+10 more) + +### Community 24 - "Registry Validation" +Cohesion: 0.16 +Nodes (12): CatalogValidationError, CatalogValidationResult, CategoryArraySchema, collectDuplicateIds(), defaultCatalog, enrichToolMetadata(), loadDefaultCatalog(), RuleArraySchema (+4 more) + +### Community 25 - "Database Seeding" +Cohesion: 0.16 +Nodes (5): CatalogData, CatalogLoader, Catalog, Category, Rule + +### Community 26 - "Error Boundary" +Cohesion: 0.14 +Nodes (10): ErrorBoundary, ErrorBoundaryProps, ErrorBoundaryState, Button, ButtonProps, buttonVariants, SelectionsProvider(), useStackBuilderCatalog() (+2 more) + +### Community 27 - "API Package Dependencies" +Cohesion: 0.11 +Nodes (17): dependencies, @stackfast/registry, @stackfast/rules-engine, @stackfast/schemas, @stackfast/shared, devDependencies, typescript, main (+9 more) + +### Community 28 - "Shadcn Components Config" +Cohesion: 0.12 +Nodes (16): aliases, components, hooks, lib, ui, utils, rsc, $schema (+8 more) + +### Community 29 - "Rules Package Dependencies" +Cohesion: 0.12 +Nodes (16): dependencies, @stackfast/registry, @stackfast/schemas, @stackfast/shared, devDependencies, typescript, main, name (+8 more) + +### Community 30 - "Migration CLI" +Cohesion: 0.21 +Nodes (13): CliArgs, ConnectionTarget, errorLog(), log(), main(), parseArgs(), probeOnce(), REPO_ROOT (+5 more) + +### Community 31 - "Smoke Tests" +Cohesion: 0.24 +Nodes (16): AssertionResult, burst(), checkAdmin401(), checkCorsEvilOrigin(), checkCorsSameOrigin(), checkGenerationBurst(), checkHealth(), checkReadBurst() (+8 more) + +### Community 32 - "Product Navigation" +Cohesion: 0.20 +Nodes (16): Engine Agent, UI Agent, Compatibility-Aware Search, Migration Paths, apps/web React Vite Web App, Monorepo Architecture, packages/exporter Scaffold Generation, packages/registry Catalog Loading and Validation (+8 more) + +### Community 33 - "Rule Schemas" +Cohesion: 0.19 +Nodes (15): BaseRule, BaseRuleSchema, CapabilityCompatRule, CapabilityCompatRuleSchema, CategoryCoverageRuleSchema, HardConflictRule, HardConflictRuleSchema, isRule() (+7 more) + +### Community 34 - "Workspace Architecture" +Cohesion: 0.15 +Nodes (14): Architect Agent, Package Dependency Graph, apps/* Workspace Package Pattern, packages/* Workspace Package Pattern, pnpm Workspaces, apps/api Hono API Server, Phase 1 Monorepo Scaffold, Root App Salvage Sources (+6 more) + +### Community 35 - "Smart Suggestions" +Cohesion: 0.26 +Nodes (11): ScoreBreakdown, getPriorityLabel(), getPriorityVariant(), SmartSuggestion(), SmartSuggestionProps, StackBuilder(), Toaster(), useSelectionsContext() (+3 more) + +### Community 36 - "Evaluation State" +Cohesion: 0.29 +Nodes (11): EvaluationContext, EvaluationContextValue, EvaluationProvider(), EvaluationProviderProps, EvaluationState, useEvaluationContext(), buildEvaluationResultFromApi(), diagnosticsFromApiResponse() (+3 more) + +### Community 37 - "Deployment Architecture" +Cohesion: 0.18 +Nodes (14): ADR-003 Deployment Architecture, Railway Secrets and Configuration, Sentry Feature Flag, Split Web and API Railway Services, Phase 8 Deployment Design, Phase 8 Requirements, Batch E Env Example and README, Task Dependency Graph (+6 more) + +### Community 38 - "Auth Service" +Cohesion: 0.24 +Nodes (11): isDatabaseAvailable(), AuthBindings, AuthVariables, buildAuthOptions(), canBypassAuthForLocalDev(), createAuth(), getAuth(), isProduction() (+3 more) + +### Community 39 - "Catalog Loader" +Cohesion: 0.23 +Nodes (12): CachedCatalog, getCachedCatalog(), hasCachedCatalog(), loadCatalog(), loadCatalogFile(), loadManifest(), Manifest, ManifestSchema (+4 more) + +### Community 40 - "Package Metadata" +Cohesion: 0.15 +Nodes (12): devDependencies, typescript, main, name, private, scripts, lint, test (+4 more) + +### Community 41 - "Neon Postgres" +Cohesion: 0.18 +Nodes (12): Neon Branching, Neon Connection Pooling, Neon Documentation Source of Truth, Neon Auth, Neon Serverless Postgres, Neon Scale to Zero, Neon Serverless Driver, Auth Data Ownership (+4 more) + +### Community 42 - "API Client Types" +Cohesion: 0.17 +Nodes (9): BlueprintOutputCardProps, ApiError, ApiErrorData, BlueprintRequest, CompatibilityResponse, EnhancedBlueprintResponse, MigrationResponse, ScaffoldResponse (+1 more) + +### Community 43 - "Web TSConfig" +Cohesion: 0.17 +Nodes (11): compilerOptions, allowImportingTsExtensions, jsx, lib, moduleResolution, noEmit, paths, types (+3 more) + +### Community 44 - "Backlog Integration" +Cohesion: 0.17 +Nodes (12): PostgreSQL and Firestore Database Strategy, Historical Integration Plan, Tool Profile Unification, Worker Enrichment Pipeline, Internal-Only WebAILyzer Service, Orphaned WebAILyzer Submodule Gitlink, WebAILyzer Pre-Integration Checklist, WebAILyzer Deferred (+4 more) + +### Community 45 - "Category Section UI" +Cohesion: 0.33 +Nodes (8): CategorySection(), CategorySectionProps, ExportDialogProps, formatDate(), isDataStale(), ToolSelector(), ToolSelectorProps, TooltipContent + +### Community 46 - "Production Auth Flow" +Cohesion: 0.18 +Nodes (11): GitHub OAuth, Cookie and CORS Strategy, Production Auth Fail-Closed Guard, Cross-Origin Cookie Round Trip, Deploy Smoke Script, Requirement 11 Auth Fails Closed in Production, Requirement 3 Better Auth GitHub OAuth in Production, Requirement 10 CORS and Cross-Origin Policy (+3 more) + +### Community 47 - "AI Provider Strategy" +Cohesion: 0.22 +Nodes (11): ADR-002 AI Provider Strategy, Azure OpenAI Provider, BlueprintExplainer Interface, FallbackExplainer, Gemini AI Provider, Heuristic AI Provider, AI Response Zod Validation, Failure Modes and Fail-Open Fail-Closed Matrix (+3 more) + +### Community 48 - "Base TSConfig" +Cohesion: 0.18 +Nodes (10): compilerOptions, esModuleInterop, forceConsistentCasingInFileNames, isolatedModules, module, moduleResolution, resolveJsonModule, skipLibCheck (+2 more) + +### Community 49 - "CI Quality Gate" +Cohesion: 0.20 +Nodes (10): QA Agent, CI Workflow, Playwright E2E Step, Type Check Lint Build Test Steps, Validate Registry Step, validate Job, Batch I Post-Deploy Cleanup, Phase 7 Quality Gate (+2 more) + +### Community 50 - "Compatibility Heatmap" +Cohesion: 0.28 +Nodes (6): CompatibilityHeatmap(), CompatibilityHeatmapProps, HeatmapCell, HeatmapCellView(), scoreToClass(), CategoryId + +### Community 51 - "Catalog Schemas" +Cohesion: 0.31 +Nodes (8): StackBuilderProps, Catalog, CatalogManifest, CatalogManifestSchema, isCatalogManifest(), Category, Rule, EvaluatePayload + +### Community 52 - "Rollback Strategy" +Cohesion: 0.25 +Nodes (9): Deployment Rollback Strategy, Requirement 12 Rollback Procedure, Manual Forward-Migration Intervention, Rollback Runbook, Schema Compatibility Gate, Post-Rollback Smoke Test Verification, stackfast-api Rollback, stackfast-web Rollback (+1 more) + +### Community 53 - "Public API Surface" +Cohesion: 0.32 +Nodes (8): API Agent, Unified API Endpoints, Public MVP API Surface, Testing and Quality Gate, Stackfast 2026, Phase 3 Clean API Surface, Canonical API Surface, Verification Plan + +### Community 54 - "Registry Manifest" +Cohesion: 0.25 +Nodes (7): etag, files, categories, rules, tools, updatedAt, version + +### Community 55 - "Worker Protocol" +Cohesion: 0.32 +Nodes (7): EvaluatePayloadSchema, EvaluationResultSchema, isWorkerReq(), isWorkerRes(), ScoreBreakdownSchema, WorkerReqSchema, WorkerResSchema + +### Community 56 - "Rate Limiting" +Cohesion: 0.36 +Nodes (8): Upstash Redis Rate Limiting, Memory Rate Limit Backend, RateLimitBackend Interface, apps/api Rate Limit Module, Rate Limiter Migration Plan, Upstash Rate Limit Backend, Requirement 4 Upstash Redis Rate Limiter, Batch A Rate Limiter Module + +### Community 57 - "Rules Manifest" +Cohesion: 0.25 +Nodes (7): etag, files, categories, rules, tools, updatedAt, version + +### Community 58 - "Admin Security" +Cohesion: 0.29 +Nodes (7): Admin API Key Protection, ADR-001 Authentication Strategy, Stack Auth via Neon Auth, SSRF Hardening Requirement, Requirement 8 Admin API Key Enforcement, Admin-Only Mutations Rule, Public Mutation Routes Risk + +### Community 59 - "Cleanup Salvage" +Cohesion: 0.33 +Nodes (6): Cleanup Agent, Phase 0 Freeze and Preserve, Salvage Manifest, Branches/StackfastPro Primary Base, WebAILyzer Deferred Preservation, Branches/StackfastPro Candidate + +### Community 60 - "Package TSConfig" +Cohesion: 0.33 +Nodes (5): compilerOptions, outDir, rootDir, extends, include + +### Community 61 - "Package TSConfig" +Cohesion: 0.33 +Nodes (5): compilerOptions, outDir, rootDir, extends, include + +### Community 62 - "Package TSConfig" +Cohesion: 0.33 +Nodes (5): compilerOptions, outDir, rootDir, extends, include + +### Community 63 - "Package TSConfig" +Cohesion: 0.33 +Nodes (5): compilerOptions, outDir, rootDir, extends, include + +### Community 64 - "Package TSConfig" +Cohesion: 0.33 +Nodes (5): compilerOptions, outDir, rootDir, extends, include + +### Community 65 - "Package TSConfig" +Cohesion: 0.33 +Nodes (5): compilerOptions, outDir, rootDir, extends, include + +### Community 66 - "Package TSConfig" +Cohesion: 0.33 +Nodes (5): compilerOptions, outDir, rootDir, extends, include + +### Community 67 - "Vite Asset" +Cohesion: 0.40 +Nodes (5): Blue Purple Gradient, Iconify Logo Asset, Vite Logo, Yellow Lightning Bolt, Yellow Orange Gradient + +### Community 68 - "Sentry Observability" +Cohesion: 0.40 +Nodes (5): Rate Limit Fail-Open Wrapper, Phase 8 Property-Based Tests, Sentry Observability Wiring, Requirement 7 Sentry Feature-Flagged Error Tracking, Batch B Sentry Wiring + +### Community 69 - "Agent Governance" +Cohesion: 0.50 +Nodes (4): Agent Workflow Specification, Agent Handoff Protocol, Orchestrator, Phase Gate Criteria + +### Community 70 - "Drizzle Client" +Cohesion: 0.67 +Nodes (3): createDrizzle(), Db, getDb() + +### Community 71 - "HTML Security Metadata" +Cohesion: 0.50 +Nodes (4): Content Security Policy, Security Meta Headers, SEO Metadata, StackFast Web HTML Entry + +## Knowledge Gaps +- **541 isolated node(s):** `name`, `version`, `private`, `type`, `dev` (+536 more) + These have ≤1 connection - possible missing edges or undocumented components. +- **13 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes. + +## Suggested Questions +_Questions this graph is uniquely positioned to answer:_ + +- **Why does `useToast()` connect `Smart Suggestions` to `Web Dependencies`, `Toast UI`?** + _High betweenness centrality (0.049) - this node is a cross-community bridge._ +- **Why does `react` connect `Web Dependencies` to `Smart Suggestions`?** + _High betweenness centrality (0.048) - this node is a cross-community bridge._ +- **What connects `name`, `version`, `private` to the rest of the system?** + _547 weakly-connected nodes found - possible documentation gaps or missing edges._ +- **Should `Web Visualization Components` be split into smaller, more focused modules?** + _Cohesion score 0.05709507883420927 - nodes in this community are weakly interconnected._ +- **Should `Domain Schemas` be split into smaller, more focused modules?** + _Cohesion score 0.029411764705882353 - nodes in this community are weakly interconnected._ +- **Should `API Contract Tests` be split into smaller, more focused modules?** + _Cohesion score 0.07291666666666667 - nodes in this community are weakly interconnected._ +- **Should `Web App Shell` be split into smaller, more focused modules?** + _Cohesion score 0.0546448087431694 - nodes in this community are weakly interconnected._ \ No newline at end of file diff --git a/graphify-out/GRAPH_TRACE_REPORT.md b/graphify-out/GRAPH_TRACE_REPORT.md new file mode 100644 index 0000000..9097744 --- /dev/null +++ b/graphify-out/GRAPH_TRACE_REPORT.md @@ -0,0 +1,250 @@ +# Stackfast 2026 Graph Trace Report + +Generated: 2026-07-03 + +Scope: `H:\Stackfast-2026` + +## Run Summary + +- Corpus: 211 supported files, approximately 118,390 words. +- Skipped sensitive files: 1 file skipped by graphify detection; file name intentionally not listed. +- Graph: 1,454 nodes, 2,593 post-build edges, 99 communities. +- Extraction mix: 99% EXTRACTED, 1% INFERRED, 0% AMBIGUOUS. +- Token cost recorded by graphify: 0 input, 0 output. +- Note: semantic extraction was performed through host subagents, but the task runner did not expose usage metadata back into graphify chunk JSON, so the graphify cost tracker records zero. + +## Outputs + +- `graphify-out/graph.html`: interactive graph visualization. +- `graphify-out/graph.json`: GraphRAG-ready graph data. +- `graphify-out/GRAPH_REPORT.md`: graphify's plain-language audit report. +- `graphify-out/GRAPH_TRACE_REPORT.md`: this synthesized trace report. +- `graphify-out/queries/q01-use-toast.txt`: raw traversal for `useToast()` bridge. +- `graphify-out/queries/q02-react-bridge.txt`: raw traversal for `react` bridge. +- `graphify-out/queries/q03-package-metadata.txt`: raw traversal for package metadata weak nodes. +- `graphify-out/queries/q04-web-visualization-split.txt`: raw traversal for Web Visualization split question. +- `graphify-out/queries/q05-domain-schemas-split.txt`: raw traversal for Domain Schemas split question. +- `graphify-out/queries/q06-api-contract-tests-split.txt`: raw traversal for API Contract Tests split question. +- `graphify-out/queries/q07-web-app-shell-split.txt`: raw traversal for Web App Shell split question. + +## Integrity Notes + +Graph health warning from the read-only diagnostic: + +- 485 dangling-endpoint edges. +- 74 collapsed directed edges. +- 77 collapsed undirected edges. +- Same-endpoint groups were mostly import/re-export variants, especially index barrel files such as `apps/api/src/rate-limit/index.ts` and `apps/web/src/components/index.ts`. + +Interpretation: the graph is usable for navigation and architecture discovery, but not perfect as a precise dependency graph. Treat findings as directional until dangling endpoints are reduced in a future rebuild or graphify extraction pass. + +## Core Map + +The highest-degree abstractions are the project's real integration points: + +- `Tool`: appears as the central schema/data abstraction across registry, rules, exporter, API, UI, and AI flows. +- `Diagnostic`: bridges rules-engine output, UI rendering, API responses, and export/blueprint explanation paths. +- `CategoryId`, `ToolId`, and `Rule`: define the compatibility and selection vocabulary. +- `CatalogLoader`: anchors registry loading, validation, seeding, and downstream API use. +- `generateExport()`: anchors scaffold generation and recipe/export behavior. +- `evaluateRulesSync()`: anchors rules-engine scoring and deterministic evaluation. + +The strongest functional regions are: + +- Core engine: `Domain Schemas`, `Rules Engine`, `Export Generator`, `Recipe Matching`, `Registry Validation`, `Catalog Loader`, and `Database Schema`. +- API and operations: `API Blueprint Routes`, `Public API Surface`, `API Contract Tests`, `Rate Limiting`, `Auth Service`, `Deployment Architecture`, `Production Auth Flow`, `Admin Security`, and `Rollback Strategy`. +- Web UI: `Web App Shell`, `Web Visualization Components`, `Smart Suggestions`, `Toast UI`, `Compatibility Score UI`, `Export Dialog UI`, and state contexts. +- Planning/docs: `Agent Governance`, `Workspace Architecture`, `Cleanup Salvage`, `Backlog Integration`, `Neon Postgres`, and ADR communities. + +## Traced Questions + +### 1. Why does `useToast()` connect Smart Suggestions to Web Dependencies and Toast UI? + +Raw trace: `graphify-out/queries/q01-use-toast.txt` + +Answer: `useToast()` is a legitimate UI bridge, not an accidental domain dependency. The traversal starts at `useToast()` in `apps/web/src/hooks/use-toast.ts:L172`, then crosses `Smart Suggestions`, `Toast UI`, and `Web Dependencies` through React UI wiring. + +Evidence: + +- `useToast()` lives in `apps/web/src/hooks/use-toast.ts:L172`. +- Toast implementation nodes live in `apps/web/src/hooks/use-toast.ts`, `apps/web/src/components/ui/toast.tsx`, and `apps/web/src/components/ui/toaster.tsx`. +- Smart suggestion nodes include `apps/web/src/components/SmartSuggestion.tsx:L1`, `SmartSuggestion()` at `L25`, `getPriorityVariant()` at `L152`, and `getPriorityLabel()` at `L166`. +- `react` appears as a package dependency in `apps/web/package.json:L32`, and the graph sees a reference edge from `react` to `useToast()`. + +Conclusion: this bridge is expected. It means the suggestion UI can surface feedback through the toast system. The only risk is that toast feedback can become a hidden global UI channel if every feature uses it without a UX pattern. + +Recommendation: document toast usage as a UI feedback primitive and keep business/rules logic out of `use-toast.ts`. + +### 2. Why does `react` connect Web Dependencies to Smart Suggestions? + +Raw trace: `graphify-out/queries/q02-react-bridge.txt` + +Answer: this is a package-level dependency bridge, not a business-domain bridge. `react` is part of `apps/web/package.json:L32`; Smart Suggestions and the toast hook are React components/hooks, so they naturally connect through the dependency node. + +Evidence: + +- `react` is in `apps/web/package.json:L32`. +- `SmartSuggestion.tsx` is in `apps/web/src/components/SmartSuggestion.tsx:L1`. +- `StackBuilder.tsx` is in `apps/web/src/components/StackBuilder.tsx:L1` and `StackBuilder()` at `L38`. +- `useToast()` is in `apps/web/src/hooks/use-toast.ts:L172`. + +Conclusion: this bridge is low concern. It is mostly an artifact of including `package.json` dependency nodes in the graph. + +Recommendation: if future graph runs should focus on architecture rather than package metadata, filter or down-rank package manifest fields during analysis. + +### 3. What connects `name`, `version`, and `private` to the rest of the system? + +Raw trace: `graphify-out/queries/q03-package-metadata.txt` + +Answer: these nodes are structural package manifest fields, connected only through `package.json` documents. + +Evidence: + +- Root package metadata appears in `package.json:L1-L7`. +- API package metadata appears in `apps/api/package.json:L1-L5`. +- Web package metadata appears in `apps/web/package.json:L1-L5`. +- Their primary neighbors are `package.json`, `scripts`, `dependencies`, `devDependencies`, `engines`, and `packageManager`. + +Conclusion: these are not architecture gaps. They are weakly connected because manifest scalar fields are not concepts or modules. + +Recommendation: treat these as benign noise. If the goal is a cleaner knowledge graph, configure a later graph pass to suppress low-value scalar manifest nodes such as `name`, `version`, `private`, and `type`. + +### 4. Should Web Visualization Components be split into smaller modules? + +Raw trace: `graphify-out/queries/q04-web-visualization-split.txt` + +Direct graph analysis says: yes conceptually, but the community label is misleading. This community combines blueprint UI components with AI provider contracts and shared schema nodes because they all touch blueprint/diagnostic/tool concepts. + +Metrics: + +- Size: 92 nodes. +- Cohesion: 0.05709507883420927. +- Internal edges: 239. +- External edges: 58. +- Top source files by node count: `packages/ai/src/index.ts`, `packages/ai/src/providers/azure-openai.ts`, `packages/ai/src/providers/gemini.ts`, `packages/ai/src/schemas.ts`, `packages/ai/src/types.ts`. +- Top bridge nodes: `Tool`, `Diagnostic`, `index.ts`, `BlueprintOutputCard.tsx`, and AI provider modules. + +Interpretation: this is not purely a UI component cluster. It is a cross-cutting blueprint/explanation cluster spanning `packages/ai`, `packages/schemas`, and `apps/web` output components. + +Recommendation: + +- Keep UI presentation files separate from AI provider contracts. +- Make the seam explicit: `packages/schemas` owns blueprint shape, `packages/ai` owns explanation generation, and `apps/web` owns rendering. +- Consider adding a short architecture doc for the blueprint pipeline so graphify does not need to infer this cross-layer relationship from imports alone. + +### 5. Should Domain Schemas be split into smaller modules? + +Raw trace: `graphify-out/queries/q05-domain-schemas-split.txt` + +Answer: yes. This is the strongest split signal in the graph. + +Metrics: + +- Size: 68 nodes. +- Cohesion: 0.029411764705882353. +- Source concentration: all 68 nodes are in `packages/schemas/src/domain.ts`. +- `domain.ts` has degree 109. +- External communities: `Rules Engine`, `Web Visualization Components`, `API Client Types`, `Export Generator`, `API Blueprint Routes`, and `Database Seeding`. + +Interpretation: `domain.ts` is a schema mega-module. It is doing too much because it holds tool schemas, category schemas, rule schemas, recipe/export schemas, diagnostics, blueprint response schemas, and AI-adjacent output types. + +Recommendation: + +- Split `packages/schemas/src/domain.ts` by domain boundary. +- Candidate files: `tool.ts`, `category.ts`, `rule.ts`, `diagnostic.ts`, `recipe.ts`, `blueprint.ts`, `api.ts`, and `database.ts` if needed. +- Keep `packages/schemas/src/index.ts` as the public barrel export so downstream imports do not churn unnecessarily. +- After splitting, rerun graphify and expect this community to divide into smaller, higher-cohesion schema communities. + +### 6. Should API Contract Tests be split into smaller modules? + +Raw trace: `graphify-out/queries/q06-api-contract-tests-split.txt` + +Answer: probably yes, but the community is really a rate-limiting plus app-test cluster. + +Metrics: + +- Size: 64 nodes. +- Cohesion: 0.07291666666666667. +- Internal edges: 147. +- External edges: 8. +- Top files: `apps/api/src/rate-limit/upstash.ts`, `apps/api/src/rate-limit/index.ts`, `apps/api/src/rate-limit/buckets.ts`, `apps/api/src/rate-limit/fail-open.ts`, `apps/api/src/rate-limit/fail-open.test.ts`, `apps/api/src/app.test.ts`, and `apps/api/src/app.pbt.test.ts`. +- External links mostly go to `API Blueprint Routes` through app construction and middleware integration. + +Interpretation: app-level API tests import rate-limit internals heavily enough that graphify grouped tests with implementation modules. That can be fine for focused middleware tests, but it weakens contract-test clarity. + +Recommendation: + +- Keep low-level rate-limit tests beside `apps/api/src/rate-limit/*`. +- Keep endpoint contract tests focused on request/response behavior and avoid depending directly on rate-limit backend internals where possible. +- If internal reset hooks are needed, expose a small test harness instead of importing many implementation details into app-level tests. + +### 7. Should Web App Shell be split into smaller modules? + +Raw trace: `graphify-out/queries/q07-web-app-shell-split.txt` + +Answer: yes at the feature-boundary level, not necessarily at the shell-file level. + +Metrics: + +- Size: 61 nodes. +- Cohesion: 0.0546448087431694. +- Internal edges: 100. +- External edges: 34. +- Top files: `apps/web/src/pages/BlueprintBuilder.tsx`, `apps/web/src/hooks/useApi.ts`, `apps/web/src/pages/CompatibilityView.tsx`, `apps/web/src/lib/sentry.ts`, and `apps/web/src/App.tsx`. +- External communities: `Error Boundary`, `API Client Types`, `Web Visualization Components`, `Export Dialog UI`, `Export State`, and `Compatibility Heatmap`. + +Interpretation: `App.tsx` and route pages are acting as a broad integration surface. The graph also shows `useApi.ts` as a cross-feature bridge, which is expected but worth controlling. + +Recommendation: + +- Preserve `App.tsx` as routing/shell only. +- Move route-specific API composition closer to the route or into feature hooks. +- Consider feature directories for blueprint builder, compatibility view, migration explorer, and catalog pages. +- Keep shared API client types in `apps/web/src/lib/api-client.ts` or a shared package, but avoid allowing `useApi.ts` to become a catch-all feature service. + +## Additional Cross-Cutting Findings + +### Deployment, Auth, Rate Limiting, and Rollback Are Properly Linked + +The deployment communities connect across docs and implementation planning: + +- `ADR-003 Deployment Architecture` bridges rollback, CI quality, production auth flow, and Neon Postgres. +- `Production Auth Flow` connects GitHub OAuth, CORS, cross-origin cookies, fail-closed production auth, deploy smoke checks, and admin security. +- `Rate Limiting` connects Upstash Redis, memory fallback, fail-open behavior, and Sentry observability. +- `Admin Security` connects ADR-001, admin API key protection, SSRF hardening, and historical public mutation route risks. + +This is a healthy graph signal: operational risks are documented across ADRs, requirements, task plans, and smoke tests. + +### Public API Surface Is Consistent Across Planning Docs + +The graph found semantic similarity among: + +- `Canonical API Surface` from `Stackfast2026 implementation plan.md`. +- `Public MVP API Surface` from `readme.md`. +- `Unified API Endpoints` from `docs/backlog/INTEGRATION_PLAN.md`. + +This suggests the intended API shape has remained consistent from backlog planning through README documentation. + +### AI Provider Strategy Is Well-Seamed + +The graph hyperedge `AI Explanation Fallback Chain` connects Azure OpenAI, Gemini, heuristic provider, fallback explainer, and Zod validation. This aligns with `docs/decisions/002-ai-provider-strategy.md` and indicates a clean provider abstraction. + +The main concern is not provider design; it is the schema concentration in `packages/schemas/src/domain.ts` that all providers and UI outputs depend on. + +## Prioritized Recommendations + +1. Split `packages/schemas/src/domain.ts` into focused schema modules while preserving the public barrel export. +2. Add a short blueprint pipeline architecture note that explains the seam between schema shape, AI explanation generation, export generation, and UI rendering. +3. Separate app-level API contract tests from rate-limit implementation tests where the current tests import too many rate-limit internals. +4. Keep `App.tsx` as shell/routing only and move route-specific API orchestration into feature-level hooks or modules. +5. Treat package metadata nodes as graph noise; suppress or down-rank scalar manifest fields in future graph runs. +6. Rebuild graphify after the schema split and compare community cohesion for `Domain Schemas`, `Web Visualization Components`, and `Web App Shell`. +7. Investigate graph health warnings if graph precision matters for automated dependency analysis; dangling and collapsed edges mean this run is best used as an architecture map, not a strict call graph. + +## Most Valuable Follow-Up Trace + +The graph's most valuable architectural question is: + +> Should `Domain Schemas` be split into smaller, more focused modules? + +Reason: this question has the lowest cohesion score and points to a concrete code boundary (`packages/schemas/src/domain.ts`) with many downstream consumers across rules, exporter, API, AI, and UI. It is the clearest refactoring opportunity surfaced by the graph. diff --git a/graphify-out/cache/ast/v0.9.4/031b00fcfc765de3f775c27badb8b6b1cfda8927e10700095de13258e6c51fc4.json b/graphify-out/cache/ast/v0.9.4/031b00fcfc765de3f775c27badb8b6b1cfda8927e10700095de13258e6c51fc4.json new file mode 100644 index 0000000..f8e77e5 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.4/031b00fcfc765de3f775c27badb8b6b1cfda8927e10700095de13258e6c51fc4.json @@ -0,0 +1 @@ +{"nodes": [{"id": "h_stackfast_2026_packages_registry_package_json", "label": "package.json", "file_type": "code", "source_file": "packages/registry/package.json", "source_location": "L1"}, {"id": "h_stackfast_2026_packages_registry_package_name", "label": "name", "file_type": "code", "source_file": "packages/registry/package.json", "source_location": "L2"}, {"id": "h_stackfast_2026_packages_registry_package_version", "label": "version", "file_type": "code", "source_file": "packages/registry/package.json", "source_location": "L3"}, {"id": "h_stackfast_2026_packages_registry_package_private", "label": "private", "file_type": "code", "source_file": "packages/registry/package.json", "source_location": "L4"}, {"id": "h_stackfast_2026_packages_registry_package_type", "label": "type", "file_type": "code", "source_file": "packages/registry/package.json", "source_location": "L5"}, {"id": "h_stackfast_2026_packages_registry_package_main", "label": "main", "file_type": "code", "source_file": "packages/registry/package.json", "source_location": "L6"}, {"id": "h_stackfast_2026_packages_registry_package_types", "label": "types", "file_type": "code", "source_file": "packages/registry/package.json", "source_location": "L7"}, {"id": "h_stackfast_2026_packages_registry_package_scripts", "label": "scripts", "file_type": "code", "source_file": "packages/registry/package.json", "source_location": "L8"}, {"id": "h_stackfast_2026_packages_registry_package_scripts_lint", "label": "lint", "file_type": "code", "source_file": "packages/registry/package.json", "source_location": "L9"}, {"id": "h_stackfast_2026_packages_registry_package_scripts_type_check", "label": "type-check", "file_type": "code", "source_file": "packages/registry/package.json", "source_location": "L10"}, {"id": "h_stackfast_2026_packages_registry_package_scripts_test", "label": "test", "file_type": "code", "source_file": "packages/registry/package.json", "source_location": "L11"}, {"id": "h_stackfast_2026_packages_registry_package_scripts_validate", "label": "validate", "file_type": "code", "source_file": "packages/registry/package.json", "source_location": "L12"}, {"id": "h_stackfast_2026_packages_registry_package_dependencies", "label": "dependencies", "file_type": "code", "source_file": "packages/registry/package.json", "source_location": "L14"}, {"id": "h_stackfast_2026_packages_registry_package_dependencies_stackfast_shared", "label": "@stackfast/shared", "file_type": "code", "source_file": "packages/registry/package.json", "source_location": "L15"}, {"id": "h_stackfast_2026_packages_registry_package_dependencies_stackfast_schemas", "label": "@stackfast/schemas", "file_type": "code", "source_file": "packages/registry/package.json", "source_location": "L16"}, {"id": "h_stackfast_2026_packages_registry_package_dependencies_zod", "label": "zod", "file_type": "code", "source_file": "packages/registry/package.json", "source_location": "L17"}, {"id": "h_stackfast_2026_packages_registry_package_devdependencies", "label": "devDependencies", "file_type": "code", "source_file": "packages/registry/package.json", "source_location": "L19"}, {"id": "h_stackfast_2026_packages_registry_package_devdependencies_tsx", "label": "tsx", "file_type": "code", "source_file": "packages/registry/package.json", "source_location": "L20"}, {"id": "h_stackfast_2026_packages_registry_package_devdependencies_typescript", "label": "typescript", "file_type": "code", "source_file": "packages/registry/package.json", "source_location": "L21"}], "edges": [{"source": "h_stackfast_2026_packages_registry_package_json", "target": "h_stackfast_2026_packages_registry_package_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/registry/package.json", "source_location": "L2", "weight": 1.0}, {"source": "h_stackfast_2026_packages_registry_package_json", "target": "h_stackfast_2026_packages_registry_package_version", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/registry/package.json", "source_location": "L3", "weight": 1.0}, {"source": "h_stackfast_2026_packages_registry_package_json", "target": "h_stackfast_2026_packages_registry_package_private", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/registry/package.json", "source_location": "L4", "weight": 1.0}, {"source": "h_stackfast_2026_packages_registry_package_json", "target": "h_stackfast_2026_packages_registry_package_type", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/registry/package.json", "source_location": "L5", "weight": 1.0}, {"source": "h_stackfast_2026_packages_registry_package_json", "target": "h_stackfast_2026_packages_registry_package_main", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/registry/package.json", "source_location": "L6", "weight": 1.0}, {"source": "h_stackfast_2026_packages_registry_package_json", "target": "h_stackfast_2026_packages_registry_package_types", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/registry/package.json", "source_location": "L7", "weight": 1.0}, {"source": "h_stackfast_2026_packages_registry_package_json", "target": "h_stackfast_2026_packages_registry_package_scripts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/registry/package.json", "source_location": "L8", "weight": 1.0}, {"source": "h_stackfast_2026_packages_registry_package_scripts", "target": "h_stackfast_2026_packages_registry_package_scripts_lint", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/registry/package.json", "source_location": "L9", "weight": 1.0}, {"source": "h_stackfast_2026_packages_registry_package_scripts", "target": "h_stackfast_2026_packages_registry_package_scripts_type_check", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/registry/package.json", "source_location": "L10", "weight": 1.0}, {"source": "h_stackfast_2026_packages_registry_package_scripts", "target": "h_stackfast_2026_packages_registry_package_scripts_test", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/registry/package.json", "source_location": "L11", "weight": 1.0}, {"source": "h_stackfast_2026_packages_registry_package_scripts", "target": "h_stackfast_2026_packages_registry_package_scripts_validate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/registry/package.json", "source_location": "L12", "weight": 1.0}, {"source": "h_stackfast_2026_packages_registry_package_json", "target": "h_stackfast_2026_packages_registry_package_dependencies", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/registry/package.json", "source_location": "L14", "weight": 1.0}, {"source": "h_stackfast_2026_packages_registry_package_dependencies", "target": "h_stackfast_2026_packages_registry_package_dependencies_stackfast_shared", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/registry/package.json", "source_location": "L15", "weight": 1.0}, {"source": "h_stackfast_2026_packages_registry_package_dependencies_stackfast_shared", "target": "stackfast_shared", "relation": "imports", "confidence": "EXTRACTED", "source_file": "packages/registry/package.json", "source_location": "L15", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_packages_registry_package_dependencies", "target": "h_stackfast_2026_packages_registry_package_dependencies_stackfast_schemas", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/registry/package.json", "source_location": "L16", "weight": 1.0}, {"source": "h_stackfast_2026_packages_registry_package_dependencies_stackfast_schemas", "target": "stackfast_schemas", "relation": "imports", "confidence": "EXTRACTED", "source_file": "packages/registry/package.json", "source_location": "L16", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_packages_registry_package_dependencies", "target": "h_stackfast_2026_packages_registry_package_dependencies_zod", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/registry/package.json", "source_location": "L17", "weight": 1.0}, {"source": "h_stackfast_2026_packages_registry_package_dependencies_zod", "target": "zod", "relation": "imports", "confidence": "EXTRACTED", "source_file": "packages/registry/package.json", "source_location": "L17", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_packages_registry_package_json", "target": "h_stackfast_2026_packages_registry_package_devdependencies", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/registry/package.json", "source_location": "L19", "weight": 1.0}, {"source": "h_stackfast_2026_packages_registry_package_devdependencies", "target": "h_stackfast_2026_packages_registry_package_devdependencies_tsx", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/registry/package.json", "source_location": "L20", "weight": 1.0}, {"source": "h_stackfast_2026_packages_registry_package_devdependencies_tsx", "target": "tsx", "relation": "imports", "confidence": "EXTRACTED", "source_file": "packages/registry/package.json", "source_location": "L20", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_packages_registry_package_devdependencies", "target": "h_stackfast_2026_packages_registry_package_devdependencies_typescript", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/registry/package.json", "source_location": "L21", "weight": 1.0}, {"source": "h_stackfast_2026_packages_registry_package_devdependencies_typescript", "target": "typescript", "relation": "imports", "confidence": "EXTRACTED", "source_file": "packages/registry/package.json", "source_location": "L21", "weight": 1.0, "context": "import"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.4/04d9856b88e94fb790375c53e8b3de9af3797846661301d145d206642b5ca2a3.json b/graphify-out/cache/ast/v0.9.4/04d9856b88e94fb790375c53e8b3de9af3797846661301d145d206642b5ca2a3.json new file mode 100644 index 0000000..bcbe0eb --- /dev/null +++ b/graphify-out/cache/ast/v0.9.4/04d9856b88e94fb790375c53e8b3de9af3797846661301d145d206642b5ca2a3.json @@ -0,0 +1 @@ +{"nodes": [{"id": "h_stackfast_2026_packages_exporter_tsconfig_json", "label": "tsconfig.json", "file_type": "code", "source_file": "packages/exporter/tsconfig.json", "source_location": "L1"}, {"id": "h_stackfast_2026_packages_exporter_tsconfig_extends", "label": "extends", "file_type": "code", "source_file": "packages/exporter/tsconfig.json", "source_location": "L2"}, {"id": "h_stackfast_2026_packages_exporter_tsconfig_compileroptions", "label": "compilerOptions", "file_type": "code", "source_file": "packages/exporter/tsconfig.json", "source_location": "L3"}, {"id": "h_stackfast_2026_packages_exporter_tsconfig_compileroptions_outdir", "label": "outDir", "file_type": "code", "source_file": "packages/exporter/tsconfig.json", "source_location": "L4"}, {"id": "h_stackfast_2026_packages_exporter_tsconfig_compileroptions_rootdir", "label": "rootDir", "file_type": "code", "source_file": "packages/exporter/tsconfig.json", "source_location": "L5"}, {"id": "h_stackfast_2026_packages_exporter_tsconfig_include", "label": "include", "file_type": "code", "source_file": "packages/exporter/tsconfig.json", "source_location": "L7"}], "edges": [{"source": "h_stackfast_2026_packages_exporter_tsconfig_json", "target": "h_stackfast_2026_packages_exporter_tsconfig_extends", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/exporter/tsconfig.json", "source_location": "L2", "weight": 1.0}, {"source": "h_stackfast_2026_packages_exporter_tsconfig_json", "target": "ref_tsconfig_base_json", "relation": "extends", "confidence": "EXTRACTED", "source_file": "packages/exporter/tsconfig.json", "source_location": "L2", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_packages_exporter_tsconfig_json", "target": "h_stackfast_2026_packages_exporter_tsconfig_compileroptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/exporter/tsconfig.json", "source_location": "L3", "weight": 1.0}, {"source": "h_stackfast_2026_packages_exporter_tsconfig_compileroptions", "target": "h_stackfast_2026_packages_exporter_tsconfig_compileroptions_outdir", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/exporter/tsconfig.json", "source_location": "L4", "weight": 1.0}, {"source": "h_stackfast_2026_packages_exporter_tsconfig_compileroptions", "target": "h_stackfast_2026_packages_exporter_tsconfig_compileroptions_rootdir", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/exporter/tsconfig.json", "source_location": "L5", "weight": 1.0}, {"source": "h_stackfast_2026_packages_exporter_tsconfig_json", "target": "h_stackfast_2026_packages_exporter_tsconfig_include", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/exporter/tsconfig.json", "source_location": "L7", "weight": 1.0}, {"source": "h_stackfast_2026_packages_exporter_tsconfig_include", "target": "ref_src", "relation": "extends", "confidence": "EXTRACTED", "source_file": "packages/exporter/tsconfig.json", "source_location": "L7", "weight": 1.0, "context": "import"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.4/05c6e1dfe9956b25e8e8415102d43f60c17c25987eb39374db91a229d602af83.json b/graphify-out/cache/ast/v0.9.4/05c6e1dfe9956b25e8e8415102d43f60c17c25987eb39374db91a229d602af83.json new file mode 100644 index 0000000..490aa4c --- /dev/null +++ b/graphify-out/cache/ast/v0.9.4/05c6e1dfe9956b25e8e8415102d43f60c17c25987eb39374db91a229d602af83.json @@ -0,0 +1 @@ +{"nodes": [{"id": "h_stackfast_2026_packages_rules_engine_package_json", "label": "package.json", "file_type": "code", "source_file": "packages/rules-engine/package.json", "source_location": "L1"}, {"id": "h_stackfast_2026_packages_rules_engine_package_name", "label": "name", "file_type": "code", "source_file": "packages/rules-engine/package.json", "source_location": "L2"}, {"id": "h_stackfast_2026_packages_rules_engine_package_version", "label": "version", "file_type": "code", "source_file": "packages/rules-engine/package.json", "source_location": "L3"}, {"id": "h_stackfast_2026_packages_rules_engine_package_private", "label": "private", "file_type": "code", "source_file": "packages/rules-engine/package.json", "source_location": "L4"}, {"id": "h_stackfast_2026_packages_rules_engine_package_type", "label": "type", "file_type": "code", "source_file": "packages/rules-engine/package.json", "source_location": "L5"}, {"id": "h_stackfast_2026_packages_rules_engine_package_main", "label": "main", "file_type": "code", "source_file": "packages/rules-engine/package.json", "source_location": "L6"}, {"id": "h_stackfast_2026_packages_rules_engine_package_types", "label": "types", "file_type": "code", "source_file": "packages/rules-engine/package.json", "source_location": "L7"}, {"id": "h_stackfast_2026_packages_rules_engine_package_scripts", "label": "scripts", "file_type": "code", "source_file": "packages/rules-engine/package.json", "source_location": "L8"}, {"id": "h_stackfast_2026_packages_rules_engine_package_scripts_lint", "label": "lint", "file_type": "code", "source_file": "packages/rules-engine/package.json", "source_location": "L9"}, {"id": "h_stackfast_2026_packages_rules_engine_package_scripts_type_check", "label": "type-check", "file_type": "code", "source_file": "packages/rules-engine/package.json", "source_location": "L10"}, {"id": "h_stackfast_2026_packages_rules_engine_package_scripts_test", "label": "test", "file_type": "code", "source_file": "packages/rules-engine/package.json", "source_location": "L11"}, {"id": "h_stackfast_2026_packages_rules_engine_package_dependencies", "label": "dependencies", "file_type": "code", "source_file": "packages/rules-engine/package.json", "source_location": "L13"}, {"id": "h_stackfast_2026_packages_rules_engine_package_dependencies_stackfast_shared", "label": "@stackfast/shared", "file_type": "code", "source_file": "packages/rules-engine/package.json", "source_location": "L14"}, {"id": "h_stackfast_2026_packages_rules_engine_package_dependencies_stackfast_schemas", "label": "@stackfast/schemas", "file_type": "code", "source_file": "packages/rules-engine/package.json", "source_location": "L15"}, {"id": "h_stackfast_2026_packages_rules_engine_package_dependencies_stackfast_registry", "label": "@stackfast/registry", "file_type": "code", "source_file": "packages/rules-engine/package.json", "source_location": "L16"}, {"id": "h_stackfast_2026_packages_rules_engine_package_devdependencies", "label": "devDependencies", "file_type": "code", "source_file": "packages/rules-engine/package.json", "source_location": "L18"}, {"id": "h_stackfast_2026_packages_rules_engine_package_devdependencies_typescript", "label": "typescript", "file_type": "code", "source_file": "packages/rules-engine/package.json", "source_location": "L19"}], "edges": [{"source": "h_stackfast_2026_packages_rules_engine_package_json", "target": "h_stackfast_2026_packages_rules_engine_package_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/rules-engine/package.json", "source_location": "L2", "weight": 1.0}, {"source": "h_stackfast_2026_packages_rules_engine_package_json", "target": "h_stackfast_2026_packages_rules_engine_package_version", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/rules-engine/package.json", "source_location": "L3", "weight": 1.0}, {"source": "h_stackfast_2026_packages_rules_engine_package_json", "target": "h_stackfast_2026_packages_rules_engine_package_private", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/rules-engine/package.json", "source_location": "L4", "weight": 1.0}, {"source": "h_stackfast_2026_packages_rules_engine_package_json", "target": "h_stackfast_2026_packages_rules_engine_package_type", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/rules-engine/package.json", "source_location": "L5", "weight": 1.0}, {"source": "h_stackfast_2026_packages_rules_engine_package_json", "target": "h_stackfast_2026_packages_rules_engine_package_main", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/rules-engine/package.json", "source_location": "L6", "weight": 1.0}, {"source": "h_stackfast_2026_packages_rules_engine_package_json", "target": "h_stackfast_2026_packages_rules_engine_package_types", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/rules-engine/package.json", "source_location": "L7", "weight": 1.0}, {"source": "h_stackfast_2026_packages_rules_engine_package_json", "target": "h_stackfast_2026_packages_rules_engine_package_scripts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/rules-engine/package.json", "source_location": "L8", "weight": 1.0}, {"source": "h_stackfast_2026_packages_rules_engine_package_scripts", "target": "h_stackfast_2026_packages_rules_engine_package_scripts_lint", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/rules-engine/package.json", "source_location": "L9", "weight": 1.0}, {"source": "h_stackfast_2026_packages_rules_engine_package_scripts", "target": "h_stackfast_2026_packages_rules_engine_package_scripts_type_check", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/rules-engine/package.json", "source_location": "L10", "weight": 1.0}, {"source": "h_stackfast_2026_packages_rules_engine_package_scripts", "target": "h_stackfast_2026_packages_rules_engine_package_scripts_test", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/rules-engine/package.json", "source_location": "L11", "weight": 1.0}, {"source": "h_stackfast_2026_packages_rules_engine_package_json", "target": "h_stackfast_2026_packages_rules_engine_package_dependencies", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/rules-engine/package.json", "source_location": "L13", "weight": 1.0}, {"source": "h_stackfast_2026_packages_rules_engine_package_dependencies", "target": "h_stackfast_2026_packages_rules_engine_package_dependencies_stackfast_shared", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/rules-engine/package.json", "source_location": "L14", "weight": 1.0}, {"source": "h_stackfast_2026_packages_rules_engine_package_dependencies_stackfast_shared", "target": "stackfast_shared", "relation": "imports", "confidence": "EXTRACTED", "source_file": "packages/rules-engine/package.json", "source_location": "L14", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_packages_rules_engine_package_dependencies", "target": "h_stackfast_2026_packages_rules_engine_package_dependencies_stackfast_schemas", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/rules-engine/package.json", "source_location": "L15", "weight": 1.0}, {"source": "h_stackfast_2026_packages_rules_engine_package_dependencies_stackfast_schemas", "target": "stackfast_schemas", "relation": "imports", "confidence": "EXTRACTED", "source_file": "packages/rules-engine/package.json", "source_location": "L15", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_packages_rules_engine_package_dependencies", "target": "h_stackfast_2026_packages_rules_engine_package_dependencies_stackfast_registry", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/rules-engine/package.json", "source_location": "L16", "weight": 1.0}, {"source": "h_stackfast_2026_packages_rules_engine_package_dependencies_stackfast_registry", "target": "stackfast_registry", "relation": "imports", "confidence": "EXTRACTED", "source_file": "packages/rules-engine/package.json", "source_location": "L16", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_packages_rules_engine_package_json", "target": "h_stackfast_2026_packages_rules_engine_package_devdependencies", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/rules-engine/package.json", "source_location": "L18", "weight": 1.0}, {"source": "h_stackfast_2026_packages_rules_engine_package_devdependencies", "target": "h_stackfast_2026_packages_rules_engine_package_devdependencies_typescript", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/rules-engine/package.json", "source_location": "L19", "weight": 1.0}, {"source": "h_stackfast_2026_packages_rules_engine_package_devdependencies_typescript", "target": "typescript", "relation": "imports", "confidence": "EXTRACTED", "source_file": "packages/rules-engine/package.json", "source_location": "L19", "weight": 1.0, "context": "import"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.4/060890b1822389b2a303a5fc533d8b2a77d5ba9263962977426dd9e484510ad9.json b/graphify-out/cache/ast/v0.9.4/060890b1822389b2a303a5fc533d8b2a77d5ba9263962977426dd9e484510ad9.json new file mode 100644 index 0000000..9635c36 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.4/060890b1822389b2a303a5fc533d8b2a77d5ba9263962977426dd9e484510ad9.json @@ -0,0 +1 @@ +{"nodes": [], "edges": [], "skipped": "data json (non-object root)"} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.4/190177bb8a5612d8d406f3e38e29bf501ea67144c9dbe6660f81aa0ddae6d5e7.json b/graphify-out/cache/ast/v0.9.4/190177bb8a5612d8d406f3e38e29bf501ea67144c9dbe6660f81aa0ddae6d5e7.json new file mode 100644 index 0000000..ca479ef --- /dev/null +++ b/graphify-out/cache/ast/v0.9.4/190177bb8a5612d8d406f3e38e29bf501ea67144c9dbe6660f81aa0ddae6d5e7.json @@ -0,0 +1 @@ +{"nodes": [], "edges": [], "skipped": "data json (not a config/manifest)"} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.4/1b7fa0e9ec0f8c6678c8c8c49072de5af121634102c7cdac2e563c1d51fd291e.json b/graphify-out/cache/ast/v0.9.4/1b7fa0e9ec0f8c6678c8c8c49072de5af121634102c7cdac2e563c1d51fd291e.json new file mode 100644 index 0000000..747f7e5 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.4/1b7fa0e9ec0f8c6678c8c8c49072de5af121634102c7cdac2e563c1d51fd291e.json @@ -0,0 +1 @@ +{"nodes": [{"id": "h_stackfast_2026_packages_exporter_package_json", "label": "package.json", "file_type": "code", "source_file": "packages/exporter/package.json", "source_location": "L1"}, {"id": "h_stackfast_2026_packages_exporter_package_name", "label": "name", "file_type": "code", "source_file": "packages/exporter/package.json", "source_location": "L2"}, {"id": "h_stackfast_2026_packages_exporter_package_version", "label": "version", "file_type": "code", "source_file": "packages/exporter/package.json", "source_location": "L3"}, {"id": "h_stackfast_2026_packages_exporter_package_private", "label": "private", "file_type": "code", "source_file": "packages/exporter/package.json", "source_location": "L4"}, {"id": "h_stackfast_2026_packages_exporter_package_type", "label": "type", "file_type": "code", "source_file": "packages/exporter/package.json", "source_location": "L5"}, {"id": "h_stackfast_2026_packages_exporter_package_main", "label": "main", "file_type": "code", "source_file": "packages/exporter/package.json", "source_location": "L6"}, {"id": "h_stackfast_2026_packages_exporter_package_types", "label": "types", "file_type": "code", "source_file": "packages/exporter/package.json", "source_location": "L7"}, {"id": "h_stackfast_2026_packages_exporter_package_scripts", "label": "scripts", "file_type": "code", "source_file": "packages/exporter/package.json", "source_location": "L8"}, {"id": "h_stackfast_2026_packages_exporter_package_scripts_lint", "label": "lint", "file_type": "code", "source_file": "packages/exporter/package.json", "source_location": "L9"}, {"id": "h_stackfast_2026_packages_exporter_package_scripts_type_check", "label": "type-check", "file_type": "code", "source_file": "packages/exporter/package.json", "source_location": "L10"}, {"id": "h_stackfast_2026_packages_exporter_package_scripts_test", "label": "test", "file_type": "code", "source_file": "packages/exporter/package.json", "source_location": "L11"}, {"id": "h_stackfast_2026_packages_exporter_package_dependencies", "label": "dependencies", "file_type": "code", "source_file": "packages/exporter/package.json", "source_location": "L13"}, {"id": "h_stackfast_2026_packages_exporter_package_dependencies_stackfast_shared", "label": "@stackfast/shared", "file_type": "code", "source_file": "packages/exporter/package.json", "source_location": "L14"}, {"id": "h_stackfast_2026_packages_exporter_package_dependencies_stackfast_schemas", "label": "@stackfast/schemas", "file_type": "code", "source_file": "packages/exporter/package.json", "source_location": "L15"}, {"id": "h_stackfast_2026_packages_exporter_package_dependencies_stackfast_registry", "label": "@stackfast/registry", "file_type": "code", "source_file": "packages/exporter/package.json", "source_location": "L16"}, {"id": "h_stackfast_2026_packages_exporter_package_dependencies_stackfast_rules_engine", "label": "@stackfast/rules-engine", "file_type": "code", "source_file": "packages/exporter/package.json", "source_location": "L17"}, {"id": "h_stackfast_2026_packages_exporter_package_devdependencies", "label": "devDependencies", "file_type": "code", "source_file": "packages/exporter/package.json", "source_location": "L19"}, {"id": "h_stackfast_2026_packages_exporter_package_devdependencies_typescript", "label": "typescript", "file_type": "code", "source_file": "packages/exporter/package.json", "source_location": "L20"}], "edges": [{"source": "h_stackfast_2026_packages_exporter_package_json", "target": "h_stackfast_2026_packages_exporter_package_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/exporter/package.json", "source_location": "L2", "weight": 1.0}, {"source": "h_stackfast_2026_packages_exporter_package_json", "target": "h_stackfast_2026_packages_exporter_package_version", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/exporter/package.json", "source_location": "L3", "weight": 1.0}, {"source": "h_stackfast_2026_packages_exporter_package_json", "target": "h_stackfast_2026_packages_exporter_package_private", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/exporter/package.json", "source_location": "L4", "weight": 1.0}, {"source": "h_stackfast_2026_packages_exporter_package_json", "target": "h_stackfast_2026_packages_exporter_package_type", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/exporter/package.json", "source_location": "L5", "weight": 1.0}, {"source": "h_stackfast_2026_packages_exporter_package_json", "target": "h_stackfast_2026_packages_exporter_package_main", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/exporter/package.json", "source_location": "L6", "weight": 1.0}, {"source": "h_stackfast_2026_packages_exporter_package_json", "target": "h_stackfast_2026_packages_exporter_package_types", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/exporter/package.json", "source_location": "L7", "weight": 1.0}, {"source": "h_stackfast_2026_packages_exporter_package_json", "target": "h_stackfast_2026_packages_exporter_package_scripts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/exporter/package.json", "source_location": "L8", "weight": 1.0}, {"source": "h_stackfast_2026_packages_exporter_package_scripts", "target": "h_stackfast_2026_packages_exporter_package_scripts_lint", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/exporter/package.json", "source_location": "L9", "weight": 1.0}, {"source": "h_stackfast_2026_packages_exporter_package_scripts", "target": "h_stackfast_2026_packages_exporter_package_scripts_type_check", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/exporter/package.json", "source_location": "L10", "weight": 1.0}, {"source": "h_stackfast_2026_packages_exporter_package_scripts", "target": "h_stackfast_2026_packages_exporter_package_scripts_test", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/exporter/package.json", "source_location": "L11", "weight": 1.0}, {"source": "h_stackfast_2026_packages_exporter_package_json", "target": "h_stackfast_2026_packages_exporter_package_dependencies", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/exporter/package.json", "source_location": "L13", "weight": 1.0}, {"source": "h_stackfast_2026_packages_exporter_package_dependencies", "target": "h_stackfast_2026_packages_exporter_package_dependencies_stackfast_shared", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/exporter/package.json", "source_location": "L14", "weight": 1.0}, {"source": "h_stackfast_2026_packages_exporter_package_dependencies_stackfast_shared", "target": "stackfast_shared", "relation": "imports", "confidence": "EXTRACTED", "source_file": "packages/exporter/package.json", "source_location": "L14", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_packages_exporter_package_dependencies", "target": "h_stackfast_2026_packages_exporter_package_dependencies_stackfast_schemas", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/exporter/package.json", "source_location": "L15", "weight": 1.0}, {"source": "h_stackfast_2026_packages_exporter_package_dependencies_stackfast_schemas", "target": "stackfast_schemas", "relation": "imports", "confidence": "EXTRACTED", "source_file": "packages/exporter/package.json", "source_location": "L15", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_packages_exporter_package_dependencies", "target": "h_stackfast_2026_packages_exporter_package_dependencies_stackfast_registry", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/exporter/package.json", "source_location": "L16", "weight": 1.0}, {"source": "h_stackfast_2026_packages_exporter_package_dependencies_stackfast_registry", "target": "stackfast_registry", "relation": "imports", "confidence": "EXTRACTED", "source_file": "packages/exporter/package.json", "source_location": "L16", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_packages_exporter_package_dependencies", "target": "h_stackfast_2026_packages_exporter_package_dependencies_stackfast_rules_engine", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/exporter/package.json", "source_location": "L17", "weight": 1.0}, {"source": "h_stackfast_2026_packages_exporter_package_dependencies_stackfast_rules_engine", "target": "stackfast_rules_engine", "relation": "imports", "confidence": "EXTRACTED", "source_file": "packages/exporter/package.json", "source_location": "L17", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_packages_exporter_package_json", "target": "h_stackfast_2026_packages_exporter_package_devdependencies", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/exporter/package.json", "source_location": "L19", "weight": 1.0}, {"source": "h_stackfast_2026_packages_exporter_package_devdependencies", "target": "h_stackfast_2026_packages_exporter_package_devdependencies_typescript", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/exporter/package.json", "source_location": "L20", "weight": 1.0}, {"source": "h_stackfast_2026_packages_exporter_package_devdependencies_typescript", "target": "typescript", "relation": "imports", "confidence": "EXTRACTED", "source_file": "packages/exporter/package.json", "source_location": "L20", "weight": 1.0, "context": "import"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.4/2783802c68ff8f313431705a3a5ca627b915fe24d23e66f15425eb9ed16a0ac8.json b/graphify-out/cache/ast/v0.9.4/2783802c68ff8f313431705a3a5ca627b915fe24d23e66f15425eb9ed16a0ac8.json new file mode 100644 index 0000000..35260da --- /dev/null +++ b/graphify-out/cache/ast/v0.9.4/2783802c68ff8f313431705a3a5ca627b915fe24d23e66f15425eb9ed16a0ac8.json @@ -0,0 +1 @@ +{"nodes": [{"id": "h_stackfast_2026_apps_web_package_json", "label": "package.json", "file_type": "code", "source_file": "apps/web/package.json", "source_location": "L1"}, {"id": "h_stackfast_2026_apps_web_package_name", "label": "name", "file_type": "code", "source_file": "apps/web/package.json", "source_location": "L2"}, {"id": "h_stackfast_2026_apps_web_package_version", "label": "version", "file_type": "code", "source_file": "apps/web/package.json", "source_location": "L3"}, {"id": "h_stackfast_2026_apps_web_package_private", "label": "private", "file_type": "code", "source_file": "apps/web/package.json", "source_location": "L4"}, {"id": "h_stackfast_2026_apps_web_package_type", "label": "type", "file_type": "code", "source_file": "apps/web/package.json", "source_location": "L5"}, {"id": "h_stackfast_2026_apps_web_package_scripts", "label": "scripts", "file_type": "code", "source_file": "apps/web/package.json", "source_location": "L6"}, {"id": "h_stackfast_2026_apps_web_package_scripts_dev", "label": "dev", "file_type": "code", "source_file": "apps/web/package.json", "source_location": "L7"}, {"id": "h_stackfast_2026_apps_web_package_scripts_build", "label": "build", "file_type": "code", "source_file": "apps/web/package.json", "source_location": "L8"}, {"id": "h_stackfast_2026_apps_web_package_scripts_lint", "label": "lint", "file_type": "code", "source_file": "apps/web/package.json", "source_location": "L9"}, {"id": "h_stackfast_2026_apps_web_package_scripts_preview", "label": "preview", "file_type": "code", "source_file": "apps/web/package.json", "source_location": "L10"}, {"id": "h_stackfast_2026_apps_web_package_scripts_type_check", "label": "type-check", "file_type": "code", "source_file": "apps/web/package.json", "source_location": "L11"}, {"id": "h_stackfast_2026_apps_web_package_scripts_test", "label": "test", "file_type": "code", "source_file": "apps/web/package.json", "source_location": "L12"}, {"id": "h_stackfast_2026_apps_web_package_dependencies", "label": "dependencies", "file_type": "code", "source_file": "apps/web/package.json", "source_location": "L14"}, {"id": "h_stackfast_2026_apps_web_package_dependencies_radix_ui_react_collapsible", "label": "@radix-ui/react-collapsible", "file_type": "code", "source_file": "apps/web/package.json", "source_location": "L15"}, {"id": "h_stackfast_2026_apps_web_package_dependencies_radix_ui_react_dialog", "label": "@radix-ui/react-dialog", "file_type": "code", "source_file": "apps/web/package.json", "source_location": "L16"}, {"id": "h_stackfast_2026_apps_web_package_dependencies_radix_ui_react_slot", "label": "@radix-ui/react-slot", "file_type": "code", "source_file": "apps/web/package.json", "source_location": "L17"}, {"id": "h_stackfast_2026_apps_web_package_dependencies_radix_ui_react_toast", "label": "@radix-ui/react-toast", "file_type": "code", "source_file": "apps/web/package.json", "source_location": "L18"}, {"id": "h_stackfast_2026_apps_web_package_dependencies_radix_ui_react_tooltip", "label": "@radix-ui/react-tooltip", "file_type": "code", "source_file": "apps/web/package.json", "source_location": "L19"}, {"id": "h_stackfast_2026_apps_web_package_dependencies_sentry_react", "label": "@sentry/react", "file_type": "code", "source_file": "apps/web/package.json", "source_location": "L20"}, {"id": "h_stackfast_2026_apps_web_package_dependencies_sentry_vite_plugin", "label": "@sentry/vite-plugin", "file_type": "code", "source_file": "apps/web/package.json", "source_location": "L21"}, {"id": "h_stackfast_2026_apps_web_package_dependencies_stackfast_registry", "label": "@stackfast/registry", "file_type": "code", "source_file": "apps/web/package.json", "source_location": "L22"}, {"id": "h_stackfast_2026_apps_web_package_dependencies_stackfast_rules_engine", "label": "@stackfast/rules-engine", "file_type": "code", "source_file": "apps/web/package.json", "source_location": "L23"}, {"id": "h_stackfast_2026_apps_web_package_dependencies_stackfast_schemas", "label": "@stackfast/schemas", "file_type": "code", "source_file": "apps/web/package.json", "source_location": "L24"}, {"id": "h_stackfast_2026_apps_web_package_dependencies_stackfast_shared", "label": "@stackfast/shared", "file_type": "code", "source_file": "apps/web/package.json", "source_location": "L25"}, {"id": "h_stackfast_2026_apps_web_package_dependencies_tanstack_react_query", "label": "@tanstack/react-query", "file_type": "code", "source_file": "apps/web/package.json", "source_location": "L26"}, {"id": "h_stackfast_2026_apps_web_package_dependencies_better_auth", "label": "better-auth", "file_type": "code", "source_file": "apps/web/package.json", "source_location": "L27"}, {"id": "h_stackfast_2026_apps_web_package_dependencies_class_variance_authority", "label": "class-variance-authority", "file_type": "code", "source_file": "apps/web/package.json", "source_location": "L28"}, {"id": "h_stackfast_2026_apps_web_package_dependencies_clsx", "label": "clsx", "file_type": "code", "source_file": "apps/web/package.json", "source_location": "L29"}, {"id": "h_stackfast_2026_apps_web_package_dependencies_jszip", "label": "jszip", "file_type": "code", "source_file": "apps/web/package.json", "source_location": "L30"}, {"id": "h_stackfast_2026_apps_web_package_dependencies_lucide_react", "label": "lucide-react", "file_type": "code", "source_file": "apps/web/package.json", "source_location": "L31"}, {"id": "h_stackfast_2026_apps_web_package_dependencies_react", "label": "react", "file_type": "code", "source_file": "apps/web/package.json", "source_location": "L32"}, {"id": "h_stackfast_2026_apps_web_package_dependencies_react_dom", "label": "react-dom", "file_type": "code", "source_file": "apps/web/package.json", "source_location": "L33"}, {"id": "h_stackfast_2026_apps_web_package_dependencies_tailwind_merge", "label": "tailwind-merge", "file_type": "code", "source_file": "apps/web/package.json", "source_location": "L34"}, {"id": "h_stackfast_2026_apps_web_package_dependencies_wouter", "label": "wouter", "file_type": "code", "source_file": "apps/web/package.json", "source_location": "L35"}, {"id": "h_stackfast_2026_apps_web_package_dependencies_zod", "label": "zod", "file_type": "code", "source_file": "apps/web/package.json", "source_location": "L36"}, {"id": "h_stackfast_2026_apps_web_package_devdependencies", "label": "devDependencies", "file_type": "code", "source_file": "apps/web/package.json", "source_location": "L38"}, {"id": "h_stackfast_2026_apps_web_package_devdependencies_types_react", "label": "@types/react", "file_type": "code", "source_file": "apps/web/package.json", "source_location": "L39"}, {"id": "h_stackfast_2026_apps_web_package_devdependencies_types_react_dom", "label": "@types/react-dom", "file_type": "code", "source_file": "apps/web/package.json", "source_location": "L40"}, {"id": "h_stackfast_2026_apps_web_package_devdependencies_vitejs_plugin_react", "label": "@vitejs/plugin-react", "file_type": "code", "source_file": "apps/web/package.json", "source_location": "L41"}, {"id": "h_stackfast_2026_apps_web_package_devdependencies_autoprefixer", "label": "autoprefixer", "file_type": "code", "source_file": "apps/web/package.json", "source_location": "L42"}, {"id": "h_stackfast_2026_apps_web_package_devdependencies_happy_dom", "label": "happy-dom", "file_type": "code", "source_file": "apps/web/package.json", "source_location": "L43"}, {"id": "h_stackfast_2026_apps_web_package_devdependencies_postcss", "label": "postcss", "file_type": "code", "source_file": "apps/web/package.json", "source_location": "L44"}, {"id": "h_stackfast_2026_apps_web_package_devdependencies_tailwindcss", "label": "tailwindcss", "file_type": "code", "source_file": "apps/web/package.json", "source_location": "L45"}, {"id": "h_stackfast_2026_apps_web_package_devdependencies_tailwindcss_animate", "label": "tailwindcss-animate", "file_type": "code", "source_file": "apps/web/package.json", "source_location": "L46"}, {"id": "h_stackfast_2026_apps_web_package_devdependencies_typescript", "label": "typescript", "file_type": "code", "source_file": "apps/web/package.json", "source_location": "L47"}, {"id": "h_stackfast_2026_apps_web_package_devdependencies_vite", "label": "vite", "file_type": "code", "source_file": "apps/web/package.json", "source_location": "L48"}], "edges": [{"source": "h_stackfast_2026_apps_web_package_json", "target": "h_stackfast_2026_apps_web_package_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L2", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_package_json", "target": "h_stackfast_2026_apps_web_package_version", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L3", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_package_json", "target": "h_stackfast_2026_apps_web_package_private", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L4", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_package_json", "target": "h_stackfast_2026_apps_web_package_type", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L5", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_package_json", "target": "h_stackfast_2026_apps_web_package_scripts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L6", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_package_scripts", "target": "h_stackfast_2026_apps_web_package_scripts_dev", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L7", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_package_scripts", "target": "h_stackfast_2026_apps_web_package_scripts_build", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L8", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_package_scripts", "target": "h_stackfast_2026_apps_web_package_scripts_lint", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L9", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_package_scripts", "target": "h_stackfast_2026_apps_web_package_scripts_preview", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L10", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_package_scripts", "target": "h_stackfast_2026_apps_web_package_scripts_type_check", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L11", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_package_scripts", "target": "h_stackfast_2026_apps_web_package_scripts_test", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L12", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_package_json", "target": "h_stackfast_2026_apps_web_package_dependencies", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L14", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_package_dependencies", "target": "h_stackfast_2026_apps_web_package_dependencies_radix_ui_react_collapsible", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L15", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_package_dependencies_radix_ui_react_collapsible", "target": "radix_ui_react_collapsible", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L15", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_web_package_dependencies", "target": "h_stackfast_2026_apps_web_package_dependencies_radix_ui_react_dialog", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L16", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_package_dependencies_radix_ui_react_dialog", "target": "radix_ui_react_dialog", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L16", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_web_package_dependencies", "target": "h_stackfast_2026_apps_web_package_dependencies_radix_ui_react_slot", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L17", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_package_dependencies_radix_ui_react_slot", "target": "radix_ui_react_slot", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L17", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_web_package_dependencies", "target": "h_stackfast_2026_apps_web_package_dependencies_radix_ui_react_toast", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L18", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_package_dependencies_radix_ui_react_toast", "target": "radix_ui_react_toast", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L18", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_web_package_dependencies", "target": "h_stackfast_2026_apps_web_package_dependencies_radix_ui_react_tooltip", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L19", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_package_dependencies_radix_ui_react_tooltip", "target": "radix_ui_react_tooltip", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L19", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_web_package_dependencies", "target": "h_stackfast_2026_apps_web_package_dependencies_sentry_react", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L20", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_package_dependencies_sentry_react", "target": "sentry_react", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L20", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_web_package_dependencies", "target": "h_stackfast_2026_apps_web_package_dependencies_sentry_vite_plugin", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L21", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_package_dependencies_sentry_vite_plugin", "target": "sentry_vite_plugin", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L21", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_web_package_dependencies", "target": "h_stackfast_2026_apps_web_package_dependencies_stackfast_registry", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L22", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_package_dependencies_stackfast_registry", "target": "stackfast_registry", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L22", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_web_package_dependencies", "target": "h_stackfast_2026_apps_web_package_dependencies_stackfast_rules_engine", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L23", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_package_dependencies_stackfast_rules_engine", "target": "stackfast_rules_engine", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L23", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_web_package_dependencies", "target": "h_stackfast_2026_apps_web_package_dependencies_stackfast_schemas", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L24", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_package_dependencies_stackfast_schemas", "target": "stackfast_schemas", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L24", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_web_package_dependencies", "target": "h_stackfast_2026_apps_web_package_dependencies_stackfast_shared", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L25", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_package_dependencies_stackfast_shared", "target": "stackfast_shared", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L25", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_web_package_dependencies", "target": "h_stackfast_2026_apps_web_package_dependencies_tanstack_react_query", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L26", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_package_dependencies_tanstack_react_query", "target": "tanstack_react_query", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L26", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_web_package_dependencies", "target": "h_stackfast_2026_apps_web_package_dependencies_better_auth", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L27", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_package_dependencies_better_auth", "target": "better_auth", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L27", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_web_package_dependencies", "target": "h_stackfast_2026_apps_web_package_dependencies_class_variance_authority", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L28", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_package_dependencies_class_variance_authority", "target": "class_variance_authority", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L28", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_web_package_dependencies", "target": "h_stackfast_2026_apps_web_package_dependencies_clsx", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L29", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_package_dependencies_clsx", "target": "clsx", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L29", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_web_package_dependencies", "target": "h_stackfast_2026_apps_web_package_dependencies_jszip", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L30", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_package_dependencies_jszip", "target": "jszip", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L30", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_web_package_dependencies", "target": "h_stackfast_2026_apps_web_package_dependencies_lucide_react", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L31", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_package_dependencies_lucide_react", "target": "lucide_react", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L31", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_web_package_dependencies", "target": "h_stackfast_2026_apps_web_package_dependencies_react", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L32", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_package_dependencies_react", "target": "react", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L32", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_web_package_dependencies", "target": "h_stackfast_2026_apps_web_package_dependencies_react_dom", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L33", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_package_dependencies_react_dom", "target": "react_dom", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L33", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_web_package_dependencies", "target": "h_stackfast_2026_apps_web_package_dependencies_tailwind_merge", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L34", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_package_dependencies_tailwind_merge", "target": "tailwind_merge", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L34", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_web_package_dependencies", "target": "h_stackfast_2026_apps_web_package_dependencies_wouter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L35", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_package_dependencies_wouter", "target": "wouter", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L35", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_web_package_dependencies", "target": "h_stackfast_2026_apps_web_package_dependencies_zod", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L36", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_package_dependencies_zod", "target": "zod", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L36", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_web_package_json", "target": "h_stackfast_2026_apps_web_package_devdependencies", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L38", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_package_devdependencies", "target": "h_stackfast_2026_apps_web_package_devdependencies_types_react", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L39", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_package_devdependencies_types_react", "target": "types_react", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L39", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_web_package_devdependencies", "target": "h_stackfast_2026_apps_web_package_devdependencies_types_react_dom", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L40", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_package_devdependencies_types_react_dom", "target": "types_react_dom", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L40", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_web_package_devdependencies", "target": "h_stackfast_2026_apps_web_package_devdependencies_vitejs_plugin_react", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L41", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_package_devdependencies_vitejs_plugin_react", "target": "vitejs_plugin_react", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L41", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_web_package_devdependencies", "target": "h_stackfast_2026_apps_web_package_devdependencies_autoprefixer", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L42", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_package_devdependencies_autoprefixer", "target": "autoprefixer", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L42", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_web_package_devdependencies", "target": "h_stackfast_2026_apps_web_package_devdependencies_happy_dom", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L43", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_package_devdependencies_happy_dom", "target": "happy_dom", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L43", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_web_package_devdependencies", "target": "h_stackfast_2026_apps_web_package_devdependencies_postcss", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L44", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_package_devdependencies_postcss", "target": "postcss", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L44", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_web_package_devdependencies", "target": "h_stackfast_2026_apps_web_package_devdependencies_tailwindcss", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L45", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_package_devdependencies_tailwindcss", "target": "tailwindcss", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L45", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_web_package_devdependencies", "target": "h_stackfast_2026_apps_web_package_devdependencies_tailwindcss_animate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L46", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_package_devdependencies_tailwindcss_animate", "target": "tailwindcss_animate", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L46", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_web_package_devdependencies", "target": "h_stackfast_2026_apps_web_package_devdependencies_typescript", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L47", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_package_devdependencies_typescript", "target": "typescript", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L47", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_web_package_devdependencies", "target": "h_stackfast_2026_apps_web_package_devdependencies_vite", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L48", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_package_devdependencies_vite", "target": "vite", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/web/package.json", "source_location": "L48", "weight": 1.0, "context": "import"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.4/2a71a2315b5b3aadc653def9129295747a058a1b9c2355bd1c827ca07d3afad2.json b/graphify-out/cache/ast/v0.9.4/2a71a2315b5b3aadc653def9129295747a058a1b9c2355bd1c827ca07d3afad2.json new file mode 100644 index 0000000..9635c36 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.4/2a71a2315b5b3aadc653def9129295747a058a1b9c2355bd1c827ca07d3afad2.json @@ -0,0 +1 @@ +{"nodes": [], "edges": [], "skipped": "data json (non-object root)"} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.4/35ee6c55973fe7423eb5f8f22c27f9ddea9a81fcba224517e9c745b067e9c0b7.json b/graphify-out/cache/ast/v0.9.4/35ee6c55973fe7423eb5f8f22c27f9ddea9a81fcba224517e9c745b067e9c0b7.json new file mode 100644 index 0000000..f5a5ab9 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.4/35ee6c55973fe7423eb5f8f22c27f9ddea9a81fcba224517e9c745b067e9c0b7.json @@ -0,0 +1 @@ +{"nodes": [{"id": "h_stackfast_2026_apps_web_components_json", "label": "components.json", "file_type": "code", "source_file": "apps/web/components.json", "source_location": "L1"}, {"id": "h_stackfast_2026_apps_web_components_schema", "label": "$schema", "file_type": "code", "source_file": "apps/web/components.json", "source_location": "L2"}, {"id": "h_stackfast_2026_apps_web_components_style", "label": "style", "file_type": "code", "source_file": "apps/web/components.json", "source_location": "L3"}, {"id": "h_stackfast_2026_apps_web_components_rsc", "label": "rsc", "file_type": "code", "source_file": "apps/web/components.json", "source_location": "L4"}, {"id": "h_stackfast_2026_apps_web_components_tsx", "label": "tsx", "file_type": "code", "source_file": "apps/web/components.json", "source_location": "L5"}, {"id": "h_stackfast_2026_apps_web_components_tailwind", "label": "tailwind", "file_type": "code", "source_file": "apps/web/components.json", "source_location": "L6"}, {"id": "h_stackfast_2026_apps_web_components_tailwind_config", "label": "config", "file_type": "code", "source_file": "apps/web/components.json", "source_location": "L7"}, {"id": "h_stackfast_2026_apps_web_components_tailwind_css", "label": "css", "file_type": "code", "source_file": "apps/web/components.json", "source_location": "L8"}, {"id": "h_stackfast_2026_apps_web_components_tailwind_basecolor", "label": "baseColor", "file_type": "code", "source_file": "apps/web/components.json", "source_location": "L9"}, {"id": "h_stackfast_2026_apps_web_components_tailwind_cssvariables", "label": "cssVariables", "file_type": "code", "source_file": "apps/web/components.json", "source_location": "L10"}, {"id": "h_stackfast_2026_apps_web_components_tailwind_prefix", "label": "prefix", "file_type": "code", "source_file": "apps/web/components.json", "source_location": "L11"}, {"id": "h_stackfast_2026_apps_web_components_aliases", "label": "aliases", "file_type": "code", "source_file": "apps/web/components.json", "source_location": "L13"}, {"id": "h_stackfast_2026_apps_web_components_aliases_components", "label": "components", "file_type": "code", "source_file": "apps/web/components.json", "source_location": "L14"}, {"id": "h_stackfast_2026_apps_web_components_aliases_utils", "label": "utils", "file_type": "code", "source_file": "apps/web/components.json", "source_location": "L15"}, {"id": "h_stackfast_2026_apps_web_components_aliases_ui", "label": "ui", "file_type": "code", "source_file": "apps/web/components.json", "source_location": "L16"}, {"id": "h_stackfast_2026_apps_web_components_aliases_lib", "label": "lib", "file_type": "code", "source_file": "apps/web/components.json", "source_location": "L17"}, {"id": "h_stackfast_2026_apps_web_components_aliases_hooks", "label": "hooks", "file_type": "code", "source_file": "apps/web/components.json", "source_location": "L18"}], "edges": [{"source": "h_stackfast_2026_apps_web_components_json", "target": "h_stackfast_2026_apps_web_components_schema", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/components.json", "source_location": "L2", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_components_json", "target": "h_stackfast_2026_apps_web_components_style", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/components.json", "source_location": "L3", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_components_json", "target": "h_stackfast_2026_apps_web_components_rsc", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/components.json", "source_location": "L4", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_components_json", "target": "h_stackfast_2026_apps_web_components_tsx", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/components.json", "source_location": "L5", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_components_json", "target": "h_stackfast_2026_apps_web_components_tailwind", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/components.json", "source_location": "L6", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_components_tailwind", "target": "h_stackfast_2026_apps_web_components_tailwind_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/components.json", "source_location": "L7", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_components_tailwind", "target": "h_stackfast_2026_apps_web_components_tailwind_css", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/components.json", "source_location": "L8", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_components_tailwind", "target": "h_stackfast_2026_apps_web_components_tailwind_basecolor", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/components.json", "source_location": "L9", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_components_tailwind", "target": "h_stackfast_2026_apps_web_components_tailwind_cssvariables", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/components.json", "source_location": "L10", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_components_tailwind", "target": "h_stackfast_2026_apps_web_components_tailwind_prefix", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/components.json", "source_location": "L11", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_components_json", "target": "h_stackfast_2026_apps_web_components_aliases", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/components.json", "source_location": "L13", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_components_aliases", "target": "h_stackfast_2026_apps_web_components_aliases_components", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/components.json", "source_location": "L14", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_components_aliases", "target": "h_stackfast_2026_apps_web_components_aliases_utils", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/components.json", "source_location": "L15", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_components_aliases", "target": "h_stackfast_2026_apps_web_components_aliases_ui", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/components.json", "source_location": "L16", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_components_aliases", "target": "h_stackfast_2026_apps_web_components_aliases_lib", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/components.json", "source_location": "L17", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_components_aliases", "target": "h_stackfast_2026_apps_web_components_aliases_hooks", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/components.json", "source_location": "L18", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.4/4d41819a987997f7c7b5a4477b753a9e005f1c35e788739f5104aa46cc52ff20.json b/graphify-out/cache/ast/v0.9.4/4d41819a987997f7c7b5a4477b753a9e005f1c35e788739f5104aa46cc52ff20.json new file mode 100644 index 0000000..7b879de --- /dev/null +++ b/graphify-out/cache/ast/v0.9.4/4d41819a987997f7c7b5a4477b753a9e005f1c35e788739f5104aa46cc52ff20.json @@ -0,0 +1 @@ +{"nodes": [{"id": "h_stackfast_2026_apps_web_public_catalog_v1_manifest_json", "label": "manifest.json", "file_type": "code", "source_file": "apps/web/public/catalog/v1/manifest.json", "source_location": "L1"}, {"id": "h_stackfast_2026_apps_web_public_catalog_v1_manifest_version", "label": "version", "file_type": "code", "source_file": "apps/web/public/catalog/v1/manifest.json", "source_location": "L2"}, {"id": "h_stackfast_2026_apps_web_public_catalog_v1_manifest_updatedat", "label": "updatedAt", "file_type": "code", "source_file": "apps/web/public/catalog/v1/manifest.json", "source_location": "L3"}, {"id": "h_stackfast_2026_apps_web_public_catalog_v1_manifest_files", "label": "files", "file_type": "code", "source_file": "apps/web/public/catalog/v1/manifest.json", "source_location": "L4"}, {"id": "h_stackfast_2026_apps_web_public_catalog_v1_manifest_files_categories", "label": "categories", "file_type": "code", "source_file": "apps/web/public/catalog/v1/manifest.json", "source_location": "L5"}, {"id": "h_stackfast_2026_apps_web_public_catalog_v1_manifest_files_tools", "label": "tools", "file_type": "code", "source_file": "apps/web/public/catalog/v1/manifest.json", "source_location": "L6"}, {"id": "h_stackfast_2026_apps_web_public_catalog_v1_manifest_files_rules", "label": "rules", "file_type": "code", "source_file": "apps/web/public/catalog/v1/manifest.json", "source_location": "L7"}, {"id": "h_stackfast_2026_apps_web_public_catalog_v1_manifest_etag", "label": "etag", "file_type": "code", "source_file": "apps/web/public/catalog/v1/manifest.json", "source_location": "L9"}], "edges": [{"source": "h_stackfast_2026_apps_web_public_catalog_v1_manifest_json", "target": "h_stackfast_2026_apps_web_public_catalog_v1_manifest_version", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/public/catalog/v1/manifest.json", "source_location": "L2", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_public_catalog_v1_manifest_json", "target": "h_stackfast_2026_apps_web_public_catalog_v1_manifest_updatedat", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/public/catalog/v1/manifest.json", "source_location": "L3", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_public_catalog_v1_manifest_json", "target": "h_stackfast_2026_apps_web_public_catalog_v1_manifest_files", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/public/catalog/v1/manifest.json", "source_location": "L4", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_public_catalog_v1_manifest_files", "target": "h_stackfast_2026_apps_web_public_catalog_v1_manifest_files_categories", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/public/catalog/v1/manifest.json", "source_location": "L5", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_public_catalog_v1_manifest_files", "target": "h_stackfast_2026_apps_web_public_catalog_v1_manifest_files_tools", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/public/catalog/v1/manifest.json", "source_location": "L6", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_public_catalog_v1_manifest_files", "target": "h_stackfast_2026_apps_web_public_catalog_v1_manifest_files_rules", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/public/catalog/v1/manifest.json", "source_location": "L7", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_public_catalog_v1_manifest_json", "target": "h_stackfast_2026_apps_web_public_catalog_v1_manifest_etag", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/public/catalog/v1/manifest.json", "source_location": "L9", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.4/5b1c80ca2181e7791618611d079520c470b93a7b0e59291f470babdf1bdf0870.json b/graphify-out/cache/ast/v0.9.4/5b1c80ca2181e7791618611d079520c470b93a7b0e59291f470babdf1bdf0870.json new file mode 100644 index 0000000..ca479ef --- /dev/null +++ b/graphify-out/cache/ast/v0.9.4/5b1c80ca2181e7791618611d079520c470b93a7b0e59291f470babdf1bdf0870.json @@ -0,0 +1 @@ +{"nodes": [], "edges": [], "skipped": "data json (not a config/manifest)"} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.4/622788a6f498a596e531a9ba18b3893b706d263f1a4056fb692d7755a6fed49d.json b/graphify-out/cache/ast/v0.9.4/622788a6f498a596e531a9ba18b3893b706d263f1a4056fb692d7755a6fed49d.json new file mode 100644 index 0000000..1830680 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.4/622788a6f498a596e531a9ba18b3893b706d263f1a4056fb692d7755a6fed49d.json @@ -0,0 +1 @@ +{"nodes": [{"id": "h_stackfast_2026_packages_shared_tsconfig_json", "label": "tsconfig.json", "file_type": "code", "source_file": "packages/shared/tsconfig.json", "source_location": "L1"}, {"id": "h_stackfast_2026_packages_shared_tsconfig_extends", "label": "extends", "file_type": "code", "source_file": "packages/shared/tsconfig.json", "source_location": "L2"}, {"id": "h_stackfast_2026_packages_shared_tsconfig_compileroptions", "label": "compilerOptions", "file_type": "code", "source_file": "packages/shared/tsconfig.json", "source_location": "L3"}, {"id": "h_stackfast_2026_packages_shared_tsconfig_compileroptions_outdir", "label": "outDir", "file_type": "code", "source_file": "packages/shared/tsconfig.json", "source_location": "L4"}, {"id": "h_stackfast_2026_packages_shared_tsconfig_compileroptions_rootdir", "label": "rootDir", "file_type": "code", "source_file": "packages/shared/tsconfig.json", "source_location": "L5"}, {"id": "h_stackfast_2026_packages_shared_tsconfig_include", "label": "include", "file_type": "code", "source_file": "packages/shared/tsconfig.json", "source_location": "L7"}], "edges": [{"source": "h_stackfast_2026_packages_shared_tsconfig_json", "target": "h_stackfast_2026_packages_shared_tsconfig_extends", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/shared/tsconfig.json", "source_location": "L2", "weight": 1.0}, {"source": "h_stackfast_2026_packages_shared_tsconfig_json", "target": "ref_tsconfig_base_json", "relation": "extends", "confidence": "EXTRACTED", "source_file": "packages/shared/tsconfig.json", "source_location": "L2", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_packages_shared_tsconfig_json", "target": "h_stackfast_2026_packages_shared_tsconfig_compileroptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/shared/tsconfig.json", "source_location": "L3", "weight": 1.0}, {"source": "h_stackfast_2026_packages_shared_tsconfig_compileroptions", "target": "h_stackfast_2026_packages_shared_tsconfig_compileroptions_outdir", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/shared/tsconfig.json", "source_location": "L4", "weight": 1.0}, {"source": "h_stackfast_2026_packages_shared_tsconfig_compileroptions", "target": "h_stackfast_2026_packages_shared_tsconfig_compileroptions_rootdir", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/shared/tsconfig.json", "source_location": "L5", "weight": 1.0}, {"source": "h_stackfast_2026_packages_shared_tsconfig_json", "target": "h_stackfast_2026_packages_shared_tsconfig_include", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/shared/tsconfig.json", "source_location": "L7", "weight": 1.0}, {"source": "h_stackfast_2026_packages_shared_tsconfig_include", "target": "ref_src", "relation": "extends", "confidence": "EXTRACTED", "source_file": "packages/shared/tsconfig.json", "source_location": "L7", "weight": 1.0, "context": "import"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.4/6d4c8917184aa92122af7033cb619e3c64703a0f1f2d43e014baa34042003bbd.json b/graphify-out/cache/ast/v0.9.4/6d4c8917184aa92122af7033cb619e3c64703a0f1f2d43e014baa34042003bbd.json new file mode 100644 index 0000000..0f99e34 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.4/6d4c8917184aa92122af7033cb619e3c64703a0f1f2d43e014baa34042003bbd.json @@ -0,0 +1 @@ +{"nodes": [{"id": "h_stackfast_2026_packages_rules_engine_tsconfig_json", "label": "tsconfig.json", "file_type": "code", "source_file": "packages/rules-engine/tsconfig.json", "source_location": "L1"}, {"id": "h_stackfast_2026_packages_rules_engine_tsconfig_extends", "label": "extends", "file_type": "code", "source_file": "packages/rules-engine/tsconfig.json", "source_location": "L2"}, {"id": "h_stackfast_2026_packages_rules_engine_tsconfig_compileroptions", "label": "compilerOptions", "file_type": "code", "source_file": "packages/rules-engine/tsconfig.json", "source_location": "L3"}, {"id": "h_stackfast_2026_packages_rules_engine_tsconfig_compileroptions_outdir", "label": "outDir", "file_type": "code", "source_file": "packages/rules-engine/tsconfig.json", "source_location": "L4"}, {"id": "h_stackfast_2026_packages_rules_engine_tsconfig_compileroptions_rootdir", "label": "rootDir", "file_type": "code", "source_file": "packages/rules-engine/tsconfig.json", "source_location": "L5"}, {"id": "h_stackfast_2026_packages_rules_engine_tsconfig_include", "label": "include", "file_type": "code", "source_file": "packages/rules-engine/tsconfig.json", "source_location": "L7"}], "edges": [{"source": "h_stackfast_2026_packages_rules_engine_tsconfig_json", "target": "h_stackfast_2026_packages_rules_engine_tsconfig_extends", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/rules-engine/tsconfig.json", "source_location": "L2", "weight": 1.0}, {"source": "h_stackfast_2026_packages_rules_engine_tsconfig_json", "target": "ref_tsconfig_base_json", "relation": "extends", "confidence": "EXTRACTED", "source_file": "packages/rules-engine/tsconfig.json", "source_location": "L2", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_packages_rules_engine_tsconfig_json", "target": "h_stackfast_2026_packages_rules_engine_tsconfig_compileroptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/rules-engine/tsconfig.json", "source_location": "L3", "weight": 1.0}, {"source": "h_stackfast_2026_packages_rules_engine_tsconfig_compileroptions", "target": "h_stackfast_2026_packages_rules_engine_tsconfig_compileroptions_outdir", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/rules-engine/tsconfig.json", "source_location": "L4", "weight": 1.0}, {"source": "h_stackfast_2026_packages_rules_engine_tsconfig_compileroptions", "target": "h_stackfast_2026_packages_rules_engine_tsconfig_compileroptions_rootdir", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/rules-engine/tsconfig.json", "source_location": "L5", "weight": 1.0}, {"source": "h_stackfast_2026_packages_rules_engine_tsconfig_json", "target": "h_stackfast_2026_packages_rules_engine_tsconfig_include", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/rules-engine/tsconfig.json", "source_location": "L7", "weight": 1.0}, {"source": "h_stackfast_2026_packages_rules_engine_tsconfig_include", "target": "ref_src", "relation": "extends", "confidence": "EXTRACTED", "source_file": "packages/rules-engine/tsconfig.json", "source_location": "L7", "weight": 1.0, "context": "import"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.4/7030a5daabd61c4f01ea7564b27bfdce25b7829ab20128268a63277d81f628a7.json b/graphify-out/cache/ast/v0.9.4/7030a5daabd61c4f01ea7564b27bfdce25b7829ab20128268a63277d81f628a7.json new file mode 100644 index 0000000..9635c36 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.4/7030a5daabd61c4f01ea7564b27bfdce25b7829ab20128268a63277d81f628a7.json @@ -0,0 +1 @@ +{"nodes": [], "edges": [], "skipped": "data json (non-object root)"} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.4/7252474f3bea5e90a859e1930282665361d615c25cfe5c8c9854f66d9d2c0d72.json b/graphify-out/cache/ast/v0.9.4/7252474f3bea5e90a859e1930282665361d615c25cfe5c8c9854f66d9d2c0d72.json new file mode 100644 index 0000000..9635c36 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.4/7252474f3bea5e90a859e1930282665361d615c25cfe5c8c9854f66d9d2c0d72.json @@ -0,0 +1 @@ +{"nodes": [], "edges": [], "skipped": "data json (non-object root)"} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.4/74ee0d24d170fd55a770e5ba453cfad9d47bacfd7c8fac028cba89c87615f46d.json b/graphify-out/cache/ast/v0.9.4/74ee0d24d170fd55a770e5ba453cfad9d47bacfd7c8fac028cba89c87615f46d.json new file mode 100644 index 0000000..e60c74f --- /dev/null +++ b/graphify-out/cache/ast/v0.9.4/74ee0d24d170fd55a770e5ba453cfad9d47bacfd7c8fac028cba89c87615f46d.json @@ -0,0 +1 @@ +{"nodes": [{"id": "h_stackfast_2026_apps_api_package_json", "label": "package.json", "file_type": "code", "source_file": "apps/api/package.json", "source_location": "L1"}, {"id": "h_stackfast_2026_apps_api_package_name", "label": "name", "file_type": "code", "source_file": "apps/api/package.json", "source_location": "L2"}, {"id": "h_stackfast_2026_apps_api_package_version", "label": "version", "file_type": "code", "source_file": "apps/api/package.json", "source_location": "L3"}, {"id": "h_stackfast_2026_apps_api_package_private", "label": "private", "file_type": "code", "source_file": "apps/api/package.json", "source_location": "L4"}, {"id": "h_stackfast_2026_apps_api_package_type", "label": "type", "file_type": "code", "source_file": "apps/api/package.json", "source_location": "L5"}, {"id": "h_stackfast_2026_apps_api_package_scripts", "label": "scripts", "file_type": "code", "source_file": "apps/api/package.json", "source_location": "L6"}, {"id": "h_stackfast_2026_apps_api_package_scripts_dev", "label": "dev", "file_type": "code", "source_file": "apps/api/package.json", "source_location": "L7"}, {"id": "h_stackfast_2026_apps_api_package_scripts_build", "label": "build", "file_type": "code", "source_file": "apps/api/package.json", "source_location": "L8"}, {"id": "h_stackfast_2026_apps_api_package_scripts_start", "label": "start", "file_type": "code", "source_file": "apps/api/package.json", "source_location": "L9"}, {"id": "h_stackfast_2026_apps_api_package_scripts_lint", "label": "lint", "file_type": "code", "source_file": "apps/api/package.json", "source_location": "L10"}, {"id": "h_stackfast_2026_apps_api_package_scripts_type_check", "label": "type-check", "file_type": "code", "source_file": "apps/api/package.json", "source_location": "L11"}, {"id": "h_stackfast_2026_apps_api_package_scripts_test", "label": "test", "file_type": "code", "source_file": "apps/api/package.json", "source_location": "L12"}, {"id": "h_stackfast_2026_apps_api_package_scripts_seed", "label": "seed", "file_type": "code", "source_file": "apps/api/package.json", "source_location": "L13"}, {"id": "h_stackfast_2026_apps_api_package_dependencies", "label": "dependencies", "file_type": "code", "source_file": "apps/api/package.json", "source_location": "L15"}, {"id": "h_stackfast_2026_apps_api_package_dependencies_hono_node_server", "label": "@hono/node-server", "file_type": "code", "source_file": "apps/api/package.json", "source_location": "L16"}, {"id": "h_stackfast_2026_apps_api_package_dependencies_neondatabase_serverless", "label": "@neondatabase/serverless", "file_type": "code", "source_file": "apps/api/package.json", "source_location": "L17"}, {"id": "h_stackfast_2026_apps_api_package_dependencies_sentry_node", "label": "@sentry/node", "file_type": "code", "source_file": "apps/api/package.json", "source_location": "L18"}, {"id": "h_stackfast_2026_apps_api_package_dependencies_stackfast_ai", "label": "@stackfast/ai", "file_type": "code", "source_file": "apps/api/package.json", "source_location": "L19"}, {"id": "h_stackfast_2026_apps_api_package_dependencies_stackfast_exporter", "label": "@stackfast/exporter", "file_type": "code", "source_file": "apps/api/package.json", "source_location": "L20"}, {"id": "h_stackfast_2026_apps_api_package_dependencies_stackfast_registry", "label": "@stackfast/registry", "file_type": "code", "source_file": "apps/api/package.json", "source_location": "L21"}, {"id": "h_stackfast_2026_apps_api_package_dependencies_stackfast_rules_engine", "label": "@stackfast/rules-engine", "file_type": "code", "source_file": "apps/api/package.json", "source_location": "L22"}, {"id": "h_stackfast_2026_apps_api_package_dependencies_stackfast_schemas", "label": "@stackfast/schemas", "file_type": "code", "source_file": "apps/api/package.json", "source_location": "L23"}, {"id": "h_stackfast_2026_apps_api_package_dependencies_stackfast_shared", "label": "@stackfast/shared", "file_type": "code", "source_file": "apps/api/package.json", "source_location": "L24"}, {"id": "h_stackfast_2026_apps_api_package_dependencies_upstash_ratelimit", "label": "@upstash/ratelimit", "file_type": "code", "source_file": "apps/api/package.json", "source_location": "L25"}, {"id": "h_stackfast_2026_apps_api_package_dependencies_upstash_redis", "label": "@upstash/redis", "file_type": "code", "source_file": "apps/api/package.json", "source_location": "L26"}, {"id": "h_stackfast_2026_apps_api_package_dependencies_better_auth", "label": "better-auth", "file_type": "code", "source_file": "apps/api/package.json", "source_location": "L27"}, {"id": "h_stackfast_2026_apps_api_package_dependencies_drizzle_orm", "label": "drizzle-orm", "file_type": "code", "source_file": "apps/api/package.json", "source_location": "L28"}, {"id": "h_stackfast_2026_apps_api_package_dependencies_hono", "label": "hono", "file_type": "code", "source_file": "apps/api/package.json", "source_location": "L29"}, {"id": "h_stackfast_2026_apps_api_package_dependencies_zod", "label": "zod", "file_type": "code", "source_file": "apps/api/package.json", "source_location": "L30"}, {"id": "h_stackfast_2026_apps_api_package_devdependencies", "label": "devDependencies", "file_type": "code", "source_file": "apps/api/package.json", "source_location": "L32"}, {"id": "h_stackfast_2026_apps_api_package_devdependencies_types_node", "label": "@types/node", "file_type": "code", "source_file": "apps/api/package.json", "source_location": "L33"}, {"id": "h_stackfast_2026_apps_api_package_devdependencies_drizzle_kit", "label": "drizzle-kit", "file_type": "code", "source_file": "apps/api/package.json", "source_location": "L34"}, {"id": "h_stackfast_2026_apps_api_package_devdependencies_fast_check", "label": "fast-check", "file_type": "code", "source_file": "apps/api/package.json", "source_location": "L35"}, {"id": "h_stackfast_2026_apps_api_package_devdependencies_tsx", "label": "tsx", "file_type": "code", "source_file": "apps/api/package.json", "source_location": "L36"}, {"id": "h_stackfast_2026_apps_api_package_devdependencies_typescript", "label": "typescript", "file_type": "code", "source_file": "apps/api/package.json", "source_location": "L37"}], "edges": [{"source": "h_stackfast_2026_apps_api_package_json", "target": "h_stackfast_2026_apps_api_package_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L2", "weight": 1.0}, {"source": "h_stackfast_2026_apps_api_package_json", "target": "h_stackfast_2026_apps_api_package_version", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L3", "weight": 1.0}, {"source": "h_stackfast_2026_apps_api_package_json", "target": "h_stackfast_2026_apps_api_package_private", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L4", "weight": 1.0}, {"source": "h_stackfast_2026_apps_api_package_json", "target": "h_stackfast_2026_apps_api_package_type", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L5", "weight": 1.0}, {"source": "h_stackfast_2026_apps_api_package_json", "target": "h_stackfast_2026_apps_api_package_scripts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L6", "weight": 1.0}, {"source": "h_stackfast_2026_apps_api_package_scripts", "target": "h_stackfast_2026_apps_api_package_scripts_dev", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L7", "weight": 1.0}, {"source": "h_stackfast_2026_apps_api_package_scripts", "target": "h_stackfast_2026_apps_api_package_scripts_build", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L8", "weight": 1.0}, {"source": "h_stackfast_2026_apps_api_package_scripts", "target": "h_stackfast_2026_apps_api_package_scripts_start", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L9", "weight": 1.0}, {"source": "h_stackfast_2026_apps_api_package_scripts", "target": "h_stackfast_2026_apps_api_package_scripts_lint", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L10", "weight": 1.0}, {"source": "h_stackfast_2026_apps_api_package_scripts", "target": "h_stackfast_2026_apps_api_package_scripts_type_check", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L11", "weight": 1.0}, {"source": "h_stackfast_2026_apps_api_package_scripts", "target": "h_stackfast_2026_apps_api_package_scripts_test", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L12", "weight": 1.0}, {"source": "h_stackfast_2026_apps_api_package_scripts", "target": "h_stackfast_2026_apps_api_package_scripts_seed", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L13", "weight": 1.0}, {"source": "h_stackfast_2026_apps_api_package_json", "target": "h_stackfast_2026_apps_api_package_dependencies", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L15", "weight": 1.0}, {"source": "h_stackfast_2026_apps_api_package_dependencies", "target": "h_stackfast_2026_apps_api_package_dependencies_hono_node_server", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L16", "weight": 1.0}, {"source": "h_stackfast_2026_apps_api_package_dependencies_hono_node_server", "target": "hono_node_server", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L16", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_api_package_dependencies", "target": "h_stackfast_2026_apps_api_package_dependencies_neondatabase_serverless", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L17", "weight": 1.0}, {"source": "h_stackfast_2026_apps_api_package_dependencies_neondatabase_serverless", "target": "neondatabase_serverless", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L17", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_api_package_dependencies", "target": "h_stackfast_2026_apps_api_package_dependencies_sentry_node", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L18", "weight": 1.0}, {"source": "h_stackfast_2026_apps_api_package_dependencies_sentry_node", "target": "sentry_node", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L18", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_api_package_dependencies", "target": "h_stackfast_2026_apps_api_package_dependencies_stackfast_ai", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L19", "weight": 1.0}, {"source": "h_stackfast_2026_apps_api_package_dependencies_stackfast_ai", "target": "stackfast_ai", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L19", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_api_package_dependencies", "target": "h_stackfast_2026_apps_api_package_dependencies_stackfast_exporter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L20", "weight": 1.0}, {"source": "h_stackfast_2026_apps_api_package_dependencies_stackfast_exporter", "target": "stackfast_exporter", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L20", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_api_package_dependencies", "target": "h_stackfast_2026_apps_api_package_dependencies_stackfast_registry", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L21", "weight": 1.0}, {"source": "h_stackfast_2026_apps_api_package_dependencies_stackfast_registry", "target": "stackfast_registry", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L21", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_api_package_dependencies", "target": "h_stackfast_2026_apps_api_package_dependencies_stackfast_rules_engine", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L22", "weight": 1.0}, {"source": "h_stackfast_2026_apps_api_package_dependencies_stackfast_rules_engine", "target": "stackfast_rules_engine", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L22", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_api_package_dependencies", "target": "h_stackfast_2026_apps_api_package_dependencies_stackfast_schemas", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L23", "weight": 1.0}, {"source": "h_stackfast_2026_apps_api_package_dependencies_stackfast_schemas", "target": "stackfast_schemas", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L23", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_api_package_dependencies", "target": "h_stackfast_2026_apps_api_package_dependencies_stackfast_shared", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L24", "weight": 1.0}, {"source": "h_stackfast_2026_apps_api_package_dependencies_stackfast_shared", "target": "stackfast_shared", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L24", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_api_package_dependencies", "target": "h_stackfast_2026_apps_api_package_dependencies_upstash_ratelimit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L25", "weight": 1.0}, {"source": "h_stackfast_2026_apps_api_package_dependencies_upstash_ratelimit", "target": "upstash_ratelimit", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L25", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_api_package_dependencies", "target": "h_stackfast_2026_apps_api_package_dependencies_upstash_redis", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L26", "weight": 1.0}, {"source": "h_stackfast_2026_apps_api_package_dependencies_upstash_redis", "target": "upstash_redis", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L26", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_api_package_dependencies", "target": "h_stackfast_2026_apps_api_package_dependencies_better_auth", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L27", "weight": 1.0}, {"source": "h_stackfast_2026_apps_api_package_dependencies_better_auth", "target": "better_auth", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L27", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_api_package_dependencies", "target": "h_stackfast_2026_apps_api_package_dependencies_drizzle_orm", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L28", "weight": 1.0}, {"source": "h_stackfast_2026_apps_api_package_dependencies_drizzle_orm", "target": "drizzle_orm", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L28", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_api_package_dependencies", "target": "h_stackfast_2026_apps_api_package_dependencies_hono", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L29", "weight": 1.0}, {"source": "h_stackfast_2026_apps_api_package_dependencies_hono", "target": "hono", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L29", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_api_package_dependencies", "target": "h_stackfast_2026_apps_api_package_dependencies_zod", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L30", "weight": 1.0}, {"source": "h_stackfast_2026_apps_api_package_dependencies_zod", "target": "zod", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L30", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_api_package_json", "target": "h_stackfast_2026_apps_api_package_devdependencies", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L32", "weight": 1.0}, {"source": "h_stackfast_2026_apps_api_package_devdependencies", "target": "h_stackfast_2026_apps_api_package_devdependencies_types_node", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L33", "weight": 1.0}, {"source": "h_stackfast_2026_apps_api_package_devdependencies_types_node", "target": "types_node", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L33", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_api_package_devdependencies", "target": "h_stackfast_2026_apps_api_package_devdependencies_drizzle_kit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L34", "weight": 1.0}, {"source": "h_stackfast_2026_apps_api_package_devdependencies_drizzle_kit", "target": "drizzle_kit", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L34", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_api_package_devdependencies", "target": "h_stackfast_2026_apps_api_package_devdependencies_fast_check", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L35", "weight": 1.0}, {"source": "h_stackfast_2026_apps_api_package_devdependencies_fast_check", "target": "fast_check", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L35", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_api_package_devdependencies", "target": "h_stackfast_2026_apps_api_package_devdependencies_tsx", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L36", "weight": 1.0}, {"source": "h_stackfast_2026_apps_api_package_devdependencies_tsx", "target": "tsx", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L36", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_api_package_devdependencies", "target": "h_stackfast_2026_apps_api_package_devdependencies_typescript", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L37", "weight": 1.0}, {"source": "h_stackfast_2026_apps_api_package_devdependencies_typescript", "target": "typescript", "relation": "imports", "confidence": "EXTRACTED", "source_file": "apps/api/package.json", "source_location": "L37", "weight": 1.0, "context": "import"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.4/7946f6c09895c6450ab8e978f349687de8c11978bdf3aec6155db6c3006ec09f.json b/graphify-out/cache/ast/v0.9.4/7946f6c09895c6450ab8e978f349687de8c11978bdf3aec6155db6c3006ec09f.json new file mode 100644 index 0000000..539d068 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.4/7946f6c09895c6450ab8e978f349687de8c11978bdf3aec6155db6c3006ec09f.json @@ -0,0 +1 @@ +{"nodes": [{"id": "h_stackfast_2026_package_json", "label": "package.json", "file_type": "code", "source_file": "package.json", "source_location": "L1"}, {"id": "h_stackfast_2026_package_name", "label": "name", "file_type": "code", "source_file": "package.json", "source_location": "L2"}, {"id": "h_stackfast_2026_package_private", "label": "private", "file_type": "code", "source_file": "package.json", "source_location": "L3"}, {"id": "h_stackfast_2026_package_engines", "label": "engines", "file_type": "code", "source_file": "package.json", "source_location": "L4"}, {"id": "h_stackfast_2026_package_engines_node", "label": "node", "file_type": "code", "source_file": "package.json", "source_location": "L5"}, {"id": "h_stackfast_2026_package_packagemanager", "label": "packageManager", "file_type": "code", "source_file": "package.json", "source_location": "L7"}, {"id": "h_stackfast_2026_package_scripts", "label": "scripts", "file_type": "code", "source_file": "package.json", "source_location": "L8"}, {"id": "h_stackfast_2026_package_scripts_dev", "label": "dev", "file_type": "code", "source_file": "package.json", "source_location": "L9"}, {"id": "h_stackfast_2026_package_scripts_dev_api", "label": "dev:api", "file_type": "code", "source_file": "package.json", "source_location": "L10"}, {"id": "h_stackfast_2026_package_scripts_dev_web", "label": "dev:web", "file_type": "code", "source_file": "package.json", "source_location": "L11"}, {"id": "h_stackfast_2026_package_scripts_build", "label": "build", "file_type": "code", "source_file": "package.json", "source_location": "L12"}, {"id": "h_stackfast_2026_package_scripts_lint", "label": "lint", "file_type": "code", "source_file": "package.json", "source_location": "L13"}, {"id": "h_stackfast_2026_package_scripts_test", "label": "test", "file_type": "code", "source_file": "package.json", "source_location": "L14"}, {"id": "h_stackfast_2026_package_scripts_test_e2e", "label": "test:e2e", "file_type": "code", "source_file": "package.json", "source_location": "L15"}, {"id": "h_stackfast_2026_package_scripts_type_check", "label": "type-check", "file_type": "code", "source_file": "package.json", "source_location": "L16"}, {"id": "h_stackfast_2026_package_scripts_seed", "label": "seed", "file_type": "code", "source_file": "package.json", "source_location": "L17"}, {"id": "h_stackfast_2026_package_scripts_validate_registry", "label": "validate:registry", "file_type": "code", "source_file": "package.json", "source_location": "L18"}, {"id": "h_stackfast_2026_package_devdependencies", "label": "devDependencies", "file_type": "code", "source_file": "package.json", "source_location": "L20"}, {"id": "h_stackfast_2026_package_devdependencies_eslint_js", "label": "@eslint/js", "file_type": "code", "source_file": "package.json", "source_location": "L21"}, {"id": "h_stackfast_2026_package_devdependencies_playwright_test", "label": "@playwright/test", "file_type": "code", "source_file": "package.json", "source_location": "L22"}, {"id": "h_stackfast_2026_package_devdependencies_types_node", "label": "@types/node", "file_type": "code", "source_file": "package.json", "source_location": "L23"}, {"id": "h_stackfast_2026_package_devdependencies_concurrently", "label": "concurrently", "file_type": "code", "source_file": "package.json", "source_location": "L24"}, {"id": "h_stackfast_2026_package_devdependencies_dotenv_cli", "label": "dotenv-cli", "file_type": "code", "source_file": "package.json", "source_location": "L25"}, {"id": "h_stackfast_2026_package_devdependencies_eslint", "label": "eslint", "file_type": "code", "source_file": "package.json", "source_location": "L26"}, {"id": "h_stackfast_2026_package_devdependencies_prettier", "label": "prettier", "file_type": "code", "source_file": "package.json", "source_location": "L27"}, {"id": "h_stackfast_2026_package_devdependencies_tsx", "label": "tsx", "file_type": "code", "source_file": "package.json", "source_location": "L28"}, {"id": "h_stackfast_2026_package_devdependencies_typescript", "label": "typescript", "file_type": "code", "source_file": "package.json", "source_location": "L29"}, {"id": "h_stackfast_2026_package_devdependencies_typescript_eslint", "label": "typescript-eslint", "file_type": "code", "source_file": "package.json", "source_location": "L30"}, {"id": "h_stackfast_2026_package_devdependencies_vite", "label": "vite", "file_type": "code", "source_file": "package.json", "source_location": "L31"}, {"id": "h_stackfast_2026_package_devdependencies_vitest", "label": "vitest", "file_type": "code", "source_file": "package.json", "source_location": "L32"}, {"id": "h_stackfast_2026_package_dependencies", "label": "dependencies", "file_type": "code", "source_file": "package.json", "source_location": "L34"}, {"id": "h_stackfast_2026_package_dependencies_better_auth_infra", "label": "@better-auth/infra", "file_type": "code", "source_file": "package.json", "source_location": "L35"}], "edges": [{"source": "h_stackfast_2026_package_json", "target": "h_stackfast_2026_package_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L2", "weight": 1.0}, {"source": "h_stackfast_2026_package_json", "target": "h_stackfast_2026_package_private", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L3", "weight": 1.0}, {"source": "h_stackfast_2026_package_json", "target": "h_stackfast_2026_package_engines", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L4", "weight": 1.0}, {"source": "h_stackfast_2026_package_engines", "target": "h_stackfast_2026_package_engines_node", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L5", "weight": 1.0}, {"source": "h_stackfast_2026_package_json", "target": "h_stackfast_2026_package_packagemanager", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L7", "weight": 1.0}, {"source": "h_stackfast_2026_package_json", "target": "h_stackfast_2026_package_scripts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L8", "weight": 1.0}, {"source": "h_stackfast_2026_package_scripts", "target": "h_stackfast_2026_package_scripts_dev", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L9", "weight": 1.0}, {"source": "h_stackfast_2026_package_scripts", "target": "h_stackfast_2026_package_scripts_dev_api", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L10", "weight": 1.0}, {"source": "h_stackfast_2026_package_scripts", "target": "h_stackfast_2026_package_scripts_dev_web", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L11", "weight": 1.0}, {"source": "h_stackfast_2026_package_scripts", "target": "h_stackfast_2026_package_scripts_build", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L12", "weight": 1.0}, {"source": "h_stackfast_2026_package_scripts", "target": "h_stackfast_2026_package_scripts_lint", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L13", "weight": 1.0}, {"source": "h_stackfast_2026_package_scripts", "target": "h_stackfast_2026_package_scripts_test", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L14", "weight": 1.0}, {"source": "h_stackfast_2026_package_scripts", "target": "h_stackfast_2026_package_scripts_test_e2e", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L15", "weight": 1.0}, {"source": "h_stackfast_2026_package_scripts", "target": "h_stackfast_2026_package_scripts_type_check", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L16", "weight": 1.0}, {"source": "h_stackfast_2026_package_scripts", "target": "h_stackfast_2026_package_scripts_seed", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L17", "weight": 1.0}, {"source": "h_stackfast_2026_package_scripts", "target": "h_stackfast_2026_package_scripts_validate_registry", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L18", "weight": 1.0}, {"source": "h_stackfast_2026_package_json", "target": "h_stackfast_2026_package_devdependencies", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L20", "weight": 1.0}, {"source": "h_stackfast_2026_package_devdependencies", "target": "h_stackfast_2026_package_devdependencies_eslint_js", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L21", "weight": 1.0}, {"source": "h_stackfast_2026_package_devdependencies_eslint_js", "target": "eslint_js", "relation": "imports", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L21", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_package_devdependencies", "target": "h_stackfast_2026_package_devdependencies_playwright_test", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L22", "weight": 1.0}, {"source": "h_stackfast_2026_package_devdependencies_playwright_test", "target": "playwright_test", "relation": "imports", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L22", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_package_devdependencies", "target": "h_stackfast_2026_package_devdependencies_types_node", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L23", "weight": 1.0}, {"source": "h_stackfast_2026_package_devdependencies_types_node", "target": "types_node", "relation": "imports", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L23", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_package_devdependencies", "target": "h_stackfast_2026_package_devdependencies_concurrently", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L24", "weight": 1.0}, {"source": "h_stackfast_2026_package_devdependencies_concurrently", "target": "concurrently", "relation": "imports", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L24", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_package_devdependencies", "target": "h_stackfast_2026_package_devdependencies_dotenv_cli", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L25", "weight": 1.0}, {"source": "h_stackfast_2026_package_devdependencies_dotenv_cli", "target": "dotenv_cli", "relation": "imports", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L25", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_package_devdependencies", "target": "h_stackfast_2026_package_devdependencies_eslint", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L26", "weight": 1.0}, {"source": "h_stackfast_2026_package_devdependencies_eslint", "target": "eslint", "relation": "imports", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L26", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_package_devdependencies", "target": "h_stackfast_2026_package_devdependencies_prettier", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L27", "weight": 1.0}, {"source": "h_stackfast_2026_package_devdependencies_prettier", "target": "prettier", "relation": "imports", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L27", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_package_devdependencies", "target": "h_stackfast_2026_package_devdependencies_tsx", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L28", "weight": 1.0}, {"source": "h_stackfast_2026_package_devdependencies_tsx", "target": "tsx", "relation": "imports", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L28", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_package_devdependencies", "target": "h_stackfast_2026_package_devdependencies_typescript", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L29", "weight": 1.0}, {"source": "h_stackfast_2026_package_devdependencies_typescript", "target": "typescript", "relation": "imports", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L29", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_package_devdependencies", "target": "h_stackfast_2026_package_devdependencies_typescript_eslint", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L30", "weight": 1.0}, {"source": "h_stackfast_2026_package_devdependencies_typescript_eslint", "target": "typescript_eslint", "relation": "imports", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L30", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_package_devdependencies", "target": "h_stackfast_2026_package_devdependencies_vite", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L31", "weight": 1.0}, {"source": "h_stackfast_2026_package_devdependencies_vite", "target": "vite", "relation": "imports", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L31", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_package_devdependencies", "target": "h_stackfast_2026_package_devdependencies_vitest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L32", "weight": 1.0}, {"source": "h_stackfast_2026_package_devdependencies_vitest", "target": "vitest", "relation": "imports", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L32", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_package_json", "target": "h_stackfast_2026_package_dependencies", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L34", "weight": 1.0}, {"source": "h_stackfast_2026_package_dependencies", "target": "h_stackfast_2026_package_dependencies_better_auth_infra", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L35", "weight": 1.0}, {"source": "h_stackfast_2026_package_dependencies_better_auth_infra", "target": "better_auth_infra", "relation": "imports", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L35", "weight": 1.0, "context": "import"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.4/8014c6a14b9bb69b1a3e57ab478d2cf02cde576d52330b0c0e7fe61dadebd3d3.json b/graphify-out/cache/ast/v0.9.4/8014c6a14b9bb69b1a3e57ab478d2cf02cde576d52330b0c0e7fe61dadebd3d3.json new file mode 100644 index 0000000..e9fc16c --- /dev/null +++ b/graphify-out/cache/ast/v0.9.4/8014c6a14b9bb69b1a3e57ab478d2cf02cde576d52330b0c0e7fe61dadebd3d3.json @@ -0,0 +1 @@ +{"nodes": [{"id": "h_stackfast_2026_tsconfig_base_json", "label": "tsconfig.base.json", "file_type": "code", "source_file": "tsconfig.base.json", "source_location": "L1"}, {"id": "h_stackfast_2026_tsconfig_base_compileroptions", "label": "compilerOptions", "file_type": "code", "source_file": "tsconfig.base.json", "source_location": "L2"}, {"id": "h_stackfast_2026_tsconfig_base_compileroptions_target", "label": "target", "file_type": "code", "source_file": "tsconfig.base.json", "source_location": "L3"}, {"id": "h_stackfast_2026_tsconfig_base_compileroptions_module", "label": "module", "file_type": "code", "source_file": "tsconfig.base.json", "source_location": "L4"}, {"id": "h_stackfast_2026_tsconfig_base_compileroptions_moduleresolution", "label": "moduleResolution", "file_type": "code", "source_file": "tsconfig.base.json", "source_location": "L5"}, {"id": "h_stackfast_2026_tsconfig_base_compileroptions_strict", "label": "strict", "file_type": "code", "source_file": "tsconfig.base.json", "source_location": "L6"}, {"id": "h_stackfast_2026_tsconfig_base_compileroptions_esmoduleinterop", "label": "esModuleInterop", "file_type": "code", "source_file": "tsconfig.base.json", "source_location": "L7"}, {"id": "h_stackfast_2026_tsconfig_base_compileroptions_skiplibcheck", "label": "skipLibCheck", "file_type": "code", "source_file": "tsconfig.base.json", "source_location": "L8"}, {"id": "h_stackfast_2026_tsconfig_base_compileroptions_forceconsistentcasinginfilenames", "label": "forceConsistentCasingInFileNames", "file_type": "code", "source_file": "tsconfig.base.json", "source_location": "L9"}, {"id": "h_stackfast_2026_tsconfig_base_compileroptions_resolvejsonmodule", "label": "resolveJsonModule", "file_type": "code", "source_file": "tsconfig.base.json", "source_location": "L10"}, {"id": "h_stackfast_2026_tsconfig_base_compileroptions_isolatedmodules", "label": "isolatedModules", "file_type": "code", "source_file": "tsconfig.base.json", "source_location": "L11"}], "edges": [{"source": "h_stackfast_2026_tsconfig_base_json", "target": "h_stackfast_2026_tsconfig_base_compileroptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tsconfig.base.json", "source_location": "L2", "weight": 1.0}, {"source": "h_stackfast_2026_tsconfig_base_compileroptions", "target": "h_stackfast_2026_tsconfig_base_compileroptions_target", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tsconfig.base.json", "source_location": "L3", "weight": 1.0}, {"source": "h_stackfast_2026_tsconfig_base_compileroptions", "target": "h_stackfast_2026_tsconfig_base_compileroptions_module", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tsconfig.base.json", "source_location": "L4", "weight": 1.0}, {"source": "h_stackfast_2026_tsconfig_base_compileroptions", "target": "h_stackfast_2026_tsconfig_base_compileroptions_moduleresolution", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tsconfig.base.json", "source_location": "L5", "weight": 1.0}, {"source": "h_stackfast_2026_tsconfig_base_compileroptions", "target": "h_stackfast_2026_tsconfig_base_compileroptions_strict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tsconfig.base.json", "source_location": "L6", "weight": 1.0}, {"source": "h_stackfast_2026_tsconfig_base_compileroptions", "target": "h_stackfast_2026_tsconfig_base_compileroptions_esmoduleinterop", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tsconfig.base.json", "source_location": "L7", "weight": 1.0}, {"source": "h_stackfast_2026_tsconfig_base_compileroptions", "target": "h_stackfast_2026_tsconfig_base_compileroptions_skiplibcheck", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tsconfig.base.json", "source_location": "L8", "weight": 1.0}, {"source": "h_stackfast_2026_tsconfig_base_compileroptions", "target": "h_stackfast_2026_tsconfig_base_compileroptions_forceconsistentcasinginfilenames", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tsconfig.base.json", "source_location": "L9", "weight": 1.0}, {"source": "h_stackfast_2026_tsconfig_base_compileroptions", "target": "h_stackfast_2026_tsconfig_base_compileroptions_resolvejsonmodule", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tsconfig.base.json", "source_location": "L10", "weight": 1.0}, {"source": "h_stackfast_2026_tsconfig_base_compileroptions", "target": "h_stackfast_2026_tsconfig_base_compileroptions_isolatedmodules", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tsconfig.base.json", "source_location": "L11", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.4/83765cf899a3b32a8ac7ac889d37563134840bc6e8c7d23a30ba945656b75c8c.json b/graphify-out/cache/ast/v0.9.4/83765cf899a3b32a8ac7ac889d37563134840bc6e8c7d23a30ba945656b75c8c.json new file mode 100644 index 0000000..58c0a56 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.4/83765cf899a3b32a8ac7ac889d37563134840bc6e8c7d23a30ba945656b75c8c.json @@ -0,0 +1 @@ +{"nodes": [{"id": "h_stackfast_2026_packages_shared_package_json", "label": "package.json", "file_type": "code", "source_file": "packages/shared/package.json", "source_location": "L1"}, {"id": "h_stackfast_2026_packages_shared_package_name", "label": "name", "file_type": "code", "source_file": "packages/shared/package.json", "source_location": "L2"}, {"id": "h_stackfast_2026_packages_shared_package_version", "label": "version", "file_type": "code", "source_file": "packages/shared/package.json", "source_location": "L3"}, {"id": "h_stackfast_2026_packages_shared_package_private", "label": "private", "file_type": "code", "source_file": "packages/shared/package.json", "source_location": "L4"}, {"id": "h_stackfast_2026_packages_shared_package_type", "label": "type", "file_type": "code", "source_file": "packages/shared/package.json", "source_location": "L5"}, {"id": "h_stackfast_2026_packages_shared_package_main", "label": "main", "file_type": "code", "source_file": "packages/shared/package.json", "source_location": "L6"}, {"id": "h_stackfast_2026_packages_shared_package_types", "label": "types", "file_type": "code", "source_file": "packages/shared/package.json", "source_location": "L7"}, {"id": "h_stackfast_2026_packages_shared_package_scripts", "label": "scripts", "file_type": "code", "source_file": "packages/shared/package.json", "source_location": "L8"}, {"id": "h_stackfast_2026_packages_shared_package_scripts_lint", "label": "lint", "file_type": "code", "source_file": "packages/shared/package.json", "source_location": "L9"}, {"id": "h_stackfast_2026_packages_shared_package_scripts_type_check", "label": "type-check", "file_type": "code", "source_file": "packages/shared/package.json", "source_location": "L10"}, {"id": "h_stackfast_2026_packages_shared_package_scripts_test", "label": "test", "file_type": "code", "source_file": "packages/shared/package.json", "source_location": "L11"}, {"id": "h_stackfast_2026_packages_shared_package_devdependencies", "label": "devDependencies", "file_type": "code", "source_file": "packages/shared/package.json", "source_location": "L13"}, {"id": "h_stackfast_2026_packages_shared_package_devdependencies_typescript", "label": "typescript", "file_type": "code", "source_file": "packages/shared/package.json", "source_location": "L14"}], "edges": [{"source": "h_stackfast_2026_packages_shared_package_json", "target": "h_stackfast_2026_packages_shared_package_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/shared/package.json", "source_location": "L2", "weight": 1.0}, {"source": "h_stackfast_2026_packages_shared_package_json", "target": "h_stackfast_2026_packages_shared_package_version", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/shared/package.json", "source_location": "L3", "weight": 1.0}, {"source": "h_stackfast_2026_packages_shared_package_json", "target": "h_stackfast_2026_packages_shared_package_private", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/shared/package.json", "source_location": "L4", "weight": 1.0}, {"source": "h_stackfast_2026_packages_shared_package_json", "target": "h_stackfast_2026_packages_shared_package_type", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/shared/package.json", "source_location": "L5", "weight": 1.0}, {"source": "h_stackfast_2026_packages_shared_package_json", "target": "h_stackfast_2026_packages_shared_package_main", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/shared/package.json", "source_location": "L6", "weight": 1.0}, {"source": "h_stackfast_2026_packages_shared_package_json", "target": "h_stackfast_2026_packages_shared_package_types", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/shared/package.json", "source_location": "L7", "weight": 1.0}, {"source": "h_stackfast_2026_packages_shared_package_json", "target": "h_stackfast_2026_packages_shared_package_scripts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/shared/package.json", "source_location": "L8", "weight": 1.0}, {"source": "h_stackfast_2026_packages_shared_package_scripts", "target": "h_stackfast_2026_packages_shared_package_scripts_lint", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/shared/package.json", "source_location": "L9", "weight": 1.0}, {"source": "h_stackfast_2026_packages_shared_package_scripts", "target": "h_stackfast_2026_packages_shared_package_scripts_type_check", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/shared/package.json", "source_location": "L10", "weight": 1.0}, {"source": "h_stackfast_2026_packages_shared_package_scripts", "target": "h_stackfast_2026_packages_shared_package_scripts_test", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/shared/package.json", "source_location": "L11", "weight": 1.0}, {"source": "h_stackfast_2026_packages_shared_package_json", "target": "h_stackfast_2026_packages_shared_package_devdependencies", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/shared/package.json", "source_location": "L13", "weight": 1.0}, {"source": "h_stackfast_2026_packages_shared_package_devdependencies", "target": "h_stackfast_2026_packages_shared_package_devdependencies_typescript", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/shared/package.json", "source_location": "L14", "weight": 1.0}, {"source": "h_stackfast_2026_packages_shared_package_devdependencies_typescript", "target": "typescript", "relation": "imports", "confidence": "EXTRACTED", "source_file": "packages/shared/package.json", "source_location": "L14", "weight": 1.0, "context": "import"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.4/92ceb95c5931beef0cfcee683ae4dc9f2d778757afa53e6701b4160e8156384c.json b/graphify-out/cache/ast/v0.9.4/92ceb95c5931beef0cfcee683ae4dc9f2d778757afa53e6701b4160e8156384c.json new file mode 100644 index 0000000..5478269 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.4/92ceb95c5931beef0cfcee683ae4dc9f2d778757afa53e6701b4160e8156384c.json @@ -0,0 +1 @@ +{"nodes": [{"id": "h_stackfast_2026_packages_ai_package_json", "label": "package.json", "file_type": "code", "source_file": "packages/ai/package.json", "source_location": "L1"}, {"id": "h_stackfast_2026_packages_ai_package_name", "label": "name", "file_type": "code", "source_file": "packages/ai/package.json", "source_location": "L2"}, {"id": "h_stackfast_2026_packages_ai_package_version", "label": "version", "file_type": "code", "source_file": "packages/ai/package.json", "source_location": "L3"}, {"id": "h_stackfast_2026_packages_ai_package_private", "label": "private", "file_type": "code", "source_file": "packages/ai/package.json", "source_location": "L4"}, {"id": "h_stackfast_2026_packages_ai_package_type", "label": "type", "file_type": "code", "source_file": "packages/ai/package.json", "source_location": "L5"}, {"id": "h_stackfast_2026_packages_ai_package_main", "label": "main", "file_type": "code", "source_file": "packages/ai/package.json", "source_location": "L6"}, {"id": "h_stackfast_2026_packages_ai_package_types", "label": "types", "file_type": "code", "source_file": "packages/ai/package.json", "source_location": "L7"}, {"id": "h_stackfast_2026_packages_ai_package_scripts", "label": "scripts", "file_type": "code", "source_file": "packages/ai/package.json", "source_location": "L8"}, {"id": "h_stackfast_2026_packages_ai_package_scripts_lint", "label": "lint", "file_type": "code", "source_file": "packages/ai/package.json", "source_location": "L9"}, {"id": "h_stackfast_2026_packages_ai_package_scripts_type_check", "label": "type-check", "file_type": "code", "source_file": "packages/ai/package.json", "source_location": "L10"}, {"id": "h_stackfast_2026_packages_ai_package_scripts_test", "label": "test", "file_type": "code", "source_file": "packages/ai/package.json", "source_location": "L11"}, {"id": "h_stackfast_2026_packages_ai_package_dependencies", "label": "dependencies", "file_type": "code", "source_file": "packages/ai/package.json", "source_location": "L13"}, {"id": "h_stackfast_2026_packages_ai_package_dependencies_ai_sdk_azure", "label": "@ai-sdk/azure", "file_type": "code", "source_file": "packages/ai/package.json", "source_location": "L14"}, {"id": "h_stackfast_2026_packages_ai_package_dependencies_ai_sdk_google", "label": "@ai-sdk/google", "file_type": "code", "source_file": "packages/ai/package.json", "source_location": "L15"}, {"id": "h_stackfast_2026_packages_ai_package_dependencies_stackfast_schemas", "label": "@stackfast/schemas", "file_type": "code", "source_file": "packages/ai/package.json", "source_location": "L16"}, {"id": "h_stackfast_2026_packages_ai_package_dependencies_stackfast_shared", "label": "@stackfast/shared", "file_type": "code", "source_file": "packages/ai/package.json", "source_location": "L17"}, {"id": "h_stackfast_2026_packages_ai_package_dependencies_ai", "label": "ai", "file_type": "code", "source_file": "packages/ai/package.json", "source_location": "L18"}, {"id": "h_stackfast_2026_packages_ai_package_dependencies_zod", "label": "zod", "file_type": "code", "source_file": "packages/ai/package.json", "source_location": "L19"}, {"id": "h_stackfast_2026_packages_ai_package_devdependencies", "label": "devDependencies", "file_type": "code", "source_file": "packages/ai/package.json", "source_location": "L21"}, {"id": "h_stackfast_2026_packages_ai_package_devdependencies_typescript", "label": "typescript", "file_type": "code", "source_file": "packages/ai/package.json", "source_location": "L22"}], "edges": [{"source": "h_stackfast_2026_packages_ai_package_json", "target": "h_stackfast_2026_packages_ai_package_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/ai/package.json", "source_location": "L2", "weight": 1.0}, {"source": "h_stackfast_2026_packages_ai_package_json", "target": "h_stackfast_2026_packages_ai_package_version", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/ai/package.json", "source_location": "L3", "weight": 1.0}, {"source": "h_stackfast_2026_packages_ai_package_json", "target": "h_stackfast_2026_packages_ai_package_private", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/ai/package.json", "source_location": "L4", "weight": 1.0}, {"source": "h_stackfast_2026_packages_ai_package_json", "target": "h_stackfast_2026_packages_ai_package_type", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/ai/package.json", "source_location": "L5", "weight": 1.0}, {"source": "h_stackfast_2026_packages_ai_package_json", "target": "h_stackfast_2026_packages_ai_package_main", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/ai/package.json", "source_location": "L6", "weight": 1.0}, {"source": "h_stackfast_2026_packages_ai_package_json", "target": "h_stackfast_2026_packages_ai_package_types", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/ai/package.json", "source_location": "L7", "weight": 1.0}, {"source": "h_stackfast_2026_packages_ai_package_json", "target": "h_stackfast_2026_packages_ai_package_scripts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/ai/package.json", "source_location": "L8", "weight": 1.0}, {"source": "h_stackfast_2026_packages_ai_package_scripts", "target": "h_stackfast_2026_packages_ai_package_scripts_lint", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/ai/package.json", "source_location": "L9", "weight": 1.0}, {"source": "h_stackfast_2026_packages_ai_package_scripts", "target": "h_stackfast_2026_packages_ai_package_scripts_type_check", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/ai/package.json", "source_location": "L10", "weight": 1.0}, {"source": "h_stackfast_2026_packages_ai_package_scripts", "target": "h_stackfast_2026_packages_ai_package_scripts_test", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/ai/package.json", "source_location": "L11", "weight": 1.0}, {"source": "h_stackfast_2026_packages_ai_package_json", "target": "h_stackfast_2026_packages_ai_package_dependencies", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/ai/package.json", "source_location": "L13", "weight": 1.0}, {"source": "h_stackfast_2026_packages_ai_package_dependencies", "target": "h_stackfast_2026_packages_ai_package_dependencies_ai_sdk_azure", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/ai/package.json", "source_location": "L14", "weight": 1.0}, {"source": "h_stackfast_2026_packages_ai_package_dependencies_ai_sdk_azure", "target": "ai_sdk_azure", "relation": "imports", "confidence": "EXTRACTED", "source_file": "packages/ai/package.json", "source_location": "L14", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_packages_ai_package_dependencies", "target": "h_stackfast_2026_packages_ai_package_dependencies_ai_sdk_google", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/ai/package.json", "source_location": "L15", "weight": 1.0}, {"source": "h_stackfast_2026_packages_ai_package_dependencies_ai_sdk_google", "target": "ai_sdk_google", "relation": "imports", "confidence": "EXTRACTED", "source_file": "packages/ai/package.json", "source_location": "L15", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_packages_ai_package_dependencies", "target": "h_stackfast_2026_packages_ai_package_dependencies_stackfast_schemas", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/ai/package.json", "source_location": "L16", "weight": 1.0}, {"source": "h_stackfast_2026_packages_ai_package_dependencies_stackfast_schemas", "target": "stackfast_schemas", "relation": "imports", "confidence": "EXTRACTED", "source_file": "packages/ai/package.json", "source_location": "L16", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_packages_ai_package_dependencies", "target": "h_stackfast_2026_packages_ai_package_dependencies_stackfast_shared", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/ai/package.json", "source_location": "L17", "weight": 1.0}, {"source": "h_stackfast_2026_packages_ai_package_dependencies_stackfast_shared", "target": "stackfast_shared", "relation": "imports", "confidence": "EXTRACTED", "source_file": "packages/ai/package.json", "source_location": "L17", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_packages_ai_package_dependencies", "target": "h_stackfast_2026_packages_ai_package_dependencies_ai", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/ai/package.json", "source_location": "L18", "weight": 1.0}, {"source": "h_stackfast_2026_packages_ai_package_dependencies_ai", "target": "ai", "relation": "imports", "confidence": "EXTRACTED", "source_file": "packages/ai/package.json", "source_location": "L18", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_packages_ai_package_dependencies", "target": "h_stackfast_2026_packages_ai_package_dependencies_zod", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/ai/package.json", "source_location": "L19", "weight": 1.0}, {"source": "h_stackfast_2026_packages_ai_package_dependencies_zod", "target": "zod", "relation": "imports", "confidence": "EXTRACTED", "source_file": "packages/ai/package.json", "source_location": "L19", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_packages_ai_package_json", "target": "h_stackfast_2026_packages_ai_package_devdependencies", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/ai/package.json", "source_location": "L21", "weight": 1.0}, {"source": "h_stackfast_2026_packages_ai_package_devdependencies", "target": "h_stackfast_2026_packages_ai_package_devdependencies_typescript", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/ai/package.json", "source_location": "L22", "weight": 1.0}, {"source": "h_stackfast_2026_packages_ai_package_devdependencies_typescript", "target": "typescript", "relation": "imports", "confidence": "EXTRACTED", "source_file": "packages/ai/package.json", "source_location": "L22", "weight": 1.0, "context": "import"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.4/a1703336dde44373694584cec9647dfd541ec9884c3f03aa66b07d06309cbacf.json b/graphify-out/cache/ast/v0.9.4/a1703336dde44373694584cec9647dfd541ec9884c3f03aa66b07d06309cbacf.json new file mode 100644 index 0000000..dcc047e --- /dev/null +++ b/graphify-out/cache/ast/v0.9.4/a1703336dde44373694584cec9647dfd541ec9884c3f03aa66b07d06309cbacf.json @@ -0,0 +1 @@ +{"nodes": [{"id": "h_stackfast_2026_packages_schemas_package_json", "label": "package.json", "file_type": "code", "source_file": "packages/schemas/package.json", "source_location": "L1"}, {"id": "h_stackfast_2026_packages_schemas_package_name", "label": "name", "file_type": "code", "source_file": "packages/schemas/package.json", "source_location": "L2"}, {"id": "h_stackfast_2026_packages_schemas_package_version", "label": "version", "file_type": "code", "source_file": "packages/schemas/package.json", "source_location": "L3"}, {"id": "h_stackfast_2026_packages_schemas_package_private", "label": "private", "file_type": "code", "source_file": "packages/schemas/package.json", "source_location": "L4"}, {"id": "h_stackfast_2026_packages_schemas_package_type", "label": "type", "file_type": "code", "source_file": "packages/schemas/package.json", "source_location": "L5"}, {"id": "h_stackfast_2026_packages_schemas_package_main", "label": "main", "file_type": "code", "source_file": "packages/schemas/package.json", "source_location": "L6"}, {"id": "h_stackfast_2026_packages_schemas_package_types", "label": "types", "file_type": "code", "source_file": "packages/schemas/package.json", "source_location": "L7"}, {"id": "h_stackfast_2026_packages_schemas_package_exports", "label": "exports", "file_type": "code", "source_file": "packages/schemas/package.json", "source_location": "L8"}, {"id": "h_stackfast_2026_packages_schemas_package_exports_db", "label": "./db", "file_type": "code", "source_file": "packages/schemas/package.json", "source_location": "L10"}, {"id": "h_stackfast_2026_packages_schemas_package_scripts", "label": "scripts", "file_type": "code", "source_file": "packages/schemas/package.json", "source_location": "L12"}, {"id": "h_stackfast_2026_packages_schemas_package_scripts_build", "label": "build", "file_type": "code", "source_file": "packages/schemas/package.json", "source_location": "L13"}, {"id": "h_stackfast_2026_packages_schemas_package_scripts_type_check", "label": "type-check", "file_type": "code", "source_file": "packages/schemas/package.json", "source_location": "L14"}, {"id": "h_stackfast_2026_packages_schemas_package_scripts_lint", "label": "lint", "file_type": "code", "source_file": "packages/schemas/package.json", "source_location": "L15"}, {"id": "h_stackfast_2026_packages_schemas_package_dependencies", "label": "dependencies", "file_type": "code", "source_file": "packages/schemas/package.json", "source_location": "L17"}, {"id": "h_stackfast_2026_packages_schemas_package_dependencies_drizzle_orm", "label": "drizzle-orm", "file_type": "code", "source_file": "packages/schemas/package.json", "source_location": "L18"}, {"id": "h_stackfast_2026_packages_schemas_package_dependencies_drizzle_zod", "label": "drizzle-zod", "file_type": "code", "source_file": "packages/schemas/package.json", "source_location": "L19"}, {"id": "h_stackfast_2026_packages_schemas_package_dependencies_zod", "label": "zod", "file_type": "code", "source_file": "packages/schemas/package.json", "source_location": "L20"}, {"id": "h_stackfast_2026_packages_schemas_package_devdependencies", "label": "devDependencies", "file_type": "code", "source_file": "packages/schemas/package.json", "source_location": "L22"}, {"id": "h_stackfast_2026_packages_schemas_package_devdependencies_types_node", "label": "@types/node", "file_type": "code", "source_file": "packages/schemas/package.json", "source_location": "L23"}, {"id": "h_stackfast_2026_packages_schemas_package_devdependencies_typescript", "label": "typescript", "file_type": "code", "source_file": "packages/schemas/package.json", "source_location": "L24"}], "edges": [{"source": "h_stackfast_2026_packages_schemas_package_json", "target": "h_stackfast_2026_packages_schemas_package_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/schemas/package.json", "source_location": "L2", "weight": 1.0}, {"source": "h_stackfast_2026_packages_schemas_package_json", "target": "h_stackfast_2026_packages_schemas_package_version", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/schemas/package.json", "source_location": "L3", "weight": 1.0}, {"source": "h_stackfast_2026_packages_schemas_package_json", "target": "h_stackfast_2026_packages_schemas_package_private", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/schemas/package.json", "source_location": "L4", "weight": 1.0}, {"source": "h_stackfast_2026_packages_schemas_package_json", "target": "h_stackfast_2026_packages_schemas_package_type", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/schemas/package.json", "source_location": "L5", "weight": 1.0}, {"source": "h_stackfast_2026_packages_schemas_package_json", "target": "h_stackfast_2026_packages_schemas_package_main", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/schemas/package.json", "source_location": "L6", "weight": 1.0}, {"source": "h_stackfast_2026_packages_schemas_package_json", "target": "h_stackfast_2026_packages_schemas_package_types", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/schemas/package.json", "source_location": "L7", "weight": 1.0}, {"source": "h_stackfast_2026_packages_schemas_package_json", "target": "h_stackfast_2026_packages_schemas_package_exports", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/schemas/package.json", "source_location": "L8", "weight": 1.0}, {"source": "h_stackfast_2026_packages_schemas_package_exports", "target": "h_stackfast_2026_packages_schemas_package_exports_db", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/schemas/package.json", "source_location": "L10", "weight": 1.0}, {"source": "h_stackfast_2026_packages_schemas_package_json", "target": "h_stackfast_2026_packages_schemas_package_scripts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/schemas/package.json", "source_location": "L12", "weight": 1.0}, {"source": "h_stackfast_2026_packages_schemas_package_scripts", "target": "h_stackfast_2026_packages_schemas_package_scripts_build", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/schemas/package.json", "source_location": "L13", "weight": 1.0}, {"source": "h_stackfast_2026_packages_schemas_package_scripts", "target": "h_stackfast_2026_packages_schemas_package_scripts_type_check", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/schemas/package.json", "source_location": "L14", "weight": 1.0}, {"source": "h_stackfast_2026_packages_schemas_package_scripts", "target": "h_stackfast_2026_packages_schemas_package_scripts_lint", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/schemas/package.json", "source_location": "L15", "weight": 1.0}, {"source": "h_stackfast_2026_packages_schemas_package_json", "target": "h_stackfast_2026_packages_schemas_package_dependencies", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/schemas/package.json", "source_location": "L17", "weight": 1.0}, {"source": "h_stackfast_2026_packages_schemas_package_dependencies", "target": "h_stackfast_2026_packages_schemas_package_dependencies_drizzle_orm", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/schemas/package.json", "source_location": "L18", "weight": 1.0}, {"source": "h_stackfast_2026_packages_schemas_package_dependencies_drizzle_orm", "target": "drizzle_orm", "relation": "imports", "confidence": "EXTRACTED", "source_file": "packages/schemas/package.json", "source_location": "L18", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_packages_schemas_package_dependencies", "target": "h_stackfast_2026_packages_schemas_package_dependencies_drizzle_zod", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/schemas/package.json", "source_location": "L19", "weight": 1.0}, {"source": "h_stackfast_2026_packages_schemas_package_dependencies_drizzle_zod", "target": "drizzle_zod", "relation": "imports", "confidence": "EXTRACTED", "source_file": "packages/schemas/package.json", "source_location": "L19", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_packages_schemas_package_dependencies", "target": "h_stackfast_2026_packages_schemas_package_dependencies_zod", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/schemas/package.json", "source_location": "L20", "weight": 1.0}, {"source": "h_stackfast_2026_packages_schemas_package_dependencies_zod", "target": "zod", "relation": "imports", "confidence": "EXTRACTED", "source_file": "packages/schemas/package.json", "source_location": "L20", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_packages_schemas_package_json", "target": "h_stackfast_2026_packages_schemas_package_devdependencies", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/schemas/package.json", "source_location": "L22", "weight": 1.0}, {"source": "h_stackfast_2026_packages_schemas_package_devdependencies", "target": "h_stackfast_2026_packages_schemas_package_devdependencies_types_node", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/schemas/package.json", "source_location": "L23", "weight": 1.0}, {"source": "h_stackfast_2026_packages_schemas_package_devdependencies_types_node", "target": "types_node", "relation": "imports", "confidence": "EXTRACTED", "source_file": "packages/schemas/package.json", "source_location": "L23", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_packages_schemas_package_devdependencies", "target": "h_stackfast_2026_packages_schemas_package_devdependencies_typescript", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/schemas/package.json", "source_location": "L24", "weight": 1.0}, {"source": "h_stackfast_2026_packages_schemas_package_devdependencies_typescript", "target": "typescript", "relation": "imports", "confidence": "EXTRACTED", "source_file": "packages/schemas/package.json", "source_location": "L24", "weight": 1.0, "context": "import"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.4/a523449776f90e8491d5d3b7698d47fcc918038bdb865506cb592f1dc2bd120e.json b/graphify-out/cache/ast/v0.9.4/a523449776f90e8491d5d3b7698d47fcc918038bdb865506cb592f1dc2bd120e.json new file mode 100644 index 0000000..f19bd02 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.4/a523449776f90e8491d5d3b7698d47fcc918038bdb865506cb592f1dc2bd120e.json @@ -0,0 +1 @@ +{"nodes": [{"id": "h_stackfast_2026_packages_registry_tsconfig_json", "label": "tsconfig.json", "file_type": "code", "source_file": "packages/registry/tsconfig.json", "source_location": "L1"}, {"id": "h_stackfast_2026_packages_registry_tsconfig_extends", "label": "extends", "file_type": "code", "source_file": "packages/registry/tsconfig.json", "source_location": "L2"}, {"id": "h_stackfast_2026_packages_registry_tsconfig_compileroptions", "label": "compilerOptions", "file_type": "code", "source_file": "packages/registry/tsconfig.json", "source_location": "L3"}, {"id": "h_stackfast_2026_packages_registry_tsconfig_compileroptions_outdir", "label": "outDir", "file_type": "code", "source_file": "packages/registry/tsconfig.json", "source_location": "L4"}, {"id": "h_stackfast_2026_packages_registry_tsconfig_compileroptions_rootdir", "label": "rootDir", "file_type": "code", "source_file": "packages/registry/tsconfig.json", "source_location": "L5"}, {"id": "h_stackfast_2026_packages_registry_tsconfig_include", "label": "include", "file_type": "code", "source_file": "packages/registry/tsconfig.json", "source_location": "L7"}], "edges": [{"source": "h_stackfast_2026_packages_registry_tsconfig_json", "target": "h_stackfast_2026_packages_registry_tsconfig_extends", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/registry/tsconfig.json", "source_location": "L2", "weight": 1.0}, {"source": "h_stackfast_2026_packages_registry_tsconfig_json", "target": "ref_tsconfig_base_json", "relation": "extends", "confidence": "EXTRACTED", "source_file": "packages/registry/tsconfig.json", "source_location": "L2", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_packages_registry_tsconfig_json", "target": "h_stackfast_2026_packages_registry_tsconfig_compileroptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/registry/tsconfig.json", "source_location": "L3", "weight": 1.0}, {"source": "h_stackfast_2026_packages_registry_tsconfig_compileroptions", "target": "h_stackfast_2026_packages_registry_tsconfig_compileroptions_outdir", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/registry/tsconfig.json", "source_location": "L4", "weight": 1.0}, {"source": "h_stackfast_2026_packages_registry_tsconfig_compileroptions", "target": "h_stackfast_2026_packages_registry_tsconfig_compileroptions_rootdir", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/registry/tsconfig.json", "source_location": "L5", "weight": 1.0}, {"source": "h_stackfast_2026_packages_registry_tsconfig_json", "target": "h_stackfast_2026_packages_registry_tsconfig_include", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/registry/tsconfig.json", "source_location": "L7", "weight": 1.0}, {"source": "h_stackfast_2026_packages_registry_tsconfig_include", "target": "ref_src", "relation": "extends", "confidence": "EXTRACTED", "source_file": "packages/registry/tsconfig.json", "source_location": "L7", "weight": 1.0, "context": "import"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.4/ad530992a7dfe35db7dda66c70e1d323edfa10048c37b2207d3b85ddcb8d7d29.json b/graphify-out/cache/ast/v0.9.4/ad530992a7dfe35db7dda66c70e1d323edfa10048c37b2207d3b85ddcb8d7d29.json new file mode 100644 index 0000000..46b125e --- /dev/null +++ b/graphify-out/cache/ast/v0.9.4/ad530992a7dfe35db7dda66c70e1d323edfa10048c37b2207d3b85ddcb8d7d29.json @@ -0,0 +1 @@ +{"nodes": [{"id": "h_stackfast_2026_packages_registry_src_data_v1_manifest_json", "label": "manifest.json", "file_type": "code", "source_file": "packages/registry/src/data/v1/manifest.json", "source_location": "L1"}, {"id": "h_stackfast_2026_packages_registry_src_data_v1_manifest_version", "label": "version", "file_type": "code", "source_file": "packages/registry/src/data/v1/manifest.json", "source_location": "L2"}, {"id": "h_stackfast_2026_packages_registry_src_data_v1_manifest_updatedat", "label": "updatedAt", "file_type": "code", "source_file": "packages/registry/src/data/v1/manifest.json", "source_location": "L3"}, {"id": "h_stackfast_2026_packages_registry_src_data_v1_manifest_files", "label": "files", "file_type": "code", "source_file": "packages/registry/src/data/v1/manifest.json", "source_location": "L4"}, {"id": "h_stackfast_2026_packages_registry_src_data_v1_manifest_files_categories", "label": "categories", "file_type": "code", "source_file": "packages/registry/src/data/v1/manifest.json", "source_location": "L5"}, {"id": "h_stackfast_2026_packages_registry_src_data_v1_manifest_files_tools", "label": "tools", "file_type": "code", "source_file": "packages/registry/src/data/v1/manifest.json", "source_location": "L6"}, {"id": "h_stackfast_2026_packages_registry_src_data_v1_manifest_files_rules", "label": "rules", "file_type": "code", "source_file": "packages/registry/src/data/v1/manifest.json", "source_location": "L7"}, {"id": "h_stackfast_2026_packages_registry_src_data_v1_manifest_etag", "label": "etag", "file_type": "code", "source_file": "packages/registry/src/data/v1/manifest.json", "source_location": "L9"}], "edges": [{"source": "h_stackfast_2026_packages_registry_src_data_v1_manifest_json", "target": "h_stackfast_2026_packages_registry_src_data_v1_manifest_version", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/registry/src/data/v1/manifest.json", "source_location": "L2", "weight": 1.0}, {"source": "h_stackfast_2026_packages_registry_src_data_v1_manifest_json", "target": "h_stackfast_2026_packages_registry_src_data_v1_manifest_updatedat", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/registry/src/data/v1/manifest.json", "source_location": "L3", "weight": 1.0}, {"source": "h_stackfast_2026_packages_registry_src_data_v1_manifest_json", "target": "h_stackfast_2026_packages_registry_src_data_v1_manifest_files", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/registry/src/data/v1/manifest.json", "source_location": "L4", "weight": 1.0}, {"source": "h_stackfast_2026_packages_registry_src_data_v1_manifest_files", "target": "h_stackfast_2026_packages_registry_src_data_v1_manifest_files_categories", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/registry/src/data/v1/manifest.json", "source_location": "L5", "weight": 1.0}, {"source": "h_stackfast_2026_packages_registry_src_data_v1_manifest_files", "target": "h_stackfast_2026_packages_registry_src_data_v1_manifest_files_tools", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/registry/src/data/v1/manifest.json", "source_location": "L6", "weight": 1.0}, {"source": "h_stackfast_2026_packages_registry_src_data_v1_manifest_files", "target": "h_stackfast_2026_packages_registry_src_data_v1_manifest_files_rules", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/registry/src/data/v1/manifest.json", "source_location": "L7", "weight": 1.0}, {"source": "h_stackfast_2026_packages_registry_src_data_v1_manifest_json", "target": "h_stackfast_2026_packages_registry_src_data_v1_manifest_etag", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/registry/src/data/v1/manifest.json", "source_location": "L9", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.4/c995d23485b5fa3f4b718f39e53955b69469f2c13facdaad0822ba0eb5620850.json b/graphify-out/cache/ast/v0.9.4/c995d23485b5fa3f4b718f39e53955b69469f2c13facdaad0822ba0eb5620850.json new file mode 100644 index 0000000..2dd2149 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.4/c995d23485b5fa3f4b718f39e53955b69469f2c13facdaad0822ba0eb5620850.json @@ -0,0 +1 @@ +{"nodes": [{"id": "h_stackfast_2026_packages_ai_tsconfig_json", "label": "tsconfig.json", "file_type": "code", "source_file": "packages/ai/tsconfig.json", "source_location": "L1"}, {"id": "h_stackfast_2026_packages_ai_tsconfig_extends", "label": "extends", "file_type": "code", "source_file": "packages/ai/tsconfig.json", "source_location": "L2"}, {"id": "h_stackfast_2026_packages_ai_tsconfig_compileroptions", "label": "compilerOptions", "file_type": "code", "source_file": "packages/ai/tsconfig.json", "source_location": "L3"}, {"id": "h_stackfast_2026_packages_ai_tsconfig_compileroptions_outdir", "label": "outDir", "file_type": "code", "source_file": "packages/ai/tsconfig.json", "source_location": "L4"}, {"id": "h_stackfast_2026_packages_ai_tsconfig_compileroptions_rootdir", "label": "rootDir", "file_type": "code", "source_file": "packages/ai/tsconfig.json", "source_location": "L5"}, {"id": "h_stackfast_2026_packages_ai_tsconfig_include", "label": "include", "file_type": "code", "source_file": "packages/ai/tsconfig.json", "source_location": "L7"}], "edges": [{"source": "h_stackfast_2026_packages_ai_tsconfig_json", "target": "h_stackfast_2026_packages_ai_tsconfig_extends", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/ai/tsconfig.json", "source_location": "L2", "weight": 1.0}, {"source": "h_stackfast_2026_packages_ai_tsconfig_json", "target": "ref_tsconfig_base_json", "relation": "extends", "confidence": "EXTRACTED", "source_file": "packages/ai/tsconfig.json", "source_location": "L2", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_packages_ai_tsconfig_json", "target": "h_stackfast_2026_packages_ai_tsconfig_compileroptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/ai/tsconfig.json", "source_location": "L3", "weight": 1.0}, {"source": "h_stackfast_2026_packages_ai_tsconfig_compileroptions", "target": "h_stackfast_2026_packages_ai_tsconfig_compileroptions_outdir", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/ai/tsconfig.json", "source_location": "L4", "weight": 1.0}, {"source": "h_stackfast_2026_packages_ai_tsconfig_compileroptions", "target": "h_stackfast_2026_packages_ai_tsconfig_compileroptions_rootdir", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/ai/tsconfig.json", "source_location": "L5", "weight": 1.0}, {"source": "h_stackfast_2026_packages_ai_tsconfig_json", "target": "h_stackfast_2026_packages_ai_tsconfig_include", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/ai/tsconfig.json", "source_location": "L7", "weight": 1.0}, {"source": "h_stackfast_2026_packages_ai_tsconfig_include", "target": "ref_src", "relation": "extends", "confidence": "EXTRACTED", "source_file": "packages/ai/tsconfig.json", "source_location": "L7", "weight": 1.0, "context": "import"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.4/d1423122f93f5734e35694a112dfd9c0ef12af6c2a53752d6f85ce40b889a58a.json b/graphify-out/cache/ast/v0.9.4/d1423122f93f5734e35694a112dfd9c0ef12af6c2a53752d6f85ce40b889a58a.json new file mode 100644 index 0000000..a784246 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.4/d1423122f93f5734e35694a112dfd9c0ef12af6c2a53752d6f85ce40b889a58a.json @@ -0,0 +1 @@ +{"nodes": [{"id": "h_stackfast_2026_apps_api_tsconfig_json", "label": "tsconfig.json", "file_type": "code", "source_file": "apps/api/tsconfig.json", "source_location": "L1"}, {"id": "h_stackfast_2026_apps_api_tsconfig_extends", "label": "extends", "file_type": "code", "source_file": "apps/api/tsconfig.json", "source_location": "L2"}, {"id": "h_stackfast_2026_apps_api_tsconfig_compileroptions", "label": "compilerOptions", "file_type": "code", "source_file": "apps/api/tsconfig.json", "source_location": "L3"}, {"id": "h_stackfast_2026_apps_api_tsconfig_compileroptions_outdir", "label": "outDir", "file_type": "code", "source_file": "apps/api/tsconfig.json", "source_location": "L4"}, {"id": "h_stackfast_2026_apps_api_tsconfig_compileroptions_rootdir", "label": "rootDir", "file_type": "code", "source_file": "apps/api/tsconfig.json", "source_location": "L5"}, {"id": "h_stackfast_2026_apps_api_tsconfig_include", "label": "include", "file_type": "code", "source_file": "apps/api/tsconfig.json", "source_location": "L7"}], "edges": [{"source": "h_stackfast_2026_apps_api_tsconfig_json", "target": "h_stackfast_2026_apps_api_tsconfig_extends", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/api/tsconfig.json", "source_location": "L2", "weight": 1.0}, {"source": "h_stackfast_2026_apps_api_tsconfig_json", "target": "ref_tsconfig_base_json", "relation": "extends", "confidence": "EXTRACTED", "source_file": "apps/api/tsconfig.json", "source_location": "L2", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_api_tsconfig_json", "target": "h_stackfast_2026_apps_api_tsconfig_compileroptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/api/tsconfig.json", "source_location": "L3", "weight": 1.0}, {"source": "h_stackfast_2026_apps_api_tsconfig_compileroptions", "target": "h_stackfast_2026_apps_api_tsconfig_compileroptions_outdir", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/api/tsconfig.json", "source_location": "L4", "weight": 1.0}, {"source": "h_stackfast_2026_apps_api_tsconfig_compileroptions", "target": "h_stackfast_2026_apps_api_tsconfig_compileroptions_rootdir", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/api/tsconfig.json", "source_location": "L5", "weight": 1.0}, {"source": "h_stackfast_2026_apps_api_tsconfig_json", "target": "h_stackfast_2026_apps_api_tsconfig_include", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/api/tsconfig.json", "source_location": "L7", "weight": 1.0}, {"source": "h_stackfast_2026_apps_api_tsconfig_include", "target": "ref_src", "relation": "extends", "confidence": "EXTRACTED", "source_file": "apps/api/tsconfig.json", "source_location": "L7", "weight": 1.0, "context": "import"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.4/d5b832c4fe0efb36458583ac8aa49b0a245bc561a113af53741f5d80a42c7e57.json b/graphify-out/cache/ast/v0.9.4/d5b832c4fe0efb36458583ac8aa49b0a245bc561a113af53741f5d80a42c7e57.json new file mode 100644 index 0000000..9635c36 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.4/d5b832c4fe0efb36458583ac8aa49b0a245bc561a113af53741f5d80a42c7e57.json @@ -0,0 +1 @@ +{"nodes": [], "edges": [], "skipped": "data json (non-object root)"} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.4/e607a1d210cd9a43f1c51ae3491aa01506ff439de869e3c1705103fbef0a82a2.json b/graphify-out/cache/ast/v0.9.4/e607a1d210cd9a43f1c51ae3491aa01506ff439de869e3c1705103fbef0a82a2.json new file mode 100644 index 0000000..d16130b --- /dev/null +++ b/graphify-out/cache/ast/v0.9.4/e607a1d210cd9a43f1c51ae3491aa01506ff439de869e3c1705103fbef0a82a2.json @@ -0,0 +1 @@ +{"nodes": [{"id": "h_stackfast_2026_apps_web_tsconfig_json", "label": "tsconfig.json", "file_type": "code", "source_file": "apps/web/tsconfig.json", "source_location": "L1"}, {"id": "h_stackfast_2026_apps_web_tsconfig_extends", "label": "extends", "file_type": "code", "source_file": "apps/web/tsconfig.json", "source_location": "L2"}, {"id": "h_stackfast_2026_apps_web_tsconfig_compileroptions", "label": "compilerOptions", "file_type": "code", "source_file": "apps/web/tsconfig.json", "source_location": "L3"}, {"id": "h_stackfast_2026_apps_web_tsconfig_compileroptions_lib", "label": "lib", "file_type": "code", "source_file": "apps/web/tsconfig.json", "source_location": "L4"}, {"id": "h_stackfast_2026_apps_web_tsconfig_compileroptions_jsx", "label": "jsx", "file_type": "code", "source_file": "apps/web/tsconfig.json", "source_location": "L5"}, {"id": "h_stackfast_2026_apps_web_tsconfig_compileroptions_moduleresolution", "label": "moduleResolution", "file_type": "code", "source_file": "apps/web/tsconfig.json", "source_location": "L6"}, {"id": "h_stackfast_2026_apps_web_tsconfig_compileroptions_allowimportingtsextensions", "label": "allowImportingTsExtensions", "file_type": "code", "source_file": "apps/web/tsconfig.json", "source_location": "L7"}, {"id": "h_stackfast_2026_apps_web_tsconfig_compileroptions_noemit", "label": "noEmit", "file_type": "code", "source_file": "apps/web/tsconfig.json", "source_location": "L8"}, {"id": "h_stackfast_2026_apps_web_tsconfig_compileroptions_paths", "label": "paths", "file_type": "code", "source_file": "apps/web/tsconfig.json", "source_location": "L9"}, {"id": "h_stackfast_2026_apps_web_tsconfig_paths", "label": "@/*", "file_type": "code", "source_file": "apps/web/tsconfig.json", "source_location": "L10"}, {"id": "h_stackfast_2026_apps_web_tsconfig_compileroptions_types", "label": "types", "file_type": "code", "source_file": "apps/web/tsconfig.json", "source_location": "L12"}, {"id": "h_stackfast_2026_apps_web_tsconfig_include", "label": "include", "file_type": "code", "source_file": "apps/web/tsconfig.json", "source_location": "L14"}], "edges": [{"source": "h_stackfast_2026_apps_web_tsconfig_json", "target": "h_stackfast_2026_apps_web_tsconfig_extends", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/tsconfig.json", "source_location": "L2", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_tsconfig_json", "target": "ref_tsconfig_base_json", "relation": "extends", "confidence": "EXTRACTED", "source_file": "apps/web/tsconfig.json", "source_location": "L2", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_web_tsconfig_json", "target": "h_stackfast_2026_apps_web_tsconfig_compileroptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/tsconfig.json", "source_location": "L3", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_tsconfig_compileroptions", "target": "h_stackfast_2026_apps_web_tsconfig_compileroptions_lib", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/tsconfig.json", "source_location": "L4", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_tsconfig_compileroptions_lib", "target": "ref_dom", "relation": "extends", "confidence": "EXTRACTED", "source_file": "apps/web/tsconfig.json", "source_location": "L4", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_web_tsconfig_compileroptions_lib", "target": "ref_dom_iterable", "relation": "extends", "confidence": "EXTRACTED", "source_file": "apps/web/tsconfig.json", "source_location": "L4", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_web_tsconfig_compileroptions_lib", "target": "ref_es2022", "relation": "extends", "confidence": "EXTRACTED", "source_file": "apps/web/tsconfig.json", "source_location": "L4", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_web_tsconfig_compileroptions", "target": "h_stackfast_2026_apps_web_tsconfig_compileroptions_jsx", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/tsconfig.json", "source_location": "L5", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_tsconfig_compileroptions", "target": "h_stackfast_2026_apps_web_tsconfig_compileroptions_moduleresolution", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/tsconfig.json", "source_location": "L6", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_tsconfig_compileroptions", "target": "h_stackfast_2026_apps_web_tsconfig_compileroptions_allowimportingtsextensions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/tsconfig.json", "source_location": "L7", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_tsconfig_compileroptions", "target": "h_stackfast_2026_apps_web_tsconfig_compileroptions_noemit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/tsconfig.json", "source_location": "L8", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_tsconfig_compileroptions", "target": "h_stackfast_2026_apps_web_tsconfig_compileroptions_paths", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/tsconfig.json", "source_location": "L9", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_tsconfig_compileroptions_paths", "target": "h_stackfast_2026_apps_web_tsconfig_paths", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/tsconfig.json", "source_location": "L10", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_tsconfig_paths", "target": "ref_src", "relation": "extends", "confidence": "EXTRACTED", "source_file": "apps/web/tsconfig.json", "source_location": "L10", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_web_tsconfig_compileroptions", "target": "h_stackfast_2026_apps_web_tsconfig_compileroptions_types", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/tsconfig.json", "source_location": "L12", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_tsconfig_compileroptions_types", "target": "ref_vite_client", "relation": "extends", "confidence": "EXTRACTED", "source_file": "apps/web/tsconfig.json", "source_location": "L12", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_web_tsconfig_json", "target": "h_stackfast_2026_apps_web_tsconfig_include", "relation": "contains", "confidence": "EXTRACTED", "source_file": "apps/web/tsconfig.json", "source_location": "L14", "weight": 1.0}, {"source": "h_stackfast_2026_apps_web_tsconfig_include", "target": "ref_src", "relation": "extends", "confidence": "EXTRACTED", "source_file": "apps/web/tsconfig.json", "source_location": "L14", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_apps_web_tsconfig_include", "target": "ref_vite_config_ts", "relation": "extends", "confidence": "EXTRACTED", "source_file": "apps/web/tsconfig.json", "source_location": "L14", "weight": 1.0, "context": "import"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.4/ece6425ab1b5bd91f6183ddc7c97d5d6d7697df4998289718ddad3ff4ecd81a5.json b/graphify-out/cache/ast/v0.9.4/ece6425ab1b5bd91f6183ddc7c97d5d6d7697df4998289718ddad3ff4ecd81a5.json new file mode 100644 index 0000000..15c1ce5 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.4/ece6425ab1b5bd91f6183ddc7c97d5d6d7697df4998289718ddad3ff4ecd81a5.json @@ -0,0 +1 @@ +{"nodes": [{"id": "h_stackfast_2026_packages_schemas_tsconfig_json", "label": "tsconfig.json", "file_type": "code", "source_file": "packages/schemas/tsconfig.json", "source_location": "L1"}, {"id": "h_stackfast_2026_packages_schemas_tsconfig_extends", "label": "extends", "file_type": "code", "source_file": "packages/schemas/tsconfig.json", "source_location": "L2"}, {"id": "h_stackfast_2026_packages_schemas_tsconfig_compileroptions", "label": "compilerOptions", "file_type": "code", "source_file": "packages/schemas/tsconfig.json", "source_location": "L3"}, {"id": "h_stackfast_2026_packages_schemas_tsconfig_compileroptions_outdir", "label": "outDir", "file_type": "code", "source_file": "packages/schemas/tsconfig.json", "source_location": "L4"}, {"id": "h_stackfast_2026_packages_schemas_tsconfig_compileroptions_rootdir", "label": "rootDir", "file_type": "code", "source_file": "packages/schemas/tsconfig.json", "source_location": "L5"}, {"id": "h_stackfast_2026_packages_schemas_tsconfig_include", "label": "include", "file_type": "code", "source_file": "packages/schemas/tsconfig.json", "source_location": "L7"}], "edges": [{"source": "h_stackfast_2026_packages_schemas_tsconfig_json", "target": "h_stackfast_2026_packages_schemas_tsconfig_extends", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/schemas/tsconfig.json", "source_location": "L2", "weight": 1.0}, {"source": "h_stackfast_2026_packages_schemas_tsconfig_json", "target": "ref_tsconfig_base_json", "relation": "extends", "confidence": "EXTRACTED", "source_file": "packages/schemas/tsconfig.json", "source_location": "L2", "weight": 1.0, "context": "import"}, {"source": "h_stackfast_2026_packages_schemas_tsconfig_json", "target": "h_stackfast_2026_packages_schemas_tsconfig_compileroptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/schemas/tsconfig.json", "source_location": "L3", "weight": 1.0}, {"source": "h_stackfast_2026_packages_schemas_tsconfig_compileroptions", "target": "h_stackfast_2026_packages_schemas_tsconfig_compileroptions_outdir", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/schemas/tsconfig.json", "source_location": "L4", "weight": 1.0}, {"source": "h_stackfast_2026_packages_schemas_tsconfig_compileroptions", "target": "h_stackfast_2026_packages_schemas_tsconfig_compileroptions_rootdir", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/schemas/tsconfig.json", "source_location": "L5", "weight": 1.0}, {"source": "h_stackfast_2026_packages_schemas_tsconfig_json", "target": "h_stackfast_2026_packages_schemas_tsconfig_include", "relation": "contains", "confidence": "EXTRACTED", "source_file": "packages/schemas/tsconfig.json", "source_location": "L7", "weight": 1.0}, {"source": "h_stackfast_2026_packages_schemas_tsconfig_include", "target": "ref_src", "relation": "extends", "confidence": "EXTRACTED", "source_file": "packages/schemas/tsconfig.json", "source_location": "L7", "weight": 1.0, "context": "import"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.4/f05fa24ac59374be242f62ee328cd75e1fb7c9e59ad30b5658dda9f6a5961c31.json b/graphify-out/cache/ast/v0.9.4/f05fa24ac59374be242f62ee328cd75e1fb7c9e59ad30b5658dda9f6a5961c31.json new file mode 100644 index 0000000..9635c36 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.4/f05fa24ac59374be242f62ee328cd75e1fb7c9e59ad30b5658dda9f6a5961c31.json @@ -0,0 +1 @@ +{"nodes": [], "edges": [], "skipped": "data json (non-object root)"} \ No newline at end of file diff --git a/graphify-out/cache/semantic/0843cbe373950e18752d53eccd5b767441426e59f42dc2973a3d414aaa3864a3.json b/graphify-out/cache/semantic/0843cbe373950e18752d53eccd5b767441426e59f42dc2973a3d414aaa3864a3.json new file mode 100644 index 0000000..7135681 --- /dev/null +++ b/graphify-out/cache/semantic/0843cbe373950e18752d53eccd5b767441426e59f42dc2973a3d414aaa3864a3.json @@ -0,0 +1 @@ +{"nodes": [{"id": "roadmap_product_vision", "label": "AI-Assisted Architecture and Starter-Stack Copilot Product Vision", "file_type": "rationale", "source_file": "ROADMAP.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "roadmap_phase_0_cleanup", "label": "Phase 0 Freeze and Preserve", "file_type": "concept", "source_file": "ROADMAP.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "roadmap_phase_1_monorepo_scaffold", "label": "Phase 1 Monorepo Scaffold", "file_type": "concept", "source_file": "ROADMAP.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "roadmap_phase_2_core_engine", "label": "Phase 2 Extract Core Engine", "file_type": "concept", "source_file": "ROADMAP.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "roadmap_phase_3_api_surface", "label": "Phase 3 Clean API Surface", "file_type": "concept", "source_file": "ROADMAP.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "roadmap_phase_4_ui_rebuild", "label": "Phase 4 Rebuild UI", "file_type": "concept", "source_file": "ROADMAP.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "roadmap_phase_5_blueprint_ai", "label": "Phase 5 Blueprint Generator and AI", "file_type": "concept", "source_file": "ROADMAP.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "roadmap_phase_6_registry_expansion", "label": "Phase 6 Registry Expansion", "file_type": "concept", "source_file": "ROADMAP.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "roadmap_phase_7_quality_gate", "label": "Phase 7 Quality Gate", "file_type": "concept", "source_file": "ROADMAP.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "roadmap_phase_8_deployment_operations", "label": "Phase 8 Deployment and Operations", "file_type": "concept", "source_file": "ROADMAP.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "roadmap_phase_9_mvp_ship", "label": "Phase 9 MVP Ship", "file_type": "concept", "source_file": "ROADMAP.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "roadmap_post_mvp_roadmap", "label": "Post-MVP Roadmap", "file_type": "concept", "source_file": "ROADMAP.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "roadmap_success_metrics", "label": "Success Metrics", "file_type": "concept", "source_file": "ROADMAP.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "roadmap_phase_0_cleanup", "target": "salvage_manifest_salvage_manifest", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "ROADMAP.md", "source_location": null, "weight": 1.0}, {"source": "roadmap_phase_1_monorepo_scaffold", "target": "pnpm_workspace_pnpm_workspaces", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "ROADMAP.md", "source_location": null, "weight": 1.0}, {"source": "roadmap_phase_2_core_engine", "target": "readme_packages_registry", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "ROADMAP.md", "source_location": null, "weight": 1.0}, {"source": "roadmap_phase_2_core_engine", "target": "readme_packages_rules_engine", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "ROADMAP.md", "source_location": null, "weight": 1.0}, {"source": "roadmap_phase_2_core_engine", "target": "readme_packages_exporter", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "ROADMAP.md", "source_location": null, "weight": 1.0}, {"source": "roadmap_phase_3_api_surface", "target": "readme_api_surface", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "ROADMAP.md", "source_location": null, "weight": 1.0}, {"source": "roadmap_phase_5_blueprint_ai", "target": "decisions_002_ai_provider_strategy_ai_provider_strategy", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "ROADMAP.md", "source_location": null, "weight": 1.0}, {"source": "roadmap_phase_7_quality_gate", "target": "workflows_ci_ci_pipeline", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "ROADMAP.md", "source_location": null, "weight": 1.0}, {"source": "roadmap_phase_8_deployment_operations", "target": "decisions_003_deployment_architecture_deployment_architecture", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "ROADMAP.md", "source_location": null, "weight": 1.0}, {"source": "roadmap_product_vision", "target": "roadmap_success_metrics", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "ROADMAP.md", "source_location": null, "weight": 1.0}, {"source": "roadmap_product_vision", "target": "stackfast2026_explainable_stack_intelligence_platform", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "ROADMAP.md", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/0c0958c9c84f0a7df72e132e6d1eaea8cc93d754b1d2f757e8335a97ee9c9135.json b/graphify-out/cache/semantic/0c0958c9c84f0a7df72e132e6d1eaea8cc93d754b1d2f757e8335a97ee9c9135.json new file mode 100644 index 0000000..0b6c112 --- /dev/null +++ b/graphify-out/cache/semantic/0c0958c9c84f0a7df72e132e6d1eaea8cc93d754b1d2f757e8335a97ee9c9135.json @@ -0,0 +1 @@ +{"nodes": [{"id": "agents_agent_workflow_specification", "label": "Agent Workflow Specification", "file_type": "document", "source_file": "Agents.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "agents_orchestrator", "label": "Orchestrator", "file_type": "concept", "source_file": "Agents.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "agents_cleanup_agent", "label": "Cleanup Agent", "file_type": "concept", "source_file": "Agents.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "agents_architect_agent", "label": "Architect Agent", "file_type": "concept", "source_file": "Agents.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "agents_engine_agent", "label": "Engine Agent", "file_type": "concept", "source_file": "Agents.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "agents_api_agent", "label": "API Agent", "file_type": "concept", "source_file": "Agents.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "agents_ui_agent", "label": "UI Agent", "file_type": "concept", "source_file": "Agents.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "agents_qa_agent", "label": "QA Agent", "file_type": "concept", "source_file": "Agents.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "agents_phase_gate_criteria", "label": "Phase Gate Criteria", "file_type": "concept", "source_file": "Agents.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "agents_handoff_protocol", "label": "Agent Handoff Protocol", "file_type": "concept", "source_file": "Agents.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "agents_package_dependency_graph", "label": "Package Dependency Graph", "file_type": "concept", "source_file": "Agents.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "agents_agent_workflow_specification", "target": "agents_orchestrator", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Agents.md", "source_location": null, "weight": 1.0}, {"source": "agents_orchestrator", "target": "agents_phase_gate_criteria", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Agents.md", "source_location": null, "weight": 1.0}, {"source": "agents_orchestrator", "target": "agents_handoff_protocol", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Agents.md", "source_location": null, "weight": 1.0}, {"source": "agents_architect_agent", "target": "agents_package_dependency_graph", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Agents.md", "source_location": null, "weight": 1.0}, {"source": "agents_cleanup_agent", "target": "roadmap_phase_0_cleanup", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Agents.md", "source_location": null, "weight": 1.0}, {"source": "agents_architect_agent", "target": "roadmap_phase_1_monorepo_scaffold", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Agents.md", "source_location": null, "weight": 1.0}, {"source": "agents_engine_agent", "target": "roadmap_phase_2_core_engine", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Agents.md", "source_location": null, "weight": 1.0}, {"source": "agents_api_agent", "target": "roadmap_phase_3_api_surface", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Agents.md", "source_location": null, "weight": 1.0}, {"source": "agents_ui_agent", "target": "roadmap_phase_4_ui_rebuild", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Agents.md", "source_location": null, "weight": 1.0}, {"source": "agents_qa_agent", "target": "roadmap_phase_7_quality_gate", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Agents.md", "source_location": null, "weight": 1.0}, {"source": "agents_qa_agent", "target": "roadmap_phase_8_deployment_operations", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Agents.md", "source_location": null, "weight": 1.0}, {"source": "agents_qa_agent", "target": "roadmap_phase_9_mvp_ship", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Agents.md", "source_location": null, "weight": 1.0}, {"source": "agents_api_agent", "target": "readme_api_surface", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Agents.md", "source_location": null, "weight": 1.0}, {"source": "agents_ui_agent", "target": "readme_packages_exporter", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Agents.md", "source_location": null, "weight": 1.0}, {"source": "agents_engine_agent", "target": "readme_packages_registry", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Agents.md", "source_location": null, "weight": 1.0}, {"source": "agents_engine_agent", "target": "readme_packages_rules_engine", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Agents.md", "source_location": null, "weight": 1.0}, {"source": "agents_engine_agent", "target": "readme_packages_schemas", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Agents.md", "source_location": null, "weight": 1.0}], "hyperedges": [{"id": "agents_rebuild_execution_model", "label": "Rebuild Execution Model", "nodes": ["agents_orchestrator", "agents_cleanup_agent", "agents_architect_agent", "agents_engine_agent", "agents_api_agent", "agents_ui_agent", "agents_qa_agent"], "relation": "form", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Agents.md"}]} \ No newline at end of file diff --git a/graphify-out/cache/semantic/1dd48638d31a6d736266f7d988d81bdcc8769aaf43ba07281ddf6942d3d9b25a.json b/graphify-out/cache/semantic/1dd48638d31a6d736266f7d988d81bdcc8769aaf43ba07281ddf6942d3d9b25a.json new file mode 100644 index 0000000..2926245 --- /dev/null +++ b/graphify-out/cache/semantic/1dd48638d31a6d736266f7d988d81bdcc8769aaf43ba07281ddf6942d3d9b25a.json @@ -0,0 +1 @@ +{"nodes": [{"id": "neon_postgres_skill_neon_serverless_postgres", "label": "Neon Serverless Postgres", "file_type": "document", "source_file": ".agents/skills/neon-postgres/SKILL.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "neon_postgres_skill_docs_source_of_truth", "label": "Neon Documentation Source of Truth", "file_type": "rationale", "source_file": ".agents/skills/neon-postgres/SKILL.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "neon_postgres_skill_serverless_driver", "label": "Neon Serverless Driver", "file_type": "concept", "source_file": ".agents/skills/neon-postgres/SKILL.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "neon_postgres_skill_neon_auth", "label": "Neon Auth", "file_type": "concept", "source_file": ".agents/skills/neon-postgres/SKILL.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "neon_postgres_skill_branching", "label": "Neon Branching", "file_type": "concept", "source_file": ".agents/skills/neon-postgres/SKILL.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "neon_postgres_skill_scale_to_zero", "label": "Neon Scale to Zero", "file_type": "concept", "source_file": ".agents/skills/neon-postgres/SKILL.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "neon_postgres_skill_connection_pooling", "label": "Neon Connection Pooling", "file_type": "concept", "source_file": ".agents/skills/neon-postgres/SKILL.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "neon_postgres_skill_neon_serverless_postgres", "target": "neon_postgres_skill_docs_source_of_truth", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".agents/skills/neon-postgres/SKILL.md", "source_location": null, "weight": 1.0}, {"source": "neon_postgres_skill_neon_serverless_postgres", "target": "neon_postgres_skill_serverless_driver", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".agents/skills/neon-postgres/SKILL.md", "source_location": null, "weight": 1.0}, {"source": "neon_postgres_skill_neon_serverless_postgres", "target": "neon_postgres_skill_neon_auth", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".agents/skills/neon-postgres/SKILL.md", "source_location": null, "weight": 1.0}, {"source": "neon_postgres_skill_neon_serverless_postgres", "target": "neon_postgres_skill_branching", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".agents/skills/neon-postgres/SKILL.md", "source_location": null, "weight": 1.0}, {"source": "neon_postgres_skill_neon_serverless_postgres", "target": "neon_postgres_skill_scale_to_zero", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".agents/skills/neon-postgres/SKILL.md", "source_location": null, "weight": 1.0}, {"source": "neon_postgres_skill_neon_serverless_postgres", "target": "neon_postgres_skill_connection_pooling", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".agents/skills/neon-postgres/SKILL.md", "source_location": null, "weight": 1.0}, {"source": "neon_postgres_skill_connection_pooling", "target": "decisions_003_deployment_architecture_neon_postgres", "relation": "conceptually_related_to", "confidence": "INFERRED", "confidence_score": 0.75, "source_file": ".agents/skills/neon-postgres/SKILL.md", "source_location": null, "weight": 1.0}, {"source": "neon_postgres_skill_branching", "target": "decisions_001_authentication_strategy_branch_aware_auth", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.75, "source_file": ".agents/skills/neon-postgres/SKILL.md", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/25096ebbc6464c137db8dd9aab019a2667bc521ed463a2f0428dad5e0365a84f.json b/graphify-out/cache/semantic/25096ebbc6464c137db8dd9aab019a2667bc521ed463a2f0428dad5e0365a84f.json new file mode 100644 index 0000000..af9903b --- /dev/null +++ b/graphify-out/cache/semantic/25096ebbc6464c137db8dd9aab019a2667bc521ed463a2f0428dad5e0365a84f.json @@ -0,0 +1 @@ +{"nodes": [{"id": "phase_8_deployment_design_phase_8_design", "label": "Phase 8 Deployment Design", "file_type": "document", "source_file": ".kiro/specs/phase-8-deployment/design.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "phase_8_deployment_design_rate_limit_module", "label": "apps/api Rate Limit Module", "file_type": "concept", "source_file": ".kiro/specs/phase-8-deployment/design.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "phase_8_deployment_design_rate_limit_backend_interface", "label": "RateLimitBackend Interface", "file_type": "concept", "source_file": ".kiro/specs/phase-8-deployment/design.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "phase_8_deployment_design_upstash_backend", "label": "Upstash Rate Limit Backend", "file_type": "concept", "source_file": ".kiro/specs/phase-8-deployment/design.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "phase_8_deployment_design_memory_backend", "label": "Memory Rate Limit Backend", "file_type": "concept", "source_file": ".kiro/specs/phase-8-deployment/design.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "phase_8_deployment_design_fail_open_wrapper", "label": "Rate Limit Fail-Open Wrapper", "file_type": "rationale", "source_file": ".kiro/specs/phase-8-deployment/design.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "phase_8_deployment_design_sentry_observability", "label": "Sentry Observability Wiring", "file_type": "concept", "source_file": ".kiro/specs/phase-8-deployment/design.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "phase_8_deployment_design_auth_fail_closed_guard", "label": "Production Auth Fail-Closed Guard", "file_type": "rationale", "source_file": ".kiro/specs/phase-8-deployment/design.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "phase_8_deployment_design_railway_service_topology", "label": "Railway Service Topology", "file_type": "concept", "source_file": ".kiro/specs/phase-8-deployment/design.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "phase_8_deployment_design_cross_origin_cookie_flow", "label": "Cross-Origin Cookie Round Trip", "file_type": "concept", "source_file": ".kiro/specs/phase-8-deployment/design.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "phase_8_deployment_design_migration_one_shot", "label": "Drizzle Migration One-Shot", "file_type": "concept", "source_file": ".kiro/specs/phase-8-deployment/design.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "phase_8_deployment_design_deploy_smoke_script", "label": "Deploy Smoke Script", "file_type": "concept", "source_file": ".kiro/specs/phase-8-deployment/design.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "phase_8_deployment_design_property_based_tests", "label": "Phase 8 Property-Based Tests", "file_type": "concept", "source_file": ".kiro/specs/phase-8-deployment/design.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "phase_8_deployment_design_rate_limiter_migration_plan", "label": "Rate Limiter Migration Plan", "file_type": "concept", "source_file": ".kiro/specs/phase-8-deployment/design.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "phase_8_deployment_design_failure_modes_matrix", "label": "Failure Modes and Fail-Open Fail-Closed Matrix", "file_type": "concept", "source_file": ".kiro/specs/phase-8-deployment/design.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "phase_8_deployment_design_phase_8_design", "target": "decisions_003_deployment_architecture_deployment_architecture", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".kiro/specs/phase-8-deployment/design.md", "source_location": null, "weight": 1.0}, {"source": "phase_8_deployment_design_phase_8_design", "target": "phase_8_deployment_requirements_phase_8_requirements", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".kiro/specs/phase-8-deployment/design.md", "source_location": null, "weight": 1.0}, {"source": "phase_8_deployment_design_rate_limit_module", "target": "phase_8_deployment_design_rate_limit_backend_interface", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".kiro/specs/phase-8-deployment/design.md", "source_location": null, "weight": 1.0}, {"source": "phase_8_deployment_design_upstash_backend", "target": "phase_8_deployment_design_rate_limit_backend_interface", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".kiro/specs/phase-8-deployment/design.md", "source_location": null, "weight": 1.0}, {"source": "phase_8_deployment_design_memory_backend", "target": "phase_8_deployment_design_rate_limit_backend_interface", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".kiro/specs/phase-8-deployment/design.md", "source_location": null, "weight": 1.0}, {"source": "phase_8_deployment_design_fail_open_wrapper", "target": "phase_8_deployment_design_upstash_backend", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".kiro/specs/phase-8-deployment/design.md", "source_location": null, "weight": 1.0}, {"source": "phase_8_deployment_design_rate_limit_module", "target": "phase_8_deployment_requirements_upstash_rate_limiter", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".kiro/specs/phase-8-deployment/design.md", "source_location": null, "weight": 1.0}, {"source": "phase_8_deployment_design_sentry_observability", "target": "phase_8_deployment_requirements_sentry_error_tracking", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".kiro/specs/phase-8-deployment/design.md", "source_location": null, "weight": 1.0}, {"source": "phase_8_deployment_design_auth_fail_closed_guard", "target": "phase_8_deployment_requirements_auth_fails_closed", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".kiro/specs/phase-8-deployment/design.md", "source_location": null, "weight": 1.0}, {"source": "phase_8_deployment_design_railway_service_topology", "target": "phase_8_deployment_requirements_split_railway_services", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".kiro/specs/phase-8-deployment/design.md", "source_location": null, "weight": 1.0}, {"source": "phase_8_deployment_design_cross_origin_cookie_flow", "target": "phase_8_deployment_requirements_better_auth_github_oauth", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".kiro/specs/phase-8-deployment/design.md", "source_location": null, "weight": 1.0}, {"source": "phase_8_deployment_design_cross_origin_cookie_flow", "target": "phase_8_deployment_requirements_cors_policy", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".kiro/specs/phase-8-deployment/design.md", "source_location": null, "weight": 1.0}, {"source": "phase_8_deployment_design_migration_one_shot", "target": "phase_8_deployment_requirements_neon_production_branch", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".kiro/specs/phase-8-deployment/design.md", "source_location": null, "weight": 1.0}, {"source": "phase_8_deployment_design_deploy_smoke_script", "target": "phase_8_deployment_requirements_production_health_check", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".kiro/specs/phase-8-deployment/design.md", "source_location": null, "weight": 1.0}, {"source": "phase_8_deployment_design_deploy_smoke_script", "target": "phase_8_deployment_requirements_admin_api_key_enforcement", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".kiro/specs/phase-8-deployment/design.md", "source_location": null, "weight": 1.0}, {"source": "phase_8_deployment_design_deploy_smoke_script", "target": "phase_8_deployment_requirements_cors_policy", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".kiro/specs/phase-8-deployment/design.md", "source_location": null, "weight": 1.0}, {"source": "phase_8_deployment_design_property_based_tests", "target": "phase_8_deployment_design_fail_open_wrapper", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".kiro/specs/phase-8-deployment/design.md", "source_location": null, "weight": 1.0}, {"source": "phase_8_deployment_design_property_based_tests", "target": "phase_8_deployment_design_sentry_observability", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".kiro/specs/phase-8-deployment/design.md", "source_location": null, "weight": 1.0}, {"source": "phase_8_deployment_design_rate_limiter_migration_plan", "target": "phase_8_deployment_design_memory_backend", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".kiro/specs/phase-8-deployment/design.md", "source_location": null, "weight": 1.0}, {"source": "phase_8_deployment_design_rate_limiter_migration_plan", "target": "phase_8_deployment_design_upstash_backend", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".kiro/specs/phase-8-deployment/design.md", "source_location": null, "weight": 1.0}, {"source": "phase_8_deployment_design_cross_origin_cookie_flow", "target": "decisions_003_deployment_architecture_cookie_cors_strategy", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": ".kiro/specs/phase-8-deployment/design.md", "source_location": null, "weight": 1.0}, {"source": "phase_8_deployment_design_failure_modes_matrix", "target": "decisions_002_ai_provider_strategy_fallback_explainer", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".kiro/specs/phase-8-deployment/design.md", "source_location": null, "weight": 1.0}], "hyperedges": [{"id": "phase_8_operational_architecture", "label": "Phase 8 Operational Architecture", "nodes": ["phase_8_deployment_design_railway_service_topology", "phase_8_deployment_design_cross_origin_cookie_flow", "phase_8_deployment_design_rate_limit_module", "phase_8_deployment_design_sentry_observability", "phase_8_deployment_design_migration_one_shot", "phase_8_deployment_design_deploy_smoke_script"], "relation": "form", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".kiro/specs/phase-8-deployment/design.md"}]} \ No newline at end of file diff --git a/graphify-out/cache/semantic/29cd5d820a5b99f0b5bb656f079a0ef50c929d6730b4d3ed45b0b3287378ec53.json b/graphify-out/cache/semantic/29cd5d820a5b99f0b5bb656f079a0ef50c929d6730b4d3ed45b0b3287378ec53.json new file mode 100644 index 0000000..9c5e59c --- /dev/null +++ b/graphify-out/cache/semantic/29cd5d820a5b99f0b5bb656f079a0ef50c929d6730b4d3ed45b0b3287378ec53.json @@ -0,0 +1 @@ +{"nodes": [{"id": "phase_8_deployment_tasks_phase_8_implementation_plan", "label": "Phase 8 Implementation Plan", "file_type": "document", "source_file": ".kiro/specs/phase-8-deployment/tasks.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "phase_8_deployment_tasks_batch_a_rate_limiter", "label": "Batch A Rate Limiter Module", "file_type": "concept", "source_file": ".kiro/specs/phase-8-deployment/tasks.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "phase_8_deployment_tasks_batch_b_sentry", "label": "Batch B Sentry Wiring", "file_type": "concept", "source_file": ".kiro/specs/phase-8-deployment/tasks.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "phase_8_deployment_tasks_batch_c_auth_deploy_tests", "label": "Batch C Auth Hardening and Deploy Tests", "file_type": "concept", "source_file": ".kiro/specs/phase-8-deployment/tasks.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "phase_8_deployment_tasks_batch_d_railway_scripts", "label": "Batch D Railway Manifests and Runbook Scripts", "file_type": "concept", "source_file": ".kiro/specs/phase-8-deployment/tasks.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "phase_8_deployment_tasks_batch_e_env_readme", "label": "Batch E Env Example and README", "file_type": "concept", "source_file": ".kiro/specs/phase-8-deployment/tasks.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "phase_8_deployment_tasks_batch_f_external_provisioning", "label": "Batch F External Provisioning", "file_type": "concept", "source_file": ".kiro/specs/phase-8-deployment/tasks.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "phase_8_deployment_tasks_batch_g_staging_cutover", "label": "Batch G Staging Cutover", "file_type": "concept", "source_file": ".kiro/specs/phase-8-deployment/tasks.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "phase_8_deployment_tasks_batch_h_production_cutover", "label": "Batch H Production Cutover", "file_type": "concept", "source_file": ".kiro/specs/phase-8-deployment/tasks.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "phase_8_deployment_tasks_batch_i_post_deploy_cleanup", "label": "Batch I Post-Deploy Cleanup", "file_type": "concept", "source_file": ".kiro/specs/phase-8-deployment/tasks.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "phase_8_deployment_tasks_dependency_graph", "label": "Task Dependency Graph", "file_type": "concept", "source_file": ".kiro/specs/phase-8-deployment/tasks.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "phase_8_deployment_tasks_phase_8_implementation_plan", "target": "phase_8_deployment_requirements_phase_8_requirements", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".kiro/specs/phase-8-deployment/tasks.md", "source_location": null, "weight": 1.0}, {"source": "phase_8_deployment_tasks_phase_8_implementation_plan", "target": "phase_8_deployment_design_phase_8_design", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".kiro/specs/phase-8-deployment/tasks.md", "source_location": null, "weight": 1.0}, {"source": "phase_8_deployment_tasks_batch_a_rate_limiter", "target": "phase_8_deployment_design_rate_limit_module", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".kiro/specs/phase-8-deployment/tasks.md", "source_location": null, "weight": 1.0}, {"source": "phase_8_deployment_tasks_batch_a_rate_limiter", "target": "phase_8_deployment_requirements_upstash_rate_limiter", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".kiro/specs/phase-8-deployment/tasks.md", "source_location": null, "weight": 1.0}, {"source": "phase_8_deployment_tasks_batch_b_sentry", "target": "phase_8_deployment_requirements_sentry_error_tracking", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".kiro/specs/phase-8-deployment/tasks.md", "source_location": null, "weight": 1.0}, {"source": "phase_8_deployment_tasks_batch_c_auth_deploy_tests", "target": "phase_8_deployment_requirements_auth_fails_closed", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".kiro/specs/phase-8-deployment/tasks.md", "source_location": null, "weight": 1.0}, {"source": "phase_8_deployment_tasks_batch_c_auth_deploy_tests", "target": "phase_8_deployment_requirements_cors_policy", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".kiro/specs/phase-8-deployment/tasks.md", "source_location": null, "weight": 1.0}, {"source": "phase_8_deployment_tasks_batch_d_railway_scripts", "target": "phase_8_deployment_design_deploy_smoke_script", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".kiro/specs/phase-8-deployment/tasks.md", "source_location": null, "weight": 1.0}, {"source": "phase_8_deployment_tasks_batch_d_railway_scripts", "target": "deploy_rollback_rollback_runbook", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".kiro/specs/phase-8-deployment/tasks.md", "source_location": null, "weight": 1.0}, {"source": "phase_8_deployment_tasks_batch_e_env_readme", "target": "readme_production_deployment", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".kiro/specs/phase-8-deployment/tasks.md", "source_location": null, "weight": 1.0}, {"source": "phase_8_deployment_tasks_batch_f_external_provisioning", "target": "phase_8_deployment_requirements_staging_isolation", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".kiro/specs/phase-8-deployment/tasks.md", "source_location": null, "weight": 1.0}, {"source": "phase_8_deployment_tasks_batch_g_staging_cutover", "target": "phase_8_deployment_tasks_batch_h_production_cutover", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".kiro/specs/phase-8-deployment/tasks.md", "source_location": null, "weight": 1.0}, {"source": "phase_8_deployment_tasks_batch_i_post_deploy_cleanup", "target": "roadmap_phase_8_deployment_operations", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".kiro/specs/phase-8-deployment/tasks.md", "source_location": null, "weight": 1.0}, {"source": "phase_8_deployment_tasks_dependency_graph", "target": "phase_8_deployment_tasks_phase_8_implementation_plan", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".kiro/specs/phase-8-deployment/tasks.md", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/31e25ae3d83c10c8ddb98917b24ba7ee0763c99a97486d088d88448ab98bc548.json b/graphify-out/cache/semantic/31e25ae3d83c10c8ddb98917b24ba7ee0763c99a97486d088d88448ab98bc548.json new file mode 100644 index 0000000..599e284 --- /dev/null +++ b/graphify-out/cache/semantic/31e25ae3d83c10c8ddb98917b24ba7ee0763c99a97486d088d88448ab98bc548.json @@ -0,0 +1 @@ +{"nodes": [{"id": "decisions_001_authentication_strategy_authentication_strategy", "label": "ADR-001 Authentication Strategy", "file_type": "document", "source_file": "docs/decisions/001-authentication-strategy.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "decisions_001_authentication_strategy_better_auth", "label": "Better Auth", "file_type": "concept", "source_file": "docs/decisions/001-authentication-strategy.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "decisions_001_authentication_strategy_github_oauth", "label": "GitHub OAuth", "file_type": "concept", "source_file": "docs/decisions/001-authentication-strategy.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "decisions_001_authentication_strategy_stack_auth_neon_auth", "label": "Stack Auth via Neon Auth", "file_type": "concept", "source_file": "docs/decisions/001-authentication-strategy.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "decisions_001_authentication_strategy_admin_api_key", "label": "Admin API Key Protection", "file_type": "concept", "source_file": "docs/decisions/001-authentication-strategy.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "decisions_001_authentication_strategy_auth_data_ownership", "label": "Auth Data Ownership", "file_type": "rationale", "source_file": "docs/decisions/001-authentication-strategy.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "decisions_001_authentication_strategy_branch_aware_auth", "label": "Branch-Aware Auth", "file_type": "rationale", "source_file": "docs/decisions/001-authentication-strategy.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "decisions_001_authentication_strategy_authentication_strategy", "target": "decisions_001_authentication_strategy_better_auth", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/decisions/001-authentication-strategy.md", "source_location": null, "weight": 1.0}, {"source": "decisions_001_authentication_strategy_authentication_strategy", "target": "decisions_001_authentication_strategy_github_oauth", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/decisions/001-authentication-strategy.md", "source_location": null, "weight": 1.0}, {"source": "decisions_001_authentication_strategy_authentication_strategy", "target": "decisions_001_authentication_strategy_stack_auth_neon_auth", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/decisions/001-authentication-strategy.md", "source_location": null, "weight": 1.0}, {"source": "decisions_001_authentication_strategy_authentication_strategy", "target": "decisions_001_authentication_strategy_admin_api_key", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/decisions/001-authentication-strategy.md", "source_location": null, "weight": 1.0}, {"source": "decisions_001_authentication_strategy_auth_data_ownership", "target": "decisions_001_authentication_strategy_better_auth", "relation": "rationale_for", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/decisions/001-authentication-strategy.md", "source_location": null, "weight": 1.0}, {"source": "decisions_001_authentication_strategy_branch_aware_auth", "target": "decisions_001_authentication_strategy_better_auth", "relation": "rationale_for", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/decisions/001-authentication-strategy.md", "source_location": null, "weight": 1.0}, {"source": "decisions_001_authentication_strategy_admin_api_key", "target": "phase_8_deployment_requirements_admin_api_key_enforcement", "relation": "conceptually_related_to", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "docs/decisions/001-authentication-strategy.md", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/3c08e4925144ef34742b12beaf1f42468830c3d986382fb3d5993b868941b052.json b/graphify-out/cache/semantic/3c08e4925144ef34742b12beaf1f42468830c3d986382fb3d5993b868941b052.json new file mode 100644 index 0000000..3ed57da --- /dev/null +++ b/graphify-out/cache/semantic/3c08e4925144ef34742b12beaf1f42468830c3d986382fb3d5993b868941b052.json @@ -0,0 +1 @@ +{"nodes": [{"id": "stackfast2026_codebase_revival_audit", "label": "Stackfast Codebase Revival Audit", "file_type": "document", "source_file": "Stackfast2026.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "stackfast2026_stackfastpro_candidate", "label": "Branches/StackfastPro Candidate", "file_type": "concept", "source_file": "Stackfast2026.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "stackfast2026_root_app_candidate", "label": "Root App Candidate", "file_type": "concept", "source_file": "Stackfast2026.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "stackfast2026_stackfast_101_candidate", "label": "StackFast-101 Candidate", "file_type": "concept", "source_file": "Stackfast2026.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "stackfast2026_public_mutation_routes_risk", "label": "Public Mutation Routes Risk", "file_type": "rationale", "source_file": "Stackfast2026.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "stackfast2026_explainable_stack_intelligence_platform", "label": "Explainable Stack Intelligence Platform", "file_type": "rationale", "source_file": "Stackfast2026.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "stackfast2026_recipe_based_scaffolding", "label": "Recipe-Based Scaffolding", "file_type": "concept", "source_file": "Stackfast2026.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "stackfast2026_compatibility_and_migration_graph", "label": "Compatibility and Migration Graph", "file_type": "concept", "source_file": "Stackfast2026.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "stackfast2026_codebase_revival_audit", "target": "stackfast2026_stackfastpro_candidate", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Stackfast2026.md", "source_location": null, "weight": 1.0}, {"source": "stackfast2026_codebase_revival_audit", "target": "stackfast2026_root_app_candidate", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Stackfast2026.md", "source_location": null, "weight": 1.0}, {"source": "stackfast2026_codebase_revival_audit", "target": "stackfast2026_stackfast_101_candidate", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Stackfast2026.md", "source_location": null, "weight": 1.0}, {"source": "stackfast2026_codebase_revival_audit", "target": "stackfast2026_public_mutation_routes_risk", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Stackfast2026.md", "source_location": null, "weight": 1.0}, {"source": "stackfast2026_codebase_revival_audit", "target": "stackfast2026_explainable_stack_intelligence_platform", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Stackfast2026.md", "source_location": null, "weight": 1.0}, {"source": "stackfast2026_stackfastpro_candidate", "target": "salvage_manifest_stackfastpro_primary_base", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "Stackfast2026.md", "source_location": null, "weight": 1.0}, {"source": "stackfast2026_root_app_candidate", "target": "salvage_manifest_root_app_salvage", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "Stackfast2026.md", "source_location": null, "weight": 1.0}, {"source": "stackfast2026_public_mutation_routes_risk", "target": "decisions_001_authentication_strategy_admin_api_key", "relation": "rationale_for", "confidence": "INFERRED", "confidence_score": 0.85, "source_file": "Stackfast2026.md", "source_location": null, "weight": 1.0}, {"source": "stackfast2026_recipe_based_scaffolding", "target": "readme_packages_exporter", "relation": "conceptually_related_to", "confidence": "INFERRED", "confidence_score": 0.85, "source_file": "Stackfast2026.md", "source_location": null, "weight": 1.0}, {"source": "stackfast2026_compatibility_and_migration_graph", "target": "readme_packages_rules_engine", "relation": "conceptually_related_to", "confidence": "INFERRED", "confidence_score": 0.85, "source_file": "Stackfast2026.md", "source_location": null, "weight": 1.0}, {"source": "stackfast2026_compatibility_and_migration_graph", "target": "backlog_integration_plan_migration_paths", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.85, "source_file": "Stackfast2026.md", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/47dccb1f342a64a5783505b2b6e029aef7144adfedf17808fb13cc4cf1c13c47.json b/graphify-out/cache/semantic/47dccb1f342a64a5783505b2b6e029aef7144adfedf17808fb13cc4cf1c13c47.json new file mode 100644 index 0000000..6d0ad91 --- /dev/null +++ b/graphify-out/cache/semantic/47dccb1f342a64a5783505b2b6e029aef7144adfedf17808fb13cc4cf1c13c47.json @@ -0,0 +1 @@ +{"nodes": [{"id": "backlog_integration_plan_historical_integration_plan", "label": "Historical Integration Plan", "file_type": "document", "source_file": "docs/backlog/INTEGRATION_PLAN.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "backlog_integration_plan_tool_profile_unification", "label": "Tool Profile Unification", "file_type": "concept", "source_file": "docs/backlog/INTEGRATION_PLAN.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "backlog_integration_plan_database_strategy", "label": "PostgreSQL and Firestore Database Strategy", "file_type": "concept", "source_file": "docs/backlog/INTEGRATION_PLAN.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "backlog_integration_plan_unified_endpoints", "label": "Unified API Endpoints", "file_type": "concept", "source_file": "docs/backlog/INTEGRATION_PLAN.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "backlog_integration_plan_worker_enrichment_pipeline", "label": "Worker Enrichment Pipeline", "file_type": "concept", "source_file": "docs/backlog/INTEGRATION_PLAN.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "backlog_integration_plan_compatibility_aware_search", "label": "Compatibility-Aware Search", "file_type": "concept", "source_file": "docs/backlog/INTEGRATION_PLAN.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "backlog_integration_plan_migration_paths", "label": "Migration Paths", "file_type": "concept", "source_file": "docs/backlog/INTEGRATION_PLAN.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "backlog_integration_plan_historical_integration_plan", "target": "roadmap_product_vision", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/backlog/INTEGRATION_PLAN.md", "source_location": null, "weight": 1.0}, {"source": "backlog_integration_plan_historical_integration_plan", "target": "backlog_integration_plan_tool_profile_unification", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/backlog/INTEGRATION_PLAN.md", "source_location": null, "weight": 1.0}, {"source": "backlog_integration_plan_historical_integration_plan", "target": "backlog_integration_plan_database_strategy", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/backlog/INTEGRATION_PLAN.md", "source_location": null, "weight": 1.0}, {"source": "backlog_integration_plan_historical_integration_plan", "target": "backlog_integration_plan_unified_endpoints", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/backlog/INTEGRATION_PLAN.md", "source_location": null, "weight": 1.0}, {"source": "backlog_integration_plan_historical_integration_plan", "target": "backlog_integration_plan_worker_enrichment_pipeline", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/backlog/INTEGRATION_PLAN.md", "source_location": null, "weight": 1.0}, {"source": "backlog_integration_plan_unified_endpoints", "target": "readme_api_surface", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.85, "source_file": "docs/backlog/INTEGRATION_PLAN.md", "source_location": null, "weight": 1.0}, {"source": "backlog_integration_plan_compatibility_aware_search", "target": "readme_packages_rules_engine", "relation": "conceptually_related_to", "confidence": "INFERRED", "confidence_score": 0.75, "source_file": "docs/backlog/INTEGRATION_PLAN.md", "source_location": null, "weight": 1.0}, {"source": "backlog_integration_plan_worker_enrichment_pipeline", "target": "deferred_webailyzer_webailyzer_deferred", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.75, "source_file": "docs/backlog/INTEGRATION_PLAN.md", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/55fbdf45d1f4291344c2cb0b3cc91c983728c5f3ff14fc9e5618696e465a7559.json b/graphify-out/cache/semantic/55fbdf45d1f4291344c2cb0b3cc91c983728c5f3ff14fc9e5618696e465a7559.json new file mode 100644 index 0000000..e313491 --- /dev/null +++ b/graphify-out/cache/semantic/55fbdf45d1f4291344c2cb0b3cc91c983728c5f3ff14fc9e5618696e465a7559.json @@ -0,0 +1 @@ +{"nodes": [{"id": "phase_8_deployment_requirements_phase_8_requirements", "label": "Phase 8 Requirements", "file_type": "document", "source_file": ".kiro/specs/phase-8-deployment/requirements.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "phase_8_deployment_requirements_split_railway_services", "label": "Requirement 1 Split Railway Services", "file_type": "concept", "source_file": ".kiro/specs/phase-8-deployment/requirements.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "phase_8_deployment_requirements_neon_production_branch", "label": "Requirement 2 Neon Postgres Production Branch", "file_type": "concept", "source_file": ".kiro/specs/phase-8-deployment/requirements.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "phase_8_deployment_requirements_better_auth_github_oauth", "label": "Requirement 3 Better Auth GitHub OAuth in Production", "file_type": "concept", "source_file": ".kiro/specs/phase-8-deployment/requirements.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "phase_8_deployment_requirements_upstash_rate_limiter", "label": "Requirement 4 Upstash Redis Rate Limiter", "file_type": "concept", "source_file": ".kiro/specs/phase-8-deployment/requirements.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "phase_8_deployment_requirements_production_health_check", "label": "Requirement 5 Production Health Check", "file_type": "concept", "source_file": ".kiro/specs/phase-8-deployment/requirements.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "phase_8_deployment_requirements_sentry_error_tracking", "label": "Requirement 7 Sentry Feature-Flagged Error Tracking", "file_type": "concept", "source_file": ".kiro/specs/phase-8-deployment/requirements.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "phase_8_deployment_requirements_admin_api_key_enforcement", "label": "Requirement 8 Admin API Key Enforcement", "file_type": "concept", "source_file": ".kiro/specs/phase-8-deployment/requirements.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "phase_8_deployment_requirements_cors_policy", "label": "Requirement 10 CORS and Cross-Origin Policy", "file_type": "concept", "source_file": ".kiro/specs/phase-8-deployment/requirements.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "phase_8_deployment_requirements_auth_fails_closed", "label": "Requirement 11 Auth Fails Closed in Production", "file_type": "rationale", "source_file": ".kiro/specs/phase-8-deployment/requirements.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "phase_8_deployment_requirements_rollback_procedure", "label": "Requirement 12 Rollback Procedure", "file_type": "concept", "source_file": ".kiro/specs/phase-8-deployment/requirements.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "phase_8_deployment_requirements_staging_isolation", "label": "Requirement 13 Staging Environment Isolation", "file_type": "concept", "source_file": ".kiro/specs/phase-8-deployment/requirements.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "phase_8_deployment_requirements_readme_deployment_docs", "label": "Requirement 14 README Deployment Documentation", "file_type": "concept", "source_file": ".kiro/specs/phase-8-deployment/requirements.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "phase_8_deployment_requirements_phase_8_requirements", "target": "decisions_001_authentication_strategy_authentication_strategy", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".kiro/specs/phase-8-deployment/requirements.md", "source_location": null, "weight": 1.0}, {"source": "phase_8_deployment_requirements_phase_8_requirements", "target": "decisions_002_ai_provider_strategy_ai_provider_strategy", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".kiro/specs/phase-8-deployment/requirements.md", "source_location": null, "weight": 1.0}, {"source": "phase_8_deployment_requirements_phase_8_requirements", "target": "decisions_003_deployment_architecture_deployment_architecture", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".kiro/specs/phase-8-deployment/requirements.md", "source_location": null, "weight": 1.0}, {"source": "phase_8_deployment_requirements_better_auth_github_oauth", "target": "decisions_001_authentication_strategy_better_auth", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".kiro/specs/phase-8-deployment/requirements.md", "source_location": null, "weight": 1.0}, {"source": "phase_8_deployment_requirements_better_auth_github_oauth", "target": "decisions_001_authentication_strategy_github_oauth", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".kiro/specs/phase-8-deployment/requirements.md", "source_location": null, "weight": 1.0}, {"source": "phase_8_deployment_requirements_upstash_rate_limiter", "target": "decisions_003_deployment_architecture_upstash_rate_limiting", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".kiro/specs/phase-8-deployment/requirements.md", "source_location": null, "weight": 1.0}, {"source": "phase_8_deployment_requirements_rollback_procedure", "target": "deploy_rollback_rollback_runbook", "relation": "references", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": ".kiro/specs/phase-8-deployment/requirements.md", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/5ae65860c48d795e01f34c55e002c86cda69cda5b87c69f42fd552de50b2148d.json b/graphify-out/cache/semantic/5ae65860c48d795e01f34c55e002c86cda69cda5b87c69f42fd552de50b2148d.json new file mode 100644 index 0000000..984acc5 --- /dev/null +++ b/graphify-out/cache/semantic/5ae65860c48d795e01f34c55e002c86cda69cda5b87c69f42fd552de50b2148d.json @@ -0,0 +1 @@ +{"nodes": [{"id": "salvage_manifest_salvage_manifest", "label": "Salvage Manifest", "file_type": "document", "source_file": "SALVAGE_MANIFEST.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "salvage_manifest_stackfastpro_primary_base", "label": "Branches/StackfastPro Primary Base", "file_type": "concept", "source_file": "SALVAGE_MANIFEST.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "salvage_manifest_root_app_salvage", "label": "Root App Salvage Sources", "file_type": "concept", "source_file": "SALVAGE_MANIFEST.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "salvage_manifest_webailyzer_deferred", "label": "WebAILyzer Deferred Preservation", "file_type": "concept", "source_file": "SALVAGE_MANIFEST.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "salvage_manifest_file_mapping", "label": "Detailed File Mapping", "file_type": "concept", "source_file": "SALVAGE_MANIFEST.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "salvage_manifest_post_extraction_cleanup", "label": "Post-Extraction Cleanup", "file_type": "concept", "source_file": "SALVAGE_MANIFEST.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "salvage_manifest_salvage_manifest", "target": "salvage_manifest_stackfastpro_primary_base", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "SALVAGE_MANIFEST.md", "source_location": null, "weight": 1.0}, {"source": "salvage_manifest_salvage_manifest", "target": "salvage_manifest_root_app_salvage", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "SALVAGE_MANIFEST.md", "source_location": null, "weight": 1.0}, {"source": "salvage_manifest_salvage_manifest", "target": "salvage_manifest_webailyzer_deferred", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "SALVAGE_MANIFEST.md", "source_location": null, "weight": 1.0}, {"source": "salvage_manifest_salvage_manifest", "target": "salvage_manifest_file_mapping", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "SALVAGE_MANIFEST.md", "source_location": null, "weight": 1.0}, {"source": "salvage_manifest_file_mapping", "target": "readme_packages_registry", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "SALVAGE_MANIFEST.md", "source_location": null, "weight": 1.0}, {"source": "salvage_manifest_file_mapping", "target": "readme_packages_rules_engine", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "SALVAGE_MANIFEST.md", "source_location": null, "weight": 1.0}, {"source": "salvage_manifest_file_mapping", "target": "readme_packages_exporter", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "SALVAGE_MANIFEST.md", "source_location": null, "weight": 1.0}, {"source": "salvage_manifest_file_mapping", "target": "readme_packages_schemas", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "SALVAGE_MANIFEST.md", "source_location": null, "weight": 1.0}, {"source": "salvage_manifest_file_mapping", "target": "readme_apps_web", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "SALVAGE_MANIFEST.md", "source_location": null, "weight": 1.0}, {"source": "salvage_manifest_root_app_salvage", "target": "readme_apps_api", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "SALVAGE_MANIFEST.md", "source_location": null, "weight": 1.0}, {"source": "salvage_manifest_webailyzer_deferred", "target": "deferred_webailyzer_webailyzer_deferred", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "SALVAGE_MANIFEST.md", "source_location": null, "weight": 1.0}, {"source": "salvage_manifest_post_extraction_cleanup", "target": "deferred_webailyzer_orphaned_submodule_gitlink", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "SALVAGE_MANIFEST.md", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/5f46add7b3e8692adbf140f93ec6c19ed6da5a2c821c03cc08682edf201575de.json b/graphify-out/cache/semantic/5f46add7b3e8692adbf140f93ec6c19ed6da5a2c821c03cc08682edf201575de.json new file mode 100644 index 0000000..eb79bec --- /dev/null +++ b/graphify-out/cache/semantic/5f46add7b3e8692adbf140f93ec6c19ed6da5a2c821c03cc08682edf201575de.json @@ -0,0 +1 @@ +{"nodes": [{"id": "decisions_002_ai_provider_strategy_ai_provider_strategy", "label": "ADR-002 AI Provider Strategy", "file_type": "document", "source_file": "docs/decisions/002-ai-provider-strategy.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "decisions_002_ai_provider_strategy_blueprint_explainer", "label": "BlueprintExplainer Interface", "file_type": "concept", "source_file": "docs/decisions/002-ai-provider-strategy.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "decisions_002_ai_provider_strategy_fallback_explainer", "label": "FallbackExplainer", "file_type": "concept", "source_file": "docs/decisions/002-ai-provider-strategy.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "decisions_002_ai_provider_strategy_heuristic_provider", "label": "Heuristic AI Provider", "file_type": "concept", "source_file": "docs/decisions/002-ai-provider-strategy.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "decisions_002_ai_provider_strategy_gemini_provider", "label": "Gemini AI Provider", "file_type": "concept", "source_file": "docs/decisions/002-ai-provider-strategy.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "decisions_002_ai_provider_strategy_azure_openai_provider", "label": "Azure OpenAI Provider", "file_type": "concept", "source_file": "docs/decisions/002-ai-provider-strategy.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "decisions_002_ai_provider_strategy_zod_validation", "label": "AI Response Zod Validation", "file_type": "concept", "source_file": "docs/decisions/002-ai-provider-strategy.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "decisions_002_ai_provider_strategy_ai_provider_strategy", "target": "decisions_002_ai_provider_strategy_blueprint_explainer", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/decisions/002-ai-provider-strategy.md", "source_location": null, "weight": 1.0}, {"source": "decisions_002_ai_provider_strategy_blueprint_explainer", "target": "decisions_002_ai_provider_strategy_heuristic_provider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/decisions/002-ai-provider-strategy.md", "source_location": null, "weight": 1.0}, {"source": "decisions_002_ai_provider_strategy_blueprint_explainer", "target": "decisions_002_ai_provider_strategy_gemini_provider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/decisions/002-ai-provider-strategy.md", "source_location": null, "weight": 1.0}, {"source": "decisions_002_ai_provider_strategy_blueprint_explainer", "target": "decisions_002_ai_provider_strategy_azure_openai_provider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/decisions/002-ai-provider-strategy.md", "source_location": null, "weight": 1.0}, {"source": "decisions_002_ai_provider_strategy_fallback_explainer", "target": "decisions_002_ai_provider_strategy_heuristic_provider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/decisions/002-ai-provider-strategy.md", "source_location": null, "weight": 1.0}, {"source": "decisions_002_ai_provider_strategy_ai_provider_strategy", "target": "decisions_002_ai_provider_strategy_zod_validation", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/decisions/002-ai-provider-strategy.md", "source_location": null, "weight": 1.0}, {"source": "decisions_002_ai_provider_strategy_azure_openai_provider", "target": "decisions_002_ai_provider_strategy_ai_provider_strategy", "relation": "rationale_for", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/decisions/002-ai-provider-strategy.md", "source_location": null, "weight": 1.0}, {"source": "decisions_002_ai_provider_strategy_gemini_provider", "target": "decisions_002_ai_provider_strategy_ai_provider_strategy", "relation": "rationale_for", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/decisions/002-ai-provider-strategy.md", "source_location": null, "weight": 1.0}, {"source": "decisions_002_ai_provider_strategy_ai_provider_strategy", "target": "readme_packages_ai", "relation": "conceptually_related_to", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "docs/decisions/002-ai-provider-strategy.md", "source_location": null, "weight": 1.0}], "hyperedges": [{"id": "ai_explanation_fallback_chain", "label": "AI Explanation Fallback Chain", "nodes": ["decisions_002_ai_provider_strategy_azure_openai_provider", "decisions_002_ai_provider_strategy_gemini_provider", "decisions_002_ai_provider_strategy_heuristic_provider", "decisions_002_ai_provider_strategy_fallback_explainer", "decisions_002_ai_provider_strategy_zod_validation"], "relation": "form", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/decisions/002-ai-provider-strategy.md"}]} \ No newline at end of file diff --git a/graphify-out/cache/semantic/804113349b315eebb4bf5620ef5fa118fe95679a72f3385c9d9b8307415aa7a8.json b/graphify-out/cache/semantic/804113349b315eebb4bf5620ef5fa118fe95679a72f3385c9d9b8307415aa7a8.json new file mode 100644 index 0000000..e44d44b --- /dev/null +++ b/graphify-out/cache/semantic/804113349b315eebb4bf5620ef5fa118fe95679a72f3385c9d9b8307415aa7a8.json @@ -0,0 +1 @@ +{"nodes": [{"id": "decisions_003_deployment_architecture_deployment_architecture", "label": "ADR-003 Deployment Architecture", "file_type": "document", "source_file": "docs/decisions/003-deployment-architecture.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "decisions_003_deployment_architecture_split_railway_services", "label": "Split Web and API Railway Services", "file_type": "rationale", "source_file": "docs/decisions/003-deployment-architecture.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "decisions_003_deployment_architecture_neon_postgres", "label": "Neon Postgres Deployment Database", "file_type": "concept", "source_file": "docs/decisions/003-deployment-architecture.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "decisions_003_deployment_architecture_upstash_rate_limiting", "label": "Upstash Redis Rate Limiting", "file_type": "concept", "source_file": "docs/decisions/003-deployment-architecture.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "decisions_003_deployment_architecture_cookie_cors_strategy", "label": "Cookie and CORS Strategy", "file_type": "concept", "source_file": "docs/decisions/003-deployment-architecture.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "decisions_003_deployment_architecture_sentry_feature_flag", "label": "Sentry Feature Flag", "file_type": "concept", "source_file": "docs/decisions/003-deployment-architecture.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "decisions_003_deployment_architecture_secrets_config", "label": "Railway Secrets and Configuration", "file_type": "concept", "source_file": "docs/decisions/003-deployment-architecture.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "decisions_003_deployment_architecture_rollback_strategy", "label": "Deployment Rollback Strategy", "file_type": "concept", "source_file": "docs/decisions/003-deployment-architecture.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "decisions_003_deployment_architecture_deployment_architecture", "target": "decisions_003_deployment_architecture_split_railway_services", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/decisions/003-deployment-architecture.md", "source_location": null, "weight": 1.0}, {"source": "decisions_003_deployment_architecture_deployment_architecture", "target": "decisions_003_deployment_architecture_neon_postgres", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/decisions/003-deployment-architecture.md", "source_location": null, "weight": 1.0}, {"source": "decisions_003_deployment_architecture_deployment_architecture", "target": "decisions_003_deployment_architecture_upstash_rate_limiting", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/decisions/003-deployment-architecture.md", "source_location": null, "weight": 1.0}, {"source": "decisions_003_deployment_architecture_deployment_architecture", "target": "decisions_003_deployment_architecture_cookie_cors_strategy", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/decisions/003-deployment-architecture.md", "source_location": null, "weight": 1.0}, {"source": "decisions_003_deployment_architecture_deployment_architecture", "target": "decisions_003_deployment_architecture_sentry_feature_flag", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/decisions/003-deployment-architecture.md", "source_location": null, "weight": 1.0}, {"source": "decisions_003_deployment_architecture_deployment_architecture", "target": "decisions_003_deployment_architecture_secrets_config", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/decisions/003-deployment-architecture.md", "source_location": null, "weight": 1.0}, {"source": "decisions_003_deployment_architecture_deployment_architecture", "target": "decisions_003_deployment_architecture_rollback_strategy", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/decisions/003-deployment-architecture.md", "source_location": null, "weight": 1.0}, {"source": "decisions_003_deployment_architecture_split_railway_services", "target": "readme_production_deployment", "relation": "rationale_for", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/decisions/003-deployment-architecture.md", "source_location": null, "weight": 1.0}, {"source": "decisions_003_deployment_architecture_upstash_rate_limiting", "target": "phase_8_deployment_design_rate_limiter_migration_plan", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.85, "source_file": "docs/decisions/003-deployment-architecture.md", "source_location": null, "weight": 1.0}, {"source": "decisions_003_deployment_architecture_rollback_strategy", "target": "deploy_rollback_rollback_runbook", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/decisions/003-deployment-architecture.md", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/85c56a733df7be88e85144304be56d2e20849820a0b3e4d2ed217a31869ddecf.json b/graphify-out/cache/semantic/85c56a733df7be88e85144304be56d2e20849820a0b3e4d2ed217a31869ddecf.json new file mode 100644 index 0000000..1c1ae96 --- /dev/null +++ b/graphify-out/cache/semantic/85c56a733df7be88e85144304be56d2e20849820a0b3e4d2ed217a31869ddecf.json @@ -0,0 +1 @@ +{"nodes": [{"id": "pnpm_workspace_pnpm_workspaces", "label": "pnpm Workspaces", "file_type": "code", "source_file": "pnpm-workspace.yaml", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "pnpm_workspace_apps_workspace", "label": "apps/* Workspace Package Pattern", "file_type": "code", "source_file": "pnpm-workspace.yaml", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "pnpm_workspace_packages_workspace", "label": "packages/* Workspace Package Pattern", "file_type": "code", "source_file": "pnpm-workspace.yaml", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "pnpm_workspace_pnpm_workspaces", "target": "pnpm_workspace_apps_workspace", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "pnpm-workspace.yaml", "source_location": null, "weight": 1.0}, {"source": "pnpm_workspace_pnpm_workspaces", "target": "pnpm_workspace_packages_workspace", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "pnpm-workspace.yaml", "source_location": null, "weight": 1.0}, {"source": "pnpm_workspace_apps_workspace", "target": "readme_apps_api", "relation": "references", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "pnpm-workspace.yaml", "source_location": null, "weight": 1.0}, {"source": "pnpm_workspace_apps_workspace", "target": "readme_apps_web", "relation": "references", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "pnpm-workspace.yaml", "source_location": null, "weight": 1.0}, {"source": "pnpm_workspace_packages_workspace", "target": "readme_packages_registry", "relation": "references", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "pnpm-workspace.yaml", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/96a5491f997eb6190089a5d4a174f69be606890f265761a7a1817a5df28dadf6.json b/graphify-out/cache/semantic/96a5491f997eb6190089a5d4a174f69be606890f265761a7a1817a5df28dadf6.json new file mode 100644 index 0000000..6a9ca04 --- /dev/null +++ b/graphify-out/cache/semantic/96a5491f997eb6190089a5d4a174f69be606890f265761a7a1817a5df28dadf6.json @@ -0,0 +1 @@ +{"nodes": [{"id": "deferred_webailyzer_webailyzer_deferred", "label": "WebAILyzer Deferred", "file_type": "document", "source_file": "docs/deferred/webailyzer.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "deferred_webailyzer_ssrf_hardening", "label": "SSRF Hardening Requirement", "file_type": "rationale", "source_file": "docs/deferred/webailyzer.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "deferred_webailyzer_orphaned_submodule_gitlink", "label": "Orphaned WebAILyzer Submodule Gitlink", "file_type": "concept", "source_file": "docs/deferred/webailyzer.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "deferred_webailyzer_pre_integration_checklist", "label": "WebAILyzer Pre-Integration Checklist", "file_type": "concept", "source_file": "docs/deferred/webailyzer.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "deferred_webailyzer_internal_only_service", "label": "Internal-Only WebAILyzer Service", "file_type": "rationale", "source_file": "docs/deferred/webailyzer.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "deferred_webailyzer_webailyzer_deferred", "target": "deferred_webailyzer_ssrf_hardening", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/deferred/webailyzer.md", "source_location": null, "weight": 1.0}, {"source": "deferred_webailyzer_webailyzer_deferred", "target": "deferred_webailyzer_orphaned_submodule_gitlink", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/deferred/webailyzer.md", "source_location": null, "weight": 1.0}, {"source": "deferred_webailyzer_webailyzer_deferred", "target": "deferred_webailyzer_pre_integration_checklist", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/deferred/webailyzer.md", "source_location": null, "weight": 1.0}, {"source": "deferred_webailyzer_ssrf_hardening", "target": "deferred_webailyzer_webailyzer_deferred", "relation": "rationale_for", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/deferred/webailyzer.md", "source_location": null, "weight": 1.0}, {"source": "deferred_webailyzer_internal_only_service", "target": "deferred_webailyzer_pre_integration_checklist", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/deferred/webailyzer.md", "source_location": null, "weight": 1.0}, {"source": "deferred_webailyzer_ssrf_hardening", "target": "stackfast2026_public_mutation_routes_risk", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.75, "source_file": "docs/deferred/webailyzer.md", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/9d41a27c990095dc25c130fa247543ed0f2f519acd7ffbdc4207690999f30b6e.json b/graphify-out/cache/semantic/9d41a27c990095dc25c130fa247543ed0f2f519acd7ffbdc4207690999f30b6e.json new file mode 100644 index 0000000..1442f1f --- /dev/null +++ b/graphify-out/cache/semantic/9d41a27c990095dc25c130fa247543ed0f2f519acd7ffbdc4207690999f30b6e.json @@ -0,0 +1 @@ +{"nodes": [{"id": "stackfast2026_implementation_plan_rebuild_plan", "label": "Stackfast 2026 Rebuild Implementation Plan", "file_type": "document", "source_file": "Stackfast2026 implementation plan.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "stackfast2026_implementation_plan_reset_dont_rescue", "label": "Reset Don't Rescue Strategy", "file_type": "rationale", "source_file": "Stackfast2026 implementation plan.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "stackfast2026_implementation_plan_target_architecture", "label": "Target Architecture", "file_type": "concept", "source_file": "Stackfast2026 implementation plan.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "stackfast2026_implementation_plan_tech_stack", "label": "Rebuild Tech Stack", "file_type": "concept", "source_file": "Stackfast2026 implementation plan.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "stackfast2026_implementation_plan_canonical_api", "label": "Canonical API Surface", "file_type": "concept", "source_file": "Stackfast2026 implementation plan.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "stackfast2026_implementation_plan_blueprint_output_shape", "label": "Blueprint Output Shape", "file_type": "concept", "source_file": "Stackfast2026 implementation plan.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "stackfast2026_implementation_plan_admin_only_mutations", "label": "Admin-Only Mutations Rule", "file_type": "rationale", "source_file": "Stackfast2026 implementation plan.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "stackfast2026_implementation_plan_verification_plan", "label": "Verification Plan", "file_type": "concept", "source_file": "Stackfast2026 implementation plan.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "stackfast2026_implementation_plan_rebuild_plan", "target": "stackfast2026_codebase_revival_audit", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Stackfast2026 implementation plan.md", "source_location": null, "weight": 1.0}, {"source": "stackfast2026_implementation_plan_reset_dont_rescue", "target": "stackfast2026_implementation_plan_rebuild_plan", "relation": "rationale_for", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Stackfast2026 implementation plan.md", "source_location": null, "weight": 1.0}, {"source": "stackfast2026_implementation_plan_rebuild_plan", "target": "stackfast2026_implementation_plan_target_architecture", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Stackfast2026 implementation plan.md", "source_location": null, "weight": 1.0}, {"source": "stackfast2026_implementation_plan_target_architecture", "target": "pnpm_workspace_pnpm_workspaces", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Stackfast2026 implementation plan.md", "source_location": null, "weight": 1.0}, {"source": "stackfast2026_implementation_plan_tech_stack", "target": "decisions_001_authentication_strategy_better_auth", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Stackfast2026 implementation plan.md", "source_location": null, "weight": 1.0}, {"source": "stackfast2026_implementation_plan_tech_stack", "target": "neon_postgres_skill_neon_serverless_postgres", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Stackfast2026 implementation plan.md", "source_location": null, "weight": 1.0}, {"source": "stackfast2026_implementation_plan_tech_stack", "target": "readme_packages_schemas", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Stackfast2026 implementation plan.md", "source_location": null, "weight": 1.0}, {"source": "stackfast2026_implementation_plan_canonical_api", "target": "readme_api_surface", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "Stackfast2026 implementation plan.md", "source_location": null, "weight": 1.0}, {"source": "stackfast2026_implementation_plan_canonical_api", "target": "backlog_integration_plan_unified_endpoints", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.85, "source_file": "Stackfast2026 implementation plan.md", "source_location": null, "weight": 1.0}, {"source": "stackfast2026_implementation_plan_blueprint_output_shape", "target": "decisions_002_ai_provider_strategy_zod_validation", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Stackfast2026 implementation plan.md", "source_location": null, "weight": 1.0}, {"source": "stackfast2026_implementation_plan_admin_only_mutations", "target": "stackfast2026_public_mutation_routes_risk", "relation": "rationale_for", "confidence": "INFERRED", "confidence_score": 0.85, "source_file": "Stackfast2026 implementation plan.md", "source_location": null, "weight": 1.0}, {"source": "stackfast2026_implementation_plan_verification_plan", "target": "readme_quality_gate", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.85, "source_file": "Stackfast2026 implementation plan.md", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/a41f6c1a50c4de40a2a74212a43753d7f44118c3ef3f868eb2798feb05d89db0.json b/graphify-out/cache/semantic/a41f6c1a50c4de40a2a74212a43753d7f44118c3ef3f868eb2798feb05d89db0.json new file mode 100644 index 0000000..a9df0b4 --- /dev/null +++ b/graphify-out/cache/semantic/a41f6c1a50c4de40a2a74212a43753d7f44118c3ef3f868eb2798feb05d89db0.json @@ -0,0 +1 @@ +{"nodes": [{"id": "workflows_ci_ci_pipeline", "label": "CI Workflow", "file_type": "code", "source_file": ".github/workflows/ci.yml", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "workflows_ci_validate_job", "label": "validate Job", "file_type": "code", "source_file": ".github/workflows/ci.yml", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "workflows_ci_quality_steps", "label": "Type Check Lint Build Test Steps", "file_type": "code", "source_file": ".github/workflows/ci.yml", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "workflows_ci_registry_validation_step", "label": "Validate Registry Step", "file_type": "code", "source_file": ".github/workflows/ci.yml", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "workflows_ci_playwright_e2e_step", "label": "Playwright E2E Step", "file_type": "code", "source_file": ".github/workflows/ci.yml", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "workflows_ci_ci_pipeline", "target": "workflows_ci_validate_job", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".github/workflows/ci.yml", "source_location": null, "weight": 1.0}, {"source": "workflows_ci_validate_job", "target": "workflows_ci_quality_steps", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".github/workflows/ci.yml", "source_location": null, "weight": 1.0}, {"source": "workflows_ci_validate_job", "target": "workflows_ci_registry_validation_step", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".github/workflows/ci.yml", "source_location": null, "weight": 1.0}, {"source": "workflows_ci_validate_job", "target": "workflows_ci_playwright_e2e_step", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": ".github/workflows/ci.yml", "source_location": null, "weight": 1.0}, {"source": "workflows_ci_ci_pipeline", "target": "readme_quality_gate", "relation": "implements", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": ".github/workflows/ci.yml", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/db8762abb2e985dc6d9e7f006f736e2d41921cea0b974e78377664b467ae101a.json b/graphify-out/cache/semantic/db8762abb2e985dc6d9e7f006f736e2d41921cea0b974e78377664b467ae101a.json new file mode 100644 index 0000000..5056b6a --- /dev/null +++ b/graphify-out/cache/semantic/db8762abb2e985dc6d9e7f006f736e2d41921cea0b974e78377664b467ae101a.json @@ -0,0 +1 @@ +{"nodes": [{"id": "public_vite_vite_logo", "label": "Vite Logo", "file_type": "image", "source_file": "apps/web/public/vite.svg", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "public_vite_iconify_logo_asset", "label": "Iconify Logo Asset", "file_type": "image", "source_file": "apps/web/public/vite.svg", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "public_vite_blue_purple_gradient", "label": "Blue Purple Gradient", "file_type": "image", "source_file": "apps/web/public/vite.svg", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "public_vite_yellow_orange_gradient", "label": "Yellow Orange Gradient", "file_type": "image", "source_file": "apps/web/public/vite.svg", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "public_vite_yellow_lightning_bolt", "label": "Yellow Lightning Bolt", "file_type": "image", "source_file": "apps/web/public/vite.svg", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "public_vite_vite_logo", "target": "public_vite_iconify_logo_asset", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "apps/web/public/vite.svg", "source_location": null, "weight": 1.0}, {"source": "public_vite_vite_logo", "target": "public_vite_blue_purple_gradient", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "apps/web/public/vite.svg", "source_location": null, "weight": 1.0}, {"source": "public_vite_yellow_lightning_bolt", "target": "public_vite_yellow_orange_gradient", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "apps/web/public/vite.svg", "source_location": null, "weight": 1.0}, {"source": "public_vite_vite_logo", "target": "public_vite_yellow_lightning_bolt", "relation": "conceptually_related_to", "confidence": "INFERRED", "confidence_score": 0.85, "source_file": "apps/web/public/vite.svg", "source_location": null, "weight": 1.0}], "hyperedges": [{"id": "public_vite_vite_logo_composition", "label": "Vite Logo Composition", "nodes": ["public_vite_vite_logo", "public_vite_blue_purple_gradient", "public_vite_yellow_orange_gradient", "public_vite_yellow_lightning_bolt"], "relation": "form", "confidence": "INFERRED", "confidence_score": 0.85, "source_file": "apps/web/public/vite.svg"}]} \ No newline at end of file diff --git a/graphify-out/cache/semantic/eeef9ba2c718b426cfee14ee19c5d0a4b149cf906670e62f485e1dde86ecae64.json b/graphify-out/cache/semantic/eeef9ba2c718b426cfee14ee19c5d0a4b149cf906670e62f485e1dde86ecae64.json new file mode 100644 index 0000000..cff712a --- /dev/null +++ b/graphify-out/cache/semantic/eeef9ba2c718b426cfee14ee19c5d0a4b149cf906670e62f485e1dde86ecae64.json @@ -0,0 +1 @@ +{"nodes": [{"id": "web_index_stackfast_web_entry", "label": "StackFast Web HTML Entry", "file_type": "code", "source_file": "apps/web/index.html", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "web_index_seo_metadata", "label": "SEO Metadata", "file_type": "code", "source_file": "apps/web/index.html", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "web_index_security_meta_headers", "label": "Security Meta Headers", "file_type": "code", "source_file": "apps/web/index.html", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "web_index_content_security_policy", "label": "Content Security Policy", "file_type": "code", "source_file": "apps/web/index.html", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "web_index_stackfast_web_entry", "target": "web_index_seo_metadata", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "apps/web/index.html", "source_location": null, "weight": 1.0}, {"source": "web_index_stackfast_web_entry", "target": "web_index_security_meta_headers", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "apps/web/index.html", "source_location": null, "weight": 1.0}, {"source": "web_index_security_meta_headers", "target": "web_index_content_security_policy", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "apps/web/index.html", "source_location": null, "weight": 1.0}, {"source": "web_index_stackfast_web_entry", "target": "readme_apps_web", "relation": "implements", "confidence": "INFERRED", "confidence_score": 0.85, "source_file": "apps/web/index.html", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/f6de8dfae2a5e6f05acc30edacdfb86bced87742a1d9a9570a72a9c2bad11e21.json b/graphify-out/cache/semantic/f6de8dfae2a5e6f05acc30edacdfb86bced87742a1d9a9570a72a9c2bad11e21.json new file mode 100644 index 0000000..42bbd9d --- /dev/null +++ b/graphify-out/cache/semantic/f6de8dfae2a5e6f05acc30edacdfb86bced87742a1d9a9570a72a9c2bad11e21.json @@ -0,0 +1 @@ +{"nodes": [{"id": "deploy_rollback_rollback_runbook", "label": "Rollback Runbook", "file_type": "document", "source_file": "scripts/deploy/rollback.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "deploy_rollback_stackfast_web_rollback", "label": "stackfast-web Rollback", "file_type": "concept", "source_file": "scripts/deploy/rollback.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "deploy_rollback_stackfast_api_rollback", "label": "stackfast-api Rollback", "file_type": "concept", "source_file": "scripts/deploy/rollback.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "deploy_rollback_schema_compatibility_gate", "label": "Schema Compatibility Gate", "file_type": "rationale", "source_file": "scripts/deploy/rollback.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "deploy_rollback_two_deploy_schema_rule", "label": "Two-Deploy Schema Rule", "file_type": "rationale", "source_file": "scripts/deploy/rollback.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "deploy_rollback_manual_forward_migration_intervention", "label": "Manual Forward-Migration Intervention", "file_type": "concept", "source_file": "scripts/deploy/rollback.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "deploy_rollback_smoke_test_verification", "label": "Post-Rollback Smoke Test Verification", "file_type": "concept", "source_file": "scripts/deploy/rollback.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "deploy_rollback_rollback_runbook", "target": "decisions_003_deployment_architecture_deployment_architecture", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/deploy/rollback.md", "source_location": null, "weight": 1.0}, {"source": "deploy_rollback_rollback_runbook", "target": "deploy_rollback_stackfast_web_rollback", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/deploy/rollback.md", "source_location": null, "weight": 1.0}, {"source": "deploy_rollback_rollback_runbook", "target": "deploy_rollback_stackfast_api_rollback", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/deploy/rollback.md", "source_location": null, "weight": 1.0}, {"source": "deploy_rollback_stackfast_api_rollback", "target": "deploy_rollback_schema_compatibility_gate", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/deploy/rollback.md", "source_location": null, "weight": 1.0}, {"source": "deploy_rollback_schema_compatibility_gate", "target": "deploy_rollback_two_deploy_schema_rule", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/deploy/rollback.md", "source_location": null, "weight": 1.0}, {"source": "deploy_rollback_schema_compatibility_gate", "target": "deploy_rollback_manual_forward_migration_intervention", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/deploy/rollback.md", "source_location": null, "weight": 1.0}, {"source": "deploy_rollback_stackfast_api_rollback", "target": "deploy_rollback_smoke_test_verification", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/deploy/rollback.md", "source_location": null, "weight": 1.0}, {"source": "deploy_rollback_two_deploy_schema_rule", "target": "decisions_003_deployment_architecture_rollback_strategy", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "scripts/deploy/rollback.md", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/fbcf3ee9add201a4e41a1cd06d32020cb91ec7fa2a4b5d2f64f53a3a1573bfda.json b/graphify-out/cache/semantic/fbcf3ee9add201a4e41a1cd06d32020cb91ec7fa2a4b5d2f64f53a3a1573bfda.json new file mode 100644 index 0000000..1a2f47c --- /dev/null +++ b/graphify-out/cache/semantic/fbcf3ee9add201a4e41a1cd06d32020cb91ec7fa2a4b5d2f64f53a3a1573bfda.json @@ -0,0 +1 @@ +{"nodes": [{"id": "readme_stackfast_2026", "label": "Stackfast 2026", "file_type": "document", "source_file": "readme.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "readme_monorepo_architecture", "label": "Monorepo Architecture", "file_type": "concept", "source_file": "readme.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "readme_apps_api", "label": "apps/api Hono API Server", "file_type": "concept", "source_file": "readme.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "readme_apps_web", "label": "apps/web React Vite Web App", "file_type": "concept", "source_file": "readme.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "readme_packages_ai", "label": "packages/ai Blueprint Explanation Providers", "file_type": "concept", "source_file": "readme.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "readme_packages_exporter", "label": "packages/exporter Scaffold Generation", "file_type": "concept", "source_file": "readme.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "readme_packages_registry", "label": "packages/registry Catalog Loading and Validation", "file_type": "concept", "source_file": "readme.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "readme_packages_rules_engine", "label": "packages/rules-engine Compatibility Scoring", "file_type": "concept", "source_file": "readme.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "readme_packages_schemas", "label": "packages/schemas Shared Zod API and Drizzle Schemas", "file_type": "concept", "source_file": "readme.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "readme_packages_shared", "label": "packages/shared Utilities", "file_type": "concept", "source_file": "readme.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "readme_api_surface", "label": "Public MVP API Surface", "file_type": "concept", "source_file": "readme.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "readme_quality_gate", "label": "Testing and Quality Gate", "file_type": "concept", "source_file": "readme.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "readme_production_deployment", "label": "Production Deployment Runbook", "file_type": "concept", "source_file": "readme.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "readme_stackfast_api_service", "label": "stackfast-api Railway Service", "file_type": "concept", "source_file": "readme.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "readme_stackfast_web_service", "label": "stackfast-web Railway Service", "file_type": "concept", "source_file": "readme.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "readme_production_env_vars", "label": "Production Environment Variables", "file_type": "concept", "source_file": "readme.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "readme_cross_origin_production_auth", "label": "Cross-Origin Production Auth Cookie Behavior", "file_type": "concept", "source_file": "readme.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "readme_stackfast_2026", "target": "readme_monorepo_architecture", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "readme.md", "source_location": null, "weight": 1.0}, {"source": "readme_monorepo_architecture", "target": "readme_apps_api", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "readme.md", "source_location": null, "weight": 1.0}, {"source": "readme_monorepo_architecture", "target": "readme_apps_web", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "readme.md", "source_location": null, "weight": 1.0}, {"source": "readme_monorepo_architecture", "target": "readme_packages_ai", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "readme.md", "source_location": null, "weight": 1.0}, {"source": "readme_monorepo_architecture", "target": "readme_packages_exporter", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "readme.md", "source_location": null, "weight": 1.0}, {"source": "readme_monorepo_architecture", "target": "readme_packages_registry", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "readme.md", "source_location": null, "weight": 1.0}, {"source": "readme_monorepo_architecture", "target": "readme_packages_rules_engine", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "readme.md", "source_location": null, "weight": 1.0}, {"source": "readme_monorepo_architecture", "target": "readme_packages_schemas", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "readme.md", "source_location": null, "weight": 1.0}, {"source": "readme_monorepo_architecture", "target": "readme_packages_shared", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "readme.md", "source_location": null, "weight": 1.0}, {"source": "readme_stackfast_2026", "target": "readme_api_surface", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "readme.md", "source_location": null, "weight": 1.0}, {"source": "readme_stackfast_2026", "target": "readme_quality_gate", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "readme.md", "source_location": null, "weight": 1.0}, {"source": "readme_production_deployment", "target": "readme_stackfast_api_service", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "readme.md", "source_location": null, "weight": 1.0}, {"source": "readme_production_deployment", "target": "readme_stackfast_web_service", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "readme.md", "source_location": null, "weight": 1.0}, {"source": "readme_production_deployment", "target": "readme_production_env_vars", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "readme.md", "source_location": null, "weight": 1.0}, {"source": "readme_production_deployment", "target": "readme_cross_origin_production_auth", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "readme.md", "source_location": null, "weight": 1.0}, {"source": "readme_production_deployment", "target": "decisions_003_deployment_architecture_deployment_architecture", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "readme.md", "source_location": null, "weight": 1.0}, {"source": "readme_production_deployment", "target": "decisions_001_authentication_strategy_authentication_strategy", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "readme.md", "source_location": null, "weight": 1.0}, {"source": "readme_production_deployment", "target": "decisions_002_ai_provider_strategy_ai_provider_strategy", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "readme.md", "source_location": null, "weight": 1.0}, {"source": "readme_production_deployment", "target": "deploy_rollback_rollback_runbook", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "readme.md", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/stat-index.json b/graphify-out/cache/stat-index.json new file mode 100644 index 0000000..4f5faa0 --- /dev/null +++ b/graphify-out/cache/stat-index.json @@ -0,0 +1 @@ +{"H:\\Stackfast-2026\\.agents\\skills\\neon-postgres\\SKILL.md":{"size":7584,"mtime_ns":1778452122106335500,"hash":"1dd48638d31a6d736266f7d988d81bdcc8769aaf43ba07281ddf6942d3d9b25a"},"H:\\Stackfast-2026\\.github\\workflows\\ci.yml":{"size":1420,"mtime_ns":1778547181424214500,"hash":"a41f6c1a50c4de40a2a74212a43753d7f44118c3ef3f868eb2798feb05d89db0"},"H:\\Stackfast-2026\\.kiro\\specs\\phase-8-deployment\\design.md":{"size":38675,"mtime_ns":1778614087838654700,"hash":"25096ebbc6464c137db8dd9aab019a2667bc521ed463a2f0428dad5e0365a84f"},"H:\\Stackfast-2026\\.kiro\\specs\\phase-8-deployment\\requirements.md":{"size":21277,"mtime_ns":1778614087841014400,"hash":"55fbdf45d1f4291344c2cb0b3cc91c983728c5f3ff14fc9e5618696e465a7559"},"H:\\Stackfast-2026\\.kiro\\specs\\phase-8-deployment\\tasks.md":{"size":39161,"mtime_ns":1782077384581974000,"hash":"29cd5d820a5b99f0b5bb656f079a0ef50c929d6730b4d3ed45b0b3287378ec53"},"H:\\Stackfast-2026\\Agents.md":{"size":15903,"mtime_ns":1778452122118476200,"hash":"0c0958c9c84f0a7df72e132e6d1eaea8cc93d754b1d2f757e8335a97ee9c9135"},"H:\\Stackfast-2026\\ROADMAP.md":{"size":15220,"mtime_ns":1778604588427647600,"hash":"0843cbe373950e18752d53eccd5b767441426e59f42dc2973a3d414aaa3864a3"},"H:\\Stackfast-2026\\SALVAGE_MANIFEST.md":{"size":9835,"mtime_ns":1778547181426212000,"hash":"5ae65860c48d795e01f34c55e002c86cda69cda5b87c69f42fd552de50b2148d"},"H:\\Stackfast-2026\\Stackfast2026 implementation plan.md":{"size":16078,"mtime_ns":1778452122127013500,"hash":"9d41a27c990095dc25c130fa247543ed0f2f519acd7ffbdc4207690999f30b6e"},"H:\\Stackfast-2026\\Stackfast2026.md":{"size":26010,"mtime_ns":1778452122131011300,"hash":"3c08e4925144ef34742b12beaf1f42468830c3d986382fb3d5993b868941b052"},"H:\\Stackfast-2026\\apps\\web\\index.html":{"size":1806,"mtime_ns":1778547181432824500,"hash":"eeef9ba2c718b426cfee14ee19c5d0a4b149cf906670e62f485e1dde86ecae64"},"H:\\Stackfast-2026\\docs\\backlog\\INTEGRATION_PLAN.md":{"size":5269,"mtime_ns":1778547181434847800,"hash":"47dccb1f342a64a5783505b2b6e029aef7144adfedf17808fb13cc4cf1c13c47"},"H:\\Stackfast-2026\\docs\\decisions\\001-authentication-strategy.md":{"size":6093,"mtime_ns":1778547181435846300,"hash":"31e25ae3d83c10c8ddb98917b24ba7ee0763c99a97486d088d88448ab98bc548"},"H:\\Stackfast-2026\\docs\\decisions\\002-ai-provider-strategy.md":{"size":4024,"mtime_ns":1778547181435846300,"hash":"5f46add7b3e8692adbf140f93ec6c19ed6da5a2c821c03cc08682edf201575de"},"H:\\Stackfast-2026\\docs\\decisions\\003-deployment-architecture.md":{"size":11184,"mtime_ns":1778604588430795200,"hash":"804113349b315eebb4bf5620ef5fa118fe95679a72f3385c9d9b8307415aa7a8"},"H:\\Stackfast-2026\\docs\\deferred\\webailyzer.md":{"size":2200,"mtime_ns":1778547181436848900,"hash":"96a5491f997eb6190089a5d4a174f69be606890f265761a7a1817a5df28dadf6"},"H:\\Stackfast-2026\\pnpm-workspace.yaml":{"size":43,"mtime_ns":1778452122537248500,"hash":"85c56a733df7be88e85144304be56d2e20849820a0b3e4d2ed217a31869ddecf"},"H:\\Stackfast-2026\\readme.md":{"size":12967,"mtime_ns":1782077351516224600,"hash":"fbcf3ee9add201a4e41a1cd06d32020cb91ec7fa2a4b5d2f64f53a3a1573bfda"},"H:\\Stackfast-2026\\scripts\\deploy\\rollback.md":{"size":9430,"mtime_ns":1782077110020853200,"hash":"f6de8dfae2a5e6f05acc30edacdfb86bced87742a1d9a9570a72a9c2bad11e21"},"H:\\Stackfast-2026\\apps\\web\\public\\vite.svg":{"size":1497,"mtime_ns":1778452122156475600,"hash":"db8762abb2e985dc6d9e7f006f736e2d41921cea0b974e78377664b467ae101a"},"H:\\Stackfast-2026\\.gemini\\settings.json":{"size":115,"mtime_ns":1778452122109848600,"hash":"5b1c80ca2181e7791618611d079520c470b93a7b0e59291f470babdf1bdf0870"},"H:\\Stackfast-2026\\apps\\api\\package.json":{"size":1117,"mtime_ns":1782076364225418700,"hash":"74ee0d24d170fd55a770e5ba453cfad9d47bacfd7c8fac028cba89c87615f46d"},"H:\\Stackfast-2026\\apps\\api\\tsconfig.json":{"size":154,"mtime_ns":1778547181431315100,"hash":"d1423122f93f5734e35694a112dfd9c0ef12af6c2a53752d6f85ce40b889a58a"},"H:\\Stackfast-2026\\apps\\web\\components.json":{"size":434,"mtime_ns":1778452122148258100,"hash":"35ee6c55973fe7423eb5f8f22c27f9ddea9a81fcba224517e9c745b067e9c0b7"},"H:\\Stackfast-2026\\apps\\web\\package.json":{"size":1448,"mtime_ns":1782072071776200400,"hash":"2783802c68ff8f313431705a3a5ca627b915fe24d23e66f15425eb9ed16a0ac8"},"H:\\Stackfast-2026\\apps\\web\\public\\catalog\\v1\\categories.json":{"size":5757,"mtime_ns":1778452122152770500,"hash":"7252474f3bea5e90a859e1930282665361d615c25cfe5c8c9854f66d9d2c0d72"},"H:\\Stackfast-2026\\apps\\web\\public\\catalog\\v1\\manifest.json":{"size":270,"mtime_ns":1778452122153428900,"hash":"4d41819a987997f7c7b5a4477b753a9e005f1c35e788739f5104aa46cc52ff20"},"H:\\Stackfast-2026\\apps\\web\\public\\catalog\\v1\\rules.json":{"size":19960,"mtime_ns":1778452122154443400,"hash":"d5b832c4fe0efb36458583ac8aa49b0a245bc561a113af53741f5d80a42c7e57"},"H:\\Stackfast-2026\\apps\\web\\public\\catalog\\v1\\tools.json":{"size":78847,"mtime_ns":1778452122156475600,"hash":"7030a5daabd61c4f01ea7564b27bfdce25b7829ab20128268a63277d81f628a7"},"H:\\Stackfast-2026\\apps\\web\\tsconfig.json":{"size":373,"mtime_ns":1778547181433834100,"hash":"e607a1d210cd9a43f1c51ae3491aa01506ff439de869e3c1705103fbef0a82a2"},"H:\\Stackfast-2026\\package.json":{"size":1145,"mtime_ns":1782076529050610000,"hash":"7946f6c09895c6450ab8e978f349687de8c11978bdf3aec6155db6c3006ec09f"},"H:\\Stackfast-2026\\packages\\ai\\package.json":{"size":587,"mtime_ns":1778547181437841600,"hash":"92ceb95c5931beef0cfcee683ae4dc9f2d778757afa53e6701b4160e8156384c"},"H:\\Stackfast-2026\\packages\\ai\\tsconfig.json":{"size":154,"mtime_ns":1778452122492450800,"hash":"c995d23485b5fa3f4b718f39e53955b69469f2c13facdaad0822ba0eb5620850"},"H:\\Stackfast-2026\\packages\\exporter\\package.json":{"size":570,"mtime_ns":1778547181442352400,"hash":"1b7fa0e9ec0f8c6678c8c8c49072de5af121634102c7cdac2e563c1d51fd291e"},"H:\\Stackfast-2026\\packages\\exporter\\tsconfig.json":{"size":154,"mtime_ns":1778452122498307300,"hash":"04d9856b88e94fb790375c53e8b3de9af3797846661301d145d206642b5ca2a3"},"H:\\Stackfast-2026\\packages\\registry\\package.json":{"size":566,"mtime_ns":1778547181442352400,"hash":"031b00fcfc765de3f775c27badb8b6b1cfda8927e10700095de13258e6c51fc4"},"H:\\Stackfast-2026\\packages\\registry\\src\\data\\v1\\categories.json":{"size":5757,"mtime_ns":1778452122506111100,"hash":"f05fa24ac59374be242f62ee328cd75e1fb7c9e59ad30b5658dda9f6a5961c31"},"H:\\Stackfast-2026\\packages\\registry\\src\\data\\v1\\manifest.json":{"size":270,"mtime_ns":1778452122507139300,"hash":"ad530992a7dfe35db7dda66c70e1d323edfa10048c37b2207d3b85ddcb8d7d29"},"H:\\Stackfast-2026\\packages\\registry\\src\\data\\v1\\rules.json":{"size":19960,"mtime_ns":1778452122508657000,"hash":"060890b1822389b2a303a5fc533d8b2a77d5ba9263962977426dd9e484510ad9"},"H:\\Stackfast-2026\\packages\\registry\\src\\data\\v1\\tools.json":{"size":78847,"mtime_ns":1778452122511319500,"hash":"2a71a2315b5b3aadc653def9129295747a058a1b9c2355bd1c827ca07d3afad2"},"H:\\Stackfast-2026\\packages\\registry\\tsconfig.json":{"size":154,"mtime_ns":1778452122518319900,"hash":"a523449776f90e8491d5d3b7698d47fcc918038bdb865506cb592f1dc2bd120e"},"H:\\Stackfast-2026\\packages\\rules-engine\\package.json":{"size":527,"mtime_ns":1778547181443871900,"hash":"05c6e1dfe9956b25e8e8415102d43f60c17c25987eb39374db91a229d602af83"},"H:\\Stackfast-2026\\packages\\rules-engine\\tsconfig.json":{"size":154,"mtime_ns":1778452122522841000,"hash":"6d4c8917184aa92122af7033cb619e3c64703a0f1f2d43e014baa34042003bbd"},"H:\\Stackfast-2026\\packages\\schemas\\package.json":{"size":541,"mtime_ns":1778547181443871900,"hash":"a1703336dde44373694584cec9647dfd541ec9884c3f03aa66b07d06309cbacf"},"H:\\Stackfast-2026\\packages\\schemas\\tsconfig.json":{"size":154,"mtime_ns":1778452122527372900,"hash":"ece6425ab1b5bd91f6183ddc7c97d5d6d7697df4998289718ddad3ff4ecd81a5"},"H:\\Stackfast-2026\\packages\\shared\\package.json":{"size":369,"mtime_ns":1778547181444879300,"hash":"83765cf899a3b32a8ac7ac889d37563134840bc6e8c7d23a30ba945656b75c8c"},"H:\\Stackfast-2026\\packages\\shared\\tsconfig.json":{"size":154,"mtime_ns":1778452122529603600,"hash":"622788a6f498a596e531a9ba18b3893b706d263f1a4056fb692d7755a6fed49d"},"H:\\Stackfast-2026\\skills-lock.json":{"size":294,"mtime_ns":1778452122564953700,"hash":"190177bb8a5612d8d406f3e38e29bf501ea67144c9dbe6660f81aa0ddae6d5e7"},"H:\\Stackfast-2026\\tsconfig.base.json":{"size":307,"mtime_ns":1778452122569968000,"hash":"8014c6a14b9bb69b1a3e57ab478d2cf02cde576d52330b0c0e7fe61dadebd3d3"}} \ No newline at end of file diff --git a/graphify-out/cost.json b/graphify-out/cost.json new file mode 100644 index 0000000..ab2acff --- /dev/null +++ b/graphify-out/cost.json @@ -0,0 +1,12 @@ +{ + "runs": [ + { + "date": "2026-07-03T10:29:49.521575+00:00", + "input_tokens": 0, + "output_tokens": 0, + "files": 211 + } + ], + "total_input_tokens": 0, + "total_output_tokens": 0 +} \ No newline at end of file diff --git a/graphify-out/graph.html b/graphify-out/graph.html new file mode 100644 index 0000000..86905ea --- /dev/null +++ b/graphify-out/graph.html @@ -0,0 +1,307 @@ + + + + +graphify - graphify-out\graph.html + + + + +
+ + + + + \ No newline at end of file diff --git a/graphify-out/graph.json b/graphify-out/graph.json new file mode 100644 index 0000000..29b0c93 --- /dev/null +++ b/graphify-out/graph.json @@ -0,0 +1,42414 @@ +{ + "directed": false, + "multigraph": false, + "graph": { + "hyperedges": [ + { + "id": "agents_rebuild_execution_model", + "label": "Rebuild Execution Model", + "nodes": [ + "agents_orchestrator", + "agents_cleanup_agent", + "agents_architect_agent", + "agents_engine_agent", + "agents_api_agent", + "agents_ui_agent", + "agents_qa_agent" + ], + "relation": "form", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "Agents.md" + }, + { + "id": "phase_8_operational_architecture", + "label": "Phase 8 Operational Architecture", + "nodes": [ + "kiro_specs_phase_8_deployment_design_railway_service_topology", + "kiro_specs_phase_8_deployment_design_cross_origin_cookie_flow", + "kiro_specs_phase_8_deployment_design_rate_limit_module", + "kiro_specs_phase_8_deployment_design_sentry_observability", + "kiro_specs_phase_8_deployment_design_migration_one_shot", + "kiro_specs_phase_8_deployment_design_deploy_smoke_script" + ], + "relation": "form", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".kiro/specs/phase-8-deployment/design.md" + }, + { + "id": "ai_explanation_fallback_chain", + "label": "AI Explanation Fallback Chain", + "nodes": [ + "docs_decisions_002_ai_provider_strategy_azure_openai_provider", + "docs_decisions_002_ai_provider_strategy_gemini_provider", + "docs_decisions_002_ai_provider_strategy_heuristic_provider", + "docs_decisions_002_ai_provider_strategy_fallback_explainer", + "docs_decisions_002_ai_provider_strategy_zod_validation" + ], + "relation": "form", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/decisions/002-ai-provider-strategy.md" + }, + { + "id": "public_vite_vite_logo_composition", + "label": "Vite Logo Composition", + "nodes": [ + "apps_web_public_vite_vite_logo", + "apps_web_public_vite_blue_purple_gradient", + "apps_web_public_vite_yellow_orange_gradient", + "apps_web_public_vite_yellow_lightning_bolt" + ], + "relation": "form", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "apps/web/public/vite.svg" + } + ] + }, + "nodes": [ + { + "label": "drizzle.config.ts", + "file_type": "code", + "source_file": "apps/api/drizzle.config.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_api_drizzle_config", + "community": 82, + "norm_label": "drizzle.config.ts" + }, + { + "label": "package.json", + "file_type": "code", + "source_file": "apps/api/package.json", + "source_location": "L1", + "_origin": "ast", + "id": "apps_api_package", + "community": 10, + "norm_label": "package.json" + }, + { + "label": "name", + "file_type": "code", + "source_file": "apps/api/package.json", + "source_location": "L2", + "_origin": "ast", + "id": "apps_api_package_name", + "community": 10, + "norm_label": "name" + }, + { + "label": "version", + "file_type": "code", + "source_file": "apps/api/package.json", + "source_location": "L3", + "_origin": "ast", + "id": "apps_api_package_version", + "community": 10, + "norm_label": "version" + }, + { + "label": "private", + "file_type": "code", + "source_file": "apps/api/package.json", + "source_location": "L4", + "_origin": "ast", + "id": "apps_api_package_private", + "community": 10, + "norm_label": "private" + }, + { + "label": "type", + "file_type": "code", + "source_file": "apps/api/package.json", + "source_location": "L5", + "_origin": "ast", + "id": "apps_api_package_type", + "community": 10, + "norm_label": "type" + }, + { + "label": "scripts", + "file_type": "code", + "source_file": "apps/api/package.json", + "source_location": "L6", + "_origin": "ast", + "id": "apps_api_package_scripts", + "community": 10, + "norm_label": "scripts" + }, + { + "label": "dev", + "file_type": "code", + "source_file": "apps/api/package.json", + "source_location": "L7", + "_origin": "ast", + "id": "apps_api_package_scripts_dev", + "community": 10, + "norm_label": "dev" + }, + { + "label": "build", + "file_type": "code", + "source_file": "apps/api/package.json", + "source_location": "L8", + "_origin": "ast", + "id": "apps_api_package_scripts_build", + "community": 10, + "norm_label": "build" + }, + { + "label": "start", + "file_type": "code", + "source_file": "apps/api/package.json", + "source_location": "L9", + "_origin": "ast", + "id": "apps_api_package_scripts_start", + "community": 10, + "norm_label": "start" + }, + { + "label": "lint", + "file_type": "code", + "source_file": "apps/api/package.json", + "source_location": "L10", + "_origin": "ast", + "id": "apps_api_package_scripts_lint", + "community": 10, + "norm_label": "lint" + }, + { + "label": "type-check", + "file_type": "code", + "source_file": "apps/api/package.json", + "source_location": "L11", + "_origin": "ast", + "id": "apps_api_package_scripts_type_check", + "community": 10, + "norm_label": "type-check" + }, + { + "label": "test", + "file_type": "code", + "source_file": "apps/api/package.json", + "source_location": "L12", + "_origin": "ast", + "id": "apps_api_package_scripts_test", + "community": 10, + "norm_label": "test" + }, + { + "label": "seed", + "file_type": "code", + "source_file": "apps/api/package.json", + "source_location": "L13", + "_origin": "ast", + "id": "apps_api_package_scripts_seed", + "community": 10, + "norm_label": "seed" + }, + { + "label": "dependencies", + "file_type": "code", + "source_file": "apps/api/package.json", + "source_location": "L15", + "_origin": "ast", + "id": "apps_api_package_dependencies", + "community": 10, + "norm_label": "dependencies" + }, + { + "label": "@hono/node-server", + "file_type": "code", + "source_file": "apps/api/package.json", + "source_location": "L16", + "_origin": "ast", + "id": "apps_api_package_dependencies_hono_node_server", + "community": 10, + "norm_label": "@hono/node-server" + }, + { + "label": "@neondatabase/serverless", + "file_type": "code", + "source_file": "apps/api/package.json", + "source_location": "L17", + "_origin": "ast", + "id": "apps_api_package_dependencies_neondatabase_serverless", + "community": 10, + "norm_label": "@neondatabase/serverless" + }, + { + "label": "@sentry/node", + "file_type": "code", + "source_file": "apps/api/package.json", + "source_location": "L18", + "_origin": "ast", + "id": "apps_api_package_dependencies_sentry_node", + "community": 10, + "norm_label": "@sentry/node" + }, + { + "label": "@stackfast/ai", + "file_type": "code", + "source_file": "apps/api/package.json", + "source_location": "L19", + "_origin": "ast", + "id": "apps_api_package_dependencies_stackfast_ai", + "community": 10, + "norm_label": "@stackfast/ai" + }, + { + "label": "@stackfast/exporter", + "file_type": "code", + "source_file": "apps/api/package.json", + "source_location": "L20", + "_origin": "ast", + "id": "apps_api_package_dependencies_stackfast_exporter", + "community": 10, + "norm_label": "@stackfast/exporter" + }, + { + "label": "@stackfast/registry", + "file_type": "code", + "source_file": "apps/api/package.json", + "source_location": "L21", + "_origin": "ast", + "id": "apps_api_package_dependencies_stackfast_registry", + "community": 10, + "norm_label": "@stackfast/registry" + }, + { + "label": "@stackfast/rules-engine", + "file_type": "code", + "source_file": "apps/api/package.json", + "source_location": "L22", + "_origin": "ast", + "id": "apps_api_package_dependencies_stackfast_rules_engine", + "community": 10, + "norm_label": "@stackfast/rules-engine" + }, + { + "label": "@stackfast/schemas", + "file_type": "code", + "source_file": "apps/api/package.json", + "source_location": "L23", + "_origin": "ast", + "id": "apps_api_package_dependencies_stackfast_schemas", + "community": 10, + "norm_label": "@stackfast/schemas" + }, + { + "label": "@stackfast/shared", + "file_type": "code", + "source_file": "apps/api/package.json", + "source_location": "L24", + "_origin": "ast", + "id": "apps_api_package_dependencies_stackfast_shared", + "community": 10, + "norm_label": "@stackfast/shared" + }, + { + "label": "@upstash/ratelimit", + "file_type": "code", + "source_file": "apps/api/package.json", + "source_location": "L25", + "_origin": "ast", + "id": "apps_api_package_dependencies_upstash_ratelimit", + "community": 10, + "norm_label": "@upstash/ratelimit" + }, + { + "label": "@upstash/redis", + "file_type": "code", + "source_file": "apps/api/package.json", + "source_location": "L26", + "_origin": "ast", + "id": "apps_api_package_dependencies_upstash_redis", + "community": 10, + "norm_label": "@upstash/redis" + }, + { + "label": "better-auth", + "file_type": "code", + "source_file": "apps/api/package.json", + "source_location": "L27", + "_origin": "ast", + "id": "apps_api_package_dependencies_better_auth", + "community": 10, + "norm_label": "better-auth" + }, + { + "label": "drizzle-orm", + "file_type": "code", + "source_file": "apps/api/package.json", + "source_location": "L28", + "_origin": "ast", + "id": "apps_api_package_dependencies_drizzle_orm", + "community": 10, + "norm_label": "drizzle-orm" + }, + { + "label": "hono", + "file_type": "code", + "source_file": "apps/api/package.json", + "source_location": "L29", + "_origin": "ast", + "id": "apps_api_package_dependencies_hono", + "community": 10, + "norm_label": "hono" + }, + { + "label": "zod", + "file_type": "code", + "source_file": "apps/api/package.json", + "source_location": "L30", + "_origin": "ast", + "id": "apps_api_package_dependencies_zod", + "community": 10, + "norm_label": "zod" + }, + { + "label": "devDependencies", + "file_type": "code", + "source_file": "apps/api/package.json", + "source_location": "L32", + "_origin": "ast", + "id": "apps_api_package_devdependencies", + "community": 10, + "norm_label": "devdependencies" + }, + { + "label": "@types/node", + "file_type": "code", + "source_file": "apps/api/package.json", + "source_location": "L33", + "_origin": "ast", + "id": "apps_api_package_devdependencies_types_node", + "community": 10, + "norm_label": "@types/node" + }, + { + "label": "drizzle-kit", + "file_type": "code", + "source_file": "apps/api/package.json", + "source_location": "L34", + "_origin": "ast", + "id": "apps_api_package_devdependencies_drizzle_kit", + "community": 10, + "norm_label": "drizzle-kit" + }, + { + "label": "fast-check", + "file_type": "code", + "source_file": "apps/api/package.json", + "source_location": "L35", + "_origin": "ast", + "id": "apps_api_package_devdependencies_fast_check", + "community": 10, + "norm_label": "fast-check" + }, + { + "label": "tsx", + "file_type": "code", + "source_file": "apps/api/package.json", + "source_location": "L36", + "_origin": "ast", + "id": "apps_api_package_devdependencies_tsx", + "community": 10, + "norm_label": "tsx" + }, + { + "label": "typescript", + "file_type": "code", + "source_file": "apps/api/package.json", + "source_location": "L37", + "_origin": "ast", + "id": "apps_api_package_devdependencies_typescript", + "community": 10, + "norm_label": "typescript" + }, + { + "label": "app.pbt.test.ts", + "file_type": "code", + "source_file": "apps/api/src/app.pbt.test.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_api_src_app_pbt_test", + "community": 2, + "norm_label": "app.pbt.test.ts" + }, + { + "label": "RequestableApp", + "file_type": "code", + "source_file": "apps/api/src/app.pbt.test.ts", + "source_location": "L55", + "_origin": "ast", + "id": "apps_api_src_app_pbt_test_requestableapp", + "community": 2, + "norm_label": "requestableapp" + }, + { + "label": "buildApp()", + "file_type": "code", + "source_file": "apps/api/src/app.pbt.test.ts", + "source_location": "L71", + "_origin": "ast", + "id": "apps_api_src_app_pbt_test_buildapp", + "community": 2, + "norm_label": "buildapp()" + }, + { + "label": "check()", + "file_type": "code", + "source_file": "apps/api/src/app.pbt.test.ts", + "source_location": "L188", + "_origin": "ast", + "id": "apps_api_src_app_pbt_test_check", + "community": 2, + "norm_label": "check()" + }, + { + "label": "app.sentry.test.ts", + "file_type": "code", + "source_file": "apps/api/src/app.sentry.test.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_api_src_app_sentry_test", + "community": 5, + "norm_label": "app.sentry.test.ts" + }, + { + "label": "app.test.ts", + "file_type": "code", + "source_file": "apps/api/src/app.test.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_api_src_app_test", + "community": 2, + "norm_label": "app.test.ts" + }, + { + "label": "createSpyBackend()", + "file_type": "code", + "source_file": "apps/api/src/app.test.ts", + "source_location": "L491", + "_origin": "ast", + "id": "apps_api_src_app_test_createspybackend", + "community": 2, + "norm_label": "createspybackend()" + }, + { + "label": "createSharedStateBackend()", + "file_type": "code", + "source_file": "apps/api/src/app.test.ts", + "source_location": "L519", + "_origin": "ast", + "id": "apps_api_src_app_test_createsharedstatebackend", + "community": 2, + "norm_label": "createsharedstatebackend()" + }, + { + "label": "check()", + "file_type": "code", + "source_file": "apps/api/src/app.test.ts", + "source_location": "L699", + "_origin": "ast", + "id": "apps_api_src_app_test_check", + "community": 2, + "norm_label": "check()" + }, + { + "label": "app.ts", + "file_type": "code", + "source_file": "apps/api/src/app.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_api_src_app", + "community": 5, + "norm_label": "app.ts" + }, + { + "label": "Bindings", + "file_type": "code", + "source_file": "apps/api/src/app.ts", + "source_location": "L25", + "_origin": "ast", + "id": "apps_api_src_app_bindings", + "community": 5, + "norm_label": "bindings" + }, + { + "label": "Variables", + "file_type": "code", + "source_file": "apps/api/src/app.ts", + "source_location": "L30", + "_origin": "ast", + "id": "apps_api_src_app_variables", + "community": 5, + "norm_label": "variables" + }, + { + "label": "ToolSearchQuerySchema", + "file_type": "code", + "source_file": "apps/api/src/app.ts", + "source_location": "L34", + "_origin": "ast", + "id": "apps_api_src_app_toolsearchqueryschema", + "community": 5, + "norm_label": "toolsearchqueryschema" + }, + { + "label": "MigrationParamsSchema", + "file_type": "code", + "source_file": "apps/api/src/app.ts", + "source_location": "L44", + "_origin": "ast", + "id": "apps_api_src_app_migrationparamsschema", + "community": 5, + "norm_label": "migrationparamsschema" + }, + { + "label": "ImportToolsSchema", + "file_type": "code", + "source_file": "apps/api/src/app.ts", + "source_location": "L49", + "_origin": "ast", + "id": "apps_api_src_app_importtoolsschema", + "community": 5, + "norm_label": "importtoolsschema" + }, + { + "label": "EnrichToolSchema", + "file_type": "code", + "source_file": "apps/api/src/app.ts", + "source_location": "L53", + "_origin": "ast", + "id": "apps_api_src_app_enrichtoolschema", + "community": 5, + "norm_label": "enrichtoolschema" + }, + { + "label": "catalogLoader", + "file_type": "code", + "source_file": "apps/api/src/app.ts", + "source_location": "L58", + "_origin": "ast", + "id": "apps_api_src_app_catalogloader", + "community": 5, + "norm_label": "catalogloader" + }, + { + "label": "aiProvider", + "file_type": "code", + "source_file": "apps/api/src/app.ts", + "source_location": "L62", + "_origin": "ast", + "id": "apps_api_src_app_aiprovider", + "community": 5, + "norm_label": "aiprovider" + }, + { + "label": "explainer", + "file_type": "code", + "source_file": "apps/api/src/app.ts", + "source_location": "L63", + "_origin": "ast", + "id": "apps_api_src_app_explainer", + "community": 5, + "norm_label": "explainer" + }, + { + "label": "app", + "file_type": "code", + "source_file": "apps/api/src/app.ts", + "source_location": "L79", + "_origin": "ast", + "id": "apps_api_src_app_app", + "community": 5, + "norm_label": "app" + }, + { + "label": "parseJson()", + "file_type": "code", + "source_file": "apps/api/src/app.ts", + "source_location": "L345", + "_origin": "ast", + "id": "apps_api_src_app_parsejson", + "community": 5, + "norm_label": "parsejson()" + }, + { + "label": "resolveTools()", + "file_type": "code", + "source_file": "apps/api/src/app.ts", + "source_location": "L360", + "_origin": "ast", + "id": "apps_api_src_app_resolvetools", + "community": 5, + "norm_label": "resolvetools()" + }, + { + "label": "requireAdminApiKey()", + "file_type": "code", + "source_file": "apps/api/src/app.ts", + "source_location": "L369", + "_origin": "ast", + "id": "apps_api_src_app_requireadminapikey", + "community": 5, + "norm_label": "requireadminapikey()" + }, + { + "label": "sortTools()", + "file_type": "code", + "source_file": "apps/api/src/app.ts", + "source_location": "L382", + "_origin": "ast", + "id": "apps_api_src_app_sorttools", + "community": 5, + "norm_label": "sorttools()" + }, + { + "label": "chooseBlueprintTools()", + "file_type": "code", + "source_file": "apps/api/src/app.ts", + "source_location": "L394", + "_origin": "ast", + "id": "apps_api_src_app_chooseblueprinttools", + "community": 5, + "norm_label": "chooseblueprinttools()" + }, + { + "label": "buildAlternatives()", + "file_type": "code", + "source_file": "apps/api/src/app.ts", + "source_location": "L424", + "_origin": "ast", + "id": "apps_api_src_app_buildalternatives", + "community": 5, + "norm_label": "buildalternatives()" + }, + { + "label": "replaceTool()", + "file_type": "code", + "source_file": "apps/api/src/app.ts", + "source_location": "L429", + "_origin": "ast", + "id": "apps_api_src_app_replacetool", + "community": 5, + "norm_label": "replacetool()" + }, + { + "label": "generateSafeExport()", + "file_type": "code", + "source_file": "apps/api/src/app.ts", + "source_location": "L436", + "_origin": "ast", + "id": "apps_api_src_app_generatesafeexport", + "community": 5, + "norm_label": "generatesafeexport()" + }, + { + "label": "buildRecommendations()", + "file_type": "code", + "source_file": "apps/api/src/app.ts", + "source_location": "L447", + "_origin": "ast", + "id": "apps_api_src_app_buildrecommendations", + "community": 5, + "norm_label": "buildrecommendations()" + }, + { + "label": "client.ts", + "file_type": "code", + "source_file": "apps/api/src/db/client.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_api_src_db_client", + "community": 70, + "norm_label": "client.ts" + }, + { + "label": "createDrizzle()", + "file_type": "code", + "source_file": "apps/api/src/db/client.ts", + "source_location": "L7", + "_origin": "ast", + "id": "apps_api_src_db_client_createdrizzle", + "community": 70, + "norm_label": "createdrizzle()" + }, + { + "label": "getDb()", + "file_type": "code", + "source_file": "apps/api/src/db/client.ts", + "source_location": "L23", + "_origin": "ast", + "id": "apps_api_src_db_client_getdb", + "community": 70, + "norm_label": "getdb()" + }, + { + "label": "isDatabaseAvailable()", + "file_type": "code", + "source_file": "apps/api/src/db/client.ts", + "source_location": "L35", + "_origin": "ast", + "id": "apps_api_src_db_client_isdatabaseavailable", + "community": 38, + "norm_label": "isdatabaseavailable()" + }, + { + "label": "Db", + "file_type": "code", + "source_file": "apps/api/src/db/client.ts", + "source_location": "L39", + "_origin": "ast", + "id": "apps_api_src_db_client_db", + "community": 70, + "norm_label": "db" + }, + { + "label": "seed.ts", + "file_type": "code", + "source_file": "apps/api/src/db/seed.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_api_src_db_seed", + "community": 25, + "norm_label": "seed.ts" + }, + { + "label": "seed()", + "file_type": "code", + "source_file": "apps/api/src/db/seed.ts", + "source_location": "L17", + "_origin": "ast", + "id": "apps_api_src_db_seed_seed", + "community": 25, + "norm_label": "seed()" + }, + { + "label": "index.ts", + "file_type": "code", + "source_file": "apps/api/src/index.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_api_src_index", + "community": 5, + "norm_label": "index.ts" + }, + { + "label": "port", + "file_type": "code", + "source_file": "apps/api/src/index.ts", + "source_location": "L5", + "_origin": "ast", + "id": "apps_api_src_index_port", + "community": 5, + "norm_label": "port" + }, + { + "label": "auth.test.ts", + "file_type": "code", + "source_file": "apps/api/src/middleware/auth.test.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_api_src_middleware_auth_test", + "community": 38, + "norm_label": "auth.test.ts" + }, + { + "label": "auth.ts", + "file_type": "code", + "source_file": "apps/api/src/middleware/auth.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_api_src_middleware_auth", + "community": 38, + "norm_label": "auth.ts" + }, + { + "label": "buildAuthOptions()", + "file_type": "code", + "source_file": "apps/api/src/middleware/auth.ts", + "source_location": "L38", + "_origin": "ast", + "id": "apps_api_src_middleware_auth_buildauthoptions", + "community": 38, + "norm_label": "buildauthoptions()" + }, + { + "label": "createAuth()", + "file_type": "code", + "source_file": "apps/api/src/middleware/auth.ts", + "source_location": "L73", + "_origin": "ast", + "id": "apps_api_src_middleware_auth_createauth", + "community": 38, + "norm_label": "createauth()" + }, + { + "label": "getAuth()", + "file_type": "code", + "source_file": "apps/api/src/middleware/auth.ts", + "source_location": "L85", + "_origin": "ast", + "id": "apps_api_src_middleware_auth_getauth", + "community": 38, + "norm_label": "getauth()" + }, + { + "label": "SessionUser", + "file_type": "code", + "source_file": "apps/api/src/middleware/auth.ts", + "source_location": "L99", + "_origin": "ast", + "id": "apps_api_src_middleware_auth_sessionuser", + "community": 38, + "norm_label": "sessionuser" + }, + { + "label": "AuthBindings", + "file_type": "code", + "source_file": "apps/api/src/middleware/auth.ts", + "source_location": "L110", + "_origin": "ast", + "id": "apps_api_src_middleware_auth_authbindings", + "community": 38, + "norm_label": "authbindings" + }, + { + "label": "AuthVariables", + "file_type": "code", + "source_file": "apps/api/src/middleware/auth.ts", + "source_location": "L115", + "_origin": "ast", + "id": "apps_api_src_middleware_auth_authvariables", + "community": 38, + "norm_label": "authvariables" + }, + { + "label": "isProduction()", + "file_type": "code", + "source_file": "apps/api/src/middleware/auth.ts", + "source_location": "L120", + "_origin": "ast", + "id": "apps_api_src_middleware_auth_isproduction", + "community": 38, + "norm_label": "isproduction()" + }, + { + "label": "canBypassAuthForLocalDev()", + "file_type": "code", + "source_file": "apps/api/src/middleware/auth.ts", + "source_location": "L124", + "_origin": "ast", + "id": "apps_api_src_middleware_auth_canbypassauthforlocaldev", + "community": 38, + "norm_label": "canbypassauthforlocaldev()" + }, + { + "label": "requireSession()", + "file_type": "code", + "source_file": "apps/api/src/middleware/auth.ts", + "source_location": "L144", + "_origin": "ast", + "id": "apps_api_src_middleware_auth_requiresession", + "community": 38, + "norm_label": "requiresession()" + }, + { + "label": "optionalSession()", + "file_type": "code", + "source_file": "apps/api/src/middleware/auth.ts", + "source_location": "L223", + "_origin": "ast", + "id": "apps_api_src_middleware_auth_optionalsession", + "community": 38, + "norm_label": "optionalsession()" + }, + { + "label": "sentry.pbt.test.ts", + "file_type": "code", + "source_file": "apps/api/src/observability/sentry.pbt.test.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_api_src_observability_sentry_pbt_test", + "community": 5, + "norm_label": "sentry.pbt.test.ts" + }, + { + "label": "VALID_DSNS", + "file_type": "code", + "source_file": "apps/api/src/observability/sentry.pbt.test.ts", + "source_location": "L63", + "_origin": "ast", + "id": "apps_api_src_observability_sentry_pbt_test_valid_dsns", + "community": 5, + "norm_label": "valid_dsns" + }, + { + "label": "ENV_KEYS", + "file_type": "code", + "source_file": "apps/api/src/observability/sentry.pbt.test.ts", + "source_location": "L68", + "_origin": "ast", + "id": "apps_api_src_observability_sentry_pbt_test_env_keys", + "community": 5, + "norm_label": "env_keys" + }, + { + "label": "SentryEvent", + "file_type": "code", + "source_file": "apps/api/src/observability/sentry.pbt.test.ts", + "source_location": "L92", + "_origin": "ast", + "id": "apps_api_src_observability_sentry_pbt_test_sentryevent", + "community": 5, + "norm_label": "sentryevent" + }, + { + "label": "eventArb", + "file_type": "code", + "source_file": "apps/api/src/observability/sentry.pbt.test.ts", + "source_location": "L99", + "_origin": "ast", + "id": "apps_api_src_observability_sentry_pbt_test_eventarb", + "community": 5, + "norm_label": "eventarb" + }, + { + "label": "silentLogger()", + "file_type": "code", + "source_file": "apps/api/src/observability/sentry.pbt.test.ts", + "source_location": "L112", + "_origin": "ast", + "id": "apps_api_src_observability_sentry_pbt_test_silentlogger", + "community": 5, + "norm_label": "silentlogger()" + }, + { + "label": "sentry.test.ts", + "file_type": "code", + "source_file": "apps/api/src/observability/sentry.test.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_api_src_observability_sentry_test", + "community": 5, + "norm_label": "sentry.test.ts" + }, + { + "label": "ENV_KEYS", + "file_type": "code", + "source_file": "apps/api/src/observability/sentry.test.ts", + "source_location": "L25", + "_origin": "ast", + "id": "apps_api_src_observability_sentry_test_env_keys", + "community": 5, + "norm_label": "env_keys" + }, + { + "label": "sentry.ts", + "file_type": "code", + "source_file": "apps/api/src/observability/sentry.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_api_src_observability_sentry", + "community": 5, + "norm_label": "sentry.ts" + }, + { + "label": "InitSentryOptions", + "file_type": "code", + "source_file": "apps/api/src/observability/sentry.ts", + "source_location": "L28", + "_origin": "ast", + "id": "apps_api_src_observability_sentry_initsentryoptions", + "community": 5, + "norm_label": "initsentryoptions" + }, + { + "label": "Logger", + "file_type": "code", + "source_file": "apps/api/src/observability/sentry.ts", + "source_location": "L39", + "_origin": "ast", + "id": "apps_api_src_observability_sentry_logger", + "community": 5, + "norm_label": "logger" + }, + { + "label": "initSentry()", + "file_type": "code", + "source_file": "apps/api/src/observability/sentry.ts", + "source_location": "L45", + "_origin": "ast", + "id": "apps_api_src_observability_sentry_initsentry", + "community": 5, + "norm_label": "initsentry()" + }, + { + "label": "attachSentryToHono()", + "file_type": "code", + "source_file": "apps/api/src/observability/sentry.ts", + "source_location": "L104", + "_origin": "ast", + "id": "apps_api_src_observability_sentry_attachsentrytohono", + "community": 5, + "norm_label": "attachsentrytohono()" + }, + { + "label": "isEnabled()", + "file_type": "code", + "source_file": "apps/api/src/observability/sentry.ts", + "source_location": "L124", + "_origin": "ast", + "id": "apps_api_src_observability_sentry_isenabled", + "community": 5, + "norm_label": "isenabled()" + }, + { + "label": "scrubEvent()", + "file_type": "code", + "source_file": "apps/api/src/observability/sentry.ts", + "source_location": "L140", + "_origin": "ast", + "id": "apps_api_src_observability_sentry_scrubevent", + "community": 5, + "norm_label": "scrubevent()" + }, + { + "label": "__resetSentryForTests()", + "file_type": "code", + "source_file": "apps/api/src/observability/sentry.ts", + "source_location": "L175", + "_origin": "ast", + "id": "apps_api_src_observability_sentry_resetsentryfortests", + "community": 5, + "norm_label": "__resetsentryfortests()" + }, + { + "label": "openapi.ts", + "file_type": "code", + "source_file": "apps/api/src/openapi.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_api_src_openapi", + "community": 5, + "norm_label": "openapi.ts" + }, + { + "label": "ErrorResponse", + "file_type": "code", + "source_file": "apps/api/src/openapi.ts", + "source_location": "L9", + "_origin": "ast", + "id": "apps_api_src_openapi_errorresponse", + "community": 5, + "norm_label": "errorresponse" + }, + { + "label": "ToolPricing", + "file_type": "code", + "source_file": "apps/api/src/openapi.ts", + "source_location": "L18", + "_origin": "ast", + "id": "apps_api_src_openapi_toolpricing", + "community": 5, + "norm_label": "toolpricing" + }, + { + "label": "ToolSupports", + "file_type": "code", + "source_file": "apps/api/src/openapi.ts", + "source_location": "L28", + "_origin": "ast", + "id": "apps_api_src_openapi_toolsupports", + "community": 5, + "norm_label": "toolsupports" + }, + { + "label": "ToolDetail", + "file_type": "code", + "source_file": "apps/api/src/openapi.ts", + "source_location": "L37", + "_origin": "ast", + "id": "apps_api_src_openapi_tooldetail", + "community": 5, + "norm_label": "tooldetail" + }, + { + "label": "Diagnostic", + "file_type": "code", + "source_file": "apps/api/src/openapi.ts", + "source_location": "L62", + "_origin": "ast", + "id": "apps_api_src_openapi_diagnostic", + "community": 5, + "norm_label": "diagnostic" + }, + { + "label": "Category", + "file_type": "code", + "source_file": "apps/api/src/openapi.ts", + "source_location": "L77", + "_origin": "ast", + "id": "apps_api_src_openapi_category", + "community": 5, + "norm_label": "category" + }, + { + "label": "openApiDocument", + "file_type": "code", + "source_file": "apps/api/src/openapi.ts", + "source_location": "L91", + "_origin": "ast", + "id": "apps_api_src_openapi_openapidocument", + "community": 5, + "norm_label": "openapidocument" + }, + { + "label": "buckets.test.ts", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/buckets.test.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_api_src_rate_limit_buckets_test", + "community": 2, + "norm_label": "buckets.test.ts" + }, + { + "label": "buckets.ts", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/buckets.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_api_src_rate_limit_buckets", + "community": 2, + "norm_label": "buckets.ts" + }, + { + "label": "BucketName", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/buckets.ts", + "source_location": "L15", + "_origin": "ast", + "id": "apps_api_src_rate_limit_buckets_bucketname", + "community": 2, + "norm_label": "bucketname" + }, + { + "label": "BucketConfig", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/buckets.ts", + "source_location": "L17", + "_origin": "ast", + "id": "apps_api_src_rate_limit_buckets_bucketconfig", + "community": 2, + "norm_label": "bucketconfig" + }, + { + "label": "BUCKETS", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/buckets.ts", + "source_location": "L22", + "_origin": "ast", + "id": "apps_api_src_rate_limit_buckets_buckets", + "community": 2, + "norm_label": "buckets" + }, + { + "label": "BUCKET_NAMES", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/buckets.ts", + "source_location": "L27", + "_origin": "ast", + "id": "apps_api_src_rate_limit_buckets_bucket_names", + "community": 2, + "norm_label": "bucket_names" + }, + { + "label": "client-id.test.ts", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/client-id.test.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_api_src_rate_limit_client_id_test", + "community": 2, + "norm_label": "client-id.test.ts" + }, + { + "label": "client-id.ts", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/client-id.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_api_src_rate_limit_client_id", + "community": 2, + "norm_label": "client-id.ts" + }, + { + "label": "HeaderLookup", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/client-id.ts", + "source_location": "L17", + "_origin": "ast", + "id": "apps_api_src_rate_limit_client_id_headerlookup", + "community": 2, + "norm_label": "headerlookup" + }, + { + "label": "resolveClientId()", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/client-id.ts", + "source_location": "L26", + "_origin": "ast", + "id": "apps_api_src_rate_limit_client_id_resolveclientid", + "community": 2, + "norm_label": "resolveclientid()" + }, + { + "label": "readHeader()", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/client-id.ts", + "source_location": "L46", + "_origin": "ast", + "id": "apps_api_src_rate_limit_client_id_readheader", + "community": 2, + "norm_label": "readheader()" + }, + { + "label": "fail-open.test.ts", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/fail-open.test.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_api_src_rate_limit_fail_open_test", + "community": 2, + "norm_label": "fail-open.test.ts" + }, + { + "label": "makeClock()", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/fail-open.test.ts", + "source_location": "L13", + "_origin": "ast", + "id": "apps_api_src_rate_limit_fail_open_test_makeclock", + "community": 2, + "norm_label": "makeclock()" + }, + { + "label": "ScriptStep", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/fail-open.test.ts", + "source_location": "L36", + "_origin": "ast", + "id": "apps_api_src_rate_limit_fail_open_test_scriptstep", + "community": 2, + "norm_label": "scriptstep" + }, + { + "label": "makeScriptedBackend()", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/fail-open.test.ts", + "source_location": "L42", + "_origin": "ast", + "id": "apps_api_src_rate_limit_fail_open_test_makescriptedbackend", + "community": 2, + "norm_label": "makescriptedbackend()" + }, + { + "label": "okDecision()", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/fail-open.test.ts", + "source_location": "L72", + "_origin": "ast", + "id": "apps_api_src_rate_limit_fail_open_test_okdecision", + "community": 2, + "norm_label": "okdecision()" + }, + { + "label": "fail-open.ts", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/fail-open.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_api_src_rate_limit_fail_open", + "community": 2, + "norm_label": "fail-open.ts" + }, + { + "label": "FailOpenOptions", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/fail-open.ts", + "source_location": "L54", + "_origin": "ast", + "id": "apps_api_src_rate_limit_fail_open_failopenoptions", + "community": 2, + "norm_label": "failopenoptions" + }, + { + "label": "defaultLogger()", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/fail-open.ts", + "source_location": "L68", + "_origin": "ast", + "id": "apps_api_src_rate_limit_fail_open_defaultlogger", + "community": 2, + "norm_label": "defaultlogger()" + }, + { + "label": "errorMessage()", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/fail-open.ts", + "source_location": "L76", + "_origin": "ast", + "id": "apps_api_src_rate_limit_fail_open_errormessage", + "community": 2, + "norm_label": "errormessage()" + }, + { + "label": "wrapFailOpen()", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/fail-open.ts", + "source_location": "L93", + "_origin": "ast", + "id": "apps_api_src_rate_limit_fail_open_wrapfailopen", + "community": 2, + "norm_label": "wrapfailopen()" + }, + { + "label": "index.ts", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/index.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_api_src_rate_limit_index", + "community": 2, + "norm_label": "index.ts" + }, + { + "label": "Bindings", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/index.ts", + "source_location": "L37", + "_origin": "ast", + "id": "apps_api_src_rate_limit_index_bindings", + "community": 2, + "norm_label": "bindings" + }, + { + "label": "Variables", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/index.ts", + "source_location": "L42", + "_origin": "ast", + "id": "apps_api_src_rate_limit_index_variables", + "community": 2, + "norm_label": "variables" + }, + { + "label": "selectBackend()", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/index.ts", + "source_location": "L53", + "_origin": "ast", + "id": "apps_api_src_rate_limit_index_selectbackend", + "community": 2, + "norm_label": "selectbackend()" + }, + { + "label": "getBackend()", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/index.ts", + "source_location": "L68", + "_origin": "ast", + "id": "apps_api_src_rate_limit_index_getbackend", + "community": 2, + "norm_label": "getbackend()" + }, + { + "label": "__resetBackendForTests()", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/index.ts", + "source_location": "L85", + "_origin": "ast", + "id": "apps_api_src_rate_limit_index_resetbackendfortests", + "community": 2, + "norm_label": "__resetbackendfortests()" + }, + { + "label": "createRateLimitMiddleware()", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/index.ts", + "source_location": "L98", + "_origin": "ast", + "id": "apps_api_src_rate_limit_index_createratelimitmiddleware", + "community": 2, + "norm_label": "createratelimitmiddleware()" + }, + { + "label": "rateLimitHealth()", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/index.ts", + "source_location": "L150", + "_origin": "ast", + "id": "apps_api_src_rate_limit_index_ratelimithealth", + "community": 2, + "norm_label": "ratelimithealth()" + }, + { + "label": "memory.test.ts", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/memory.test.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_api_src_rate_limit_memory_test", + "community": 2, + "norm_label": "memory.test.ts" + }, + { + "label": "makeClock()", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/memory.test.ts", + "source_location": "L8", + "_origin": "ast", + "id": "apps_api_src_rate_limit_memory_test_makeclock", + "community": 2, + "norm_label": "makeclock()" + }, + { + "label": "memory.ts", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/memory.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_api_src_rate_limit_memory", + "community": 2, + "norm_label": "memory.ts" + }, + { + "label": "MemoryEntry", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/memory.ts", + "source_location": "L26", + "_origin": "ast", + "id": "apps_api_src_rate_limit_memory_memoryentry", + "community": 2, + "norm_label": "memoryentry" + }, + { + "label": "MemoryBackendOptions", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/memory.ts", + "source_location": "L31", + "_origin": "ast", + "id": "apps_api_src_rate_limit_memory_memorybackendoptions", + "community": 2, + "norm_label": "memorybackendoptions" + }, + { + "label": "createMemoryBackend()", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/memory.ts", + "source_location": "L47", + "_origin": "ast", + "id": "apps_api_src_rate_limit_memory_creatememorybackend", + "community": 2, + "norm_label": "creatememorybackend()" + }, + { + "label": "rate-limit.pbt.test.ts", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/rate-limit.pbt.test.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_api_src_rate_limit_rate_limit_pbt_test", + "community": 2, + "norm_label": "rate-limit.pbt.test.ts" + }, + { + "label": "makeClock()", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/rate-limit.pbt.test.ts", + "source_location": "L76", + "_origin": "ast", + "id": "apps_api_src_rate_limit_rate_limit_pbt_test_makeclock", + "community": 2, + "norm_label": "makeclock()" + }, + { + "label": "runSequence()", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/rate-limit.pbt.test.ts", + "source_location": "L95", + "_origin": "ast", + "id": "apps_api_src_rate_limit_rate_limit_pbt_test_runsequence", + "community": 2, + "norm_label": "runsequence()" + }, + { + "label": "types.ts", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/types.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_api_src_rate_limit_types", + "community": 2, + "norm_label": "types.ts" + }, + { + "label": "RateLimitDecision", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/types.ts", + "source_location": "L22", + "_origin": "ast", + "id": "apps_api_src_rate_limit_types_ratelimitdecision", + "community": 2, + "norm_label": "ratelimitdecision" + }, + { + "label": "RateLimitCheckArgs", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/types.ts", + "source_location": "L34", + "_origin": "ast", + "id": "apps_api_src_rate_limit_types_ratelimitcheckargs", + "community": 2, + "norm_label": "ratelimitcheckargs" + }, + { + "label": "RateLimitBackend", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/types.ts", + "source_location": "L47", + "_origin": "ast", + "id": "apps_api_src_rate_limit_types_ratelimitbackend", + "community": 2, + "norm_label": "ratelimitbackend" + }, + { + "label": ".check()", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/types.ts", + "source_location": "L49", + "_origin": "ast", + "id": "apps_api_src_rate_limit_types_ratelimitbackend_check", + "community": 2, + "norm_label": ".check()" + }, + { + "label": "upstash.test.ts", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/upstash.test.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_api_src_rate_limit_upstash_test", + "community": 2, + "norm_label": "upstash.test.ts" + }, + { + "label": "makeFakeLimiter()", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/upstash.test.ts", + "source_location": "L37", + "_origin": "ast", + "id": "apps_api_src_rate_limit_upstash_test_makefakelimiter", + "community": 2, + "norm_label": "makefakelimiter()" + }, + { + "label": "limit()", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/upstash.test.ts", + "source_location": "L190", + "_origin": "ast", + "id": "apps_api_src_rate_limit_upstash_test_limit", + "community": 2, + "norm_label": "limit()" + }, + { + "label": "upstash.ts", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/upstash.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_api_src_rate_limit_upstash", + "community": 2, + "norm_label": "upstash.ts" + }, + { + "label": "RatelimitResponse", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/upstash.ts", + "source_location": "L69", + "_origin": "ast", + "id": "apps_api_src_rate_limit_upstash_ratelimitresponse", + "community": 2, + "norm_label": "ratelimitresponse" + }, + { + "label": "RatelimitInstance", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/upstash.ts", + "source_location": "L77", + "_origin": "ast", + "id": "apps_api_src_rate_limit_upstash_ratelimitinstance", + "community": 2, + "norm_label": "ratelimitinstance" + }, + { + "label": ".limit()", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/upstash.ts", + "source_location": "L78", + "_origin": "ast", + "id": "apps_api_src_rate_limit_upstash_ratelimitinstance_limit", + "community": 2, + "norm_label": ".limit()" + }, + { + "label": "RedisCtor", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/upstash.ts", + "source_location": "L81", + "_origin": "ast", + "id": "apps_api_src_rate_limit_upstash_redisctor", + "community": 2, + "norm_label": "redisctor" + }, + { + "label": "RatelimitCtor", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/upstash.ts", + "source_location": "L83", + "_origin": "ast", + "id": "apps_api_src_rate_limit_upstash_ratelimitctor", + "community": 2, + "norm_label": "ratelimitctor" + }, + { + "label": "UpstashBackendOptions", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/upstash.ts", + "source_location": "L89", + "_origin": "ast", + "id": "apps_api_src_rate_limit_upstash_upstashbackendoptions", + "community": 2, + "norm_label": "upstashbackendoptions" + }, + { + "label": "defaultRedisCtor()", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/upstash.ts", + "source_location": "L109", + "_origin": "ast", + "id": "apps_api_src_rate_limit_upstash_defaultredisctor", + "community": 2, + "norm_label": "defaultredisctor()" + }, + { + "label": "defaultRatelimitCtor()", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/upstash.ts", + "source_location": "L113", + "_origin": "ast", + "id": "apps_api_src_rate_limit_upstash_defaultratelimitctor", + "community": 2, + "norm_label": "defaultratelimitctor()" + }, + { + "label": "createUpstashBackend()", + "file_type": "code", + "source_file": "apps/api/src/rate-limit/upstash.ts", + "source_location": "L136", + "_origin": "ast", + "id": "apps_api_src_rate_limit_upstash_createupstashbackend", + "community": 2, + "norm_label": "createupstashbackend()" + }, + { + "label": "test-setup.ts", + "file_type": "code", + "source_file": "apps/api/src/test-setup.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_api_src_test_setup", + "community": 83, + "norm_label": "test-setup.ts" + }, + { + "label": "tsconfig.json", + "file_type": "code", + "source_file": "apps/api/tsconfig.json", + "source_location": "L1", + "_origin": "ast", + "id": "apps_api_tsconfig", + "community": 60, + "norm_label": "tsconfig.json" + }, + { + "label": "extends", + "file_type": "code", + "source_file": "apps/api/tsconfig.json", + "source_location": "L2", + "_origin": "ast", + "id": "apps_api_tsconfig_extends", + "community": 60, + "norm_label": "extends" + }, + { + "label": "compilerOptions", + "file_type": "code", + "source_file": "apps/api/tsconfig.json", + "source_location": "L3", + "_origin": "ast", + "id": "apps_api_tsconfig_compileroptions", + "community": 60, + "norm_label": "compileroptions" + }, + { + "label": "outDir", + "file_type": "code", + "source_file": "apps/api/tsconfig.json", + "source_location": "L4", + "_origin": "ast", + "id": "apps_api_tsconfig_compileroptions_outdir", + "community": 60, + "norm_label": "outdir" + }, + { + "label": "rootDir", + "file_type": "code", + "source_file": "apps/api/tsconfig.json", + "source_location": "L5", + "_origin": "ast", + "id": "apps_api_tsconfig_compileroptions_rootdir", + "community": 60, + "norm_label": "rootdir" + }, + { + "label": "include", + "file_type": "code", + "source_file": "apps/api/tsconfig.json", + "source_location": "L7", + "_origin": "ast", + "id": "apps_api_tsconfig_include", + "community": 60, + "norm_label": "include" + }, + { + "label": "vitest.config.ts", + "file_type": "code", + "source_file": "apps/api/vitest.config.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_api_vitest_config", + "community": 84, + "norm_label": "vitest.config.ts" + }, + { + "label": "components.json", + "file_type": "code", + "source_file": "apps/web/components.json", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_components", + "community": 28, + "norm_label": "components.json" + }, + { + "label": "$schema", + "file_type": "code", + "source_file": "apps/web/components.json", + "source_location": "L2", + "_origin": "ast", + "id": "apps_web_components_schema", + "community": 28, + "norm_label": "$schema" + }, + { + "label": "style", + "file_type": "code", + "source_file": "apps/web/components.json", + "source_location": "L3", + "_origin": "ast", + "id": "apps_web_components_style", + "community": 28, + "norm_label": "style" + }, + { + "label": "rsc", + "file_type": "code", + "source_file": "apps/web/components.json", + "source_location": "L4", + "_origin": "ast", + "id": "apps_web_components_rsc", + "community": 28, + "norm_label": "rsc" + }, + { + "label": "tsx", + "file_type": "code", + "source_file": "apps/web/components.json", + "source_location": "L5", + "_origin": "ast", + "id": "apps_web_components_tsx", + "community": 28, + "norm_label": "tsx" + }, + { + "label": "tailwind", + "file_type": "code", + "source_file": "apps/web/components.json", + "source_location": "L6", + "_origin": "ast", + "id": "apps_web_components_tailwind", + "community": 28, + "norm_label": "tailwind" + }, + { + "label": "config", + "file_type": "code", + "source_file": "apps/web/components.json", + "source_location": "L7", + "_origin": "ast", + "id": "apps_web_components_tailwind_config", + "community": 28, + "norm_label": "config" + }, + { + "label": "css", + "file_type": "code", + "source_file": "apps/web/components.json", + "source_location": "L8", + "_origin": "ast", + "id": "apps_web_components_tailwind_css", + "community": 28, + "norm_label": "css" + }, + { + "label": "baseColor", + "file_type": "code", + "source_file": "apps/web/components.json", + "source_location": "L9", + "_origin": "ast", + "id": "apps_web_components_tailwind_basecolor", + "community": 28, + "norm_label": "basecolor" + }, + { + "label": "cssVariables", + "file_type": "code", + "source_file": "apps/web/components.json", + "source_location": "L10", + "_origin": "ast", + "id": "apps_web_components_tailwind_cssvariables", + "community": 28, + "norm_label": "cssvariables" + }, + { + "label": "prefix", + "file_type": "code", + "source_file": "apps/web/components.json", + "source_location": "L11", + "_origin": "ast", + "id": "apps_web_components_tailwind_prefix", + "community": 28, + "norm_label": "prefix" + }, + { + "label": "aliases", + "file_type": "code", + "source_file": "apps/web/components.json", + "source_location": "L13", + "_origin": "ast", + "id": "apps_web_components_aliases", + "community": 28, + "norm_label": "aliases" + }, + { + "label": "components", + "file_type": "code", + "source_file": "apps/web/components.json", + "source_location": "L14", + "_origin": "ast", + "id": "apps_web_components_aliases_components", + "community": 28, + "norm_label": "components" + }, + { + "label": "utils", + "file_type": "code", + "source_file": "apps/web/components.json", + "source_location": "L15", + "_origin": "ast", + "id": "apps_web_components_aliases_utils", + "community": 28, + "norm_label": "utils" + }, + { + "label": "ui", + "file_type": "code", + "source_file": "apps/web/components.json", + "source_location": "L16", + "_origin": "ast", + "id": "apps_web_components_aliases_ui", + "community": 28, + "norm_label": "ui" + }, + { + "label": "lib", + "file_type": "code", + "source_file": "apps/web/components.json", + "source_location": "L17", + "_origin": "ast", + "id": "apps_web_components_aliases_lib", + "community": 28, + "norm_label": "lib" + }, + { + "label": "hooks", + "file_type": "code", + "source_file": "apps/web/components.json", + "source_location": "L18", + "_origin": "ast", + "id": "apps_web_components_aliases_hooks", + "community": 28, + "norm_label": "hooks" + }, + { + "label": "package.json", + "file_type": "code", + "source_file": "apps/web/package.json", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_package", + "community": 7, + "norm_label": "package.json" + }, + { + "label": "name", + "file_type": "code", + "source_file": "apps/web/package.json", + "source_location": "L2", + "_origin": "ast", + "id": "apps_web_package_name", + "community": 7, + "norm_label": "name" + }, + { + "label": "version", + "file_type": "code", + "source_file": "apps/web/package.json", + "source_location": "L3", + "_origin": "ast", + "id": "apps_web_package_version", + "community": 7, + "norm_label": "version" + }, + { + "label": "private", + "file_type": "code", + "source_file": "apps/web/package.json", + "source_location": "L4", + "_origin": "ast", + "id": "apps_web_package_private", + "community": 7, + "norm_label": "private" + }, + { + "label": "type", + "file_type": "code", + "source_file": "apps/web/package.json", + "source_location": "L5", + "_origin": "ast", + "id": "apps_web_package_type", + "community": 7, + "norm_label": "type" + }, + { + "label": "scripts", + "file_type": "code", + "source_file": "apps/web/package.json", + "source_location": "L6", + "_origin": "ast", + "id": "apps_web_package_scripts", + "community": 7, + "norm_label": "scripts" + }, + { + "label": "dev", + "file_type": "code", + "source_file": "apps/web/package.json", + "source_location": "L7", + "_origin": "ast", + "id": "apps_web_package_scripts_dev", + "community": 7, + "norm_label": "dev" + }, + { + "label": "build", + "file_type": "code", + "source_file": "apps/web/package.json", + "source_location": "L8", + "_origin": "ast", + "id": "apps_web_package_scripts_build", + "community": 7, + "norm_label": "build" + }, + { + "label": "lint", + "file_type": "code", + "source_file": "apps/web/package.json", + "source_location": "L9", + "_origin": "ast", + "id": "apps_web_package_scripts_lint", + "community": 7, + "norm_label": "lint" + }, + { + "label": "preview", + "file_type": "code", + "source_file": "apps/web/package.json", + "source_location": "L10", + "_origin": "ast", + "id": "apps_web_package_scripts_preview", + "community": 7, + "norm_label": "preview" + }, + { + "label": "type-check", + "file_type": "code", + "source_file": "apps/web/package.json", + "source_location": "L11", + "_origin": "ast", + "id": "apps_web_package_scripts_type_check", + "community": 7, + "norm_label": "type-check" + }, + { + "label": "test", + "file_type": "code", + "source_file": "apps/web/package.json", + "source_location": "L12", + "_origin": "ast", + "id": "apps_web_package_scripts_test", + "community": 7, + "norm_label": "test" + }, + { + "label": "dependencies", + "file_type": "code", + "source_file": "apps/web/package.json", + "source_location": "L14", + "_origin": "ast", + "id": "apps_web_package_dependencies", + "community": 7, + "norm_label": "dependencies" + }, + { + "label": "@radix-ui/react-collapsible", + "file_type": "code", + "source_file": "apps/web/package.json", + "source_location": "L15", + "_origin": "ast", + "id": "apps_web_package_dependencies_radix_ui_react_collapsible", + "community": 7, + "norm_label": "@radix-ui/react-collapsible" + }, + { + "label": "@radix-ui/react-dialog", + "file_type": "code", + "source_file": "apps/web/package.json", + "source_location": "L16", + "_origin": "ast", + "id": "apps_web_package_dependencies_radix_ui_react_dialog", + "community": 7, + "norm_label": "@radix-ui/react-dialog" + }, + { + "label": "@radix-ui/react-slot", + "file_type": "code", + "source_file": "apps/web/package.json", + "source_location": "L17", + "_origin": "ast", + "id": "apps_web_package_dependencies_radix_ui_react_slot", + "community": 7, + "norm_label": "@radix-ui/react-slot" + }, + { + "label": "@radix-ui/react-toast", + "file_type": "code", + "source_file": "apps/web/package.json", + "source_location": "L18", + "_origin": "ast", + "id": "apps_web_package_dependencies_radix_ui_react_toast", + "community": 7, + "norm_label": "@radix-ui/react-toast" + }, + { + "label": "@radix-ui/react-tooltip", + "file_type": "code", + "source_file": "apps/web/package.json", + "source_location": "L19", + "_origin": "ast", + "id": "apps_web_package_dependencies_radix_ui_react_tooltip", + "community": 7, + "norm_label": "@radix-ui/react-tooltip" + }, + { + "label": "@sentry/react", + "file_type": "code", + "source_file": "apps/web/package.json", + "source_location": "L20", + "_origin": "ast", + "id": "apps_web_package_dependencies_sentry_react", + "community": 7, + "norm_label": "@sentry/react" + }, + { + "label": "@sentry/vite-plugin", + "file_type": "code", + "source_file": "apps/web/package.json", + "source_location": "L21", + "_origin": "ast", + "id": "apps_web_package_dependencies_sentry_vite_plugin", + "community": 7, + "norm_label": "@sentry/vite-plugin" + }, + { + "label": "@stackfast/registry", + "file_type": "code", + "source_file": "apps/web/package.json", + "source_location": "L22", + "_origin": "ast", + "id": "apps_web_package_dependencies_stackfast_registry", + "community": 7, + "norm_label": "@stackfast/registry" + }, + { + "label": "@stackfast/rules-engine", + "file_type": "code", + "source_file": "apps/web/package.json", + "source_location": "L23", + "_origin": "ast", + "id": "apps_web_package_dependencies_stackfast_rules_engine", + "community": 7, + "norm_label": "@stackfast/rules-engine" + }, + { + "label": "@stackfast/schemas", + "file_type": "code", + "source_file": "apps/web/package.json", + "source_location": "L24", + "_origin": "ast", + "id": "apps_web_package_dependencies_stackfast_schemas", + "community": 7, + "norm_label": "@stackfast/schemas" + }, + { + "label": "@stackfast/shared", + "file_type": "code", + "source_file": "apps/web/package.json", + "source_location": "L25", + "_origin": "ast", + "id": "apps_web_package_dependencies_stackfast_shared", + "community": 7, + "norm_label": "@stackfast/shared" + }, + { + "label": "@tanstack/react-query", + "file_type": "code", + "source_file": "apps/web/package.json", + "source_location": "L26", + "_origin": "ast", + "id": "apps_web_package_dependencies_tanstack_react_query", + "community": 7, + "norm_label": "@tanstack/react-query" + }, + { + "label": "better-auth", + "file_type": "code", + "source_file": "apps/web/package.json", + "source_location": "L27", + "_origin": "ast", + "id": "apps_web_package_dependencies_better_auth", + "community": 7, + "norm_label": "better-auth" + }, + { + "label": "class-variance-authority", + "file_type": "code", + "source_file": "apps/web/package.json", + "source_location": "L28", + "_origin": "ast", + "id": "apps_web_package_dependencies_class_variance_authority", + "community": 7, + "norm_label": "class-variance-authority" + }, + { + "label": "clsx", + "file_type": "code", + "source_file": "apps/web/package.json", + "source_location": "L29", + "_origin": "ast", + "id": "apps_web_package_dependencies_clsx", + "community": 7, + "norm_label": "clsx" + }, + { + "label": "jszip", + "file_type": "code", + "source_file": "apps/web/package.json", + "source_location": "L30", + "_origin": "ast", + "id": "apps_web_package_dependencies_jszip", + "community": 7, + "norm_label": "jszip" + }, + { + "label": "lucide-react", + "file_type": "code", + "source_file": "apps/web/package.json", + "source_location": "L31", + "_origin": "ast", + "id": "apps_web_package_dependencies_lucide_react", + "community": 7, + "norm_label": "lucide-react" + }, + { + "label": "react", + "file_type": "code", + "source_file": "apps/web/package.json", + "source_location": "L32", + "_origin": "ast", + "id": "apps_web_package_dependencies_react", + "community": 7, + "norm_label": "react" + }, + { + "label": "react-dom", + "file_type": "code", + "source_file": "apps/web/package.json", + "source_location": "L33", + "_origin": "ast", + "id": "apps_web_package_dependencies_react_dom", + "community": 7, + "norm_label": "react-dom" + }, + { + "label": "tailwind-merge", + "file_type": "code", + "source_file": "apps/web/package.json", + "source_location": "L34", + "_origin": "ast", + "id": "apps_web_package_dependencies_tailwind_merge", + "community": 7, + "norm_label": "tailwind-merge" + }, + { + "label": "wouter", + "file_type": "code", + "source_file": "apps/web/package.json", + "source_location": "L35", + "_origin": "ast", + "id": "apps_web_package_dependencies_wouter", + "community": 7, + "norm_label": "wouter" + }, + { + "label": "zod", + "file_type": "code", + "source_file": "apps/web/package.json", + "source_location": "L36", + "_origin": "ast", + "id": "apps_web_package_dependencies_zod", + "community": 7, + "norm_label": "zod" + }, + { + "label": "devDependencies", + "file_type": "code", + "source_file": "apps/web/package.json", + "source_location": "L38", + "_origin": "ast", + "id": "apps_web_package_devdependencies", + "community": 7, + "norm_label": "devdependencies" + }, + { + "label": "@types/react", + "file_type": "code", + "source_file": "apps/web/package.json", + "source_location": "L39", + "_origin": "ast", + "id": "apps_web_package_devdependencies_types_react", + "community": 7, + "norm_label": "@types/react" + }, + { + "label": "@types/react-dom", + "file_type": "code", + "source_file": "apps/web/package.json", + "source_location": "L40", + "_origin": "ast", + "id": "apps_web_package_devdependencies_types_react_dom", + "community": 7, + "norm_label": "@types/react-dom" + }, + { + "label": "@vitejs/plugin-react", + "file_type": "code", + "source_file": "apps/web/package.json", + "source_location": "L41", + "_origin": "ast", + "id": "apps_web_package_devdependencies_vitejs_plugin_react", + "community": 7, + "norm_label": "@vitejs/plugin-react" + }, + { + "label": "autoprefixer", + "file_type": "code", + "source_file": "apps/web/package.json", + "source_location": "L42", + "_origin": "ast", + "id": "apps_web_package_devdependencies_autoprefixer", + "community": 7, + "norm_label": "autoprefixer" + }, + { + "label": "happy-dom", + "file_type": "code", + "source_file": "apps/web/package.json", + "source_location": "L43", + "_origin": "ast", + "id": "apps_web_package_devdependencies_happy_dom", + "community": 7, + "norm_label": "happy-dom" + }, + { + "label": "postcss", + "file_type": "code", + "source_file": "apps/web/package.json", + "source_location": "L44", + "_origin": "ast", + "id": "apps_web_package_devdependencies_postcss", + "community": 7, + "norm_label": "postcss" + }, + { + "label": "tailwindcss", + "file_type": "code", + "source_file": "apps/web/package.json", + "source_location": "L45", + "_origin": "ast", + "id": "apps_web_package_devdependencies_tailwindcss", + "community": 7, + "norm_label": "tailwindcss" + }, + { + "label": "tailwindcss-animate", + "file_type": "code", + "source_file": "apps/web/package.json", + "source_location": "L46", + "_origin": "ast", + "id": "apps_web_package_devdependencies_tailwindcss_animate", + "community": 7, + "norm_label": "tailwindcss-animate" + }, + { + "label": "typescript", + "file_type": "code", + "source_file": "apps/web/package.json", + "source_location": "L47", + "_origin": "ast", + "id": "apps_web_package_devdependencies_typescript", + "community": 7, + "norm_label": "typescript" + }, + { + "label": "vite", + "file_type": "code", + "source_file": "apps/web/package.json", + "source_location": "L48", + "_origin": "ast", + "id": "apps_web_package_devdependencies_vite", + "community": 7, + "norm_label": "vite" + }, + { + "label": "postcss.config.js", + "file_type": "code", + "source_file": "apps/web/postcss.config.js", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_postcss_config", + "community": 85, + "norm_label": "postcss.config.js" + }, + { + "label": "manifest.json", + "file_type": "code", + "source_file": "apps/web/public/catalog/v1/manifest.json", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_public_catalog_v1_manifest", + "community": 54, + "norm_label": "manifest.json" + }, + { + "label": "version", + "file_type": "code", + "source_file": "apps/web/public/catalog/v1/manifest.json", + "source_location": "L2", + "_origin": "ast", + "id": "apps_web_public_catalog_v1_manifest_version", + "community": 54, + "norm_label": "version" + }, + { + "label": "updatedAt", + "file_type": "code", + "source_file": "apps/web/public/catalog/v1/manifest.json", + "source_location": "L3", + "_origin": "ast", + "id": "apps_web_public_catalog_v1_manifest_updatedat", + "community": 54, + "norm_label": "updatedat" + }, + { + "label": "files", + "file_type": "code", + "source_file": "apps/web/public/catalog/v1/manifest.json", + "source_location": "L4", + "_origin": "ast", + "id": "apps_web_public_catalog_v1_manifest_files", + "community": 54, + "norm_label": "files" + }, + { + "label": "categories", + "file_type": "code", + "source_file": "apps/web/public/catalog/v1/manifest.json", + "source_location": "L5", + "_origin": "ast", + "id": "apps_web_public_catalog_v1_manifest_files_categories", + "community": 54, + "norm_label": "categories" + }, + { + "label": "tools", + "file_type": "code", + "source_file": "apps/web/public/catalog/v1/manifest.json", + "source_location": "L6", + "_origin": "ast", + "id": "apps_web_public_catalog_v1_manifest_files_tools", + "community": 54, + "norm_label": "tools" + }, + { + "label": "rules", + "file_type": "code", + "source_file": "apps/web/public/catalog/v1/manifest.json", + "source_location": "L7", + "_origin": "ast", + "id": "apps_web_public_catalog_v1_manifest_files_rules", + "community": 54, + "norm_label": "rules" + }, + { + "label": "etag", + "file_type": "code", + "source_file": "apps/web/public/catalog/v1/manifest.json", + "source_location": "L9", + "_origin": "ast", + "id": "apps_web_public_catalog_v1_manifest_etag", + "community": 54, + "norm_label": "etag" + }, + { + "label": "App.tsx", + "file_type": "code", + "source_file": "apps/web/src/App.tsx", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_app", + "community": 3, + "norm_label": "app.tsx" + }, + { + "label": "queryClient", + "file_type": "code", + "source_file": "apps/web/src/App.tsx", + "source_location": "L10", + "_origin": "ast", + "id": "apps_web_src_app_queryclient", + "community": 3, + "norm_label": "queryclient" + }, + { + "label": "App()", + "file_type": "code", + "source_file": "apps/web/src/App.tsx", + "source_location": "L19", + "_origin": "ast", + "id": "apps_web_src_app_app", + "community": 3, + "norm_label": "app()" + }, + { + "label": "AlternativesComparison.tsx", + "file_type": "code", + "source_file": "apps/web/src/components/AlternativesComparison.tsx", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_components_alternativescomparison", + "community": 0, + "norm_label": "alternativescomparison.tsx" + }, + { + "label": "AlternativesComparisonProps", + "file_type": "code", + "source_file": "apps/web/src/components/AlternativesComparison.tsx", + "source_location": "L5", + "_origin": "ast", + "id": "apps_web_src_components_alternativescomparison_alternativescomparisonprops", + "community": 0, + "norm_label": "alternativescomparisonprops" + }, + { + "label": "AlternativesComparison()", + "file_type": "code", + "source_file": "apps/web/src/components/AlternativesComparison.tsx", + "source_location": "L9", + "_origin": "ast", + "id": "apps_web_src_components_alternativescomparison_alternativescomparison", + "community": 0, + "norm_label": "alternativescomparison()" + }, + { + "label": "ArchitecturePreview.tsx", + "file_type": "code", + "source_file": "apps/web/src/components/ArchitecturePreview.tsx", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_components_architecturepreview", + "community": 0, + "norm_label": "architecturepreview.tsx" + }, + { + "label": "ArchitecturePreviewProps", + "file_type": "code", + "source_file": "apps/web/src/components/ArchitecturePreview.tsx", + "source_location": "L5", + "_origin": "ast", + "id": "apps_web_src_components_architecturepreview_architecturepreviewprops", + "community": 0, + "norm_label": "architecturepreviewprops" + }, + { + "label": "ArchitecturePreview()", + "file_type": "code", + "source_file": "apps/web/src/components/ArchitecturePreview.tsx", + "source_location": "L9", + "_origin": "ast", + "id": "apps_web_src_components_architecturepreview_architecturepreview", + "community": 0, + "norm_label": "architecturepreview()" + }, + { + "label": "AuthStatus.tsx", + "file_type": "code", + "source_file": "apps/web/src/components/AuthStatus.tsx", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_components_authstatus", + "community": 3, + "norm_label": "authstatus.tsx" + }, + { + "label": "getCallbackURL()", + "file_type": "code", + "source_file": "apps/web/src/components/AuthStatus.tsx", + "source_location": "L5", + "_origin": "ast", + "id": "apps_web_src_components_authstatus_getcallbackurl", + "community": 3, + "norm_label": "getcallbackurl()" + }, + { + "label": "AuthStatus()", + "file_type": "code", + "source_file": "apps/web/src/components/AuthStatus.tsx", + "source_location": "L12", + "_origin": "ast", + "id": "apps_web_src_components_authstatus_authstatus", + "community": 3, + "norm_label": "authstatus()" + }, + { + "label": "BlueprintOutputCard.tsx", + "file_type": "code", + "source_file": "apps/web/src/components/BlueprintOutputCard.tsx", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_components_blueprintoutputcard", + "community": 0, + "norm_label": "blueprintoutputcard.tsx" + }, + { + "label": "BlueprintOutputCardProps", + "file_type": "code", + "source_file": "apps/web/src/components/BlueprintOutputCard.tsx", + "source_location": "L20", + "_origin": "ast", + "id": "apps_web_src_components_blueprintoutputcard_blueprintoutputcardprops", + "community": 42, + "norm_label": "blueprintoutputcardprops" + }, + { + "label": "BlueprintOutputCard()", + "file_type": "code", + "source_file": "apps/web/src/components/BlueprintOutputCard.tsx", + "source_location": "L24", + "_origin": "ast", + "id": "apps_web_src_components_blueprintoutputcard_blueprintoutputcard", + "community": 0, + "norm_label": "blueprintoutputcard()" + }, + { + "label": "CategorySection.tsx", + "file_type": "code", + "source_file": "apps/web/src/components/CategorySection.tsx", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_components_categorysection", + "community": 45, + "norm_label": "categorysection.tsx" + }, + { + "label": "CategorySectionProps", + "file_type": "code", + "source_file": "apps/web/src/components/CategorySection.tsx", + "source_location": "L9", + "_origin": "ast", + "id": "apps_web_src_components_categorysection_categorysectionprops", + "community": 45, + "norm_label": "categorysectionprops" + }, + { + "label": "CategorySection()", + "file_type": "code", + "source_file": "apps/web/src/components/CategorySection.tsx", + "source_location": "L29", + "_origin": "ast", + "id": "apps_web_src_components_categorysection_categorysection", + "community": 45, + "norm_label": "categorysection()" + }, + { + "label": "CompatibilityHeatmap.tsx", + "file_type": "code", + "source_file": "apps/web/src/components/CompatibilityHeatmap.tsx", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_components_compatibilityheatmap", + "community": 50, + "norm_label": "compatibilityheatmap.tsx" + }, + { + "label": "CompatibilityHeatmapProps", + "file_type": "code", + "source_file": "apps/web/src/components/CompatibilityHeatmap.tsx", + "source_location": "L5", + "_origin": "ast", + "id": "apps_web_src_components_compatibilityheatmap_compatibilityheatmapprops", + "community": 50, + "norm_label": "compatibilityheatmapprops" + }, + { + "label": "HeatmapCell", + "file_type": "code", + "source_file": "apps/web/src/components/CompatibilityHeatmap.tsx", + "source_location": "L11", + "_origin": "ast", + "id": "apps_web_src_components_compatibilityheatmap_heatmapcell", + "community": 50, + "norm_label": "heatmapcell" + }, + { + "label": "CompatibilityHeatmap()", + "file_type": "code", + "source_file": "apps/web/src/components/CompatibilityHeatmap.tsx", + "source_location": "L22", + "_origin": "ast", + "id": "apps_web_src_components_compatibilityheatmap_compatibilityheatmap", + "community": 50, + "norm_label": "compatibilityheatmap()" + }, + { + "label": "HeatmapLegend()", + "file_type": "code", + "source_file": "apps/web/src/components/CompatibilityHeatmap.tsx", + "source_location": "L168", + "_origin": "ast", + "id": "apps_web_src_components_compatibilityheatmap_heatmaplegend", + "community": 50, + "norm_label": "heatmaplegend()" + }, + { + "label": "LegendSwatch()", + "file_type": "code", + "source_file": "apps/web/src/components/CompatibilityHeatmap.tsx", + "source_location": "L181", + "_origin": "ast", + "id": "apps_web_src_components_compatibilityheatmap_legendswatch", + "community": 50, + "norm_label": "legendswatch()" + }, + { + "label": "HeatmapCellView()", + "file_type": "code", + "source_file": "apps/web/src/components/CompatibilityHeatmap.tsx", + "source_location": "L190", + "_origin": "ast", + "id": "apps_web_src_components_compatibilityheatmap_heatmapcellview", + "community": 50, + "norm_label": "heatmapcellview()" + }, + { + "label": "scoreToClass()", + "file_type": "code", + "source_file": "apps/web/src/components/CompatibilityHeatmap.tsx", + "source_location": "L225", + "_origin": "ast", + "id": "apps_web_src_components_compatibilityheatmap_scoretoclass", + "community": 50, + "norm_label": "scoretoclass()" + }, + { + "label": "CompatibilityScore.tsx", + "file_type": "code", + "source_file": "apps/web/src/components/CompatibilityScore.tsx", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_components_compatibilityscore", + "community": 17, + "norm_label": "compatibilityscore.tsx" + }, + { + "label": "ScoreBreakdown", + "file_type": "code", + "source_file": "apps/web/src/components/CompatibilityScore.tsx", + "source_location": "L9", + "_origin": "ast", + "id": "apps_web_src_components_compatibilityscore_scorebreakdown", + "community": 35, + "norm_label": "scorebreakdown" + }, + { + "label": "CompatibilityScoreProps", + "file_type": "code", + "source_file": "apps/web/src/components/CompatibilityScore.tsx", + "source_location": "L16", + "_origin": "ast", + "id": "apps_web_src_components_compatibilityscore_compatibilityscoreprops", + "community": 17, + "norm_label": "compatibilityscoreprops" + }, + { + "label": "CompatibilityScore()", + "file_type": "code", + "source_file": "apps/web/src/components/CompatibilityScore.tsx", + "source_location": "L31", + "_origin": "ast", + "id": "apps_web_src_components_compatibilityscore_compatibilityscore", + "community": 17, + "norm_label": "compatibilityscore()" + }, + { + "label": "getScoreColor()", + "file_type": "code", + "source_file": "apps/web/src/components/CompatibilityScore.tsx", + "source_location": "L231", + "_origin": "ast", + "id": "apps_web_src_components_compatibilityscore_getscorecolor", + "community": 17, + "norm_label": "getscorecolor()" + }, + { + "label": "getScoreLabel()", + "file_type": "code", + "source_file": "apps/web/src/components/CompatibilityScore.tsx", + "source_location": "L240", + "_origin": "ast", + "id": "apps_web_src_components_compatibilityscore_getscorelabel", + "community": 17, + "norm_label": "getscorelabel()" + }, + { + "label": "getScoreTextColor()", + "file_type": "code", + "source_file": "apps/web/src/components/CompatibilityScore.tsx", + "source_location": "L249", + "_origin": "ast", + "id": "apps_web_src_components_compatibilityscore_getscoretextcolor", + "community": 17, + "norm_label": "getscoretextcolor()" + }, + { + "label": "getScoreBarColor()", + "file_type": "code", + "source_file": "apps/web/src/components/CompatibilityScore.tsx", + "source_location": "L263", + "_origin": "ast", + "id": "apps_web_src_components_compatibilityscore_getscorebarcolor", + "community": 17, + "norm_label": "getscorebarcolor()" + }, + { + "label": "CostEstimator.tsx", + "file_type": "code", + "source_file": "apps/web/src/components/CostEstimator.tsx", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_components_costestimator", + "community": 0, + "norm_label": "costestimator.tsx" + }, + { + "label": "CostEstimatorProps", + "file_type": "code", + "source_file": "apps/web/src/components/CostEstimator.tsx", + "source_location": "L4", + "_origin": "ast", + "id": "apps_web_src_components_costestimator_costestimatorprops", + "community": 0, + "norm_label": "costestimatorprops" + }, + { + "label": "CostEstimator()", + "file_type": "code", + "source_file": "apps/web/src/components/CostEstimator.tsx", + "source_location": "L9", + "_origin": "ast", + "id": "apps_web_src_components_costestimator_costestimator", + "community": 0, + "norm_label": "costestimator()" + }, + { + "label": "DiagnosticList.tsx", + "file_type": "code", + "source_file": "apps/web/src/components/DiagnosticList.tsx", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_components_diagnosticlist", + "community": 17, + "norm_label": "diagnosticlist.tsx" + }, + { + "label": "DiagnosticListProps", + "file_type": "code", + "source_file": "apps/web/src/components/DiagnosticList.tsx", + "source_location": "L7", + "_origin": "ast", + "id": "apps_web_src_components_diagnosticlist_diagnosticlistprops", + "community": 17, + "norm_label": "diagnosticlistprops" + }, + { + "label": "DiagnosticList()", + "file_type": "code", + "source_file": "apps/web/src/components/DiagnosticList.tsx", + "source_location": "L21", + "_origin": "ast", + "id": "apps_web_src_components_diagnosticlist_diagnosticlist", + "community": 17, + "norm_label": "diagnosticlist()" + }, + { + "label": "DiagnosticItem()", + "file_type": "code", + "source_file": "apps/web/src/components/DiagnosticList.tsx", + "source_location": "L138", + "_origin": "ast", + "id": "apps_web_src_components_diagnosticlist_diagnosticitem", + "community": 17, + "norm_label": "diagnosticitem()" + }, + { + "label": "getLevelIcon()", + "file_type": "code", + "source_file": "apps/web/src/components/DiagnosticList.tsx", + "source_location": "L209", + "_origin": "ast", + "id": "apps_web_src_components_diagnosticlist_getlevelicon", + "community": 17, + "norm_label": "getlevelicon()" + }, + { + "label": "getLevelStyles()", + "file_type": "code", + "source_file": "apps/web/src/components/DiagnosticList.tsx", + "source_location": "L225", + "_origin": "ast", + "id": "apps_web_src_components_diagnosticlist_getlevelstyles", + "community": 17, + "norm_label": "getlevelstyles()" + }, + { + "label": "ErrorBoundary.tsx", + "file_type": "code", + "source_file": "apps/web/src/components/ErrorBoundary.tsx", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_components_errorboundary", + "community": 26, + "norm_label": "errorboundary.tsx" + }, + { + "label": "ErrorBoundaryProps", + "file_type": "code", + "source_file": "apps/web/src/components/ErrorBoundary.tsx", + "source_location": "L5", + "_origin": "ast", + "id": "apps_web_src_components_errorboundary_errorboundaryprops", + "community": 26, + "norm_label": "errorboundaryprops" + }, + { + "label": "ErrorBoundaryState", + "file_type": "code", + "source_file": "apps/web/src/components/ErrorBoundary.tsx", + "source_location": "L10", + "_origin": "ast", + "id": "apps_web_src_components_errorboundary_errorboundarystate", + "community": 26, + "norm_label": "errorboundarystate" + }, + { + "label": "ErrorBoundary", + "file_type": "code", + "source_file": "apps/web/src/components/ErrorBoundary.tsx", + "source_location": "L19", + "_origin": "ast", + "id": "apps_web_src_components_errorboundary_errorboundary", + "community": 26, + "norm_label": "errorboundary" + }, + { + "label": ".constructor()", + "file_type": "code", + "source_file": "apps/web/src/components/ErrorBoundary.tsx", + "source_location": "L20", + "_origin": "ast", + "id": "apps_web_src_components_errorboundary_errorboundary_constructor", + "community": 26, + "norm_label": ".constructor()" + }, + { + "label": ".getDerivedStateFromError()", + "file_type": "code", + "source_file": "apps/web/src/components/ErrorBoundary.tsx", + "source_location": "L28", + "_origin": "ast", + "id": "apps_web_src_components_errorboundary_errorboundary_getderivedstatefromerror", + "community": 26, + "norm_label": ".getderivedstatefromerror()" + }, + { + "label": ".componentDidCatch()", + "file_type": "code", + "source_file": "apps/web/src/components/ErrorBoundary.tsx", + "source_location": "L35", + "_origin": "ast", + "id": "apps_web_src_components_errorboundary_errorboundary_componentdidcatch", + "community": 26, + "norm_label": ".componentdidcatch()" + }, + { + "label": ".handleReset()", + "file_type": "code", + "source_file": "apps/web/src/components/ErrorBoundary.tsx", + "source_location": "L39", + "_origin": "ast", + "id": "apps_web_src_components_errorboundary_errorboundary_handlereset", + "community": 26, + "norm_label": ".handlereset()" + }, + { + "label": ".render()", + "file_type": "code", + "source_file": "apps/web/src/components/ErrorBoundary.tsx", + "source_location": "L46", + "_origin": "ast", + "id": "apps_web_src_components_errorboundary_errorboundary_render", + "community": 26, + "norm_label": ".render()" + }, + { + "label": "ExportDialog.tsx", + "file_type": "code", + "source_file": "apps/web/src/components/ExportDialog.tsx", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_components_exportdialog", + "community": 18, + "norm_label": "exportdialog.tsx" + }, + { + "label": "generateExportAsText()", + "file_type": "code", + "source_file": "apps/web/src/components/ExportDialog.tsx", + "source_location": "L22", + "_origin": "ast", + "id": "apps_web_src_components_exportdialog_generateexportastext", + "community": 18, + "norm_label": "generateexportastext()" + }, + { + "label": "ExportDialogProps", + "file_type": "code", + "source_file": "apps/web/src/components/ExportDialog.tsx", + "source_location": "L28", + "_origin": "ast", + "id": "apps_web_src_components_exportdialog_exportdialogprops", + "community": 45, + "norm_label": "exportdialogprops" + }, + { + "label": "ExportDialog()", + "file_type": "code", + "source_file": "apps/web/src/components/ExportDialog.tsx", + "source_location": "L33", + "_origin": "ast", + "id": "apps_web_src_components_exportdialog_exportdialog", + "community": 18, + "norm_label": "exportdialog()" + }, + { + "label": "errorMessage()", + "file_type": "code", + "source_file": "apps/web/src/components/ExportDialog.tsx", + "source_location": "L247", + "_origin": "ast", + "id": "apps_web_src_components_exportdialog_errormessage", + "community": 18, + "norm_label": "errormessage()" + }, + { + "label": "ImplementationRoadmap.tsx", + "file_type": "code", + "source_file": "apps/web/src/components/ImplementationRoadmap.tsx", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_components_implementationroadmap", + "community": 0, + "norm_label": "implementationroadmap.tsx" + }, + { + "label": "ImplementationRoadmapProps", + "file_type": "code", + "source_file": "apps/web/src/components/ImplementationRoadmap.tsx", + "source_location": "L4", + "_origin": "ast", + "id": "apps_web_src_components_implementationroadmap_implementationroadmapprops", + "community": 0, + "norm_label": "implementationroadmapprops" + }, + { + "label": "ImplementationRoadmap()", + "file_type": "code", + "source_file": "apps/web/src/components/ImplementationRoadmap.tsx", + "source_location": "L8", + "_origin": "ast", + "id": "apps_web_src_components_implementationroadmap_implementationroadmap", + "community": 0, + "norm_label": "implementationroadmap()" + }, + { + "label": "Layout.tsx", + "file_type": "code", + "source_file": "apps/web/src/components/Layout.tsx", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_components_layout", + "community": 3, + "norm_label": "layout.tsx" + }, + { + "label": "LayoutProps", + "file_type": "code", + "source_file": "apps/web/src/components/Layout.tsx", + "source_location": "L6", + "_origin": "ast", + "id": "apps_web_src_components_layout_layoutprops", + "community": 3, + "norm_label": "layoutprops" + }, + { + "label": "Layout()", + "file_type": "code", + "source_file": "apps/web/src/components/Layout.tsx", + "source_location": "L10", + "_origin": "ast", + "id": "apps_web_src_components_layout_layout", + "community": 3, + "norm_label": "layout()" + }, + { + "label": "SmartSuggestion.tsx", + "file_type": "code", + "source_file": "apps/web/src/components/SmartSuggestion.tsx", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_components_smartsuggestion", + "community": 35, + "norm_label": "smartsuggestion.tsx" + }, + { + "label": "SmartSuggestionProps", + "file_type": "code", + "source_file": "apps/web/src/components/SmartSuggestion.tsx", + "source_location": "L8", + "_origin": "ast", + "id": "apps_web_src_components_smartsuggestion_smartsuggestionprops", + "community": 35, + "norm_label": "smartsuggestionprops" + }, + { + "label": "SmartSuggestion()", + "file_type": "code", + "source_file": "apps/web/src/components/SmartSuggestion.tsx", + "source_location": "L25", + "_origin": "ast", + "id": "apps_web_src_components_smartsuggestion_smartsuggestion", + "community": 35, + "norm_label": "smartsuggestion()" + }, + { + "label": "getPriorityVariant()", + "file_type": "code", + "source_file": "apps/web/src/components/SmartSuggestion.tsx", + "source_location": "L152", + "_origin": "ast", + "id": "apps_web_src_components_smartsuggestion_getpriorityvariant", + "community": 35, + "norm_label": "getpriorityvariant()" + }, + { + "label": "getPriorityLabel()", + "file_type": "code", + "source_file": "apps/web/src/components/SmartSuggestion.tsx", + "source_location": "L166", + "_origin": "ast", + "id": "apps_web_src_components_smartsuggestion_getprioritylabel", + "community": 35, + "norm_label": "getprioritylabel()" + }, + { + "label": "StackBuilder.tsx", + "file_type": "code", + "source_file": "apps/web/src/components/StackBuilder.tsx", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_components_stackbuilder", + "community": 35, + "norm_label": "stackbuilder.tsx" + }, + { + "label": "StackBuilderProps", + "file_type": "code", + "source_file": "apps/web/src/components/StackBuilder.tsx", + "source_location": "L18", + "_origin": "ast", + "id": "apps_web_src_components_stackbuilder_stackbuilderprops", + "community": 51, + "norm_label": "stackbuilderprops" + }, + { + "label": "StackBuilder()", + "file_type": "code", + "source_file": "apps/web/src/components/StackBuilder.tsx", + "source_location": "L38", + "_origin": "ast", + "id": "apps_web_src_components_stackbuilder_stackbuilder", + "community": 35, + "norm_label": "stackbuilder()" + }, + { + "label": "ToolSelector.tsx", + "file_type": "code", + "source_file": "apps/web/src/components/ToolSelector.tsx", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_components_toolselector", + "community": 45, + "norm_label": "toolselector.tsx" + }, + { + "label": "ToolSelectorProps", + "file_type": "code", + "source_file": "apps/web/src/components/ToolSelector.tsx", + "source_location": "L11", + "_origin": "ast", + "id": "apps_web_src_components_toolselector_toolselectorprops", + "community": 45, + "norm_label": "toolselectorprops" + }, + { + "label": "ToolSelector()", + "file_type": "code", + "source_file": "apps/web/src/components/ToolSelector.tsx", + "source_location": "L28", + "_origin": "ast", + "id": "apps_web_src_components_toolselector_toolselector", + "community": 45, + "norm_label": "toolselector()" + }, + { + "label": "isDataStale()", + "file_type": "code", + "source_file": "apps/web/src/components/ToolSelector.tsx", + "source_location": "L205", + "_origin": "ast", + "id": "apps_web_src_components_toolselector_isdatastale", + "community": 45, + "norm_label": "isdatastale()" + }, + { + "label": "formatDate()", + "file_type": "code", + "source_file": "apps/web/src/components/ToolSelector.tsx", + "source_location": "L219", + "_origin": "ast", + "id": "apps_web_src_components_toolselector_formatdate", + "community": 45, + "norm_label": "formatdate()" + }, + { + "label": "index.ts", + "file_type": "code", + "source_file": "apps/web/src/components/index.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_components_index", + "community": 45, + "norm_label": "index.ts" + }, + { + "label": "badge.tsx", + "file_type": "code", + "source_file": "apps/web/src/components/ui/badge.tsx", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_components_ui_badge", + "community": 18, + "norm_label": "badge.tsx" + }, + { + "label": "badgeVariants", + "file_type": "code", + "source_file": "apps/web/src/components/ui/badge.tsx", + "source_location": "L6", + "_origin": "ast", + "id": "apps_web_src_components_ui_badge_badgevariants", + "community": 18, + "norm_label": "badgevariants" + }, + { + "label": "BadgeProps", + "file_type": "code", + "source_file": "apps/web/src/components/ui/badge.tsx", + "source_location": "L26", + "_origin": "ast", + "id": "apps_web_src_components_ui_badge_badgeprops", + "community": 18, + "norm_label": "badgeprops" + }, + { + "label": "Badge()", + "file_type": "code", + "source_file": "apps/web/src/components/ui/badge.tsx", + "source_location": "L30", + "_origin": "ast", + "id": "apps_web_src_components_ui_badge_badge", + "community": 18, + "norm_label": "badge()" + }, + { + "label": "button.tsx", + "file_type": "code", + "source_file": "apps/web/src/components/ui/button.tsx", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_components_ui_button", + "community": 26, + "norm_label": "button.tsx" + }, + { + "label": "buttonVariants", + "file_type": "code", + "source_file": "apps/web/src/components/ui/button.tsx", + "source_location": "L6", + "_origin": "ast", + "id": "apps_web_src_components_ui_button_buttonvariants", + "community": 26, + "norm_label": "buttonvariants" + }, + { + "label": "ButtonProps", + "file_type": "code", + "source_file": "apps/web/src/components/ui/button.tsx", + "source_location": "L35", + "_origin": "ast", + "id": "apps_web_src_components_ui_button_buttonprops", + "community": 26, + "norm_label": "buttonprops" + }, + { + "label": "Button", + "file_type": "code", + "source_file": "apps/web/src/components/ui/button.tsx", + "source_location": "L41", + "_origin": "ast", + "id": "apps_web_src_components_ui_button_button", + "community": 26, + "norm_label": "button" + }, + { + "label": "card.tsx", + "file_type": "code", + "source_file": "apps/web/src/components/ui/card.tsx", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_components_ui_card", + "community": 17, + "norm_label": "card.tsx" + }, + { + "label": "Card", + "file_type": "code", + "source_file": "apps/web/src/components/ui/card.tsx", + "source_location": "L5", + "_origin": "ast", + "id": "apps_web_src_components_ui_card_card", + "community": 17, + "norm_label": "card" + }, + { + "label": "CardHeader", + "file_type": "code", + "source_file": "apps/web/src/components/ui/card.tsx", + "source_location": "L20", + "_origin": "ast", + "id": "apps_web_src_components_ui_card_cardheader", + "community": 17, + "norm_label": "cardheader" + }, + { + "label": "CardTitle", + "file_type": "code", + "source_file": "apps/web/src/components/ui/card.tsx", + "source_location": "L32", + "_origin": "ast", + "id": "apps_web_src_components_ui_card_cardtitle", + "community": 17, + "norm_label": "cardtitle" + }, + { + "label": "CardDescription", + "file_type": "code", + "source_file": "apps/web/src/components/ui/card.tsx", + "source_location": "L47", + "_origin": "ast", + "id": "apps_web_src_components_ui_card_carddescription", + "community": 17, + "norm_label": "carddescription" + }, + { + "label": "CardContent", + "file_type": "code", + "source_file": "apps/web/src/components/ui/card.tsx", + "source_location": "L59", + "_origin": "ast", + "id": "apps_web_src_components_ui_card_cardcontent", + "community": 17, + "norm_label": "cardcontent" + }, + { + "label": "CardFooter", + "file_type": "code", + "source_file": "apps/web/src/components/ui/card.tsx", + "source_location": "L67", + "_origin": "ast", + "id": "apps_web_src_components_ui_card_cardfooter", + "community": 17, + "norm_label": "cardfooter" + }, + { + "label": "collapsible.tsx", + "file_type": "code", + "source_file": "apps/web/src/components/ui/collapsible.tsx", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_components_ui_collapsible", + "community": 17, + "norm_label": "collapsible.tsx" + }, + { + "label": "dialog.tsx", + "file_type": "code", + "source_file": "apps/web/src/components/ui/dialog.tsx", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_components_ui_dialog", + "community": 18, + "norm_label": "dialog.tsx" + }, + { + "label": "DialogOverlay", + "file_type": "code", + "source_file": "apps/web/src/components/ui/dialog.tsx", + "source_location": "L15", + "_origin": "ast", + "id": "apps_web_src_components_ui_dialog_dialogoverlay", + "community": 18, + "norm_label": "dialogoverlay" + }, + { + "label": "DialogContent", + "file_type": "code", + "source_file": "apps/web/src/components/ui/dialog.tsx", + "source_location": "L30", + "_origin": "ast", + "id": "apps_web_src_components_ui_dialog_dialogcontent", + "community": 18, + "norm_label": "dialogcontent" + }, + { + "label": "DialogHeader()", + "file_type": "code", + "source_file": "apps/web/src/components/ui/dialog.tsx", + "source_location": "L54", + "_origin": "ast", + "id": "apps_web_src_components_ui_dialog_dialogheader", + "community": 18, + "norm_label": "dialogheader()" + }, + { + "label": "DialogFooter()", + "file_type": "code", + "source_file": "apps/web/src/components/ui/dialog.tsx", + "source_location": "L68", + "_origin": "ast", + "id": "apps_web_src_components_ui_dialog_dialogfooter", + "community": 18, + "norm_label": "dialogfooter()" + }, + { + "label": "DialogTitle", + "file_type": "code", + "source_file": "apps/web/src/components/ui/dialog.tsx", + "source_location": "L82", + "_origin": "ast", + "id": "apps_web_src_components_ui_dialog_dialogtitle", + "community": 18, + "norm_label": "dialogtitle" + }, + { + "label": "DialogDescription", + "file_type": "code", + "source_file": "apps/web/src/components/ui/dialog.tsx", + "source_location": "L97", + "_origin": "ast", + "id": "apps_web_src_components_ui_dialog_dialogdescription", + "community": 18, + "norm_label": "dialogdescription" + }, + { + "label": "toast.tsx", + "file_type": "code", + "source_file": "apps/web/src/components/ui/toast.tsx", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_components_ui_toast", + "community": 15, + "norm_label": "toast.tsx" + }, + { + "label": "ToastViewport", + "file_type": "code", + "source_file": "apps/web/src/components/ui/toast.tsx", + "source_location": "L10", + "_origin": "ast", + "id": "apps_web_src_components_ui_toast_toastviewport", + "community": 15, + "norm_label": "toastviewport" + }, + { + "label": "toastVariants", + "file_type": "code", + "source_file": "apps/web/src/components/ui/toast.tsx", + "source_location": "L25", + "_origin": "ast", + "id": "apps_web_src_components_ui_toast_toastvariants", + "community": 15, + "norm_label": "toastvariants" + }, + { + "label": "Toast", + "file_type": "code", + "source_file": "apps/web/src/components/ui/toast.tsx", + "source_location": "L41", + "_origin": "ast", + "id": "apps_web_src_components_ui_toast_toast", + "community": 15, + "norm_label": "toast" + }, + { + "label": "ToastAction", + "file_type": "code", + "source_file": "apps/web/src/components/ui/toast.tsx", + "source_location": "L56", + "_origin": "ast", + "id": "apps_web_src_components_ui_toast_toastaction", + "community": 15, + "norm_label": "toastaction" + }, + { + "label": "ToastClose", + "file_type": "code", + "source_file": "apps/web/src/components/ui/toast.tsx", + "source_location": "L71", + "_origin": "ast", + "id": "apps_web_src_components_ui_toast_toastclose", + "community": 15, + "norm_label": "toastclose" + }, + { + "label": "ToastTitle", + "file_type": "code", + "source_file": "apps/web/src/components/ui/toast.tsx", + "source_location": "L89", + "_origin": "ast", + "id": "apps_web_src_components_ui_toast_toasttitle", + "community": 15, + "norm_label": "toasttitle" + }, + { + "label": "ToastDescription", + "file_type": "code", + "source_file": "apps/web/src/components/ui/toast.tsx", + "source_location": "L101", + "_origin": "ast", + "id": "apps_web_src_components_ui_toast_toastdescription", + "community": 15, + "norm_label": "toastdescription" + }, + { + "label": "ToastProps", + "file_type": "code", + "source_file": "apps/web/src/components/ui/toast.tsx", + "source_location": "L113", + "_origin": "ast", + "id": "apps_web_src_components_ui_toast_toastprops", + "community": 15, + "norm_label": "toastprops" + }, + { + "label": "ToastActionElement", + "file_type": "code", + "source_file": "apps/web/src/components/ui/toast.tsx", + "source_location": "L115", + "_origin": "ast", + "id": "apps_web_src_components_ui_toast_toastactionelement", + "community": 15, + "norm_label": "toastactionelement" + }, + { + "label": "toaster.tsx", + "file_type": "code", + "source_file": "apps/web/src/components/ui/toaster.tsx", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_components_ui_toaster", + "community": 15, + "norm_label": "toaster.tsx" + }, + { + "label": "Toaster()", + "file_type": "code", + "source_file": "apps/web/src/components/ui/toaster.tsx", + "source_location": "L11", + "_origin": "ast", + "id": "apps_web_src_components_ui_toaster_toaster", + "community": 35, + "norm_label": "toaster()" + }, + { + "label": "tooltip.tsx", + "file_type": "code", + "source_file": "apps/web/src/components/ui/tooltip.tsx", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_components_ui_tooltip", + "community": 18, + "norm_label": "tooltip.tsx" + }, + { + "label": "TooltipContent", + "file_type": "code", + "source_file": "apps/web/src/components/ui/tooltip.tsx", + "source_location": "L12", + "_origin": "ast", + "id": "apps_web_src_components_ui_tooltip_tooltipcontent", + "community": 45, + "norm_label": "tooltipcontent" + }, + { + "label": "EvaluationContext.tsx", + "file_type": "code", + "source_file": "apps/web/src/context/EvaluationContext.tsx", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_context_evaluationcontext", + "community": 36, + "norm_label": "evaluationcontext.tsx" + }, + { + "label": "EvaluationState", + "file_type": "code", + "source_file": "apps/web/src/context/EvaluationContext.tsx", + "source_location": "L7", + "_origin": "ast", + "id": "apps_web_src_context_evaluationcontext_evaluationstate", + "community": 36, + "norm_label": "evaluationstate" + }, + { + "label": "EvaluationContextValue", + "file_type": "code", + "source_file": "apps/web/src/context/EvaluationContext.tsx", + "source_location": "L16", + "_origin": "ast", + "id": "apps_web_src_context_evaluationcontext_evaluationcontextvalue", + "community": 36, + "norm_label": "evaluationcontextvalue" + }, + { + "label": "EvaluationContext", + "file_type": "code", + "source_file": "apps/web/src/context/EvaluationContext.tsx", + "source_location": "L31", + "_origin": "ast", + "id": "apps_web_src_context_evaluationcontext_evaluationcontext", + "community": 36, + "norm_label": "evaluationcontext" + }, + { + "label": "EvaluationProviderProps", + "file_type": "code", + "source_file": "apps/web/src/context/EvaluationContext.tsx", + "source_location": "L36", + "_origin": "ast", + "id": "apps_web_src_context_evaluationcontext_evaluationproviderprops", + "community": 36, + "norm_label": "evaluationproviderprops" + }, + { + "label": "EvaluationProvider()", + "file_type": "code", + "source_file": "apps/web/src/context/EvaluationContext.tsx", + "source_location": "L44", + "_origin": "ast", + "id": "apps_web_src_context_evaluationcontext_evaluationprovider", + "community": 36, + "norm_label": "evaluationprovider()" + }, + { + "label": "useEvaluationContext()", + "file_type": "code", + "source_file": "apps/web/src/context/EvaluationContext.tsx", + "source_location": "L80", + "_origin": "ast", + "id": "apps_web_src_context_evaluationcontext_useevaluationcontext", + "community": 36, + "norm_label": "useevaluationcontext()" + }, + { + "label": "ExportContext.tsx", + "file_type": "code", + "source_file": "apps/web/src/context/ExportContext.tsx", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_context_exportcontext", + "community": 19, + "norm_label": "exportcontext.tsx" + }, + { + "label": "ExportState", + "file_type": "code", + "source_file": "apps/web/src/context/ExportContext.tsx", + "source_location": "L7", + "_origin": "ast", + "id": "apps_web_src_context_exportcontext_exportstate", + "community": 19, + "norm_label": "exportstate" + }, + { + "label": "ExportContextValue", + "file_type": "code", + "source_file": "apps/web/src/context/ExportContext.tsx", + "source_location": "L17", + "_origin": "ast", + "id": "apps_web_src_context_exportcontext_exportcontextvalue", + "community": 19, + "norm_label": "exportcontextvalue" + }, + { + "label": "ExportContext", + "file_type": "code", + "source_file": "apps/web/src/context/ExportContext.tsx", + "source_location": "L32", + "_origin": "ast", + "id": "apps_web_src_context_exportcontext_exportcontext", + "community": 19, + "norm_label": "exportcontext" + }, + { + "label": "ExportProviderProps", + "file_type": "code", + "source_file": "apps/web/src/context/ExportContext.tsx", + "source_location": "L37", + "_origin": "ast", + "id": "apps_web_src_context_exportcontext_exportproviderprops", + "community": 19, + "norm_label": "exportproviderprops" + }, + { + "label": "ExportProvider()", + "file_type": "code", + "source_file": "apps/web/src/context/ExportContext.tsx", + "source_location": "L45", + "_origin": "ast", + "id": "apps_web_src_context_exportcontext_exportprovider", + "community": 19, + "norm_label": "exportprovider()" + }, + { + "label": "useExportContext()", + "file_type": "code", + "source_file": "apps/web/src/context/ExportContext.tsx", + "source_location": "L80", + "_origin": "ast", + "id": "apps_web_src_context_exportcontext_useexportcontext", + "community": 19, + "norm_label": "useexportcontext()" + }, + { + "label": "SelectionsContext.tsx", + "file_type": "code", + "source_file": "apps/web/src/context/SelectionsContext.tsx", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_context_selectionscontext", + "community": 14, + "norm_label": "selectionscontext.tsx" + }, + { + "label": "SelectionsState", + "file_type": "code", + "source_file": "apps/web/src/context/SelectionsContext.tsx", + "source_location": "L12", + "_origin": "ast", + "id": "apps_web_src_context_selectionscontext_selectionsstate", + "community": 14, + "norm_label": "selectionsstate" + }, + { + "label": "SelectionsContextValue", + "file_type": "code", + "source_file": "apps/web/src/context/SelectionsContext.tsx", + "source_location": "L19", + "_origin": "ast", + "id": "apps_web_src_context_selectionscontext_selectionscontextvalue", + "community": 14, + "norm_label": "selectionscontextvalue" + }, + { + "label": "SelectionsContext", + "file_type": "code", + "source_file": "apps/web/src/context/SelectionsContext.tsx", + "source_location": "L32", + "_origin": "ast", + "id": "apps_web_src_context_selectionscontext_selectionscontext", + "community": 14, + "norm_label": "selectionscontext" + }, + { + "label": "SelectionsProviderProps", + "file_type": "code", + "source_file": "apps/web/src/context/SelectionsContext.tsx", + "source_location": "L37", + "_origin": "ast", + "id": "apps_web_src_context_selectionscontext_selectionsproviderprops", + "community": 14, + "norm_label": "selectionsproviderprops" + }, + { + "label": "loadSelectionsFromStorage()", + "file_type": "code", + "source_file": "apps/web/src/context/SelectionsContext.tsx", + "source_location": "L45", + "_origin": "ast", + "id": "apps_web_src_context_selectionscontext_loadselectionsfromstorage", + "community": 14, + "norm_label": "loadselectionsfromstorage()" + }, + { + "label": "saveSelectionsToStorage()", + "file_type": "code", + "source_file": "apps/web/src/context/SelectionsContext.tsx", + "source_location": "L68", + "_origin": "ast", + "id": "apps_web_src_context_selectionscontext_saveselectionstostorage", + "community": 14, + "norm_label": "saveselectionstostorage()" + }, + { + "label": "SelectionsProvider()", + "file_type": "code", + "source_file": "apps/web/src/context/SelectionsContext.tsx", + "source_location": "L86", + "_origin": "ast", + "id": "apps_web_src_context_selectionscontext_selectionsprovider", + "community": 26, + "norm_label": "selectionsprovider()" + }, + { + "label": "useSelectionsContext()", + "file_type": "code", + "source_file": "apps/web/src/context/SelectionsContext.tsx", + "source_location": "L163", + "_origin": "ast", + "id": "apps_web_src_context_selectionscontext_useselectionscontext", + "community": 35, + "norm_label": "useselectionscontext()" + }, + { + "label": "SuggestionsContext.tsx", + "file_type": "code", + "source_file": "apps/web/src/context/SuggestionsContext.tsx", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_context_suggestionscontext", + "community": 20, + "norm_label": "suggestionscontext.tsx" + }, + { + "label": "SuggestionsContextValue", + "file_type": "code", + "source_file": "apps/web/src/context/SuggestionsContext.tsx", + "source_location": "L7", + "_origin": "ast", + "id": "apps_web_src_context_suggestionscontext_suggestionscontextvalue", + "community": 20, + "norm_label": "suggestionscontextvalue" + }, + { + "label": "SuggestionsContext", + "file_type": "code", + "source_file": "apps/web/src/context/SuggestionsContext.tsx", + "source_location": "L20", + "_origin": "ast", + "id": "apps_web_src_context_suggestionscontext_suggestionscontext", + "community": 20, + "norm_label": "suggestionscontext" + }, + { + "label": "SuggestionsProviderProps", + "file_type": "code", + "source_file": "apps/web/src/context/SuggestionsContext.tsx", + "source_location": "L25", + "_origin": "ast", + "id": "apps_web_src_context_suggestionscontext_suggestionsproviderprops", + "community": 20, + "norm_label": "suggestionsproviderprops" + }, + { + "label": "SuggestionsProvider()", + "file_type": "code", + "source_file": "apps/web/src/context/SuggestionsContext.tsx", + "source_location": "L33", + "_origin": "ast", + "id": "apps_web_src_context_suggestionscontext_suggestionsprovider", + "community": 20, + "norm_label": "suggestionsprovider()" + }, + { + "label": "useSuggestionsContext()", + "file_type": "code", + "source_file": "apps/web/src/context/SuggestionsContext.tsx", + "source_location": "L88", + "_origin": "ast", + "id": "apps_web_src_context_suggestionscontext_usesuggestionscontext", + "community": 20, + "norm_label": "usesuggestionscontext()" + }, + { + "label": "index.ts", + "file_type": "code", + "source_file": "apps/web/src/context/index.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_context_index", + "community": 36, + "norm_label": "index.ts" + }, + { + "label": "index.ts", + "file_type": "code", + "source_file": "apps/web/src/data/recipes/index.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_data_recipes_index", + "community": 14, + "norm_label": "index.ts" + }, + { + "label": "recipes", + "file_type": "code", + "source_file": "apps/web/src/data/recipes/index.ts", + "source_location": "L16", + "_origin": "ast", + "id": "apps_web_src_data_recipes_index_recipes", + "community": 14, + "norm_label": "recipes" + }, + { + "label": "getRecipeById()", + "file_type": "code", + "source_file": "apps/web/src/data/recipes/index.ts", + "source_location": "L33", + "_origin": "ast", + "id": "apps_web_src_data_recipes_index_getrecipebyid", + "community": 14, + "norm_label": "getrecipebyid()" + }, + { + "label": "getApplicableRecipes()", + "file_type": "code", + "source_file": "apps/web/src/data/recipes/index.ts", + "source_location": "L40", + "_origin": "ast", + "id": "apps_web_src_data_recipes_index_getapplicablerecipes", + "community": 4, + "norm_label": "getapplicablerecipes()" + }, + { + "label": "nextjs-base.ts", + "file_type": "code", + "source_file": "apps/web/src/data/recipes/nextjs-base.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_data_recipes_nextjs_base", + "community": 14, + "norm_label": "nextjs-base.ts" + }, + { + "label": "nextjsBaseRecipe", + "file_type": "code", + "source_file": "apps/web/src/data/recipes/nextjs-base.ts", + "source_location": "L7", + "_origin": "ast", + "id": "apps_web_src_data_recipes_nextjs_base_nextjsbaserecipe", + "community": 14, + "norm_label": "nextjsbaserecipe" + }, + { + "label": "nextjs-clerk.ts", + "file_type": "code", + "source_file": "apps/web/src/data/recipes/nextjs-clerk.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_data_recipes_nextjs_clerk", + "community": 14, + "norm_label": "nextjs-clerk.ts" + }, + { + "label": "nextjsClerkRecipe", + "file_type": "code", + "source_file": "apps/web/src/data/recipes/nextjs-clerk.ts", + "source_location": "L7", + "_origin": "ast", + "id": "apps_web_src_data_recipes_nextjs_clerk_nextjsclerkrecipe", + "community": 14, + "norm_label": "nextjsclerkrecipe" + }, + { + "label": "nextjs-prisma-postgres.ts", + "file_type": "code", + "source_file": "apps/web/src/data/recipes/nextjs-prisma-postgres.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_data_recipes_nextjs_prisma_postgres", + "community": 14, + "norm_label": "nextjs-prisma-postgres.ts" + }, + { + "label": "nextjsPrismaPostgresRecipe", + "file_type": "code", + "source_file": "apps/web/src/data/recipes/nextjs-prisma-postgres.ts", + "source_location": "L7", + "_origin": "ast", + "id": "apps_web_src_data_recipes_nextjs_prisma_postgres_nextjsprismapostgresrecipe", + "community": 14, + "norm_label": "nextjsprismapostgresrecipe" + }, + { + "label": "stripe-integration.ts", + "file_type": "code", + "source_file": "apps/web/src/data/recipes/stripe-integration.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_data_recipes_stripe_integration", + "community": 14, + "norm_label": "stripe-integration.ts" + }, + { + "label": "stripeIntegrationRecipe", + "file_type": "code", + "source_file": "apps/web/src/data/recipes/stripe-integration.ts", + "source_location": "L7", + "_origin": "ast", + "id": "apps_web_src_data_recipes_stripe_integration_stripeintegrationrecipe", + "community": 14, + "norm_label": "stripeintegrationrecipe" + }, + { + "label": "suggestions.ts", + "file_type": "code", + "source_file": "apps/web/src/data/suggestions.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_data_suggestions", + "community": 20, + "norm_label": "suggestions.ts" + }, + { + "label": "SuggestionRule", + "file_type": "code", + "source_file": "apps/web/src/data/suggestions.ts", + "source_location": "L7", + "_origin": "ast", + "id": "apps_web_src_data_suggestions_suggestionrule", + "community": 20, + "norm_label": "suggestionrule" + }, + { + "label": "hasToolInCategory()", + "file_type": "code", + "source_file": "apps/web/src/data/suggestions.ts", + "source_location": "L16", + "_origin": "ast", + "id": "apps_web_src_data_suggestions_hastoolincategory", + "community": 20, + "norm_label": "hastoolincategory()" + }, + { + "label": "findToolById()", + "file_type": "code", + "source_file": "apps/web/src/data/suggestions.ts", + "source_location": "L23", + "_origin": "ast", + "id": "apps_web_src_data_suggestions_findtoolbyid", + "community": 20, + "norm_label": "findtoolbyid()" + }, + { + "label": "frontendToDatabaseRule", + "file_type": "code", + "source_file": "apps/web/src/data/suggestions.ts", + "source_location": "L33", + "_origin": "ast", + "id": "apps_web_src_data_suggestions_frontendtodatabaserule", + "community": 20, + "norm_label": "frontendtodatabaserule" + }, + { + "label": "databaseToOrmRule", + "file_type": "code", + "source_file": "apps/web/src/data/suggestions.ts", + "source_location": "L60", + "_origin": "ast", + "id": "apps_web_src_data_suggestions_databasetoormrule", + "community": 20, + "norm_label": "databasetoormrule" + }, + { + "label": "nextjsToVercelRule", + "file_type": "code", + "source_file": "apps/web/src/data/suggestions.ts", + "source_location": "L98", + "_origin": "ast", + "id": "apps_web_src_data_suggestions_nextjstovercelrule", + "community": 20, + "norm_label": "nextjstovercelrule" + }, + { + "label": "nextjsToTailwindRule", + "file_type": "code", + "source_file": "apps/web/src/data/suggestions.ts", + "source_location": "L124", + "_origin": "ast", + "id": "apps_web_src_data_suggestions_nextjstotailwindrule", + "community": 20, + "norm_label": "nextjstotailwindrule" + }, + { + "label": "authDatabaseToPaymentsRule", + "file_type": "code", + "source_file": "apps/web/src/data/suggestions.ts", + "source_location": "L150", + "_origin": "ast", + "id": "apps_web_src_data_suggestions_authdatabasetopaymentsrule", + "community": 20, + "norm_label": "authdatabasetopaymentsrule" + }, + { + "label": "suggestionRules", + "file_type": "code", + "source_file": "apps/web/src/data/suggestions.ts", + "source_location": "L174", + "_origin": "ast", + "id": "apps_web_src_data_suggestions_suggestionrules", + "community": 20, + "norm_label": "suggestionrules" + }, + { + "label": "generateSuggestions()", + "file_type": "code", + "source_file": "apps/web/src/data/suggestions.ts", + "source_location": "L188", + "_origin": "ast", + "id": "apps_web_src_data_suggestions_generatesuggestions", + "community": 20, + "norm_label": "generatesuggestions()" + }, + { + "label": "evaluate-with-fallback.ts", + "file_type": "code", + "source_file": "apps/web/src/engine/evaluate-with-fallback.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_engine_evaluate_with_fallback", + "community": 12, + "norm_label": "evaluate-with-fallback.ts" + }, + { + "label": "getWorker()", + "file_type": "code", + "source_file": "apps/web/src/engine/evaluate-with-fallback.ts", + "source_location": "L20", + "_origin": "ast", + "id": "apps_web_src_engine_evaluate_with_fallback_getworker", + "community": 12, + "norm_label": "getworker()" + }, + { + "label": "evaluateRulesWithFallback()", + "file_type": "code", + "source_file": "apps/web/src/engine/evaluate-with-fallback.ts", + "source_location": "L35", + "_origin": "ast", + "id": "apps_web_src_engine_evaluate_with_fallback_evaluateruleswithfallback", + "community": 12, + "norm_label": "evaluateruleswithfallback()" + }, + { + "label": "terminateWorker()", + "file_type": "code", + "source_file": "apps/web/src/engine/evaluate-with-fallback.ts", + "source_location": "L60", + "_origin": "ast", + "id": "apps_web_src_engine_evaluate_with_fallback_terminateworker", + "community": 12, + "norm_label": "terminateworker()" + }, + { + "label": "index.ts", + "file_type": "code", + "source_file": "apps/web/src/engine/index.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_engine_index", + "community": 12, + "norm_label": "index.ts" + }, + { + "label": "rules-engine.ts", + "file_type": "code", + "source_file": "apps/web/src/engine/rules-engine.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_engine_rules_engine", + "community": 12, + "norm_label": "rules-engine.ts" + }, + { + "label": "evaluateRulesSync()", + "file_type": "code", + "source_file": "apps/web/src/engine/rules-engine.ts", + "source_location": "L26", + "_origin": "ast", + "id": "apps_web_src_engine_rules_engine_evaluaterulessync", + "community": 12, + "norm_label": "evaluaterulessync()" + }, + { + "label": "evaluateMutualExclusiveCategory()", + "file_type": "code", + "source_file": "apps/web/src/engine/rules-engine.ts", + "source_location": "L78", + "_origin": "ast", + "id": "apps_web_src_engine_rules_engine_evaluatemutualexclusivecategory", + "community": 12, + "norm_label": "evaluatemutualexclusivecategory()" + }, + { + "label": "evaluateHardConflict()", + "file_type": "code", + "source_file": "apps/web/src/engine/rules-engine.ts", + "source_location": "L103", + "_origin": "ast", + "id": "apps_web_src_engine_rules_engine_evaluatehardconflict", + "community": 12, + "norm_label": "evaluatehardconflict()" + }, + { + "label": "evaluateRequiresTool()", + "file_type": "code", + "source_file": "apps/web/src/engine/rules-engine.ts", + "source_location": "L128", + "_origin": "ast", + "id": "apps_web_src_engine_rules_engine_evaluaterequirestool", + "community": 12, + "norm_label": "evaluaterequirestool()" + }, + { + "label": "evaluateSynergy()", + "file_type": "code", + "source_file": "apps/web/src/engine/rules-engine.ts", + "source_location": "L169", + "_origin": "ast", + "id": "apps_web_src_engine_rules_engine_evaluatesynergy", + "community": 12, + "norm_label": "evaluatesynergy()" + }, + { + "label": "evaluateCapabilityCompat()", + "file_type": "code", + "source_file": "apps/web/src/engine/rules-engine.ts", + "source_location": "L194", + "_origin": "ast", + "id": "apps_web_src_engine_rules_engine_evaluatecapabilitycompat", + "community": 12, + "norm_label": "evaluatecapabilitycompat()" + }, + { + "label": "evaluateCategoryCoverage()", + "file_type": "code", + "source_file": "apps/web/src/engine/rules-engine.ts", + "source_location": "L219", + "_origin": "ast", + "id": "apps_web_src_engine_rules_engine_evaluatecategorycoverage", + "community": 12, + "norm_label": "evaluatecategorycoverage()" + }, + { + "label": "rules-engine.worker.ts", + "file_type": "code", + "source_file": "apps/web/src/engine/rules-engine.worker.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_engine_rules_engine_worker", + "community": 12, + "norm_label": "rules-engine.worker.ts" + }, + { + "label": "score-calculator.ts", + "file_type": "code", + "source_file": "apps/web/src/engine/score-calculator.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_engine_score_calculator", + "community": 12, + "norm_label": "score-calculator.ts" + }, + { + "label": "calculateScore()", + "file_type": "code", + "source_file": "apps/web/src/engine/score-calculator.ts", + "source_location": "L28", + "_origin": "ast", + "id": "apps_web_src_engine_score_calculator_calculatescore", + "community": 12, + "norm_label": "calculatescore()" + }, + { + "label": "applyCapabilityCompatCap()", + "file_type": "code", + "source_file": "apps/web/src/engine/score-calculator.ts", + "source_location": "L72", + "_origin": "ast", + "id": "apps_web_src_engine_score_calculator_applycapabilitycompatcap", + "community": 12, + "norm_label": "applycapabilitycompatcap()" + }, + { + "label": "validateScoreBreakdown()", + "file_type": "code", + "source_file": "apps/web/src/engine/score-calculator.ts", + "source_location": "L113", + "_origin": "ast", + "id": "apps_web_src_engine_score_calculator_validatescorebreakdown", + "community": 12, + "norm_label": "validatescorebreakdown()" + }, + { + "label": "worker-wrapper.ts", + "file_type": "code", + "source_file": "apps/web/src/engine/worker-wrapper.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_engine_worker_wrapper", + "community": 12, + "norm_label": "worker-wrapper.ts" + }, + { + "label": "RulesEngineWorker", + "file_type": "code", + "source_file": "apps/web/src/engine/worker-wrapper.ts", + "source_location": "L13", + "_origin": "ast", + "id": "apps_web_src_engine_worker_wrapper_rulesengineworker", + "community": 12, + "norm_label": "rulesengineworker" + }, + { + "label": ".evaluate()", + "file_type": "code", + "source_file": "apps/web/src/engine/worker-wrapper.ts", + "source_location": "L14", + "_origin": "ast", + "id": "apps_web_src_engine_worker_wrapper_rulesengineworker_evaluate", + "community": 12, + "norm_label": ".evaluate()" + }, + { + "label": ".terminate()", + "file_type": "code", + "source_file": "apps/web/src/engine/worker-wrapper.ts", + "source_location": "L15", + "_origin": "ast", + "id": "apps_web_src_engine_worker_wrapper_rulesengineworker_terminate", + "community": 12, + "norm_label": ".terminate()" + }, + { + "label": "WorkerError", + "file_type": "code", + "source_file": "apps/web/src/engine/worker-wrapper.ts", + "source_location": "L21", + "_origin": "ast", + "id": "apps_web_src_engine_worker_wrapper_workererror", + "community": 12, + "norm_label": "workererror" + }, + { + "label": ".constructor()", + "file_type": "code", + "source_file": "apps/web/src/engine/worker-wrapper.ts", + "source_location": "L22", + "_origin": "ast", + "id": "apps_web_src_engine_worker_wrapper_workererror_constructor", + "community": 12, + "norm_label": ".constructor()" + }, + { + "label": "makeRulesWorker()", + "file_type": "code", + "source_file": "apps/web/src/engine/worker-wrapper.ts", + "source_location": "L35", + "_origin": "ast", + "id": "apps_web_src_engine_worker_wrapper_makerulesworker", + "community": 12, + "norm_label": "makerulesworker()" + }, + { + "label": "index.ts", + "file_type": "code", + "source_file": "apps/web/src/hooks/index.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_hooks_index", + "community": 19, + "norm_label": "index.ts" + }, + { + "label": "use-toast.ts", + "file_type": "code", + "source_file": "apps/web/src/hooks/use-toast.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_hooks_use_toast", + "community": 15, + "norm_label": "use-toast.ts" + }, + { + "label": "ToasterToast", + "file_type": "code", + "source_file": "apps/web/src/hooks/use-toast.ts", + "source_location": "L14", + "_origin": "ast", + "id": "apps_web_src_hooks_use_toast_toastertoast", + "community": 15, + "norm_label": "toastertoast" + }, + { + "label": "ActionTypes", + "file_type": "code", + "source_file": "apps/web/src/hooks/use-toast.ts", + "source_location": "L21", + "_origin": "ast", + "id": "apps_web_src_hooks_use_toast_actiontypes", + "community": 15, + "norm_label": "actiontypes" + }, + { + "label": "genId()", + "file_type": "code", + "source_file": "apps/web/src/hooks/use-toast.ts", + "source_location": "L30", + "_origin": "ast", + "id": "apps_web_src_hooks_use_toast_genid", + "community": 15, + "norm_label": "genid()" + }, + { + "label": "Action", + "file_type": "code", + "source_file": "apps/web/src/hooks/use-toast.ts", + "source_location": "L35", + "_origin": "ast", + "id": "apps_web_src_hooks_use_toast_action", + "community": 15, + "norm_label": "action" + }, + { + "label": "State", + "file_type": "code", + "source_file": "apps/web/src/hooks/use-toast.ts", + "source_location": "L53", + "_origin": "ast", + "id": "apps_web_src_hooks_use_toast_state", + "community": 15, + "norm_label": "state" + }, + { + "label": "toastTimeouts", + "file_type": "code", + "source_file": "apps/web/src/hooks/use-toast.ts", + "source_location": "L57", + "_origin": "ast", + "id": "apps_web_src_hooks_use_toast_toasttimeouts", + "community": 15, + "norm_label": "toasttimeouts" + }, + { + "label": "addToRemoveQueue()", + "file_type": "code", + "source_file": "apps/web/src/hooks/use-toast.ts", + "source_location": "L59", + "_origin": "ast", + "id": "apps_web_src_hooks_use_toast_addtoremovequeue", + "community": 15, + "norm_label": "addtoremovequeue()" + }, + { + "label": "reducer()", + "file_type": "code", + "source_file": "apps/web/src/hooks/use-toast.ts", + "source_location": "L75", + "_origin": "ast", + "id": "apps_web_src_hooks_use_toast_reducer", + "community": 15, + "norm_label": "reducer()" + }, + { + "label": "listeners", + "file_type": "code", + "source_file": "apps/web/src/hooks/use-toast.ts", + "source_location": "L130", + "_origin": "ast", + "id": "apps_web_src_hooks_use_toast_listeners", + "community": 15, + "norm_label": "listeners" + }, + { + "label": "memoryState", + "file_type": "code", + "source_file": "apps/web/src/hooks/use-toast.ts", + "source_location": "L132", + "_origin": "ast", + "id": "apps_web_src_hooks_use_toast_memorystate", + "community": 15, + "norm_label": "memorystate" + }, + { + "label": "dispatch()", + "file_type": "code", + "source_file": "apps/web/src/hooks/use-toast.ts", + "source_location": "L134", + "_origin": "ast", + "id": "apps_web_src_hooks_use_toast_dispatch", + "community": 15, + "norm_label": "dispatch()" + }, + { + "label": "Toast", + "file_type": "code", + "source_file": "apps/web/src/hooks/use-toast.ts", + "source_location": "L141", + "_origin": "ast", + "id": "apps_web_src_hooks_use_toast_toast", + "community": 15, + "norm_label": "toast" + }, + { + "label": "useToast()", + "file_type": "code", + "source_file": "apps/web/src/hooks/use-toast.ts", + "source_location": "L172", + "_origin": "ast", + "id": "apps_web_src_hooks_use_toast_usetoast", + "community": 35, + "norm_label": "usetoast()" + }, + { + "label": "useApi.ts", + "file_type": "code", + "source_file": "apps/web/src/hooks/useApi.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_hooks_useapi", + "community": 3, + "norm_label": "useapi.ts" + }, + { + "label": "useTools()", + "file_type": "code", + "source_file": "apps/web/src/hooks/useApi.ts", + "source_location": "L10", + "_origin": "ast", + "id": "apps_web_src_hooks_useapi_usetools", + "community": 3, + "norm_label": "usetools()" + }, + { + "label": "useTool()", + "file_type": "code", + "source_file": "apps/web/src/hooks/useApi.ts", + "source_location": "L25", + "_origin": "ast", + "id": "apps_web_src_hooks_useapi_usetool", + "community": 3, + "norm_label": "usetool()" + }, + { + "label": "useCategories()", + "file_type": "code", + "source_file": "apps/web/src/hooks/useApi.ts", + "source_location": "L33", + "_origin": "ast", + "id": "apps_web_src_hooks_useapi_usecategories", + "community": 3, + "norm_label": "usecategories()" + }, + { + "label": "useCatalog()", + "file_type": "code", + "source_file": "apps/web/src/hooks/useApi.ts", + "source_location": "L44", + "_origin": "ast", + "id": "apps_web_src_hooks_useapi_usecatalog", + "community": 3, + "norm_label": "usecatalog()" + }, + { + "label": "useStackBuilderCatalog()", + "file_type": "code", + "source_file": "apps/web/src/hooks/useApi.ts", + "source_location": "L56", + "_origin": "ast", + "id": "apps_web_src_hooks_useapi_usestackbuildercatalog", + "community": 26, + "norm_label": "usestackbuildercatalog()" + }, + { + "label": "useCompatibility()", + "file_type": "code", + "source_file": "apps/web/src/hooks/useApi.ts", + "source_location": "L65", + "_origin": "ast", + "id": "apps_web_src_hooks_useapi_usecompatibility", + "community": 3, + "norm_label": "usecompatibility()" + }, + { + "label": "useAnalyzeStack()", + "file_type": "code", + "source_file": "apps/web/src/hooks/useApi.ts", + "source_location": "L73", + "_origin": "ast", + "id": "apps_web_src_hooks_useapi_useanalyzestack", + "community": 3, + "norm_label": "useanalyzestack()" + }, + { + "label": "useGenerateBlueprint()", + "file_type": "code", + "source_file": "apps/web/src/hooks/useApi.ts", + "source_location": "L79", + "_origin": "ast", + "id": "apps_web_src_hooks_useapi_usegenerateblueprint", + "community": 3, + "norm_label": "usegenerateblueprint()" + }, + { + "label": "useGenerateScaffold()", + "file_type": "code", + "source_file": "apps/web/src/hooks/useApi.ts", + "source_location": "L85", + "_origin": "ast", + "id": "apps_web_src_hooks_useapi_usegeneratescaffold", + "community": 18, + "norm_label": "usegeneratescaffold()" + }, + { + "label": "useMigrationPath()", + "file_type": "code", + "source_file": "apps/web/src/hooks/useApi.ts", + "source_location": "L91", + "_origin": "ast", + "id": "apps_web_src_hooks_useapi_usemigrationpath", + "community": 3, + "norm_label": "usemigrationpath()" + }, + { + "label": "useExport.ts", + "file_type": "code", + "source_file": "apps/web/src/hooks/useExport.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_hooks_useexport", + "community": 19, + "norm_label": "useexport.ts" + }, + { + "label": "UseExportResult", + "file_type": "code", + "source_file": "apps/web/src/hooks/useExport.ts", + "source_location": "L11", + "_origin": "ast", + "id": "apps_web_src_hooks_useexport_useexportresult", + "community": 19, + "norm_label": "useexportresult" + }, + { + "label": "useExport()", + "file_type": "code", + "source_file": "apps/web/src/hooks/useExport.ts", + "source_location": "L27", + "_origin": "ast", + "id": "apps_web_src_hooks_useexport_useexport", + "community": 19, + "norm_label": "useexport()" + }, + { + "label": "useRulesEngine.ts", + "file_type": "code", + "source_file": "apps/web/src/hooks/useRulesEngine.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_hooks_userulesengine", + "community": 36, + "norm_label": "userulesengine.ts" + }, + { + "label": "diagnosticsFromApiResponse()", + "file_type": "code", + "source_file": "apps/web/src/hooks/useRulesEngine.ts", + "source_location": "L13", + "_origin": "ast", + "id": "apps_web_src_hooks_userulesengine_diagnosticsfromapiresponse", + "community": 36, + "norm_label": "diagnosticsfromapiresponse()" + }, + { + "label": "buildEvaluationResultFromApi()", + "file_type": "code", + "source_file": "apps/web/src/hooks/useRulesEngine.ts", + "source_location": "L40", + "_origin": "ast", + "id": "apps_web_src_hooks_userulesengine_buildevaluationresultfromapi", + "community": 36, + "norm_label": "buildevaluationresultfromapi()" + }, + { + "label": "useRulesEngine()", + "file_type": "code", + "source_file": "apps/web/src/hooks/useRulesEngine.ts", + "source_location": "L79", + "_origin": "ast", + "id": "apps_web_src_hooks_userulesengine_userulesengine", + "community": 35, + "norm_label": "userulesengine()" + }, + { + "label": "useStackSelection.ts", + "file_type": "code", + "source_file": "apps/web/src/hooks/useStackSelection.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_hooks_usestackselection", + "community": 35, + "norm_label": "usestackselection.ts" + }, + { + "label": "SerializedSelections", + "file_type": "code", + "source_file": "apps/web/src/hooks/useStackSelection.ts", + "source_location": "L13", + "_origin": "ast", + "id": "apps_web_src_hooks_usestackselection_serializedselections", + "community": 14, + "norm_label": "serializedselections" + }, + { + "label": "CardinalityViolationError", + "file_type": "code", + "source_file": "apps/web/src/hooks/useStackSelection.ts", + "source_location": "L22", + "_origin": "ast", + "id": "apps_web_src_hooks_usestackselection_cardinalityviolationerror", + "community": 19, + "norm_label": "cardinalityviolationerror" + }, + { + "label": ".constructor()", + "file_type": "code", + "source_file": "apps/web/src/hooks/useStackSelection.ts", + "source_location": "L23", + "_origin": "ast", + "id": "apps_web_src_hooks_usestackselection_cardinalityviolationerror_constructor", + "community": 19, + "norm_label": ".constructor()" + }, + { + "label": "useStackSelection()", + "file_type": "code", + "source_file": "apps/web/src/hooks/useStackSelection.ts", + "source_location": "L43", + "_origin": "ast", + "id": "apps_web_src_hooks_usestackselection_usestackselection", + "community": 35, + "norm_label": "usestackselection()" + }, + { + "label": "useSuggestions.ts", + "file_type": "code", + "source_file": "apps/web/src/hooks/useSuggestions.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_hooks_usesuggestions", + "community": 20, + "norm_label": "usesuggestions.ts" + }, + { + "label": "useSuggestions()", + "file_type": "code", + "source_file": "apps/web/src/hooks/useSuggestions.ts", + "source_location": "L22", + "_origin": "ast", + "id": "apps_web_src_hooks_usesuggestions_usesuggestions", + "community": 20, + "norm_label": "usesuggestions()" + }, + { + "label": "index.ts", + "file_type": "code", + "source_file": "apps/web/src/index.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_index", + "community": 87, + "norm_label": "index.ts" + }, + { + "label": "api-client.ts", + "file_type": "code", + "source_file": "apps/web/src/lib/api-client.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_lib_api_client", + "community": 42, + "norm_label": "api-client.ts" + }, + { + "label": "ApiErrorData", + "file_type": "code", + "source_file": "apps/web/src/lib/api-client.ts", + "source_location": "L17", + "_origin": "ast", + "id": "apps_web_src_lib_api_client_apierrordata", + "community": 42, + "norm_label": "apierrordata" + }, + { + "label": "ApiError", + "file_type": "code", + "source_file": "apps/web/src/lib/api-client.ts", + "source_location": "L23", + "_origin": "ast", + "id": "apps_web_src_lib_api_client_apierror", + "community": 42, + "norm_label": "apierror" + }, + { + "label": ".constructor()", + "file_type": "code", + "source_file": "apps/web/src/lib/api-client.ts", + "source_location": "L24", + "_origin": "ast", + "id": "apps_web_src_lib_api_client_apierror_constructor", + "community": 42, + "norm_label": ".constructor()" + }, + { + "label": "fetchApi()", + "file_type": "code", + "source_file": "apps/web/src/lib/api-client.ts", + "source_location": "L30", + "_origin": "ast", + "id": "apps_web_src_lib_api_client_fetchapi", + "community": 42, + "norm_label": "fetchapi()" + }, + { + "label": "apiClient", + "file_type": "code", + "source_file": "apps/web/src/lib/api-client.ts", + "source_location": "L51", + "_origin": "ast", + "id": "apps_web_src_lib_api_client_apiclient", + "community": 36, + "norm_label": "apiclient" + }, + { + "label": "archive-generator.ts", + "file_type": "code", + "source_file": "apps/web/src/lib/archive-generator.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_lib_archive_generator", + "community": 19, + "norm_label": "archive-generator.ts" + }, + { + "label": "ExportError", + "file_type": "code", + "source_file": "apps/web/src/lib/archive-generator.ts", + "source_location": "L11", + "_origin": "ast", + "id": "apps_web_src_lib_archive_generator_exporterror", + "community": 4, + "norm_label": "exporterror" + }, + { + "label": ".constructor()", + "file_type": "code", + "source_file": "apps/web/src/lib/archive-generator.ts", + "source_location": "L12", + "_origin": "ast", + "id": "apps_web_src_lib_archive_generator_exporterror_constructor", + "community": 4, + "norm_label": ".constructor()" + }, + { + "label": "generateZipArchive()", + "file_type": "code", + "source_file": "apps/web/src/lib/archive-generator.ts", + "source_location": "L26", + "_origin": "ast", + "id": "apps_web_src_lib_archive_generator_generateziparchive", + "community": 19, + "norm_label": "generateziparchive()" + }, + { + "label": "generateTarArchive()", + "file_type": "code", + "source_file": "apps/web/src/lib/archive-generator.ts", + "source_location": "L64", + "_origin": "ast", + "id": "apps_web_src_lib_archive_generator_generatetararchive", + "community": 19, + "norm_label": "generatetararchive()" + }, + { + "label": "generateArchive()", + "file_type": "code", + "source_file": "apps/web/src/lib/archive-generator.ts", + "source_location": "L78", + "_origin": "ast", + "id": "apps_web_src_lib_archive_generator_generatearchive", + "community": 19, + "norm_label": "generatearchive()" + }, + { + "label": "downloadArchive()", + "file_type": "code", + "source_file": "apps/web/src/lib/archive-generator.ts", + "source_location": "L95", + "_origin": "ast", + "id": "apps_web_src_lib_archive_generator_downloadarchive", + "community": 19, + "norm_label": "downloadarchive()" + }, + { + "label": "suggestNearestCombination()", + "file_type": "code", + "source_file": "apps/web/src/lib/archive-generator.ts", + "source_location": "L112", + "_origin": "ast", + "id": "apps_web_src_lib_archive_generator_suggestnearestcombination", + "community": 4, + "norm_label": "suggestnearestcombination()" + }, + { + "label": "auth-client.ts", + "file_type": "code", + "source_file": "apps/web/src/lib/auth-client.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_lib_auth_client", + "community": 3, + "norm_label": "auth-client.ts" + }, + { + "label": "authClient", + "file_type": "code", + "source_file": "apps/web/src/lib/auth-client.ts", + "source_location": "L7", + "_origin": "ast", + "id": "apps_web_src_lib_auth_client_authclient", + "community": 3, + "norm_label": "authclient" + }, + { + "label": "Session", + "file_type": "code", + "source_file": "apps/web/src/lib/auth-client.ts", + "source_location": "L12", + "_origin": "ast", + "id": "apps_web_src_lib_auth_client_session", + "community": 3, + "norm_label": "session" + }, + { + "label": "catalog-loader.ts", + "file_type": "code", + "source_file": "apps/web/src/lib/catalog-loader.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_lib_catalog_loader", + "community": 39, + "norm_label": "catalog-loader.ts" + }, + { + "label": "ManifestSchema", + "file_type": "code", + "source_file": "apps/web/src/lib/catalog-loader.ts", + "source_location": "L8", + "_origin": "ast", + "id": "apps_web_src_lib_catalog_loader_manifestschema", + "community": 39, + "norm_label": "manifestschema" + }, + { + "label": "Manifest", + "file_type": "code", + "source_file": "apps/web/src/lib/catalog-loader.ts", + "source_location": "L19", + "_origin": "ast", + "id": "apps_web_src_lib_catalog_loader_manifest", + "community": 39, + "norm_label": "manifest" + }, + { + "label": "CatalogData", + "file_type": "code", + "source_file": "apps/web/src/lib/catalog-loader.ts", + "source_location": "L24", + "_origin": "ast", + "id": "apps_web_src_lib_catalog_loader_catalogdata", + "community": 25, + "norm_label": "catalogdata" + }, + { + "label": "CachedCatalog", + "file_type": "code", + "source_file": "apps/web/src/lib/catalog-loader.ts", + "source_location": "L40", + "_origin": "ast", + "id": "apps_web_src_lib_catalog_loader_cachedcatalog", + "community": 39, + "norm_label": "cachedcatalog" + }, + { + "label": "loadManifest()", + "file_type": "code", + "source_file": "apps/web/src/lib/catalog-loader.ts", + "source_location": "L49", + "_origin": "ast", + "id": "apps_web_src_lib_catalog_loader_loadmanifest", + "community": 39, + "norm_label": "loadmanifest()" + }, + { + "label": "loadCatalogFile()", + "file_type": "code", + "source_file": "apps/web/src/lib/catalog-loader.ts", + "source_location": "L65", + "_origin": "ast", + "id": "apps_web_src_lib_catalog_loader_loadcatalogfile", + "community": 39, + "norm_label": "loadcatalogfile()" + }, + { + "label": "getCachedCatalog()", + "file_type": "code", + "source_file": "apps/web/src/lib/catalog-loader.ts", + "source_location": "L82", + "_origin": "ast", + "id": "apps_web_src_lib_catalog_loader_getcachedcatalog", + "community": 39, + "norm_label": "getcachedcatalog()" + }, + { + "label": "setCachedCatalog()", + "file_type": "code", + "source_file": "apps/web/src/lib/catalog-loader.ts", + "source_location": "L113", + "_origin": "ast", + "id": "apps_web_src_lib_catalog_loader_setcachedcatalog", + "community": 39, + "norm_label": "setcachedcatalog()" + }, + { + "label": "loadCatalog()", + "file_type": "code", + "source_file": "apps/web/src/lib/catalog-loader.ts", + "source_location": "L144", + "_origin": "ast", + "id": "apps_web_src_lib_catalog_loader_loadcatalog", + "community": 39, + "norm_label": "loadcatalog()" + }, + { + "label": "clearCatalogCache()", + "file_type": "code", + "source_file": "apps/web/src/lib/catalog-loader.ts", + "source_location": "L201", + "_origin": "ast", + "id": "apps_web_src_lib_catalog_loader_clearcatalogcache", + "community": 26, + "norm_label": "clearcatalogcache()" + }, + { + "label": "hasCachedCatalog()", + "file_type": "code", + "source_file": "apps/web/src/lib/catalog-loader.ts", + "source_location": "L211", + "_origin": "ast", + "id": "apps_web_src_lib_catalog_loader_hascachedcatalog", + "community": 39, + "norm_label": "hascachedcatalog()" + }, + { + "label": "export-generator.ts", + "file_type": "code", + "source_file": "apps/web/src/lib/export-generator.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_lib_export_generator", + "community": 4, + "norm_label": "export-generator.ts" + }, + { + "label": "generateExport()", + "file_type": "code", + "source_file": "apps/web/src/lib/export-generator.ts", + "source_location": "L28", + "_origin": "ast", + "id": "apps_web_src_lib_export_generator_generateexport", + "community": 4, + "norm_label": "generateexport()" + }, + { + "label": "generateExportAsText()", + "file_type": "code", + "source_file": "apps/web/src/lib/export-generator.ts", + "source_location": "L148", + "_origin": "ast", + "id": "apps_web_src_lib_export_generator_generateexportastext", + "community": 4, + "norm_label": "generateexportastext()" + }, + { + "label": "export-log-generator.ts", + "file_type": "code", + "source_file": "apps/web/src/lib/export-log-generator.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_lib_export_log_generator", + "community": 8, + "norm_label": "export-log-generator.ts" + }, + { + "label": "generateExportLog()", + "file_type": "code", + "source_file": "apps/web/src/lib/export-log-generator.ts", + "source_location": "L17", + "_origin": "ast", + "id": "apps_web_src_lib_export_log_generator_generateexportlog", + "community": 4, + "norm_label": "generateexportlog()" + }, + { + "label": "generateExportLogFile()", + "file_type": "code", + "source_file": "apps/web/src/lib/export-log-generator.ts", + "source_location": "L50", + "_origin": "ast", + "id": "apps_web_src_lib_export_log_generator_generateexportlogfile", + "community": 4, + "norm_label": "generateexportlogfile()" + }, + { + "label": "recipe-matcher.ts", + "file_type": "code", + "source_file": "apps/web/src/lib/recipe-matcher.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_lib_recipe_matcher", + "community": 4, + "norm_label": "recipe-matcher.ts" + }, + { + "label": "CATEGORY_ORDER", + "file_type": "code", + "source_file": "apps/web/src/lib/recipe-matcher.ts", + "source_location": "L18", + "_origin": "ast", + "id": "apps_web_src_lib_recipe_matcher_category_order", + "community": 4, + "norm_label": "category_order" + }, + { + "label": "getRecipeCategory()", + "file_type": "code", + "source_file": "apps/web/src/lib/recipe-matcher.ts", + "source_location": "L34", + "_origin": "ast", + "id": "apps_web_src_lib_recipe_matcher_getrecipecategory", + "community": 4, + "norm_label": "getrecipecategory()" + }, + { + "label": "sortRecipesByCategory()", + "file_type": "code", + "source_file": "apps/web/src/lib/recipe-matcher.ts", + "source_location": "L73", + "_origin": "ast", + "id": "apps_web_src_lib_recipe_matcher_sortrecipesbycategory", + "community": 4, + "norm_label": "sortrecipesbycategory()" + }, + { + "label": "MergedPackageJson", + "file_type": "code", + "source_file": "apps/web/src/lib/recipe-matcher.ts", + "source_location": "L91", + "_origin": "ast", + "id": "apps_web_src_lib_recipe_matcher_mergedpackagejson", + "community": 4, + "norm_label": "mergedpackagejson" + }, + { + "label": "mergePackageJsonTargets()", + "file_type": "code", + "source_file": "apps/web/src/lib/recipe-matcher.ts", + "source_location": "L108", + "_origin": "ast", + "id": "apps_web_src_lib_recipe_matcher_mergepackagejsontargets", + "community": 4, + "norm_label": "mergepackagejsontargets()" + }, + { + "label": "getMostRestrictiveVersion()", + "file_type": "code", + "source_file": "apps/web/src/lib/recipe-matcher.ts", + "source_location": "L171", + "_origin": "ast", + "id": "apps_web_src_lib_recipe_matcher_getmostrestrictiveversion", + "community": 4, + "norm_label": "getmostrestrictiveversion()" + }, + { + "label": "mergeFileTargets()", + "file_type": "code", + "source_file": "apps/web/src/lib/recipe-matcher.ts", + "source_location": "L182", + "_origin": "ast", + "id": "apps_web_src_lib_recipe_matcher_mergefiletargets", + "community": 4, + "norm_label": "mergefiletargets()" + }, + { + "label": "mergeEnvTargets()", + "file_type": "code", + "source_file": "apps/web/src/lib/recipe-matcher.ts", + "source_location": "L218", + "_origin": "ast", + "id": "apps_web_src_lib_recipe_matcher_mergeenvtargets", + "community": 4, + "norm_label": "mergeenvtargets()" + }, + { + "label": "mergePostInstallSteps()", + "file_type": "code", + "source_file": "apps/web/src/lib/recipe-matcher.ts", + "source_location": "L253", + "_origin": "ast", + "id": "apps_web_src_lib_recipe_matcher_mergepostinstallsteps", + "community": 4, + "norm_label": "mergepostinstallsteps()" + }, + { + "label": "mergeDocsLinks()", + "file_type": "code", + "source_file": "apps/web/src/lib/recipe-matcher.ts", + "source_location": "L273", + "_origin": "ast", + "id": "apps_web_src_lib_recipe_matcher_mergedocslinks", + "community": 4, + "norm_label": "mergedocslinks()" + }, + { + "label": "mergeRecipeTargets()", + "file_type": "code", + "source_file": "apps/web/src/lib/recipe-matcher.ts", + "source_location": "L288", + "_origin": "ast", + "id": "apps_web_src_lib_recipe_matcher_mergerecipetargets", + "community": 4, + "norm_label": "mergerecipetargets()" + }, + { + "label": "sentry.test.ts", + "file_type": "code", + "source_file": "apps/web/src/lib/sentry.test.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_lib_sentry_test", + "community": 3, + "norm_label": "sentry.test.ts" + }, + { + "label": "sentry.ts", + "file_type": "code", + "source_file": "apps/web/src/lib/sentry.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_lib_sentry", + "community": 3, + "norm_label": "sentry.ts" + }, + { + "label": "InitSentryOptions", + "file_type": "code", + "source_file": "apps/web/src/lib/sentry.ts", + "source_location": "L23", + "_origin": "ast", + "id": "apps_web_src_lib_sentry_initsentryoptions", + "community": 3, + "norm_label": "initsentryoptions" + }, + { + "label": "Logger", + "file_type": "code", + "source_file": "apps/web/src/lib/sentry.ts", + "source_location": "L34", + "_origin": "ast", + "id": "apps_web_src_lib_sentry_logger", + "community": 3, + "norm_label": "logger" + }, + { + "label": "asString()", + "file_type": "code", + "source_file": "apps/web/src/lib/sentry.ts", + "source_location": "L40", + "_origin": "ast", + "id": "apps_web_src_lib_sentry_asstring", + "community": 3, + "norm_label": "asstring()" + }, + { + "label": "initSentry()", + "file_type": "code", + "source_file": "apps/web/src/lib/sentry.ts", + "source_location": "L45", + "_origin": "ast", + "id": "apps_web_src_lib_sentry_initsentry", + "community": 3, + "norm_label": "initsentry()" + }, + { + "label": "isEnabled()", + "file_type": "code", + "source_file": "apps/web/src/lib/sentry.ts", + "source_location": "L84", + "_origin": "ast", + "id": "apps_web_src_lib_sentry_isenabled", + "community": 3, + "norm_label": "isenabled()" + }, + { + "label": "__resetSentryForTests()", + "file_type": "code", + "source_file": "apps/web/src/lib/sentry.ts", + "source_location": "L97", + "_origin": "ast", + "id": "apps_web_src_lib_sentry_resetsentryfortests", + "community": 3, + "norm_label": "__resetsentryfortests()" + }, + { + "label": "utils.ts", + "file_type": "code", + "source_file": "apps/web/src/lib/utils.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_lib_utils", + "community": 18, + "norm_label": "utils.ts" + }, + { + "label": "cn()", + "file_type": "code", + "source_file": "apps/web/src/lib/utils.ts", + "source_location": "L7", + "_origin": "ast", + "id": "apps_web_src_lib_utils_cn", + "community": 18, + "norm_label": "cn()" + }, + { + "label": "main.tsx", + "file_type": "code", + "source_file": "apps/web/src/main.tsx", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_main", + "community": 3, + "norm_label": "main.tsx" + }, + { + "label": "rootElement", + "file_type": "code", + "source_file": "apps/web/src/main.tsx", + "source_location": "L11", + "_origin": "ast", + "id": "apps_web_src_main_rootelement", + "community": 3, + "norm_label": "rootelement" + }, + { + "label": "BlueprintBuilder.tsx", + "file_type": "code", + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_pages_blueprintbuilder", + "community": 3, + "norm_label": "blueprintbuilder.tsx" + }, + { + "label": "WizardStep", + "file_type": "code", + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L18", + "_origin": "ast", + "id": "apps_web_src_pages_blueprintbuilder_wizardstep", + "community": 3, + "norm_label": "wizardstep" + }, + { + "label": "STEPS", + "file_type": "code", + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L20", + "_origin": "ast", + "id": "apps_web_src_pages_blueprintbuilder_steps", + "community": 3, + "norm_label": "steps" + }, + { + "label": "BudgetOption", + "file_type": "code", + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L27", + "_origin": "ast", + "id": "apps_web_src_pages_blueprintbuilder_budgetoption", + "community": 3, + "norm_label": "budgetoption" + }, + { + "label": "TimelineOption", + "file_type": "code", + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L28", + "_origin": "ast", + "id": "apps_web_src_pages_blueprintbuilder_timelineoption", + "community": 3, + "norm_label": "timelineoption" + }, + { + "label": "BlueprintBuilder()", + "file_type": "code", + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L30", + "_origin": "ast", + "id": "apps_web_src_pages_blueprintbuilder_blueprintbuilder", + "community": 3, + "norm_label": "blueprintbuilder()" + }, + { + "label": "WizardProgress()", + "file_type": "code", + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L212", + "_origin": "ast", + "id": "apps_web_src_pages_blueprintbuilder_wizardprogress", + "community": 3, + "norm_label": "wizardprogress()" + }, + { + "label": "IdeaStepProps", + "file_type": "code", + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L264", + "_origin": "ast", + "id": "apps_web_src_pages_blueprintbuilder_ideastepprops", + "community": 3, + "norm_label": "ideastepprops" + }, + { + "label": "IdeaStep()", + "file_type": "code", + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L269", + "_origin": "ast", + "id": "apps_web_src_pages_blueprintbuilder_ideastep", + "community": 3, + "norm_label": "ideastep()" + }, + { + "label": "ConstraintsStepProps", + "file_type": "code", + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L296", + "_origin": "ast", + "id": "apps_web_src_pages_blueprintbuilder_constraintsstepprops", + "community": 3, + "norm_label": "constraintsstepprops" + }, + { + "label": "ConstraintsStep()", + "file_type": "code", + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L309", + "_origin": "ast", + "id": "apps_web_src_pages_blueprintbuilder_constraintsstep", + "community": 3, + "norm_label": "constraintsstep()" + }, + { + "label": "ExportStepProps", + "file_type": "code", + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L407", + "_origin": "ast", + "id": "apps_web_src_pages_blueprintbuilder_exportstepprops", + "community": 3, + "norm_label": "exportstepprops" + }, + { + "label": "ExportStep()", + "file_type": "code", + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L418", + "_origin": "ast", + "id": "apps_web_src_pages_blueprintbuilder_exportstep", + "community": 3, + "norm_label": "exportstep()" + }, + { + "label": "WizardControlsProps", + "file_type": "code", + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L554", + "_origin": "ast", + "id": "apps_web_src_pages_blueprintbuilder_wizardcontrolsprops", + "community": 3, + "norm_label": "wizardcontrolsprops" + }, + { + "label": "WizardControls()", + "file_type": "code", + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L565", + "_origin": "ast", + "id": "apps_web_src_pages_blueprintbuilder_wizardcontrols", + "community": 3, + "norm_label": "wizardcontrols()" + }, + { + "label": "errorMessage()", + "file_type": "code", + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L634", + "_origin": "ast", + "id": "apps_web_src_pages_blueprintbuilder_errormessage", + "community": 3, + "norm_label": "errormessage()" + }, + { + "label": "CompatibilityView.tsx", + "file_type": "code", + "source_file": "apps/web/src/pages/CompatibilityView.tsx", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_pages_compatibilityview", + "community": 3, + "norm_label": "compatibilityview.tsx" + }, + { + "label": "Mode", + "file_type": "code", + "source_file": "apps/web/src/pages/CompatibilityView.tsx", + "source_location": "L14", + "_origin": "ast", + "id": "apps_web_src_pages_compatibilityview_mode", + "community": 3, + "norm_label": "mode" + }, + { + "label": "CompatibilityView()", + "file_type": "code", + "source_file": "apps/web/src/pages/CompatibilityView.tsx", + "source_location": "L16", + "_origin": "ast", + "id": "apps_web_src_pages_compatibilityview_compatibilityview", + "community": 3, + "norm_label": "compatibilityview()" + }, + { + "label": "ModeTabs()", + "file_type": "code", + "source_file": "apps/web/src/pages/CompatibilityView.tsx", + "source_location": "L41", + "_origin": "ast", + "id": "apps_web_src_pages_compatibilityview_modetabs", + "community": 3, + "norm_label": "modetabs()" + }, + { + "label": "PairwiseAnalyzer()", + "file_type": "code", + "source_file": "apps/web/src/pages/CompatibilityView.tsx", + "source_location": "L82", + "_origin": "ast", + "id": "apps_web_src_pages_compatibilityview_pairwiseanalyzer", + "community": 3, + "norm_label": "pairwiseanalyzer()" + }, + { + "label": "PairwiseResult()", + "file_type": "code", + "source_file": "apps/web/src/pages/CompatibilityView.tsx", + "source_location": "L152", + "_origin": "ast", + "id": "apps_web_src_pages_compatibilityview_pairwiseresult", + "community": 3, + "norm_label": "pairwiseresult()" + }, + { + "label": "diagnosticIcon()", + "file_type": "code", + "source_file": "apps/web/src/pages/CompatibilityView.tsx", + "source_location": "L225", + "_origin": "ast", + "id": "apps_web_src_pages_compatibilityview_diagnosticicon", + "community": 3, + "norm_label": "diagnosticicon()" + }, + { + "label": "MatrixAnalyzer()", + "file_type": "code", + "source_file": "apps/web/src/pages/CompatibilityView.tsx", + "source_location": "L244", + "_origin": "ast", + "id": "apps_web_src_pages_compatibilityview_matrixanalyzer", + "community": 3, + "norm_label": "matrixanalyzer()" + }, + { + "label": "MigrationExplorer.tsx", + "file_type": "code", + "source_file": "apps/web/src/pages/MigrationExplorer.tsx", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_pages_migrationexplorer", + "community": 3, + "norm_label": "migrationexplorer.tsx" + }, + { + "label": "MigrationExplorer()", + "file_type": "code", + "source_file": "apps/web/src/pages/MigrationExplorer.tsx", + "source_location": "L6", + "_origin": "ast", + "id": "apps_web_src_pages_migrationexplorer_migrationexplorer", + "community": 3, + "norm_label": "migrationexplorer()" + }, + { + "label": "StackBuilderPage.tsx", + "file_type": "code", + "source_file": "apps/web/src/pages/StackBuilderPage.tsx", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_pages_stackbuilderpage", + "community": 26, + "norm_label": "stackbuilderpage.tsx" + }, + { + "label": "StackBuilderPage()", + "file_type": "code", + "source_file": "apps/web/src/pages/StackBuilderPage.tsx", + "source_location": "L16", + "_origin": "ast", + "id": "apps_web_src_pages_stackbuilderpage_stackbuilderpage", + "community": 26, + "norm_label": "stackbuilderpage()" + }, + { + "label": "ToolCatalog.tsx", + "file_type": "code", + "source_file": "apps/web/src/pages/ToolCatalog.tsx", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_pages_toolcatalog", + "community": 3, + "norm_label": "toolcatalog.tsx" + }, + { + "label": "ToolCatalog()", + "file_type": "code", + "source_file": "apps/web/src/pages/ToolCatalog.tsx", + "source_location": "L6", + "_origin": "ast", + "id": "apps_web_src_pages_toolcatalog_toolcatalog", + "community": 3, + "norm_label": "toolcatalog()" + }, + { + "label": "clerk-middleware.ts", + "file_type": "code", + "source_file": "apps/web/src/templates/config-files/clerk-middleware.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_templates_config_files_clerk_middleware", + "community": 4, + "norm_label": "clerk-middleware.ts" + }, + { + "label": "generateClerkMiddleware()", + "file_type": "code", + "source_file": "apps/web/src/templates/config-files/clerk-middleware.ts", + "source_location": "L5", + "_origin": "ast", + "id": "apps_web_src_templates_config_files_clerk_middleware_generateclerkmiddleware", + "community": 4, + "norm_label": "generateclerkmiddleware()" + }, + { + "label": "clerk-signin-page.ts", + "file_type": "code", + "source_file": "apps/web/src/templates/config-files/clerk-signin-page.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_templates_config_files_clerk_signin_page", + "community": 4, + "norm_label": "clerk-signin-page.ts" + }, + { + "label": "generateClerkSignInPage()", + "file_type": "code", + "source_file": "apps/web/src/templates/config-files/clerk-signin-page.ts", + "source_location": "L5", + "_origin": "ast", + "id": "apps_web_src_templates_config_files_clerk_signin_page_generateclerksigninpage", + "community": 4, + "norm_label": "generateclerksigninpage()" + }, + { + "label": "clerk-signup-page.ts", + "file_type": "code", + "source_file": "apps/web/src/templates/config-files/clerk-signup-page.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_templates_config_files_clerk_signup_page", + "community": 4, + "norm_label": "clerk-signup-page.ts" + }, + { + "label": "generateClerkSignUpPage()", + "file_type": "code", + "source_file": "apps/web/src/templates/config-files/clerk-signup-page.ts", + "source_location": "L5", + "_origin": "ast", + "id": "apps_web_src_templates_config_files_clerk_signup_page_generateclerksignuppage", + "community": 4, + "norm_label": "generateclerksignuppage()" + }, + { + "label": "eslint-nextjs.ts", + "file_type": "code", + "source_file": "apps/web/src/templates/config-files/eslint-nextjs.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_templates_config_files_eslint_nextjs", + "community": 4, + "norm_label": "eslint-nextjs.ts" + }, + { + "label": "generateEslintNextjs()", + "file_type": "code", + "source_file": "apps/web/src/templates/config-files/eslint-nextjs.ts", + "source_location": "L5", + "_origin": "ast", + "id": "apps_web_src_templates_config_files_eslint_nextjs_generateeslintnextjs", + "community": 4, + "norm_label": "generateeslintnextjs()" + }, + { + "label": "index.ts", + "file_type": "code", + "source_file": "apps/web/src/templates/config-files/index.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_templates_config_files_index", + "community": 4, + "norm_label": "index.ts" + }, + { + "label": "templateGenerators", + "file_type": "code", + "source_file": "apps/web/src/templates/config-files/index.ts", + "source_location": "L21", + "_origin": "ast", + "id": "apps_web_src_templates_config_files_index_templategenerators", + "community": 4, + "norm_label": "templategenerators" + }, + { + "label": "getTemplateContent()", + "file_type": "code", + "source_file": "apps/web/src/templates/config-files/index.ts", + "source_location": "L39", + "_origin": "ast", + "id": "apps_web_src_templates_config_files_index_gettemplatecontent", + "community": 4, + "norm_label": "gettemplatecontent()" + }, + { + "label": "next-config.ts", + "file_type": "code", + "source_file": "apps/web/src/templates/config-files/next-config.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_templates_config_files_next_config", + "community": 4, + "norm_label": "next-config.ts" + }, + { + "label": "generateNextConfig()", + "file_type": "code", + "source_file": "apps/web/src/templates/config-files/next-config.ts", + "source_location": "L5", + "_origin": "ast", + "id": "apps_web_src_templates_config_files_next_config_generatenextconfig", + "community": 4, + "norm_label": "generatenextconfig()" + }, + { + "label": "nextjs-home-page.ts", + "file_type": "code", + "source_file": "apps/web/src/templates/config-files/nextjs-home-page.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_templates_config_files_nextjs_home_page", + "community": 4, + "norm_label": "nextjs-home-page.ts" + }, + { + "label": "generateNextjsHomePage()", + "file_type": "code", + "source_file": "apps/web/src/templates/config-files/nextjs-home-page.ts", + "source_location": "L5", + "_origin": "ast", + "id": "apps_web_src_templates_config_files_nextjs_home_page_generatenextjshomepage", + "community": 4, + "norm_label": "generatenextjshomepage()" + }, + { + "label": "nextjs-root-layout.ts", + "file_type": "code", + "source_file": "apps/web/src/templates/config-files/nextjs-root-layout.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_templates_config_files_nextjs_root_layout", + "community": 4, + "norm_label": "nextjs-root-layout.ts" + }, + { + "label": "generateNextjsRootLayout()", + "file_type": "code", + "source_file": "apps/web/src/templates/config-files/nextjs-root-layout.ts", + "source_location": "L5", + "_origin": "ast", + "id": "apps_web_src_templates_config_files_nextjs_root_layout_generatenextjsrootlayout", + "community": 4, + "norm_label": "generatenextjsrootlayout()" + }, + { + "label": "prisma-client.ts", + "file_type": "code", + "source_file": "apps/web/src/templates/config-files/prisma-client.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_templates_config_files_prisma_client", + "community": 4, + "norm_label": "prisma-client.ts" + }, + { + "label": "generatePrismaClient()", + "file_type": "code", + "source_file": "apps/web/src/templates/config-files/prisma-client.ts", + "source_location": "L5", + "_origin": "ast", + "id": "apps_web_src_templates_config_files_prisma_client_generateprismaclient", + "community": 4, + "norm_label": "generateprismaclient()" + }, + { + "label": "prisma-schema-postgres.ts", + "file_type": "code", + "source_file": "apps/web/src/templates/config-files/prisma-schema-postgres.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_templates_config_files_prisma_schema_postgres", + "community": 4, + "norm_label": "prisma-schema-postgres.ts" + }, + { + "label": "generatePrismaSchemaPostgres()", + "file_type": "code", + "source_file": "apps/web/src/templates/config-files/prisma-schema-postgres.ts", + "source_location": "L5", + "_origin": "ast", + "id": "apps_web_src_templates_config_files_prisma_schema_postgres_generateprismaschemapostgres", + "community": 4, + "norm_label": "generateprismaschemapostgres()" + }, + { + "label": "stripe-client.ts", + "file_type": "code", + "source_file": "apps/web/src/templates/config-files/stripe-client.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_templates_config_files_stripe_client", + "community": 4, + "norm_label": "stripe-client.ts" + }, + { + "label": "generateStripeClient()", + "file_type": "code", + "source_file": "apps/web/src/templates/config-files/stripe-client.ts", + "source_location": "L5", + "_origin": "ast", + "id": "apps_web_src_templates_config_files_stripe_client_generatestripeclient", + "community": 4, + "norm_label": "generatestripeclient()" + }, + { + "label": "stripe-webhook.ts", + "file_type": "code", + "source_file": "apps/web/src/templates/config-files/stripe-webhook.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_templates_config_files_stripe_webhook", + "community": 4, + "norm_label": "stripe-webhook.ts" + }, + { + "label": "generateStripeWebhook()", + "file_type": "code", + "source_file": "apps/web/src/templates/config-files/stripe-webhook.ts", + "source_location": "L5", + "_origin": "ast", + "id": "apps_web_src_templates_config_files_stripe_webhook_generatestripewebhook", + "community": 4, + "norm_label": "generatestripewebhook()" + }, + { + "label": "tsconfig-nextjs.ts", + "file_type": "code", + "source_file": "apps/web/src/templates/config-files/tsconfig-nextjs.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_templates_config_files_tsconfig_nextjs", + "community": 4, + "norm_label": "tsconfig-nextjs.ts" + }, + { + "label": "generateTsConfigNextjs()", + "file_type": "code", + "source_file": "apps/web/src/templates/config-files/tsconfig-nextjs.ts", + "source_location": "L5", + "_origin": "ast", + "id": "apps_web_src_templates_config_files_tsconfig_nextjs_generatetsconfignextjs", + "community": 4, + "norm_label": "generatetsconfignextjs()" + }, + { + "label": "env-example.ts", + "file_type": "code", + "source_file": "apps/web/src/templates/env-example.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_templates_env_example", + "community": 4, + "norm_label": "env-example.ts" + }, + { + "label": "generateEnvExample()", + "file_type": "code", + "source_file": "apps/web/src/templates/env-example.ts", + "source_location": "L9", + "_origin": "ast", + "id": "apps_web_src_templates_env_example_generateenvexample", + "community": 4, + "norm_label": "generateenvexample()" + }, + { + "label": "package-json.ts", + "file_type": "code", + "source_file": "apps/web/src/templates/package-json.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_templates_package_json", + "community": 4, + "norm_label": "package-json.ts" + }, + { + "label": "generatePackageJson()", + "file_type": "code", + "source_file": "apps/web/src/templates/package-json.ts", + "source_location": "L9", + "_origin": "ast", + "id": "apps_web_src_templates_package_json_generatepackagejson", + "community": 4, + "norm_label": "generatepackagejson()" + }, + { + "label": "readme.ts", + "file_type": "code", + "source_file": "apps/web/src/templates/readme.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_templates_readme", + "community": 4, + "norm_label": "readme.ts" + }, + { + "label": "generateReadme()", + "file_type": "code", + "source_file": "apps/web/src/templates/readme.ts", + "source_location": "L11", + "_origin": "ast", + "id": "apps_web_src_templates_readme_generatereadme", + "community": 4, + "norm_label": "generatereadme()" + }, + { + "label": "getEnvVarDescription()", + "file_type": "code", + "source_file": "apps/web/src/templates/readme.ts", + "source_location": "L125", + "_origin": "ast", + "id": "apps_web_src_templates_readme_getenvvardescription", + "community": 4, + "norm_label": "getenvvardescription()" + }, + { + "label": "getToolNameFromDocsLink()", + "file_type": "code", + "source_file": "apps/web/src/templates/readme.ts", + "source_location": "L150", + "_origin": "ast", + "id": "apps_web_src_templates_readme_gettoolnamefromdocslink", + "community": 4, + "norm_label": "gettoolnamefromdocslink()" + }, + { + "label": "setup.ts", + "file_type": "code", + "source_file": "apps/web/src/test/setup.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_test_setup", + "community": 89, + "norm_label": "setup.ts" + }, + { + "label": "catalog.ts", + "file_type": "code", + "source_file": "apps/web/src/types/catalog.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_types_catalog", + "community": 51, + "norm_label": "catalog.ts" + }, + { + "label": "CatalogManifest", + "file_type": "code", + "source_file": "apps/web/src/types/catalog.ts", + "source_location": "L9", + "_origin": "ast", + "id": "apps_web_src_types_catalog_catalogmanifest", + "community": 51, + "norm_label": "catalogmanifest" + }, + { + "label": "Catalog", + "file_type": "code", + "source_file": "apps/web/src/types/catalog.ts", + "source_location": "L23", + "_origin": "ast", + "id": "apps_web_src_types_catalog_catalog", + "community": 51, + "norm_label": "catalog" + }, + { + "label": "CatalogManifestSchema", + "file_type": "code", + "source_file": "apps/web/src/types/catalog.ts", + "source_location": "L34", + "_origin": "ast", + "id": "apps_web_src_types_catalog_catalogmanifestschema", + "community": 51, + "norm_label": "catalogmanifestschema" + }, + { + "label": "isCatalogManifest()", + "file_type": "code", + "source_file": "apps/web/src/types/catalog.ts", + "source_location": "L48", + "_origin": "ast", + "id": "apps_web_src_types_catalog_iscatalogmanifest", + "community": 51, + "norm_label": "iscatalogmanifest()" + }, + { + "label": "category.ts", + "file_type": "code", + "source_file": "apps/web/src/types/category.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_types_category", + "community": 16, + "norm_label": "category.ts" + }, + { + "label": "CategoryId", + "file_type": "code", + "source_file": "apps/web/src/types/category.ts", + "source_location": "L7", + "_origin": "ast", + "id": "apps_web_src_types_category_categoryid", + "community": 14, + "norm_label": "categoryid" + }, + { + "label": "Cardinality", + "file_type": "code", + "source_file": "apps/web/src/types/category.ts", + "source_location": "L32", + "_origin": "ast", + "id": "apps_web_src_types_category_cardinality", + "community": 16, + "norm_label": "cardinality" + }, + { + "label": "Category", + "file_type": "code", + "source_file": "apps/web/src/types/category.ts", + "source_location": "L37", + "_origin": "ast", + "id": "apps_web_src_types_category_category", + "community": 51, + "norm_label": "category" + }, + { + "label": "CategoryIdSchema", + "file_type": "code", + "source_file": "apps/web/src/types/category.ts", + "source_location": "L50", + "_origin": "ast", + "id": "apps_web_src_types_category_categoryidschema", + "community": 16, + "norm_label": "categoryidschema" + }, + { + "label": "CardinalitySchema", + "file_type": "code", + "source_file": "apps/web/src/types/category.ts", + "source_location": "L76", + "_origin": "ast", + "id": "apps_web_src_types_category_cardinalityschema", + "community": 16, + "norm_label": "cardinalityschema" + }, + { + "label": "CategorySchema", + "file_type": "code", + "source_file": "apps/web/src/types/category.ts", + "source_location": "L86", + "_origin": "ast", + "id": "apps_web_src_types_category_categoryschema", + "community": 16, + "norm_label": "categoryschema" + }, + { + "label": "isCategoryId()", + "file_type": "code", + "source_file": "apps/web/src/types/category.ts", + "source_location": "L99", + "_origin": "ast", + "id": "apps_web_src_types_category_iscategoryid", + "community": 16, + "norm_label": "iscategoryid()" + }, + { + "label": "diagnostic.ts", + "file_type": "code", + "source_file": "apps/web/src/types/diagnostic.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_types_diagnostic", + "community": 8, + "norm_label": "diagnostic.ts" + }, + { + "label": "DiagnosticLevel", + "file_type": "code", + "source_file": "apps/web/src/types/diagnostic.ts", + "source_location": "L9", + "_origin": "ast", + "id": "apps_web_src_types_diagnostic_diagnosticlevel", + "community": 8, + "norm_label": "diagnosticlevel" + }, + { + "label": "DiagnosticCategory", + "file_type": "code", + "source_file": "apps/web/src/types/diagnostic.ts", + "source_location": "L14", + "_origin": "ast", + "id": "apps_web_src_types_diagnostic_diagnosticcategory", + "community": 8, + "norm_label": "diagnosticcategory" + }, + { + "label": "DiagnosticCTA", + "file_type": "code", + "source_file": "apps/web/src/types/diagnostic.ts", + "source_location": "L20", + "_origin": "ast", + "id": "apps_web_src_types_diagnostic_diagnosticcta", + "community": 8, + "norm_label": "diagnosticcta" + }, + { + "label": "Diagnostic", + "file_type": "code", + "source_file": "apps/web/src/types/diagnostic.ts", + "source_location": "L31", + "_origin": "ast", + "id": "apps_web_src_types_diagnostic_diagnostic", + "community": 36, + "norm_label": "diagnostic" + }, + { + "label": "DiagnosticLevelSchema", + "file_type": "code", + "source_file": "apps/web/src/types/diagnostic.ts", + "source_location": "L46", + "_origin": "ast", + "id": "apps_web_src_types_diagnostic_diagnosticlevelschema", + "community": 8, + "norm_label": "diagnosticlevelschema" + }, + { + "label": "DiagnosticCategorySchema", + "file_type": "code", + "source_file": "apps/web/src/types/diagnostic.ts", + "source_location": "L51", + "_origin": "ast", + "id": "apps_web_src_types_diagnostic_diagnosticcategoryschema", + "community": 8, + "norm_label": "diagnosticcategoryschema" + }, + { + "label": "DiagnosticCTASchema", + "file_type": "code", + "source_file": "apps/web/src/types/diagnostic.ts", + "source_location": "L56", + "_origin": "ast", + "id": "apps_web_src_types_diagnostic_diagnosticctaschema", + "community": 8, + "norm_label": "diagnosticctaschema" + }, + { + "label": "DiagnosticSchema", + "file_type": "code", + "source_file": "apps/web/src/types/diagnostic.ts", + "source_location": "L66", + "_origin": "ast", + "id": "apps_web_src_types_diagnostic_diagnosticschema", + "community": 8, + "norm_label": "diagnosticschema" + }, + { + "label": "isDiagnostic()", + "file_type": "code", + "source_file": "apps/web/src/types/diagnostic.ts", + "source_location": "L81", + "_origin": "ast", + "id": "apps_web_src_types_diagnostic_isdiagnostic", + "community": 8, + "norm_label": "isdiagnostic()" + }, + { + "label": "export.ts", + "file_type": "code", + "source_file": "apps/web/src/types/export.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_types_export", + "community": 8, + "norm_label": "export.ts" + }, + { + "label": "ExportFormat", + "file_type": "code", + "source_file": "apps/web/src/types/export.ts", + "source_location": "L6", + "_origin": "ast", + "id": "apps_web_src_types_export_exportformat", + "community": 19, + "norm_label": "exportformat" + }, + { + "label": "AppliedRecipe", + "file_type": "code", + "source_file": "apps/web/src/types/export.ts", + "source_location": "L11", + "_origin": "ast", + "id": "apps_web_src_types_export_appliedrecipe", + "community": 8, + "norm_label": "appliedrecipe" + }, + { + "label": "SkippedRecipe", + "file_type": "code", + "source_file": "apps/web/src/types/export.ts", + "source_location": "L20", + "_origin": "ast", + "id": "apps_web_src_types_export_skippedrecipe", + "community": 8, + "norm_label": "skippedrecipe" + }, + { + "label": "ExportLog", + "file_type": "code", + "source_file": "apps/web/src/types/export.ts", + "source_location": "L29", + "_origin": "ast", + "id": "apps_web_src_types_export_exportlog", + "community": 8, + "norm_label": "exportlog" + }, + { + "label": "ExportMetadata", + "file_type": "code", + "source_file": "apps/web/src/types/export.ts", + "source_location": "L38", + "_origin": "ast", + "id": "apps_web_src_types_export_exportmetadata", + "community": 8, + "norm_label": "exportmetadata" + }, + { + "label": "ExportFile", + "file_type": "code", + "source_file": "apps/web/src/types/export.ts", + "source_location": "L47", + "_origin": "ast", + "id": "apps_web_src_types_export_exportfile", + "community": 8, + "norm_label": "exportfile" + }, + { + "label": "ExportData", + "file_type": "code", + "source_file": "apps/web/src/types/export.ts", + "source_location": "L55", + "_origin": "ast", + "id": "apps_web_src_types_export_exportdata", + "community": 19, + "norm_label": "exportdata" + }, + { + "label": "AppliedRecipeSchema", + "file_type": "code", + "source_file": "apps/web/src/types/export.ts", + "source_location": "L65", + "_origin": "ast", + "id": "apps_web_src_types_export_appliedrecipeschema", + "community": 8, + "norm_label": "appliedrecipeschema" + }, + { + "label": "SkippedRecipeSchema", + "file_type": "code", + "source_file": "apps/web/src/types/export.ts", + "source_location": "L74", + "_origin": "ast", + "id": "apps_web_src_types_export_skippedrecipeschema", + "community": 8, + "norm_label": "skippedrecipeschema" + }, + { + "label": "ExportLogSchema", + "file_type": "code", + "source_file": "apps/web/src/types/export.ts", + "source_location": "L82", + "_origin": "ast", + "id": "apps_web_src_types_export_exportlogschema", + "community": 8, + "norm_label": "exportlogschema" + }, + { + "label": "ExportMetadataSchema", + "file_type": "code", + "source_file": "apps/web/src/types/export.ts", + "source_location": "L91", + "_origin": "ast", + "id": "apps_web_src_types_export_exportmetadataschema", + "community": 8, + "norm_label": "exportmetadataschema" + }, + { + "label": "ExportFileSchema", + "file_type": "code", + "source_file": "apps/web/src/types/export.ts", + "source_location": "L100", + "_origin": "ast", + "id": "apps_web_src_types_export_exportfileschema", + "community": 8, + "norm_label": "exportfileschema" + }, + { + "label": "ExportFormatSchema", + "file_type": "code", + "source_file": "apps/web/src/types/export.ts", + "source_location": "L108", + "_origin": "ast", + "id": "apps_web_src_types_export_exportformatschema", + "community": 8, + "norm_label": "exportformatschema" + }, + { + "label": "ExportDataSchema", + "file_type": "code", + "source_file": "apps/web/src/types/export.ts", + "source_location": "L113", + "_origin": "ast", + "id": "apps_web_src_types_export_exportdataschema", + "community": 8, + "norm_label": "exportdataschema" + }, + { + "label": "isExportData()", + "file_type": "code", + "source_file": "apps/web/src/types/export.ts", + "source_location": "L123", + "_origin": "ast", + "id": "apps_web_src_types_export_isexportdata", + "community": 8, + "norm_label": "isexportdata()" + }, + { + "label": "index.ts", + "file_type": "code", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_types_index", + "community": 8, + "norm_label": "index.ts" + }, + { + "label": "recipe.ts", + "file_type": "code", + "source_file": "apps/web/src/types/recipe.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_types_recipe", + "community": 8, + "norm_label": "recipe.ts" + }, + { + "label": "MergeStrategy", + "file_type": "code", + "source_file": "apps/web/src/types/recipe.ts", + "source_location": "L7", + "_origin": "ast", + "id": "apps_web_src_types_recipe_mergestrategy", + "community": 8, + "norm_label": "mergestrategy" + }, + { + "label": "PackageJsonTarget", + "file_type": "code", + "source_file": "apps/web/src/types/recipe.ts", + "source_location": "L12", + "_origin": "ast", + "id": "apps_web_src_types_recipe_packagejsontarget", + "community": 8, + "norm_label": "packagejsontarget" + }, + { + "label": "FileTarget", + "file_type": "code", + "source_file": "apps/web/src/types/recipe.ts", + "source_location": "L27", + "_origin": "ast", + "id": "apps_web_src_types_recipe_filetarget", + "community": 8, + "norm_label": "filetarget" + }, + { + "label": "EnvTarget", + "file_type": "code", + "source_file": "apps/web/src/types/recipe.ts", + "source_location": "L36", + "_origin": "ast", + "id": "apps_web_src_types_recipe_envtarget", + "community": 8, + "norm_label": "envtarget" + }, + { + "label": "ReadmeConfig", + "file_type": "code", + "source_file": "apps/web/src/types/recipe.ts", + "source_location": "L44", + "_origin": "ast", + "id": "apps_web_src_types_recipe_readmeconfig", + "community": 8, + "norm_label": "readmeconfig" + }, + { + "label": "RecipeTargets", + "file_type": "code", + "source_file": "apps/web/src/types/recipe.ts", + "source_location": "L53", + "_origin": "ast", + "id": "apps_web_src_types_recipe_recipetargets", + "community": 8, + "norm_label": "recipetargets" + }, + { + "label": "ExportRecipe", + "file_type": "code", + "source_file": "apps/web/src/types/recipe.ts", + "source_location": "L66", + "_origin": "ast", + "id": "apps_web_src_types_recipe_exportrecipe", + "community": 14, + "norm_label": "exportrecipe" + }, + { + "label": "MergeStrategySchema", + "file_type": "code", + "source_file": "apps/web/src/types/recipe.ts", + "source_location": "L77", + "_origin": "ast", + "id": "apps_web_src_types_recipe_mergestrategyschema", + "community": 8, + "norm_label": "mergestrategyschema" + }, + { + "label": "PackageJsonTargetSchema", + "file_type": "code", + "source_file": "apps/web/src/types/recipe.ts", + "source_location": "L82", + "_origin": "ast", + "id": "apps_web_src_types_recipe_packagejsontargetschema", + "community": 8, + "norm_label": "packagejsontargetschema" + }, + { + "label": "FileTargetSchema", + "file_type": "code", + "source_file": "apps/web/src/types/recipe.ts", + "source_location": "L97", + "_origin": "ast", + "id": "apps_web_src_types_recipe_filetargetschema", + "community": 8, + "norm_label": "filetargetschema" + }, + { + "label": "EnvTargetSchema", + "file_type": "code", + "source_file": "apps/web/src/types/recipe.ts", + "source_location": "L106", + "_origin": "ast", + "id": "apps_web_src_types_recipe_envtargetschema", + "community": 8, + "norm_label": "envtargetschema" + }, + { + "label": "ReadmeConfigSchema", + "file_type": "code", + "source_file": "apps/web/src/types/recipe.ts", + "source_location": "L114", + "_origin": "ast", + "id": "apps_web_src_types_recipe_readmeconfigschema", + "community": 8, + "norm_label": "readmeconfigschema" + }, + { + "label": "RecipeTargetsSchema", + "file_type": "code", + "source_file": "apps/web/src/types/recipe.ts", + "source_location": "L123", + "_origin": "ast", + "id": "apps_web_src_types_recipe_recipetargetsschema", + "community": 8, + "norm_label": "recipetargetsschema" + }, + { + "label": "ExportRecipeSchema", + "file_type": "code", + "source_file": "apps/web/src/types/recipe.ts", + "source_location": "L135", + "_origin": "ast", + "id": "apps_web_src_types_recipe_exportrecipeschema", + "community": 8, + "norm_label": "exportrecipeschema" + }, + { + "label": "rule.ts", + "file_type": "code", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_types_rule", + "community": 33, + "norm_label": "rule.ts" + }, + { + "label": "BaseRule", + "file_type": "code", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L9", + "_origin": "ast", + "id": "apps_web_src_types_rule_baserule", + "community": 33, + "norm_label": "baserule" + }, + { + "label": "MutualExclusiveCategoryRule", + "file_type": "code", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L19", + "_origin": "ast", + "id": "apps_web_src_types_rule_mutualexclusivecategoryrule", + "community": 14, + "norm_label": "mutualexclusivecategoryrule" + }, + { + "label": "HardConflictRule", + "file_type": "code", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L29", + "_origin": "ast", + "id": "apps_web_src_types_rule_hardconflictrule", + "community": 33, + "norm_label": "hardconflictrule" + }, + { + "label": "RequiresToolRule", + "file_type": "code", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L41", + "_origin": "ast", + "id": "apps_web_src_types_rule_requirestoolrule", + "community": 33, + "norm_label": "requirestoolrule" + }, + { + "label": "SynergyRule", + "file_type": "code", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L53", + "_origin": "ast", + "id": "apps_web_src_types_rule_synergyrule", + "community": 33, + "norm_label": "synergyrule" + }, + { + "label": "CapabilityCompatRule", + "file_type": "code", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L65", + "_origin": "ast", + "id": "apps_web_src_types_rule_capabilitycompatrule", + "community": 33, + "norm_label": "capabilitycompatrule" + }, + { + "label": "CategoryCoverageRule", + "file_type": "code", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L77", + "_origin": "ast", + "id": "apps_web_src_types_rule_categorycoveragerule", + "community": 14, + "norm_label": "categorycoveragerule" + }, + { + "label": "Rule", + "file_type": "code", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L86", + "_origin": "ast", + "id": "apps_web_src_types_rule_rule", + "community": 51, + "norm_label": "rule" + }, + { + "label": "BaseRuleSchema", + "file_type": "code", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L97", + "_origin": "ast", + "id": "apps_web_src_types_rule_baseruleschema", + "community": 33, + "norm_label": "baseruleschema" + }, + { + "label": "MutualExclusiveCategoryRuleSchema", + "file_type": "code", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L106", + "_origin": "ast", + "id": "apps_web_src_types_rule_mutualexclusivecategoryruleschema", + "community": 33, + "norm_label": "mutualexclusivecategoryruleschema" + }, + { + "label": "HardConflictRuleSchema", + "file_type": "code", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L115", + "_origin": "ast", + "id": "apps_web_src_types_rule_hardconflictruleschema", + "community": 33, + "norm_label": "hardconflictruleschema" + }, + { + "label": "RequiresToolRuleSchema", + "file_type": "code", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L126", + "_origin": "ast", + "id": "apps_web_src_types_rule_requirestoolruleschema", + "community": 33, + "norm_label": "requirestoolruleschema" + }, + { + "label": "SynergyRuleSchema", + "file_type": "code", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L137", + "_origin": "ast", + "id": "apps_web_src_types_rule_synergyruleschema", + "community": 33, + "norm_label": "synergyruleschema" + }, + { + "label": "CapabilityCompatRuleSchema", + "file_type": "code", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L148", + "_origin": "ast", + "id": "apps_web_src_types_rule_capabilitycompatruleschema", + "community": 33, + "norm_label": "capabilitycompatruleschema" + }, + { + "label": "CategoryCoverageRuleSchema", + "file_type": "code", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L159", + "_origin": "ast", + "id": "apps_web_src_types_rule_categorycoverageruleschema", + "community": 33, + "norm_label": "categorycoverageruleschema" + }, + { + "label": "RuleSchema", + "file_type": "code", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L168", + "_origin": "ast", + "id": "apps_web_src_types_rule_ruleschema", + "community": 33, + "norm_label": "ruleschema" + }, + { + "label": "isRule()", + "file_type": "code", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L180", + "_origin": "ast", + "id": "apps_web_src_types_rule_isrule", + "community": 33, + "norm_label": "isrule()" + }, + { + "label": "suggestion.ts", + "file_type": "code", + "source_file": "apps/web/src/types/suggestion.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_types_suggestion", + "community": 16, + "norm_label": "suggestion.ts" + }, + { + "label": "SuggestionPriority", + "file_type": "code", + "source_file": "apps/web/src/types/suggestion.ts", + "source_location": "L9", + "_origin": "ast", + "id": "apps_web_src_types_suggestion_suggestionpriority", + "community": 16, + "norm_label": "suggestionpriority" + }, + { + "label": "SuggestionAction", + "file_type": "code", + "source_file": "apps/web/src/types/suggestion.ts", + "source_location": "L14", + "_origin": "ast", + "id": "apps_web_src_types_suggestion_suggestionaction", + "community": 16, + "norm_label": "suggestionaction" + }, + { + "label": "Suggestion", + "file_type": "code", + "source_file": "apps/web/src/types/suggestion.ts", + "source_location": "L19", + "_origin": "ast", + "id": "apps_web_src_types_suggestion_suggestion", + "community": 20, + "norm_label": "suggestion" + }, + { + "label": "SuggestionPrioritySchema", + "file_type": "code", + "source_file": "apps/web/src/types/suggestion.ts", + "source_location": "L31", + "_origin": "ast", + "id": "apps_web_src_types_suggestion_suggestionpriorityschema", + "community": 16, + "norm_label": "suggestionpriorityschema" + }, + { + "label": "SuggestionActionSchema", + "file_type": "code", + "source_file": "apps/web/src/types/suggestion.ts", + "source_location": "L36", + "_origin": "ast", + "id": "apps_web_src_types_suggestion_suggestionactionschema", + "community": 16, + "norm_label": "suggestionactionschema" + }, + { + "label": "SuggestionSchema", + "file_type": "code", + "source_file": "apps/web/src/types/suggestion.ts", + "source_location": "L41", + "_origin": "ast", + "id": "apps_web_src_types_suggestion_suggestionschema", + "community": 16, + "norm_label": "suggestionschema" + }, + { + "label": "isSuggestion()", + "file_type": "code", + "source_file": "apps/web/src/types/suggestion.ts", + "source_location": "L53", + "_origin": "ast", + "id": "apps_web_src_types_suggestion_issuggestion", + "community": 16, + "norm_label": "issuggestion()" + }, + { + "label": "tool.ts", + "file_type": "code", + "source_file": "apps/web/src/types/tool.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_types_tool", + "community": 16, + "norm_label": "tool.ts" + }, + { + "label": "ToolId", + "file_type": "code", + "source_file": "apps/web/src/types/tool.ts", + "source_location": "L8", + "_origin": "ast", + "id": "apps_web_src_types_tool_toolid", + "community": 33, + "norm_label": "toolid" + }, + { + "label": "PricingModel", + "file_type": "code", + "source_file": "apps/web/src/types/tool.ts", + "source_location": "L13", + "_origin": "ast", + "id": "apps_web_src_types_tool_pricingmodel", + "community": 16, + "norm_label": "pricingmodel" + }, + { + "label": "ToolPricing", + "file_type": "code", + "source_file": "apps/web/src/types/tool.ts", + "source_location": "L18", + "_origin": "ast", + "id": "apps_web_src_types_tool_toolpricing", + "community": 16, + "norm_label": "toolpricing" + }, + { + "label": "ToolRequirements", + "file_type": "code", + "source_file": "apps/web/src/types/tool.ts", + "source_location": "L28", + "_origin": "ast", + "id": "apps_web_src_types_tool_toolrequirements", + "community": 14, + "norm_label": "toolrequirements" + }, + { + "label": "ToolSupports", + "file_type": "code", + "source_file": "apps/web/src/types/tool.ts", + "source_location": "L36", + "_origin": "ast", + "id": "apps_web_src_types_tool_toolsupports", + "community": 16, + "norm_label": "toolsupports" + }, + { + "label": "Tool", + "file_type": "code", + "source_file": "apps/web/src/types/tool.ts", + "source_location": "L45", + "_origin": "ast", + "id": "apps_web_src_types_tool_tool", + "community": 14, + "norm_label": "tool" + }, + { + "label": "PricingModelSchema", + "file_type": "code", + "source_file": "apps/web/src/types/tool.ts", + "source_location": "L77", + "_origin": "ast", + "id": "apps_web_src_types_tool_pricingmodelschema", + "community": 16, + "norm_label": "pricingmodelschema" + }, + { + "label": "ToolPricingSchema", + "file_type": "code", + "source_file": "apps/web/src/types/tool.ts", + "source_location": "L82", + "_origin": "ast", + "id": "apps_web_src_types_tool_toolpricingschema", + "community": 16, + "norm_label": "toolpricingschema" + }, + { + "label": "ToolRequirementsSchema", + "file_type": "code", + "source_file": "apps/web/src/types/tool.ts", + "source_location": "L92", + "_origin": "ast", + "id": "apps_web_src_types_tool_toolrequirementsschema", + "community": 16, + "norm_label": "toolrequirementsschema" + }, + { + "label": "ToolSupportsSchema", + "file_type": "code", + "source_file": "apps/web/src/types/tool.ts", + "source_location": "L100", + "_origin": "ast", + "id": "apps_web_src_types_tool_toolsupportsschema", + "community": 16, + "norm_label": "toolsupportsschema" + }, + { + "label": "ToolSchema", + "file_type": "code", + "source_file": "apps/web/src/types/tool.ts", + "source_location": "L109", + "_origin": "ast", + "id": "apps_web_src_types_tool_toolschema", + "community": 16, + "norm_label": "toolschema" + }, + { + "label": "isTool()", + "file_type": "code", + "source_file": "apps/web/src/types/tool.ts", + "source_location": "L131", + "_origin": "ast", + "id": "apps_web_src_types_tool_istool", + "community": 16, + "norm_label": "istool()" + }, + { + "label": "worker.ts", + "file_type": "code", + "source_file": "apps/web/src/types/worker.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_src_types_worker", + "community": 55, + "norm_label": "worker.ts" + }, + { + "label": "ScoreBreakdown", + "file_type": "code", + "source_file": "apps/web/src/types/worker.ts", + "source_location": "L9", + "_origin": "ast", + "id": "apps_web_src_types_worker_scorebreakdown", + "community": 12, + "norm_label": "scorebreakdown" + }, + { + "label": "EvaluationResult", + "file_type": "code", + "source_file": "apps/web/src/types/worker.ts", + "source_location": "L19", + "_origin": "ast", + "id": "apps_web_src_types_worker_evaluationresult", + "community": 36, + "norm_label": "evaluationresult" + }, + { + "label": "EvaluatePayload", + "file_type": "code", + "source_file": "apps/web/src/types/worker.ts", + "source_location": "L29", + "_origin": "ast", + "id": "apps_web_src_types_worker_evaluatepayload", + "community": 51, + "norm_label": "evaluatepayload" + }, + { + "label": "WorkerReq", + "file_type": "code", + "source_file": "apps/web/src/types/worker.ts", + "source_location": "L37", + "_origin": "ast", + "id": "apps_web_src_types_worker_workerreq", + "community": 12, + "norm_label": "workerreq" + }, + { + "label": "WorkerRes", + "file_type": "code", + "source_file": "apps/web/src/types/worker.ts", + "source_location": "L46", + "_origin": "ast", + "id": "apps_web_src_types_worker_workerres", + "community": 12, + "norm_label": "workerres" + }, + { + "label": "ScoreBreakdownSchema", + "file_type": "code", + "source_file": "apps/web/src/types/worker.ts", + "source_location": "L53", + "_origin": "ast", + "id": "apps_web_src_types_worker_scorebreakdownschema", + "community": 55, + "norm_label": "scorebreakdownschema" + }, + { + "label": "EvaluationResultSchema", + "file_type": "code", + "source_file": "apps/web/src/types/worker.ts", + "source_location": "L69", + "_origin": "ast", + "id": "apps_web_src_types_worker_evaluationresultschema", + "community": 55, + "norm_label": "evaluationresultschema" + }, + { + "label": "EvaluatePayloadSchema", + "file_type": "code", + "source_file": "apps/web/src/types/worker.ts", + "source_location": "L79", + "_origin": "ast", + "id": "apps_web_src_types_worker_evaluatepayloadschema", + "community": 55, + "norm_label": "evaluatepayloadschema" + }, + { + "label": "WorkerReqSchema", + "file_type": "code", + "source_file": "apps/web/src/types/worker.ts", + "source_location": "L87", + "_origin": "ast", + "id": "apps_web_src_types_worker_workerreqschema", + "community": 55, + "norm_label": "workerreqschema" + }, + { + "label": "WorkerResSchema", + "file_type": "code", + "source_file": "apps/web/src/types/worker.ts", + "source_location": "L96", + "_origin": "ast", + "id": "apps_web_src_types_worker_workerresschema", + "community": 55, + "norm_label": "workerresschema" + }, + { + "label": "isWorkerReq()", + "file_type": "code", + "source_file": "apps/web/src/types/worker.ts", + "source_location": "L112", + "_origin": "ast", + "id": "apps_web_src_types_worker_isworkerreq", + "community": 55, + "norm_label": "isworkerreq()" + }, + { + "label": "isWorkerRes()", + "file_type": "code", + "source_file": "apps/web/src/types/worker.ts", + "source_location": "L119", + "_origin": "ast", + "id": "apps_web_src_types_worker_isworkerres", + "community": 55, + "norm_label": "isworkerres()" + }, + { + "label": "tailwind.config.js", + "file_type": "code", + "source_file": "apps/web/tailwind.config.js", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_tailwind_config", + "community": 90, + "norm_label": "tailwind.config.js" + }, + { + "label": "tsconfig.json", + "file_type": "code", + "source_file": "apps/web/tsconfig.json", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_tsconfig", + "community": 43, + "norm_label": "tsconfig.json" + }, + { + "label": "extends", + "file_type": "code", + "source_file": "apps/web/tsconfig.json", + "source_location": "L2", + "_origin": "ast", + "id": "apps_web_tsconfig_extends", + "community": 43, + "norm_label": "extends" + }, + { + "label": "compilerOptions", + "file_type": "code", + "source_file": "apps/web/tsconfig.json", + "source_location": "L3", + "_origin": "ast", + "id": "apps_web_tsconfig_compileroptions", + "community": 43, + "norm_label": "compileroptions" + }, + { + "label": "lib", + "file_type": "code", + "source_file": "apps/web/tsconfig.json", + "source_location": "L4", + "_origin": "ast", + "id": "apps_web_tsconfig_compileroptions_lib", + "community": 43, + "norm_label": "lib" + }, + { + "label": "jsx", + "file_type": "code", + "source_file": "apps/web/tsconfig.json", + "source_location": "L5", + "_origin": "ast", + "id": "apps_web_tsconfig_compileroptions_jsx", + "community": 43, + "norm_label": "jsx" + }, + { + "label": "moduleResolution", + "file_type": "code", + "source_file": "apps/web/tsconfig.json", + "source_location": "L6", + "_origin": "ast", + "id": "apps_web_tsconfig_compileroptions_moduleresolution", + "community": 43, + "norm_label": "moduleresolution" + }, + { + "label": "allowImportingTsExtensions", + "file_type": "code", + "source_file": "apps/web/tsconfig.json", + "source_location": "L7", + "_origin": "ast", + "id": "apps_web_tsconfig_compileroptions_allowimportingtsextensions", + "community": 43, + "norm_label": "allowimportingtsextensions" + }, + { + "label": "noEmit", + "file_type": "code", + "source_file": "apps/web/tsconfig.json", + "source_location": "L8", + "_origin": "ast", + "id": "apps_web_tsconfig_compileroptions_noemit", + "community": 43, + "norm_label": "noemit" + }, + { + "label": "paths", + "file_type": "code", + "source_file": "apps/web/tsconfig.json", + "source_location": "L9", + "_origin": "ast", + "id": "apps_web_tsconfig_compileroptions_paths", + "community": 43, + "norm_label": "paths" + }, + { + "label": "@/*", + "file_type": "code", + "source_file": "apps/web/tsconfig.json", + "source_location": "L10", + "_origin": "ast", + "id": "apps_web_tsconfig_paths", + "community": 43, + "norm_label": "@/*" + }, + { + "label": "types", + "file_type": "code", + "source_file": "apps/web/tsconfig.json", + "source_location": "L12", + "_origin": "ast", + "id": "apps_web_tsconfig_compileroptions_types", + "community": 43, + "norm_label": "types" + }, + { + "label": "include", + "file_type": "code", + "source_file": "apps/web/tsconfig.json", + "source_location": "L14", + "_origin": "ast", + "id": "apps_web_tsconfig_include", + "community": 43, + "norm_label": "include" + }, + { + "label": "vite.config.ts", + "file_type": "code", + "source_file": "apps/web/vite.config.ts", + "source_location": "L1", + "_origin": "ast", + "id": "apps_web_vite_config", + "community": 75, + "norm_label": "vite.config.ts" + }, + { + "label": "sentryPlugins()", + "file_type": "code", + "source_file": "apps/web/vite.config.ts", + "source_location": "L11", + "_origin": "ast", + "id": "apps_web_vite_config_sentryplugins", + "community": 75, + "norm_label": "sentryplugins()" + }, + { + "label": "eslint.config.mjs", + "file_type": "code", + "source_file": "eslint.config.mjs", + "source_location": "L1", + "_origin": "ast", + "id": "eslint_config", + "community": 91, + "norm_label": "eslint.config.mjs" + }, + { + "label": "package.json", + "file_type": "code", + "source_file": "package.json", + "source_location": "L1", + "_origin": "ast", + "id": "package", + "community": 11, + "norm_label": "package.json" + }, + { + "label": "name", + "file_type": "code", + "source_file": "package.json", + "source_location": "L2", + "_origin": "ast", + "id": "package_name", + "community": 11, + "norm_label": "name" + }, + { + "label": "private", + "file_type": "code", + "source_file": "package.json", + "source_location": "L3", + "_origin": "ast", + "id": "package_private", + "community": 11, + "norm_label": "private" + }, + { + "label": "engines", + "file_type": "code", + "source_file": "package.json", + "source_location": "L4", + "_origin": "ast", + "id": "package_engines", + "community": 11, + "norm_label": "engines" + }, + { + "label": "node", + "file_type": "code", + "source_file": "package.json", + "source_location": "L5", + "_origin": "ast", + "id": "package_engines_node", + "community": 11, + "norm_label": "node" + }, + { + "label": "packageManager", + "file_type": "code", + "source_file": "package.json", + "source_location": "L7", + "_origin": "ast", + "id": "package_packagemanager", + "community": 11, + "norm_label": "packagemanager" + }, + { + "label": "scripts", + "file_type": "code", + "source_file": "package.json", + "source_location": "L8", + "_origin": "ast", + "id": "package_scripts", + "community": 11, + "norm_label": "scripts" + }, + { + "label": "dev", + "file_type": "code", + "source_file": "package.json", + "source_location": "L9", + "_origin": "ast", + "id": "package_scripts_dev", + "community": 11, + "norm_label": "dev" + }, + { + "label": "dev:api", + "file_type": "code", + "source_file": "package.json", + "source_location": "L10", + "_origin": "ast", + "id": "package_scripts_dev_api", + "community": 11, + "norm_label": "dev:api" + }, + { + "label": "dev:web", + "file_type": "code", + "source_file": "package.json", + "source_location": "L11", + "_origin": "ast", + "id": "package_scripts_dev_web", + "community": 11, + "norm_label": "dev:web" + }, + { + "label": "build", + "file_type": "code", + "source_file": "package.json", + "source_location": "L12", + "_origin": "ast", + "id": "package_scripts_build", + "community": 11, + "norm_label": "build" + }, + { + "label": "lint", + "file_type": "code", + "source_file": "package.json", + "source_location": "L13", + "_origin": "ast", + "id": "package_scripts_lint", + "community": 11, + "norm_label": "lint" + }, + { + "label": "test", + "file_type": "code", + "source_file": "package.json", + "source_location": "L14", + "_origin": "ast", + "id": "package_scripts_test", + "community": 11, + "norm_label": "test" + }, + { + "label": "test:e2e", + "file_type": "code", + "source_file": "package.json", + "source_location": "L15", + "_origin": "ast", + "id": "package_scripts_test_e2e", + "community": 11, + "norm_label": "test:e2e" + }, + { + "label": "type-check", + "file_type": "code", + "source_file": "package.json", + "source_location": "L16", + "_origin": "ast", + "id": "package_scripts_type_check", + "community": 11, + "norm_label": "type-check" + }, + { + "label": "seed", + "file_type": "code", + "source_file": "package.json", + "source_location": "L17", + "_origin": "ast", + "id": "package_scripts_seed", + "community": 11, + "norm_label": "seed" + }, + { + "label": "validate:registry", + "file_type": "code", + "source_file": "package.json", + "source_location": "L18", + "_origin": "ast", + "id": "package_scripts_validate_registry", + "community": 11, + "norm_label": "validate:registry" + }, + { + "label": "devDependencies", + "file_type": "code", + "source_file": "package.json", + "source_location": "L20", + "_origin": "ast", + "id": "package_devdependencies", + "community": 11, + "norm_label": "devdependencies" + }, + { + "label": "@eslint/js", + "file_type": "code", + "source_file": "package.json", + "source_location": "L21", + "_origin": "ast", + "id": "package_devdependencies_eslint_js", + "community": 11, + "norm_label": "@eslint/js" + }, + { + "label": "@playwright/test", + "file_type": "code", + "source_file": "package.json", + "source_location": "L22", + "_origin": "ast", + "id": "package_devdependencies_playwright_test", + "community": 11, + "norm_label": "@playwright/test" + }, + { + "label": "@types/node", + "file_type": "code", + "source_file": "package.json", + "source_location": "L23", + "_origin": "ast", + "id": "package_devdependencies_types_node", + "community": 11, + "norm_label": "@types/node" + }, + { + "label": "concurrently", + "file_type": "code", + "source_file": "package.json", + "source_location": "L24", + "_origin": "ast", + "id": "package_devdependencies_concurrently", + "community": 11, + "norm_label": "concurrently" + }, + { + "label": "dotenv-cli", + "file_type": "code", + "source_file": "package.json", + "source_location": "L25", + "_origin": "ast", + "id": "package_devdependencies_dotenv_cli", + "community": 11, + "norm_label": "dotenv-cli" + }, + { + "label": "eslint", + "file_type": "code", + "source_file": "package.json", + "source_location": "L26", + "_origin": "ast", + "id": "package_devdependencies_eslint", + "community": 11, + "norm_label": "eslint" + }, + { + "label": "prettier", + "file_type": "code", + "source_file": "package.json", + "source_location": "L27", + "_origin": "ast", + "id": "package_devdependencies_prettier", + "community": 11, + "norm_label": "prettier" + }, + { + "label": "tsx", + "file_type": "code", + "source_file": "package.json", + "source_location": "L28", + "_origin": "ast", + "id": "package_devdependencies_tsx", + "community": 11, + "norm_label": "tsx" + }, + { + "label": "typescript", + "file_type": "code", + "source_file": "package.json", + "source_location": "L29", + "_origin": "ast", + "id": "package_devdependencies_typescript", + "community": 11, + "norm_label": "typescript" + }, + { + "label": "typescript-eslint", + "file_type": "code", + "source_file": "package.json", + "source_location": "L30", + "_origin": "ast", + "id": "package_devdependencies_typescript_eslint", + "community": 11, + "norm_label": "typescript-eslint" + }, + { + "label": "vite", + "file_type": "code", + "source_file": "package.json", + "source_location": "L31", + "_origin": "ast", + "id": "package_devdependencies_vite", + "community": 11, + "norm_label": "vite" + }, + { + "label": "vitest", + "file_type": "code", + "source_file": "package.json", + "source_location": "L32", + "_origin": "ast", + "id": "package_devdependencies_vitest", + "community": 11, + "norm_label": "vitest" + }, + { + "label": "dependencies", + "file_type": "code", + "source_file": "package.json", + "source_location": "L34", + "_origin": "ast", + "id": "package_dependencies", + "community": 11, + "norm_label": "dependencies" + }, + { + "label": "@better-auth/infra", + "file_type": "code", + "source_file": "package.json", + "source_location": "L35", + "_origin": "ast", + "id": "package_dependencies_better_auth_infra", + "community": 11, + "norm_label": "@better-auth/infra" + }, + { + "label": "package.json", + "file_type": "code", + "source_file": "packages/ai/package.json", + "source_location": "L1", + "_origin": "ast", + "id": "packages_ai_package", + "community": 21, + "norm_label": "package.json" + }, + { + "label": "name", + "file_type": "code", + "source_file": "packages/ai/package.json", + "source_location": "L2", + "_origin": "ast", + "id": "packages_ai_package_name", + "community": 21, + "norm_label": "name" + }, + { + "label": "version", + "file_type": "code", + "source_file": "packages/ai/package.json", + "source_location": "L3", + "_origin": "ast", + "id": "packages_ai_package_version", + "community": 21, + "norm_label": "version" + }, + { + "label": "private", + "file_type": "code", + "source_file": "packages/ai/package.json", + "source_location": "L4", + "_origin": "ast", + "id": "packages_ai_package_private", + "community": 21, + "norm_label": "private" + }, + { + "label": "type", + "file_type": "code", + "source_file": "packages/ai/package.json", + "source_location": "L5", + "_origin": "ast", + "id": "packages_ai_package_type", + "community": 21, + "norm_label": "type" + }, + { + "label": "main", + "file_type": "code", + "source_file": "packages/ai/package.json", + "source_location": "L6", + "_origin": "ast", + "id": "packages_ai_package_main", + "community": 21, + "norm_label": "main" + }, + { + "label": "types", + "file_type": "code", + "source_file": "packages/ai/package.json", + "source_location": "L7", + "_origin": "ast", + "id": "packages_ai_package_types", + "community": 21, + "norm_label": "types" + }, + { + "label": "scripts", + "file_type": "code", + "source_file": "packages/ai/package.json", + "source_location": "L8", + "_origin": "ast", + "id": "packages_ai_package_scripts", + "community": 21, + "norm_label": "scripts" + }, + { + "label": "lint", + "file_type": "code", + "source_file": "packages/ai/package.json", + "source_location": "L9", + "_origin": "ast", + "id": "packages_ai_package_scripts_lint", + "community": 21, + "norm_label": "lint" + }, + { + "label": "type-check", + "file_type": "code", + "source_file": "packages/ai/package.json", + "source_location": "L10", + "_origin": "ast", + "id": "packages_ai_package_scripts_type_check", + "community": 21, + "norm_label": "type-check" + }, + { + "label": "test", + "file_type": "code", + "source_file": "packages/ai/package.json", + "source_location": "L11", + "_origin": "ast", + "id": "packages_ai_package_scripts_test", + "community": 21, + "norm_label": "test" + }, + { + "label": "dependencies", + "file_type": "code", + "source_file": "packages/ai/package.json", + "source_location": "L13", + "_origin": "ast", + "id": "packages_ai_package_dependencies", + "community": 21, + "norm_label": "dependencies" + }, + { + "label": "@ai-sdk/azure", + "file_type": "code", + "source_file": "packages/ai/package.json", + "source_location": "L14", + "_origin": "ast", + "id": "packages_ai_package_dependencies_ai_sdk_azure", + "community": 21, + "norm_label": "@ai-sdk/azure" + }, + { + "label": "@ai-sdk/google", + "file_type": "code", + "source_file": "packages/ai/package.json", + "source_location": "L15", + "_origin": "ast", + "id": "packages_ai_package_dependencies_ai_sdk_google", + "community": 21, + "norm_label": "@ai-sdk/google" + }, + { + "label": "@stackfast/schemas", + "file_type": "code", + "source_file": "packages/ai/package.json", + "source_location": "L16", + "_origin": "ast", + "id": "packages_ai_package_dependencies_stackfast_schemas", + "community": 21, + "norm_label": "@stackfast/schemas" + }, + { + "label": "@stackfast/shared", + "file_type": "code", + "source_file": "packages/ai/package.json", + "source_location": "L17", + "_origin": "ast", + "id": "packages_ai_package_dependencies_stackfast_shared", + "community": 21, + "norm_label": "@stackfast/shared" + }, + { + "label": "ai", + "file_type": "code", + "source_file": "packages/ai/package.json", + "source_location": "L18", + "_origin": "ast", + "id": "packages_ai_package_dependencies_ai", + "community": 21, + "norm_label": "ai" + }, + { + "label": "zod", + "file_type": "code", + "source_file": "packages/ai/package.json", + "source_location": "L19", + "_origin": "ast", + "id": "packages_ai_package_dependencies_zod", + "community": 21, + "norm_label": "zod" + }, + { + "label": "devDependencies", + "file_type": "code", + "source_file": "packages/ai/package.json", + "source_location": "L21", + "_origin": "ast", + "id": "packages_ai_package_devdependencies", + "community": 21, + "norm_label": "devdependencies" + }, + { + "label": "typescript", + "file_type": "code", + "source_file": "packages/ai/package.json", + "source_location": "L22", + "_origin": "ast", + "id": "packages_ai_package_devdependencies_typescript", + "community": 21, + "norm_label": "typescript" + }, + { + "label": "cost-estimator.ts", + "file_type": "code", + "source_file": "packages/ai/src/cost-estimator.ts", + "source_location": "L1", + "_origin": "ast", + "id": "packages_ai_src_cost_estimator", + "community": 0, + "norm_label": "cost-estimator.ts" + }, + { + "label": "STATIC_COST_MAP", + "file_type": "code", + "source_file": "packages/ai/src/cost-estimator.ts", + "source_location": "L13", + "_origin": "ast", + "id": "packages_ai_src_cost_estimator_static_cost_map", + "community": 0, + "norm_label": "static_cost_map" + }, + { + "label": "estimateCosts()", + "file_type": "code", + "source_file": "packages/ai/src/cost-estimator.ts", + "source_location": "L44", + "_origin": "ast", + "id": "packages_ai_src_cost_estimator_estimatecosts", + "community": 0, + "norm_label": "estimatecosts()" + }, + { + "label": "index.test.ts", + "file_type": "code", + "source_file": "packages/ai/src/index.test.ts", + "source_location": "L1", + "_origin": "ast", + "id": "packages_ai_src_index_test", + "community": 0, + "norm_label": "index.test.ts" + }, + { + "label": "sampleTools", + "file_type": "code", + "source_file": "packages/ai/src/index.test.ts", + "source_location": "L17", + "_origin": "ast", + "id": "packages_ai_src_index_test_sampletools", + "community": 0, + "norm_label": "sampletools" + }, + { + "label": "index.ts", + "file_type": "code", + "source_file": "packages/ai/src/index.ts", + "source_location": "L1", + "_origin": "ast", + "id": "packages_ai_src_index", + "community": 0, + "norm_label": "index.ts" + }, + { + "label": "ExplanationResult", + "file_type": "code", + "source_file": "packages/ai/src/index.ts", + "source_location": "L9", + "_origin": "ast", + "id": "packages_ai_src_index_explanationresult", + "community": 0, + "norm_label": "explanationresult" + }, + { + "label": "TradeoffResult", + "file_type": "code", + "source_file": "packages/ai/src/index.ts", + "source_location": "L20", + "_origin": "ast", + "id": "packages_ai_src_index_tradeoffresult", + "community": 0, + "norm_label": "tradeoffresult" + }, + { + "label": "WhyNotResult", + "file_type": "code", + "source_file": "packages/ai/src/index.ts", + "source_location": "L25", + "_origin": "ast", + "id": "packages_ai_src_index_whynotresult", + "community": 0, + "norm_label": "whynotresult" + }, + { + "label": "RoadmapResult", + "file_type": "code", + "source_file": "packages/ai/src/index.ts", + "source_location": "L30", + "_origin": "ast", + "id": "packages_ai_src_index_roadmapresult", + "community": 0, + "norm_label": "roadmapresult" + }, + { + "label": "BlueprintExplainer", + "file_type": "code", + "source_file": "packages/ai/src/index.ts", + "source_location": "L45", + "_origin": "ast", + "id": "packages_ai_src_index_blueprintexplainer", + "community": 0, + "norm_label": "blueprintexplainer" + }, + { + "label": ".explainStack()", + "file_type": "code", + "source_file": "packages/ai/src/index.ts", + "source_location": "L46", + "_origin": "ast", + "id": "packages_ai_src_index_blueprintexplainer_explainstack", + "community": 0, + "norm_label": ".explainstack()" + }, + { + "label": ".summarizeTradeoffs()", + "file_type": "code", + "source_file": "packages/ai/src/index.ts", + "source_location": "L47", + "_origin": "ast", + "id": "packages_ai_src_index_blueprintexplainer_summarizetradeoffs", + "community": 0, + "norm_label": ".summarizetradeoffs()" + }, + { + "label": ".explainWhyNot()", + "file_type": "code", + "source_file": "packages/ai/src/index.ts", + "source_location": "L48", + "_origin": "ast", + "id": "packages_ai_src_index_blueprintexplainer_explainwhynot", + "community": 0, + "norm_label": ".explainwhynot()" + }, + { + "label": ".generateRoadmap()", + "file_type": "code", + "source_file": "packages/ai/src/index.ts", + "source_location": "L53", + "_origin": "ast", + "id": "packages_ai_src_index_blueprintexplainer_generateroadmap", + "community": 0, + "norm_label": ".generateroadmap()" + }, + { + "label": "HeuristicExplainer", + "file_type": "code", + "source_file": "packages/ai/src/index.ts", + "source_location": "L60", + "_origin": "ast", + "id": "packages_ai_src_index_heuristicexplainer", + "community": 0, + "norm_label": "heuristicexplainer" + }, + { + "label": ".explainStack()", + "file_type": "code", + "source_file": "packages/ai/src/index.ts", + "source_location": "L61", + "_origin": "ast", + "id": "packages_ai_src_index_heuristicexplainer_explainstack", + "community": 0, + "norm_label": ".explainstack()" + }, + { + "label": ".summarizeTradeoffs()", + "file_type": "code", + "source_file": "packages/ai/src/index.ts", + "source_location": "L69", + "_origin": "ast", + "id": "packages_ai_src_index_heuristicexplainer_summarizetradeoffs", + "community": 0, + "norm_label": ".summarizetradeoffs()" + }, + { + "label": ".explainWhyNot()", + "file_type": "code", + "source_file": "packages/ai/src/index.ts", + "source_location": "L84", + "_origin": "ast", + "id": "packages_ai_src_index_heuristicexplainer_explainwhynot", + "community": 0, + "norm_label": ".explainwhynot()" + }, + { + "label": ".generateRoadmap()", + "file_type": "code", + "source_file": "packages/ai/src/index.ts", + "source_location": "L107", + "_origin": "ast", + "id": "packages_ai_src_index_heuristicexplainer_generateroadmap", + "community": 0, + "norm_label": ".generateroadmap()" + }, + { + "label": "diffToolNames()", + "file_type": "code", + "source_file": "packages/ai/src/index.ts", + "source_location": "L159", + "_origin": "ast", + "id": "packages_ai_src_index_difftoolnames", + "community": 0, + "norm_label": "difftoolnames()" + }, + { + "label": "inferBetterFor()", + "file_type": "code", + "source_file": "packages/ai/src/index.ts", + "source_location": "L179", + "_origin": "ast", + "id": "packages_ai_src_index_inferbetterfor", + "community": 0, + "norm_label": "inferbetterfor()" + }, + { + "label": "FallbackExplainer", + "file_type": "code", + "source_file": "packages/ai/src/index.ts", + "source_location": "L205", + "_origin": "ast", + "id": "packages_ai_src_index_fallbackexplainer", + "community": 0, + "norm_label": "fallbackexplainer" + }, + { + "label": ".constructor()", + "file_type": "code", + "source_file": "packages/ai/src/index.ts", + "source_location": "L206", + "_origin": "ast", + "id": "packages_ai_src_index_fallbackexplainer_constructor", + "community": 0, + "norm_label": ".constructor()" + }, + { + "label": ".explainStack()", + "file_type": "code", + "source_file": "packages/ai/src/index.ts", + "source_location": "L211", + "_origin": "ast", + "id": "packages_ai_src_index_fallbackexplainer_explainstack", + "community": 0, + "norm_label": ".explainstack()" + }, + { + "label": ".summarizeTradeoffs()", + "file_type": "code", + "source_file": "packages/ai/src/index.ts", + "source_location": "L220", + "_origin": "ast", + "id": "packages_ai_src_index_fallbackexplainer_summarizetradeoffs", + "community": 0, + "norm_label": ".summarizetradeoffs()" + }, + { + "label": ".explainWhyNot()", + "file_type": "code", + "source_file": "packages/ai/src/index.ts", + "source_location": "L229", + "_origin": "ast", + "id": "packages_ai_src_index_fallbackexplainer_explainwhynot", + "community": 0, + "norm_label": ".explainwhynot()" + }, + { + "label": ".generateRoadmap()", + "file_type": "code", + "source_file": "packages/ai/src/index.ts", + "source_location": "L242", + "_origin": "ast", + "id": "packages_ai_src_index_fallbackexplainer_generateroadmap", + "community": 0, + "norm_label": ".generateroadmap()" + }, + { + "label": "ExplainerConfig", + "file_type": "code", + "source_file": "packages/ai/src/index.ts", + "source_location": "L256", + "_origin": "ast", + "id": "packages_ai_src_index_explainerconfig", + "community": 0, + "norm_label": "explainerconfig" + }, + { + "label": "createExplainer()", + "file_type": "code", + "source_file": "packages/ai/src/index.ts", + "source_location": "L297", + "_origin": "ast", + "id": "packages_ai_src_index_createexplainer", + "community": 0, + "norm_label": "createexplainer()" + }, + { + "label": "prompts.ts", + "file_type": "code", + "source_file": "packages/ai/src/prompts.ts", + "source_location": "L1", + "_origin": "ast", + "id": "packages_ai_src_prompts", + "community": 0, + "norm_label": "prompts.ts" + }, + { + "label": "buildExplanationPrompt()", + "file_type": "code", + "source_file": "packages/ai/src/prompts.ts", + "source_location": "L35", + "_origin": "ast", + "id": "packages_ai_src_prompts_buildexplanationprompt", + "community": 0, + "norm_label": "buildexplanationprompt()" + }, + { + "label": "buildTradeoffPrompt()", + "file_type": "code", + "source_file": "packages/ai/src/prompts.ts", + "source_location": "L51", + "_origin": "ast", + "id": "packages_ai_src_prompts_buildtradeoffprompt", + "community": 0, + "norm_label": "buildtradeoffprompt()" + }, + { + "label": "buildWhyNotPrompt()", + "file_type": "code", + "source_file": "packages/ai/src/prompts.ts", + "source_location": "L75", + "_origin": "ast", + "id": "packages_ai_src_prompts_buildwhynotprompt", + "community": 0, + "norm_label": "buildwhynotprompt()" + }, + { + "label": "buildRoadmapPrompt()", + "file_type": "code", + "source_file": "packages/ai/src/prompts.ts", + "source_location": "L93", + "_origin": "ast", + "id": "packages_ai_src_prompts_buildroadmapprompt", + "community": 0, + "norm_label": "buildroadmapprompt()" + }, + { + "label": "azure-openai.ts", + "file_type": "code", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L1", + "_origin": "ast", + "id": "packages_ai_src_providers_azure_openai", + "community": 0, + "norm_label": "azure-openai.ts" + }, + { + "label": "AzureOpenAIExplainerConfig", + "file_type": "code", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L39", + "_origin": "ast", + "id": "packages_ai_src_providers_azure_openai_azureopenaiexplainerconfig", + "community": 0, + "norm_label": "azureopenaiexplainerconfig" + }, + { + "label": "AzureOpenAIExplainer", + "file_type": "code", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L54", + "_origin": "ast", + "id": "packages_ai_src_providers_azure_openai_azureopenaiexplainer", + "community": 0, + "norm_label": "azureopenaiexplainer" + }, + { + "label": ".constructor()", + "file_type": "code", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L60", + "_origin": "ast", + "id": "packages_ai_src_providers_azure_openai_azureopenaiexplainer_constructor", + "community": 0, + "norm_label": ".constructor()" + }, + { + "label": ".explainStack()", + "file_type": "code", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L71", + "_origin": "ast", + "id": "packages_ai_src_providers_azure_openai_azureopenaiexplainer_explainstack", + "community": 0, + "norm_label": ".explainstack()" + }, + { + "label": ".summarizeTradeoffs()", + "file_type": "code", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L106", + "_origin": "ast", + "id": "packages_ai_src_providers_azure_openai_azureopenaiexplainer_summarizetradeoffs", + "community": 0, + "norm_label": ".summarizetradeoffs()" + }, + { + "label": ".explainWhyNot()", + "file_type": "code", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L144", + "_origin": "ast", + "id": "packages_ai_src_providers_azure_openai_azureopenaiexplainer_explainwhynot", + "community": 0, + "norm_label": ".explainwhynot()" + }, + { + "label": ".generateRoadmap()", + "file_type": "code", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L178", + "_origin": "ast", + "id": "packages_ai_src_providers_azure_openai_azureopenaiexplainer_generateroadmap", + "community": 0, + "norm_label": ".generateroadmap()" + }, + { + "label": "stripJsonFences()", + "file_type": "code", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L218", + "_origin": "ast", + "id": "packages_ai_src_providers_azure_openai_stripjsonfences", + "community": 0, + "norm_label": "stripjsonfences()" + }, + { + "label": "gemini.ts", + "file_type": "code", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L1", + "_origin": "ast", + "id": "packages_ai_src_providers_gemini", + "community": 0, + "norm_label": "gemini.ts" + }, + { + "label": "GeminiExplainerConfig", + "file_type": "code", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L29", + "_origin": "ast", + "id": "packages_ai_src_providers_gemini_geminiexplainerconfig", + "community": 0, + "norm_label": "geminiexplainerconfig" + }, + { + "label": "GeminiExplainer", + "file_type": "code", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L36", + "_origin": "ast", + "id": "packages_ai_src_providers_gemini_geminiexplainer", + "community": 0, + "norm_label": "geminiexplainer" + }, + { + "label": ".constructor()", + "file_type": "code", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L42", + "_origin": "ast", + "id": "packages_ai_src_providers_gemini_geminiexplainer_constructor", + "community": 0, + "norm_label": ".constructor()" + }, + { + "label": ".explainStack()", + "file_type": "code", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L49", + "_origin": "ast", + "id": "packages_ai_src_providers_gemini_geminiexplainer_explainstack", + "community": 0, + "norm_label": ".explainstack()" + }, + { + "label": ".summarizeTradeoffs()", + "file_type": "code", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L84", + "_origin": "ast", + "id": "packages_ai_src_providers_gemini_geminiexplainer_summarizetradeoffs", + "community": 0, + "norm_label": ".summarizetradeoffs()" + }, + { + "label": ".explainWhyNot()", + "file_type": "code", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L117", + "_origin": "ast", + "id": "packages_ai_src_providers_gemini_geminiexplainer_explainwhynot", + "community": 0, + "norm_label": ".explainwhynot()" + }, + { + "label": ".generateRoadmap()", + "file_type": "code", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L150", + "_origin": "ast", + "id": "packages_ai_src_providers_gemini_geminiexplainer_generateroadmap", + "community": 0, + "norm_label": ".generateroadmap()" + }, + { + "label": "stripJsonFences()", + "file_type": "code", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L189", + "_origin": "ast", + "id": "packages_ai_src_providers_gemini_stripjsonfences", + "community": 0, + "norm_label": "stripjsonfences()" + }, + { + "label": "schemas.ts", + "file_type": "code", + "source_file": "packages/ai/src/schemas.ts", + "source_location": "L1", + "_origin": "ast", + "id": "packages_ai_src_schemas", + "community": 0, + "norm_label": "schemas.ts" + }, + { + "label": "AiExplanationResponseSchema", + "file_type": "code", + "source_file": "packages/ai/src/schemas.ts", + "source_location": "L11", + "_origin": "ast", + "id": "packages_ai_src_schemas_aiexplanationresponseschema", + "community": 0, + "norm_label": "aiexplanationresponseschema" + }, + { + "label": "AiExplanationResponse", + "file_type": "code", + "source_file": "packages/ai/src/schemas.ts", + "source_location": "L27", + "_origin": "ast", + "id": "packages_ai_src_schemas_aiexplanationresponse", + "community": 0, + "norm_label": "aiexplanationresponse" + }, + { + "label": "AiTradeoffResponseSchema", + "file_type": "code", + "source_file": "packages/ai/src/schemas.ts", + "source_location": "L32", + "_origin": "ast", + "id": "packages_ai_src_schemas_aitradeoffresponseschema", + "community": 0, + "norm_label": "aitradeoffresponseschema" + }, + { + "label": "AiTradeoffResponse", + "file_type": "code", + "source_file": "packages/ai/src/schemas.ts", + "source_location": "L45", + "_origin": "ast", + "id": "packages_ai_src_schemas_aitradeoffresponse", + "community": 0, + "norm_label": "aitradeoffresponse" + }, + { + "label": "AiWhyNotResponseSchema", + "file_type": "code", + "source_file": "packages/ai/src/schemas.ts", + "source_location": "L50", + "_origin": "ast", + "id": "packages_ai_src_schemas_aiwhynotresponseschema", + "community": 0, + "norm_label": "aiwhynotresponseschema" + }, + { + "label": "AiWhyNotResponse", + "file_type": "code", + "source_file": "packages/ai/src/schemas.ts", + "source_location": "L58", + "_origin": "ast", + "id": "packages_ai_src_schemas_aiwhynotresponse", + "community": 0, + "norm_label": "aiwhynotresponse" + }, + { + "label": "AiRoadmapResponseSchema", + "file_type": "code", + "source_file": "packages/ai/src/schemas.ts", + "source_location": "L63", + "_origin": "ast", + "id": "packages_ai_src_schemas_airoadmapresponseschema", + "community": 0, + "norm_label": "airoadmapresponseschema" + }, + { + "label": "AiRoadmapResponse", + "file_type": "code", + "source_file": "packages/ai/src/schemas.ts", + "source_location": "L83", + "_origin": "ast", + "id": "packages_ai_src_schemas_airoadmapresponse", + "community": 0, + "norm_label": "airoadmapresponse" + }, + { + "label": "types.ts", + "file_type": "code", + "source_file": "packages/ai/src/types.ts", + "source_location": "L1", + "_origin": "ast", + "id": "packages_ai_src_types", + "community": 0, + "norm_label": "types.ts" + }, + { + "label": "ToolCostEstimate", + "file_type": "code", + "source_file": "packages/ai/src/types.ts", + "source_location": "L10", + "_origin": "ast", + "id": "packages_ai_src_types_toolcostestimate", + "community": 0, + "norm_label": "toolcostestimate" + }, + { + "label": "BlueprintCostEstimate", + "file_type": "code", + "source_file": "packages/ai/src/types.ts", + "source_location": "L22", + "_origin": "ast", + "id": "packages_ai_src_types_blueprintcostestimate", + "community": 0, + "norm_label": "blueprintcostestimate" + }, + { + "label": "RoadmapPhase", + "file_type": "code", + "source_file": "packages/ai/src/types.ts", + "source_location": "L32", + "_origin": "ast", + "id": "packages_ai_src_types_roadmapphase", + "community": 0, + "norm_label": "roadmapphase" + }, + { + "label": "ImplementationRoadmap", + "file_type": "code", + "source_file": "packages/ai/src/types.ts", + "source_location": "L41", + "_origin": "ast", + "id": "packages_ai_src_types_implementationroadmap", + "community": 0, + "norm_label": "implementationroadmap" + }, + { + "label": "WhyNotExplanation", + "file_type": "code", + "source_file": "packages/ai/src/types.ts", + "source_location": "L49", + "_origin": "ast", + "id": "packages_ai_src_types_whynotexplanation", + "community": 0, + "norm_label": "whynotexplanation" + }, + { + "label": "EnhancedAlternative", + "file_type": "code", + "source_file": "packages/ai/src/types.ts", + "source_location": "L57", + "_origin": "ast", + "id": "packages_ai_src_types_enhancedalternative", + "community": 0, + "norm_label": "enhancedalternative" + }, + { + "label": "EnhancedBlueprintResponse", + "file_type": "code", + "source_file": "packages/ai/src/types.ts", + "source_location": "L70", + "_origin": "ast", + "id": "packages_ai_src_types_enhancedblueprintresponse", + "community": 0, + "norm_label": "enhancedblueprintresponse" + }, + { + "label": "AiProviderConfig", + "file_type": "code", + "source_file": "packages/ai/src/types.ts", + "source_location": "L93", + "_origin": "ast", + "id": "packages_ai_src_types_aiproviderconfig", + "community": 0, + "norm_label": "aiproviderconfig" + }, + { + "label": "tsconfig.json", + "file_type": "code", + "source_file": "packages/ai/tsconfig.json", + "source_location": "L1", + "_origin": "ast", + "id": "packages_ai_tsconfig", + "community": 61, + "norm_label": "tsconfig.json" + }, + { + "label": "extends", + "file_type": "code", + "source_file": "packages/ai/tsconfig.json", + "source_location": "L2", + "_origin": "ast", + "id": "packages_ai_tsconfig_extends", + "community": 61, + "norm_label": "extends" + }, + { + "label": "compilerOptions", + "file_type": "code", + "source_file": "packages/ai/tsconfig.json", + "source_location": "L3", + "_origin": "ast", + "id": "packages_ai_tsconfig_compileroptions", + "community": 61, + "norm_label": "compileroptions" + }, + { + "label": "outDir", + "file_type": "code", + "source_file": "packages/ai/tsconfig.json", + "source_location": "L4", + "_origin": "ast", + "id": "packages_ai_tsconfig_compileroptions_outdir", + "community": 61, + "norm_label": "outdir" + }, + { + "label": "rootDir", + "file_type": "code", + "source_file": "packages/ai/tsconfig.json", + "source_location": "L5", + "_origin": "ast", + "id": "packages_ai_tsconfig_compileroptions_rootdir", + "community": 61, + "norm_label": "rootdir" + }, + { + "label": "include", + "file_type": "code", + "source_file": "packages/ai/tsconfig.json", + "source_location": "L7", + "_origin": "ast", + "id": "packages_ai_tsconfig_include", + "community": 61, + "norm_label": "include" + }, + { + "label": "package.json", + "file_type": "code", + "source_file": "packages/exporter/package.json", + "source_location": "L1", + "_origin": "ast", + "id": "packages_exporter_package", + "community": 27, + "norm_label": "package.json" + }, + { + "label": "name", + "file_type": "code", + "source_file": "packages/exporter/package.json", + "source_location": "L2", + "_origin": "ast", + "id": "packages_exporter_package_name", + "community": 27, + "norm_label": "name" + }, + { + "label": "version", + "file_type": "code", + "source_file": "packages/exporter/package.json", + "source_location": "L3", + "_origin": "ast", + "id": "packages_exporter_package_version", + "community": 27, + "norm_label": "version" + }, + { + "label": "private", + "file_type": "code", + "source_file": "packages/exporter/package.json", + "source_location": "L4", + "_origin": "ast", + "id": "packages_exporter_package_private", + "community": 27, + "norm_label": "private" + }, + { + "label": "type", + "file_type": "code", + "source_file": "packages/exporter/package.json", + "source_location": "L5", + "_origin": "ast", + "id": "packages_exporter_package_type", + "community": 27, + "norm_label": "type" + }, + { + "label": "main", + "file_type": "code", + "source_file": "packages/exporter/package.json", + "source_location": "L6", + "_origin": "ast", + "id": "packages_exporter_package_main", + "community": 27, + "norm_label": "main" + }, + { + "label": "types", + "file_type": "code", + "source_file": "packages/exporter/package.json", + "source_location": "L7", + "_origin": "ast", + "id": "packages_exporter_package_types", + "community": 27, + "norm_label": "types" + }, + { + "label": "scripts", + "file_type": "code", + "source_file": "packages/exporter/package.json", + "source_location": "L8", + "_origin": "ast", + "id": "packages_exporter_package_scripts", + "community": 27, + "norm_label": "scripts" + }, + { + "label": "lint", + "file_type": "code", + "source_file": "packages/exporter/package.json", + "source_location": "L9", + "_origin": "ast", + "id": "packages_exporter_package_scripts_lint", + "community": 27, + "norm_label": "lint" + }, + { + "label": "type-check", + "file_type": "code", + "source_file": "packages/exporter/package.json", + "source_location": "L10", + "_origin": "ast", + "id": "packages_exporter_package_scripts_type_check", + "community": 27, + "norm_label": "type-check" + }, + { + "label": "test", + "file_type": "code", + "source_file": "packages/exporter/package.json", + "source_location": "L11", + "_origin": "ast", + "id": "packages_exporter_package_scripts_test", + "community": 27, + "norm_label": "test" + }, + { + "label": "dependencies", + "file_type": "code", + "source_file": "packages/exporter/package.json", + "source_location": "L13", + "_origin": "ast", + "id": "packages_exporter_package_dependencies", + "community": 27, + "norm_label": "dependencies" + }, + { + "label": "@stackfast/shared", + "file_type": "code", + "source_file": "packages/exporter/package.json", + "source_location": "L14", + "_origin": "ast", + "id": "packages_exporter_package_dependencies_stackfast_shared", + "community": 27, + "norm_label": "@stackfast/shared" + }, + { + "label": "@stackfast/schemas", + "file_type": "code", + "source_file": "packages/exporter/package.json", + "source_location": "L15", + "_origin": "ast", + "id": "packages_exporter_package_dependencies_stackfast_schemas", + "community": 27, + "norm_label": "@stackfast/schemas" + }, + { + "label": "@stackfast/registry", + "file_type": "code", + "source_file": "packages/exporter/package.json", + "source_location": "L16", + "_origin": "ast", + "id": "packages_exporter_package_dependencies_stackfast_registry", + "community": 27, + "norm_label": "@stackfast/registry" + }, + { + "label": "@stackfast/rules-engine", + "file_type": "code", + "source_file": "packages/exporter/package.json", + "source_location": "L17", + "_origin": "ast", + "id": "packages_exporter_package_dependencies_stackfast_rules_engine", + "community": 27, + "norm_label": "@stackfast/rules-engine" + }, + { + "label": "devDependencies", + "file_type": "code", + "source_file": "packages/exporter/package.json", + "source_location": "L19", + "_origin": "ast", + "id": "packages_exporter_package_devdependencies", + "community": 27, + "norm_label": "devdependencies" + }, + { + "label": "typescript", + "file_type": "code", + "source_file": "packages/exporter/package.json", + "source_location": "L20", + "_origin": "ast", + "id": "packages_exporter_package_devdependencies_typescript", + "community": 27, + "norm_label": "typescript" + }, + { + "label": "export-generator.test.ts", + "file_type": "code", + "source_file": "packages/exporter/src/export-generator.test.ts", + "source_location": "L1", + "_origin": "ast", + "id": "packages_exporter_src_export_generator_test", + "community": 6, + "norm_label": "export-generator.test.ts" + }, + { + "label": "loader", + "file_type": "code", + "source_file": "packages/exporter/src/export-generator.test.ts", + "source_location": "L7", + "_origin": "ast", + "id": "packages_exporter_src_export_generator_test_loader", + "community": 6, + "norm_label": "loader" + }, + { + "label": "export-generator.ts", + "file_type": "code", + "source_file": "packages/exporter/src/export-generator.ts", + "source_location": "L1", + "_origin": "ast", + "id": "packages_exporter_src_export_generator", + "community": 6, + "norm_label": "export-generator.ts" + }, + { + "label": "ExportError", + "file_type": "code", + "source_file": "packages/exporter/src/export-generator.ts", + "source_location": "L13", + "_origin": "ast", + "id": "packages_exporter_src_export_generator_exporterror", + "community": 5, + "norm_label": "exporterror" + }, + { + "label": ".constructor()", + "file_type": "code", + "source_file": "packages/exporter/src/export-generator.ts", + "source_location": "L14", + "_origin": "ast", + "id": "packages_exporter_src_export_generator_exporterror_constructor", + "community": 5, + "norm_label": ".constructor()" + }, + { + "label": "generateExport()", + "file_type": "code", + "source_file": "packages/exporter/src/export-generator.ts", + "source_location": "L24", + "_origin": "ast", + "id": "packages_exporter_src_export_generator_generateexport", + "community": 6, + "norm_label": "generateexport()" + }, + { + "label": "generateExportAsText()", + "file_type": "code", + "source_file": "packages/exporter/src/export-generator.ts", + "source_location": "L113", + "_origin": "ast", + "id": "packages_exporter_src_export_generator_generateexportastext", + "community": 6, + "norm_label": "generateexportastext()" + }, + { + "label": "generateExportLog()", + "file_type": "code", + "source_file": "packages/exporter/src/export-generator.ts", + "source_location": "L119", + "_origin": "ast", + "id": "packages_exporter_src_export_generator_generateexportlog", + "community": 6, + "norm_label": "generateexportlog()" + }, + { + "label": "suggestNearestCombination()", + "file_type": "code", + "source_file": "packages/exporter/src/export-generator.ts", + "source_location": "L135", + "_origin": "ast", + "id": "packages_exporter_src_export_generator_suggestnearestcombination", + "community": 6, + "norm_label": "suggestnearestcombination()" + }, + { + "label": "index.ts", + "file_type": "code", + "source_file": "packages/exporter/src/index.ts", + "source_location": "L1", + "_origin": "ast", + "id": "packages_exporter_src_index", + "community": 6, + "norm_label": "index.ts" + }, + { + "label": "recipe-matcher.ts", + "file_type": "code", + "source_file": "packages/exporter/src/recipe-matcher.ts", + "source_location": "L1", + "_origin": "ast", + "id": "packages_exporter_src_recipe_matcher", + "community": 6, + "norm_label": "recipe-matcher.ts" + }, + { + "label": "CATEGORY_ORDER", + "file_type": "code", + "source_file": "packages/exporter/src/recipe-matcher.ts", + "source_location": "L3", + "_origin": "ast", + "id": "packages_exporter_src_recipe_matcher_category_order", + "community": 6, + "norm_label": "category_order" + }, + { + "label": "sortRecipesByCategory()", + "file_type": "code", + "source_file": "packages/exporter/src/recipe-matcher.ts", + "source_location": "L16", + "_origin": "ast", + "id": "packages_exporter_src_recipe_matcher_sortrecipesbycategory", + "community": 6, + "norm_label": "sortrecipesbycategory()" + }, + { + "label": "mergeRecipeTargets()", + "file_type": "code", + "source_file": "packages/exporter/src/recipe-matcher.ts", + "source_location": "L24", + "_origin": "ast", + "id": "packages_exporter_src_recipe_matcher_mergerecipetargets", + "community": 6, + "norm_label": "mergerecipetargets()" + }, + { + "label": "mergePackageJsonTargets()", + "file_type": "code", + "source_file": "packages/exporter/src/recipe-matcher.ts", + "source_location": "L56", + "_origin": "ast", + "id": "packages_exporter_src_recipe_matcher_mergepackagejsontargets", + "community": 6, + "norm_label": "mergepackagejsontargets()" + }, + { + "label": "mergeFileTargets()", + "file_type": "code", + "source_file": "packages/exporter/src/recipe-matcher.ts", + "source_location": "L94", + "_origin": "ast", + "id": "packages_exporter_src_recipe_matcher_mergefiletargets", + "community": 6, + "norm_label": "mergefiletargets()" + }, + { + "label": "mergeEnvTargets()", + "file_type": "code", + "source_file": "packages/exporter/src/recipe-matcher.ts", + "source_location": "L109", + "_origin": "ast", + "id": "packages_exporter_src_recipe_matcher_mergeenvtargets", + "community": 6, + "norm_label": "mergeenvtargets()" + }, + { + "label": "mergePostInstallSteps()", + "file_type": "code", + "source_file": "packages/exporter/src/recipe-matcher.ts", + "source_location": "L119", + "_origin": "ast", + "id": "packages_exporter_src_recipe_matcher_mergepostinstallsteps", + "community": 6, + "norm_label": "mergepostinstallsteps()" + }, + { + "label": "mergeDocsLinks()", + "file_type": "code", + "source_file": "packages/exporter/src/recipe-matcher.ts", + "source_location": "L123", + "_origin": "ast", + "id": "packages_exporter_src_recipe_matcher_mergedocslinks", + "community": 6, + "norm_label": "mergedocslinks()" + }, + { + "label": "getRecipeCategory()", + "file_type": "code", + "source_file": "packages/exporter/src/recipe-matcher.ts", + "source_location": "L127", + "_origin": "ast", + "id": "packages_exporter_src_recipe_matcher_getrecipecategory", + "community": 6, + "norm_label": "getrecipecategory()" + }, + { + "label": "unique()", + "file_type": "code", + "source_file": "packages/exporter/src/recipe-matcher.ts", + "source_location": "L132", + "_origin": "ast", + "id": "packages_exporter_src_recipe_matcher_unique", + "community": 6, + "norm_label": "unique()" + }, + { + "label": "recipes.ts", + "file_type": "code", + "source_file": "packages/exporter/src/recipes.ts", + "source_location": "L1", + "_origin": "ast", + "id": "packages_exporter_src_recipes", + "community": 6, + "norm_label": "recipes.ts" + }, + { + "label": "nextjsBaseRecipe", + "file_type": "code", + "source_file": "packages/exporter/src/recipes.ts", + "source_location": "L3", + "_origin": "ast", + "id": "packages_exporter_src_recipes_nextjsbaserecipe", + "community": 6, + "norm_label": "nextjsbaserecipe" + }, + { + "label": "nextjsPrismaPostgresRecipe", + "file_type": "code", + "source_file": "packages/exporter/src/recipes.ts", + "source_location": "L52", + "_origin": "ast", + "id": "packages_exporter_src_recipes_nextjsprismapostgresrecipe", + "community": 6, + "norm_label": "nextjsprismapostgresrecipe" + }, + { + "label": "nextjsDrizzlePostgresRecipe", + "file_type": "code", + "source_file": "packages/exporter/src/recipes.ts", + "source_location": "L84", + "_origin": "ast", + "id": "packages_exporter_src_recipes_nextjsdrizzlepostgresrecipe", + "community": 6, + "norm_label": "nextjsdrizzlepostgresrecipe" + }, + { + "label": "nextjsClerkRecipe", + "file_type": "code", + "source_file": "packages/exporter/src/recipes.ts", + "source_location": "L117", + "_origin": "ast", + "id": "packages_exporter_src_recipes_nextjsclerkrecipe", + "community": 6, + "norm_label": "nextjsclerkrecipe" + }, + { + "label": "nextjsNextAuthPrismaRecipe", + "file_type": "code", + "source_file": "packages/exporter/src/recipes.ts", + "source_location": "L155", + "_origin": "ast", + "id": "packages_exporter_src_recipes_nextjsnextauthprismarecipe", + "community": 6, + "norm_label": "nextjsnextauthprismarecipe" + }, + { + "label": "stripeIntegrationRecipe", + "file_type": "code", + "source_file": "packages/exporter/src/recipes.ts", + "source_location": "L184", + "_origin": "ast", + "id": "packages_exporter_src_recipes_stripeintegrationrecipe", + "community": 6, + "norm_label": "stripeintegrationrecipe" + }, + { + "label": "tailwindRecipe", + "file_type": "code", + "source_file": "packages/exporter/src/recipes.ts", + "source_location": "L218", + "_origin": "ast", + "id": "packages_exporter_src_recipes_tailwindrecipe", + "community": 6, + "norm_label": "tailwindrecipe" + }, + { + "label": "vercelRecipe", + "file_type": "code", + "source_file": "packages/exporter/src/recipes.ts", + "source_location": "L244", + "_origin": "ast", + "id": "packages_exporter_src_recipes_vercelrecipe", + "community": 6, + "norm_label": "vercelrecipe" + }, + { + "label": "railwayRecipe", + "file_type": "code", + "source_file": "packages/exporter/src/recipes.ts", + "source_location": "L258", + "_origin": "ast", + "id": "packages_exporter_src_recipes_railwayrecipe", + "community": 6, + "norm_label": "railwayrecipe" + }, + { + "label": "resendRecipe", + "file_type": "code", + "source_file": "packages/exporter/src/recipes.ts", + "source_location": "L272", + "_origin": "ast", + "id": "packages_exporter_src_recipes_resendrecipe", + "community": 6, + "norm_label": "resendrecipe" + }, + { + "label": "s3StorageRecipe", + "file_type": "code", + "source_file": "packages/exporter/src/recipes.ts", + "source_location": "L292", + "_origin": "ast", + "id": "packages_exporter_src_recipes_s3storagerecipe", + "community": 6, + "norm_label": "s3storagerecipe" + }, + { + "label": "recipes", + "file_type": "code", + "source_file": "packages/exporter/src/recipes.ts", + "source_location": "L317", + "_origin": "ast", + "id": "packages_exporter_src_recipes_recipes", + "community": 6, + "norm_label": "recipes" + }, + { + "label": "getRecipeById()", + "file_type": "code", + "source_file": "packages/exporter/src/recipes.ts", + "source_location": "L331", + "_origin": "ast", + "id": "packages_exporter_src_recipes_getrecipebyid", + "community": 6, + "norm_label": "getrecipebyid()" + }, + { + "label": "getApplicableRecipes()", + "file_type": "code", + "source_file": "packages/exporter/src/recipes.ts", + "source_location": "L335", + "_origin": "ast", + "id": "packages_exporter_src_recipes_getapplicablerecipes", + "community": 6, + "norm_label": "getapplicablerecipes()" + }, + { + "label": "hasTool()", + "file_type": "code", + "source_file": "packages/exporter/src/recipes.ts", + "source_location": "L339", + "_origin": "ast", + "id": "packages_exporter_src_recipes_hastool", + "community": 6, + "norm_label": "hastool()" + }, + { + "label": "templates.ts", + "file_type": "code", + "source_file": "packages/exporter/src/templates.ts", + "source_location": "L1", + "_origin": "ast", + "id": "packages_exporter_src_templates", + "community": 6, + "norm_label": "templates.ts" + }, + { + "label": "templateGenerators", + "file_type": "code", + "source_file": "packages/exporter/src/templates.ts", + "source_location": "L3", + "_origin": "ast", + "id": "packages_exporter_src_templates_templategenerators", + "community": 6, + "norm_label": "templategenerators" + }, + { + "label": "getTemplateContent()", + "file_type": "code", + "source_file": "packages/exporter/src/templates.ts", + "source_location": "L270", + "_origin": "ast", + "id": "packages_exporter_src_templates_gettemplatecontent", + "community": 6, + "norm_label": "gettemplatecontent()" + }, + { + "label": "generatePackageJson()", + "file_type": "code", + "source_file": "packages/exporter/src/templates.ts", + "source_location": "L278", + "_origin": "ast", + "id": "packages_exporter_src_templates_generatepackagejson", + "community": 6, + "norm_label": "generatepackagejson()" + }, + { + "label": "generateEnvExample()", + "file_type": "code", + "source_file": "packages/exporter/src/templates.ts", + "source_location": "L301", + "_origin": "ast", + "id": "packages_exporter_src_templates_generateenvexample", + "community": 6, + "norm_label": "generateenvexample()" + }, + { + "label": "generateReadme()", + "file_type": "code", + "source_file": "packages/exporter/src/templates.ts", + "source_location": "L319", + "_origin": "ast", + "id": "packages_exporter_src_templates_generatereadme", + "community": 6, + "norm_label": "generatereadme()" + }, + { + "label": "generateSetupGuide()", + "file_type": "code", + "source_file": "packages/exporter/src/templates.ts", + "source_location": "L353", + "_origin": "ast", + "id": "packages_exporter_src_templates_generatesetupguide", + "community": 6, + "norm_label": "generatesetupguide()" + }, + { + "label": "generateAdr()", + "file_type": "code", + "source_file": "packages/exporter/src/templates.ts", + "source_location": "L369", + "_origin": "ast", + "id": "packages_exporter_src_templates_generateadr", + "community": 6, + "norm_label": "generateadr()" + }, + { + "label": "tsconfig.json", + "file_type": "code", + "source_file": "packages/exporter/tsconfig.json", + "source_location": "L1", + "_origin": "ast", + "id": "packages_exporter_tsconfig", + "community": 62, + "norm_label": "tsconfig.json" + }, + { + "label": "extends", + "file_type": "code", + "source_file": "packages/exporter/tsconfig.json", + "source_location": "L2", + "_origin": "ast", + "id": "packages_exporter_tsconfig_extends", + "community": 62, + "norm_label": "extends" + }, + { + "label": "compilerOptions", + "file_type": "code", + "source_file": "packages/exporter/tsconfig.json", + "source_location": "L3", + "_origin": "ast", + "id": "packages_exporter_tsconfig_compileroptions", + "community": 62, + "norm_label": "compileroptions" + }, + { + "label": "outDir", + "file_type": "code", + "source_file": "packages/exporter/tsconfig.json", + "source_location": "L4", + "_origin": "ast", + "id": "packages_exporter_tsconfig_compileroptions_outdir", + "community": 62, + "norm_label": "outdir" + }, + { + "label": "rootDir", + "file_type": "code", + "source_file": "packages/exporter/tsconfig.json", + "source_location": "L5", + "_origin": "ast", + "id": "packages_exporter_tsconfig_compileroptions_rootdir", + "community": 62, + "norm_label": "rootdir" + }, + { + "label": "include", + "file_type": "code", + "source_file": "packages/exporter/tsconfig.json", + "source_location": "L7", + "_origin": "ast", + "id": "packages_exporter_tsconfig_include", + "community": 62, + "norm_label": "include" + }, + { + "label": "package.json", + "file_type": "code", + "source_file": "packages/registry/package.json", + "source_location": "L1", + "_origin": "ast", + "id": "packages_registry_package", + "community": 23, + "norm_label": "package.json" + }, + { + "label": "name", + "file_type": "code", + "source_file": "packages/registry/package.json", + "source_location": "L2", + "_origin": "ast", + "id": "packages_registry_package_name", + "community": 23, + "norm_label": "name" + }, + { + "label": "version", + "file_type": "code", + "source_file": "packages/registry/package.json", + "source_location": "L3", + "_origin": "ast", + "id": "packages_registry_package_version", + "community": 23, + "norm_label": "version" + }, + { + "label": "private", + "file_type": "code", + "source_file": "packages/registry/package.json", + "source_location": "L4", + "_origin": "ast", + "id": "packages_registry_package_private", + "community": 23, + "norm_label": "private" + }, + { + "label": "type", + "file_type": "code", + "source_file": "packages/registry/package.json", + "source_location": "L5", + "_origin": "ast", + "id": "packages_registry_package_type", + "community": 23, + "norm_label": "type" + }, + { + "label": "main", + "file_type": "code", + "source_file": "packages/registry/package.json", + "source_location": "L6", + "_origin": "ast", + "id": "packages_registry_package_main", + "community": 23, + "norm_label": "main" + }, + { + "label": "types", + "file_type": "code", + "source_file": "packages/registry/package.json", + "source_location": "L7", + "_origin": "ast", + "id": "packages_registry_package_types", + "community": 23, + "norm_label": "types" + }, + { + "label": "scripts", + "file_type": "code", + "source_file": "packages/registry/package.json", + "source_location": "L8", + "_origin": "ast", + "id": "packages_registry_package_scripts", + "community": 23, + "norm_label": "scripts" + }, + { + "label": "lint", + "file_type": "code", + "source_file": "packages/registry/package.json", + "source_location": "L9", + "_origin": "ast", + "id": "packages_registry_package_scripts_lint", + "community": 23, + "norm_label": "lint" + }, + { + "label": "type-check", + "file_type": "code", + "source_file": "packages/registry/package.json", + "source_location": "L10", + "_origin": "ast", + "id": "packages_registry_package_scripts_type_check", + "community": 23, + "norm_label": "type-check" + }, + { + "label": "test", + "file_type": "code", + "source_file": "packages/registry/package.json", + "source_location": "L11", + "_origin": "ast", + "id": "packages_registry_package_scripts_test", + "community": 23, + "norm_label": "test" + }, + { + "label": "validate", + "file_type": "code", + "source_file": "packages/registry/package.json", + "source_location": "L12", + "_origin": "ast", + "id": "packages_registry_package_scripts_validate", + "community": 23, + "norm_label": "validate" + }, + { + "label": "dependencies", + "file_type": "code", + "source_file": "packages/registry/package.json", + "source_location": "L14", + "_origin": "ast", + "id": "packages_registry_package_dependencies", + "community": 23, + "norm_label": "dependencies" + }, + { + "label": "@stackfast/shared", + "file_type": "code", + "source_file": "packages/registry/package.json", + "source_location": "L15", + "_origin": "ast", + "id": "packages_registry_package_dependencies_stackfast_shared", + "community": 23, + "norm_label": "@stackfast/shared" + }, + { + "label": "@stackfast/schemas", + "file_type": "code", + "source_file": "packages/registry/package.json", + "source_location": "L16", + "_origin": "ast", + "id": "packages_registry_package_dependencies_stackfast_schemas", + "community": 23, + "norm_label": "@stackfast/schemas" + }, + { + "label": "zod", + "file_type": "code", + "source_file": "packages/registry/package.json", + "source_location": "L17", + "_origin": "ast", + "id": "packages_registry_package_dependencies_zod", + "community": 23, + "norm_label": "zod" + }, + { + "label": "devDependencies", + "file_type": "code", + "source_file": "packages/registry/package.json", + "source_location": "L19", + "_origin": "ast", + "id": "packages_registry_package_devdependencies", + "community": 23, + "norm_label": "devdependencies" + }, + { + "label": "tsx", + "file_type": "code", + "source_file": "packages/registry/package.json", + "source_location": "L20", + "_origin": "ast", + "id": "packages_registry_package_devdependencies_tsx", + "community": 23, + "norm_label": "tsx" + }, + { + "label": "typescript", + "file_type": "code", + "source_file": "packages/registry/package.json", + "source_location": "L21", + "_origin": "ast", + "id": "packages_registry_package_devdependencies_typescript", + "community": 23, + "norm_label": "typescript" + }, + { + "label": "manifest.json", + "file_type": "code", + "source_file": "packages/registry/src/data/v1/manifest.json", + "source_location": "L1", + "_origin": "ast", + "id": "packages_registry_src_data_v1_manifest", + "community": 57, + "norm_label": "manifest.json" + }, + { + "label": "version", + "file_type": "code", + "source_file": "packages/registry/src/data/v1/manifest.json", + "source_location": "L2", + "_origin": "ast", + "id": "packages_registry_src_data_v1_manifest_version", + "community": 57, + "norm_label": "version" + }, + { + "label": "updatedAt", + "file_type": "code", + "source_file": "packages/registry/src/data/v1/manifest.json", + "source_location": "L3", + "_origin": "ast", + "id": "packages_registry_src_data_v1_manifest_updatedat", + "community": 57, + "norm_label": "updatedat" + }, + { + "label": "files", + "file_type": "code", + "source_file": "packages/registry/src/data/v1/manifest.json", + "source_location": "L4", + "_origin": "ast", + "id": "packages_registry_src_data_v1_manifest_files", + "community": 57, + "norm_label": "files" + }, + { + "label": "categories", + "file_type": "code", + "source_file": "packages/registry/src/data/v1/manifest.json", + "source_location": "L5", + "_origin": "ast", + "id": "packages_registry_src_data_v1_manifest_files_categories", + "community": 57, + "norm_label": "categories" + }, + { + "label": "tools", + "file_type": "code", + "source_file": "packages/registry/src/data/v1/manifest.json", + "source_location": "L6", + "_origin": "ast", + "id": "packages_registry_src_data_v1_manifest_files_tools", + "community": 57, + "norm_label": "tools" + }, + { + "label": "rules", + "file_type": "code", + "source_file": "packages/registry/src/data/v1/manifest.json", + "source_location": "L7", + "_origin": "ast", + "id": "packages_registry_src_data_v1_manifest_files_rules", + "community": 57, + "norm_label": "rules" + }, + { + "label": "etag", + "file_type": "code", + "source_file": "packages/registry/src/data/v1/manifest.json", + "source_location": "L9", + "_origin": "ast", + "id": "packages_registry_src_data_v1_manifest_etag", + "community": 57, + "norm_label": "etag" + }, + { + "label": "index.test.ts", + "file_type": "code", + "source_file": "packages/registry/src/index.test.ts", + "source_location": "L1", + "_origin": "ast", + "id": "packages_registry_src_index_test", + "community": 24, + "norm_label": "index.test.ts" + }, + { + "label": "index.ts", + "file_type": "code", + "source_file": "packages/registry/src/index.ts", + "source_location": "L1", + "_origin": "ast", + "id": "packages_registry_src_index", + "community": 24, + "norm_label": "index.ts" + }, + { + "label": "ToolArraySchema", + "file_type": "code", + "source_file": "packages/registry/src/index.ts", + "source_location": "L17", + "_origin": "ast", + "id": "packages_registry_src_index_toolarrayschema", + "community": 24, + "norm_label": "toolarrayschema" + }, + { + "label": "CategoryArraySchema", + "file_type": "code", + "source_file": "packages/registry/src/index.ts", + "source_location": "L18", + "_origin": "ast", + "id": "packages_registry_src_index_categoryarrayschema", + "community": 24, + "norm_label": "categoryarrayschema" + }, + { + "label": "RuleArraySchema", + "file_type": "code", + "source_file": "packages/registry/src/index.ts", + "source_location": "L19", + "_origin": "ast", + "id": "packages_registry_src_index_rulearrayschema", + "community": 24, + "norm_label": "rulearrayschema" + }, + { + "label": "CatalogValidationError", + "file_type": "code", + "source_file": "packages/registry/src/index.ts", + "source_location": "L21", + "_origin": "ast", + "id": "packages_registry_src_index_catalogvalidationerror", + "community": 24, + "norm_label": "catalogvalidationerror" + }, + { + "label": ".constructor()", + "file_type": "code", + "source_file": "packages/registry/src/index.ts", + "source_location": "L22", + "_origin": "ast", + "id": "packages_registry_src_index_catalogvalidationerror_constructor", + "community": 24, + "norm_label": ".constructor()" + }, + { + "label": "CatalogValidationResult", + "file_type": "code", + "source_file": "packages/registry/src/index.ts", + "source_location": "L28", + "_origin": "ast", + "id": "packages_registry_src_index_catalogvalidationresult", + "community": 24, + "norm_label": "catalogvalidationresult" + }, + { + "label": "CatalogLoader", + "file_type": "code", + "source_file": "packages/registry/src/index.ts", + "source_location": "L33", + "_origin": "ast", + "id": "packages_registry_src_index_catalogloader", + "community": 25, + "norm_label": "catalogloader" + }, + { + "label": ".constructor()", + "file_type": "code", + "source_file": "packages/registry/src/index.ts", + "source_location": "L38", + "_origin": "ast", + "id": "packages_registry_src_index_catalogloader_constructor", + "community": 25, + "norm_label": ".constructor()" + }, + { + "label": ".getCatalog()", + "file_type": "code", + "source_file": "packages/registry/src/index.ts", + "source_location": "L44", + "_origin": "ast", + "id": "packages_registry_src_index_catalogloader_getcatalog", + "community": 25, + "norm_label": ".getcatalog()" + }, + { + "label": ".getTools()", + "file_type": "code", + "source_file": "packages/registry/src/index.ts", + "source_location": "L48", + "_origin": "ast", + "id": "packages_registry_src_index_catalogloader_gettools", + "community": 25, + "norm_label": ".gettools()" + }, + { + "label": ".getCategories()", + "file_type": "code", + "source_file": "packages/registry/src/index.ts", + "source_location": "L52", + "_origin": "ast", + "id": "packages_registry_src_index_catalogloader_getcategories", + "community": 25, + "norm_label": ".getcategories()" + }, + { + "label": ".getRules()", + "file_type": "code", + "source_file": "packages/registry/src/index.ts", + "source_location": "L56", + "_origin": "ast", + "id": "packages_registry_src_index_catalogloader_getrules", + "community": 25, + "norm_label": ".getrules()" + }, + { + "label": ".getTool()", + "file_type": "code", + "source_file": "packages/registry/src/index.ts", + "source_location": "L60", + "_origin": "ast", + "id": "packages_registry_src_index_catalogloader_gettool", + "community": 25, + "norm_label": ".gettool()" + }, + { + "label": ".requireTool()", + "file_type": "code", + "source_file": "packages/registry/src/index.ts", + "source_location": "L64", + "_origin": "ast", + "id": "packages_registry_src_index_catalogloader_requiretool", + "community": 25, + "norm_label": ".requiretool()" + }, + { + "label": ".getCategory()", + "file_type": "code", + "source_file": "packages/registry/src/index.ts", + "source_location": "L72", + "_origin": "ast", + "id": "packages_registry_src_index_catalogloader_getcategory", + "community": 25, + "norm_label": ".getcategory()" + }, + { + "label": ".getRule()", + "file_type": "code", + "source_file": "packages/registry/src/index.ts", + "source_location": "L76", + "_origin": "ast", + "id": "packages_registry_src_index_catalogloader_getrule", + "community": 25, + "norm_label": ".getrule()" + }, + { + "label": ".getToolsByCategory()", + "file_type": "code", + "source_file": "packages/registry/src/index.ts", + "source_location": "L80", + "_origin": "ast", + "id": "packages_registry_src_index_catalogloader_gettoolsbycategory", + "community": 25, + "norm_label": ".gettoolsbycategory()" + }, + { + "label": ".searchTools()", + "file_type": "code", + "source_file": "packages/registry/src/index.ts", + "source_location": "L84", + "_origin": "ast", + "id": "packages_registry_src_index_catalogloader_searchtools", + "community": 25, + "norm_label": ".searchtools()" + }, + { + "label": "loadDefaultCatalog()", + "file_type": "code", + "source_file": "packages/registry/src/index.ts", + "source_location": "L104", + "_origin": "ast", + "id": "packages_registry_src_index_loaddefaultcatalog", + "community": 24, + "norm_label": "loaddefaultcatalog()" + }, + { + "label": "validateDefaultCatalog()", + "file_type": "code", + "source_file": "packages/registry/src/index.ts", + "source_location": "L123", + "_origin": "ast", + "id": "packages_registry_src_index_validatedefaultcatalog", + "community": 24, + "norm_label": "validatedefaultcatalog()" + }, + { + "label": "validateCatalog()", + "file_type": "code", + "source_file": "packages/registry/src/index.ts", + "source_location": "L127", + "_origin": "ast", + "id": "packages_registry_src_index_validatecatalog", + "community": 24, + "norm_label": "validatecatalog()" + }, + { + "label": "collectDuplicateIds()", + "file_type": "code", + "source_file": "packages/registry/src/index.ts", + "source_location": "L206", + "_origin": "ast", + "id": "packages_registry_src_index_collectduplicateids", + "community": 24, + "norm_label": "collectduplicateids()" + }, + { + "label": "enrichToolMetadata()", + "file_type": "code", + "source_file": "packages/registry/src/index.ts", + "source_location": "L220", + "_origin": "ast", + "id": "packages_registry_src_index_enrichtoolmetadata", + "community": 24, + "norm_label": "enrichtoolmetadata()" + }, + { + "label": "isRecord()", + "file_type": "code", + "source_file": "packages/registry/src/index.ts", + "source_location": "L268", + "_origin": "ast", + "id": "packages_registry_src_index_isrecord", + "community": 24, + "norm_label": "isrecord()" + }, + { + "label": "uniqueStrings()", + "file_type": "code", + "source_file": "packages/registry/src/index.ts", + "source_location": "L272", + "_origin": "ast", + "id": "packages_registry_src_index_uniquestrings", + "community": 24, + "norm_label": "uniquestrings()" + }, + { + "label": "isHttpUrl()", + "file_type": "code", + "source_file": "packages/registry/src/index.ts", + "source_location": "L276", + "_origin": "ast", + "id": "packages_registry_src_index_ishttpurl", + "community": 24, + "norm_label": "ishttpurl()" + }, + { + "label": "defaultCatalog", + "file_type": "code", + "source_file": "packages/registry/src/index.ts", + "source_location": "L280", + "_origin": "ast", + "id": "packages_registry_src_index_defaultcatalog", + "community": 24, + "norm_label": "defaultcatalog" + }, + { + "label": "validate.ts", + "file_type": "code", + "source_file": "packages/registry/src/validate.ts", + "source_location": "L1", + "_origin": "ast", + "id": "packages_registry_src_validate", + "community": 24, + "norm_label": "validate.ts" + }, + { + "label": "tsconfig.json", + "file_type": "code", + "source_file": "packages/registry/tsconfig.json", + "source_location": "L1", + "_origin": "ast", + "id": "packages_registry_tsconfig", + "community": 63, + "norm_label": "tsconfig.json" + }, + { + "label": "extends", + "file_type": "code", + "source_file": "packages/registry/tsconfig.json", + "source_location": "L2", + "_origin": "ast", + "id": "packages_registry_tsconfig_extends", + "community": 63, + "norm_label": "extends" + }, + { + "label": "compilerOptions", + "file_type": "code", + "source_file": "packages/registry/tsconfig.json", + "source_location": "L3", + "_origin": "ast", + "id": "packages_registry_tsconfig_compileroptions", + "community": 63, + "norm_label": "compileroptions" + }, + { + "label": "outDir", + "file_type": "code", + "source_file": "packages/registry/tsconfig.json", + "source_location": "L4", + "_origin": "ast", + "id": "packages_registry_tsconfig_compileroptions_outdir", + "community": 63, + "norm_label": "outdir" + }, + { + "label": "rootDir", + "file_type": "code", + "source_file": "packages/registry/tsconfig.json", + "source_location": "L5", + "_origin": "ast", + "id": "packages_registry_tsconfig_compileroptions_rootdir", + "community": 63, + "norm_label": "rootdir" + }, + { + "label": "include", + "file_type": "code", + "source_file": "packages/registry/tsconfig.json", + "source_location": "L7", + "_origin": "ast", + "id": "packages_registry_tsconfig_include", + "community": 63, + "norm_label": "include" + }, + { + "label": "package.json", + "file_type": "code", + "source_file": "packages/rules-engine/package.json", + "source_location": "L1", + "_origin": "ast", + "id": "packages_rules_engine_package", + "community": 29, + "norm_label": "package.json" + }, + { + "label": "name", + "file_type": "code", + "source_file": "packages/rules-engine/package.json", + "source_location": "L2", + "_origin": "ast", + "id": "packages_rules_engine_package_name", + "community": 29, + "norm_label": "name" + }, + { + "label": "version", + "file_type": "code", + "source_file": "packages/rules-engine/package.json", + "source_location": "L3", + "_origin": "ast", + "id": "packages_rules_engine_package_version", + "community": 29, + "norm_label": "version" + }, + { + "label": "private", + "file_type": "code", + "source_file": "packages/rules-engine/package.json", + "source_location": "L4", + "_origin": "ast", + "id": "packages_rules_engine_package_private", + "community": 29, + "norm_label": "private" + }, + { + "label": "type", + "file_type": "code", + "source_file": "packages/rules-engine/package.json", + "source_location": "L5", + "_origin": "ast", + "id": "packages_rules_engine_package_type", + "community": 29, + "norm_label": "type" + }, + { + "label": "main", + "file_type": "code", + "source_file": "packages/rules-engine/package.json", + "source_location": "L6", + "_origin": "ast", + "id": "packages_rules_engine_package_main", + "community": 29, + "norm_label": "main" + }, + { + "label": "types", + "file_type": "code", + "source_file": "packages/rules-engine/package.json", + "source_location": "L7", + "_origin": "ast", + "id": "packages_rules_engine_package_types", + "community": 29, + "norm_label": "types" + }, + { + "label": "scripts", + "file_type": "code", + "source_file": "packages/rules-engine/package.json", + "source_location": "L8", + "_origin": "ast", + "id": "packages_rules_engine_package_scripts", + "community": 29, + "norm_label": "scripts" + }, + { + "label": "lint", + "file_type": "code", + "source_file": "packages/rules-engine/package.json", + "source_location": "L9", + "_origin": "ast", + "id": "packages_rules_engine_package_scripts_lint", + "community": 29, + "norm_label": "lint" + }, + { + "label": "type-check", + "file_type": "code", + "source_file": "packages/rules-engine/package.json", + "source_location": "L10", + "_origin": "ast", + "id": "packages_rules_engine_package_scripts_type_check", + "community": 29, + "norm_label": "type-check" + }, + { + "label": "test", + "file_type": "code", + "source_file": "packages/rules-engine/package.json", + "source_location": "L11", + "_origin": "ast", + "id": "packages_rules_engine_package_scripts_test", + "community": 29, + "norm_label": "test" + }, + { + "label": "dependencies", + "file_type": "code", + "source_file": "packages/rules-engine/package.json", + "source_location": "L13", + "_origin": "ast", + "id": "packages_rules_engine_package_dependencies", + "community": 29, + "norm_label": "dependencies" + }, + { + "label": "@stackfast/shared", + "file_type": "code", + "source_file": "packages/rules-engine/package.json", + "source_location": "L14", + "_origin": "ast", + "id": "packages_rules_engine_package_dependencies_stackfast_shared", + "community": 29, + "norm_label": "@stackfast/shared" + }, + { + "label": "@stackfast/schemas", + "file_type": "code", + "source_file": "packages/rules-engine/package.json", + "source_location": "L15", + "_origin": "ast", + "id": "packages_rules_engine_package_dependencies_stackfast_schemas", + "community": 29, + "norm_label": "@stackfast/schemas" + }, + { + "label": "@stackfast/registry", + "file_type": "code", + "source_file": "packages/rules-engine/package.json", + "source_location": "L16", + "_origin": "ast", + "id": "packages_rules_engine_package_dependencies_stackfast_registry", + "community": 29, + "norm_label": "@stackfast/registry" + }, + { + "label": "devDependencies", + "file_type": "code", + "source_file": "packages/rules-engine/package.json", + "source_location": "L18", + "_origin": "ast", + "id": "packages_rules_engine_package_devdependencies", + "community": 29, + "norm_label": "devdependencies" + }, + { + "label": "typescript", + "file_type": "code", + "source_file": "packages/rules-engine/package.json", + "source_location": "L19", + "_origin": "ast", + "id": "packages_rules_engine_package_devdependencies_typescript", + "community": 29, + "norm_label": "typescript" + }, + { + "label": "index.ts", + "file_type": "code", + "source_file": "packages/rules-engine/src/index.ts", + "source_location": "L1", + "_origin": "ast", + "id": "packages_rules_engine_src_index", + "community": 13, + "norm_label": "index.ts" + }, + { + "label": "rules-engine.test.ts", + "file_type": "code", + "source_file": "packages/rules-engine/src/rules-engine.test.ts", + "source_location": "L1", + "_origin": "ast", + "id": "packages_rules_engine_src_rules_engine_test", + "community": 13, + "norm_label": "rules-engine.test.ts" + }, + { + "label": "loader", + "file_type": "code", + "source_file": "packages/rules-engine/src/rules-engine.test.ts", + "source_location": "L6", + "_origin": "ast", + "id": "packages_rules_engine_src_rules_engine_test_loader", + "community": 13, + "norm_label": "loader" + }, + { + "label": "rules", + "file_type": "code", + "source_file": "packages/rules-engine/src/rules-engine.test.ts", + "source_location": "L7", + "_origin": "ast", + "id": "packages_rules_engine_src_rules_engine_test_rules", + "community": 13, + "norm_label": "rules" + }, + { + "label": "rules-engine.ts", + "file_type": "code", + "source_file": "packages/rules-engine/src/rules-engine.ts", + "source_location": "L1", + "_origin": "ast", + "id": "packages_rules_engine_src_rules_engine", + "community": 13, + "norm_label": "rules-engine.ts" + }, + { + "label": "evaluateRulesSync()", + "file_type": "code", + "source_file": "packages/rules-engine/src/rules-engine.ts", + "source_location": "L15", + "_origin": "ast", + "id": "packages_rules_engine_src_rules_engine_evaluaterulessync", + "community": 13, + "norm_label": "evaluaterulessync()" + }, + { + "label": "evaluateMutualExclusiveCategory()", + "file_type": "code", + "source_file": "packages/rules-engine/src/rules-engine.ts", + "source_location": "L53", + "_origin": "ast", + "id": "packages_rules_engine_src_rules_engine_evaluatemutualexclusivecategory", + "community": 13, + "norm_label": "evaluatemutualexclusivecategory()" + }, + { + "label": "evaluateHardConflict()", + "file_type": "code", + "source_file": "packages/rules-engine/src/rules-engine.ts", + "source_location": "L74", + "_origin": "ast", + "id": "packages_rules_engine_src_rules_engine_evaluatehardconflict", + "community": 13, + "norm_label": "evaluatehardconflict()" + }, + { + "label": "evaluateRequiresTool()", + "file_type": "code", + "source_file": "packages/rules-engine/src/rules-engine.ts", + "source_location": "L93", + "_origin": "ast", + "id": "packages_rules_engine_src_rules_engine_evaluaterequirestool", + "community": 13, + "norm_label": "evaluaterequirestool()" + }, + { + "label": "evaluateSynergy()", + "file_type": "code", + "source_file": "packages/rules-engine/src/rules-engine.ts", + "source_location": "L117", + "_origin": "ast", + "id": "packages_rules_engine_src_rules_engine_evaluatesynergy", + "community": 13, + "norm_label": "evaluatesynergy()" + }, + { + "label": "evaluateCapabilityCompat()", + "file_type": "code", + "source_file": "packages/rules-engine/src/rules-engine.ts", + "source_location": "L132", + "_origin": "ast", + "id": "packages_rules_engine_src_rules_engine_evaluatecapabilitycompat", + "community": 13, + "norm_label": "evaluatecapabilitycompat()" + }, + { + "label": "evaluateCategoryCoverage()", + "file_type": "code", + "source_file": "packages/rules-engine/src/rules-engine.ts", + "source_location": "L151", + "_origin": "ast", + "id": "packages_rules_engine_src_rules_engine_evaluatecategorycoverage", + "community": 13, + "norm_label": "evaluatecategorycoverage()" + }, + { + "label": "hasTool()", + "file_type": "code", + "source_file": "packages/rules-engine/src/rules-engine.ts", + "source_location": "L171", + "_origin": "ast", + "id": "packages_rules_engine_src_rules_engine_hastool", + "community": 13, + "norm_label": "hastool()" + }, + { + "label": "now()", + "file_type": "code", + "source_file": "packages/rules-engine/src/rules-engine.ts", + "source_location": "L175", + "_origin": "ast", + "id": "packages_rules_engine_src_rules_engine_now", + "community": 13, + "norm_label": "now()" + }, + { + "label": "score-calculator.ts", + "file_type": "code", + "source_file": "packages/rules-engine/src/score-calculator.ts", + "source_location": "L1", + "_origin": "ast", + "id": "packages_rules_engine_src_score_calculator", + "community": 13, + "norm_label": "score-calculator.ts" + }, + { + "label": "calculateScore()", + "file_type": "code", + "source_file": "packages/rules-engine/src/score-calculator.ts", + "source_location": "L3", + "_origin": "ast", + "id": "packages_rules_engine_src_score_calculator_calculatescore", + "community": 13, + "norm_label": "calculatescore()" + }, + { + "label": "applyCapabilityCompatCap()", + "file_type": "code", + "source_file": "packages/rules-engine/src/score-calculator.ts", + "source_location": "L27", + "_origin": "ast", + "id": "packages_rules_engine_src_score_calculator_applycapabilitycompatcap", + "community": 13, + "norm_label": "applycapabilitycompatcap()" + }, + { + "label": "validateScoreBreakdown()", + "file_type": "code", + "source_file": "packages/rules-engine/src/score-calculator.ts", + "source_location": "L49", + "_origin": "ast", + "id": "packages_rules_engine_src_score_calculator_validatescorebreakdown", + "community": 13, + "norm_label": "validatescorebreakdown()" + }, + { + "label": "tsconfig.json", + "file_type": "code", + "source_file": "packages/rules-engine/tsconfig.json", + "source_location": "L1", + "_origin": "ast", + "id": "packages_rules_engine_tsconfig", + "community": 64, + "norm_label": "tsconfig.json" + }, + { + "label": "extends", + "file_type": "code", + "source_file": "packages/rules-engine/tsconfig.json", + "source_location": "L2", + "_origin": "ast", + "id": "packages_rules_engine_tsconfig_extends", + "community": 64, + "norm_label": "extends" + }, + { + "label": "compilerOptions", + "file_type": "code", + "source_file": "packages/rules-engine/tsconfig.json", + "source_location": "L3", + "_origin": "ast", + "id": "packages_rules_engine_tsconfig_compileroptions", + "community": 64, + "norm_label": "compileroptions" + }, + { + "label": "outDir", + "file_type": "code", + "source_file": "packages/rules-engine/tsconfig.json", + "source_location": "L4", + "_origin": "ast", + "id": "packages_rules_engine_tsconfig_compileroptions_outdir", + "community": 64, + "norm_label": "outdir" + }, + { + "label": "rootDir", + "file_type": "code", + "source_file": "packages/rules-engine/tsconfig.json", + "source_location": "L5", + "_origin": "ast", + "id": "packages_rules_engine_tsconfig_compileroptions_rootdir", + "community": 64, + "norm_label": "rootdir" + }, + { + "label": "include", + "file_type": "code", + "source_file": "packages/rules-engine/tsconfig.json", + "source_location": "L7", + "_origin": "ast", + "id": "packages_rules_engine_tsconfig_include", + "community": 64, + "norm_label": "include" + }, + { + "label": "package.json", + "file_type": "code", + "source_file": "packages/schemas/package.json", + "source_location": "L1", + "_origin": "ast", + "id": "packages_schemas_package", + "community": 22, + "norm_label": "package.json" + }, + { + "label": "name", + "file_type": "code", + "source_file": "packages/schemas/package.json", + "source_location": "L2", + "_origin": "ast", + "id": "packages_schemas_package_name", + "community": 22, + "norm_label": "name" + }, + { + "label": "version", + "file_type": "code", + "source_file": "packages/schemas/package.json", + "source_location": "L3", + "_origin": "ast", + "id": "packages_schemas_package_version", + "community": 22, + "norm_label": "version" + }, + { + "label": "private", + "file_type": "code", + "source_file": "packages/schemas/package.json", + "source_location": "L4", + "_origin": "ast", + "id": "packages_schemas_package_private", + "community": 22, + "norm_label": "private" + }, + { + "label": "type", + "file_type": "code", + "source_file": "packages/schemas/package.json", + "source_location": "L5", + "_origin": "ast", + "id": "packages_schemas_package_type", + "community": 22, + "norm_label": "type" + }, + { + "label": "main", + "file_type": "code", + "source_file": "packages/schemas/package.json", + "source_location": "L6", + "_origin": "ast", + "id": "packages_schemas_package_main", + "community": 22, + "norm_label": "main" + }, + { + "label": "types", + "file_type": "code", + "source_file": "packages/schemas/package.json", + "source_location": "L7", + "_origin": "ast", + "id": "packages_schemas_package_types", + "community": 22, + "norm_label": "types" + }, + { + "label": "exports", + "file_type": "code", + "source_file": "packages/schemas/package.json", + "source_location": "L8", + "_origin": "ast", + "id": "packages_schemas_package_exports", + "community": 22, + "norm_label": "exports" + }, + { + "label": "./db", + "file_type": "code", + "source_file": "packages/schemas/package.json", + "source_location": "L10", + "_origin": "ast", + "id": "packages_schemas_package_exports_db", + "community": 22, + "norm_label": "./db" + }, + { + "label": "scripts", + "file_type": "code", + "source_file": "packages/schemas/package.json", + "source_location": "L12", + "_origin": "ast", + "id": "packages_schemas_package_scripts", + "community": 22, + "norm_label": "scripts" + }, + { + "label": "build", + "file_type": "code", + "source_file": "packages/schemas/package.json", + "source_location": "L13", + "_origin": "ast", + "id": "packages_schemas_package_scripts_build", + "community": 22, + "norm_label": "build" + }, + { + "label": "type-check", + "file_type": "code", + "source_file": "packages/schemas/package.json", + "source_location": "L14", + "_origin": "ast", + "id": "packages_schemas_package_scripts_type_check", + "community": 22, + "norm_label": "type-check" + }, + { + "label": "lint", + "file_type": "code", + "source_file": "packages/schemas/package.json", + "source_location": "L15", + "_origin": "ast", + "id": "packages_schemas_package_scripts_lint", + "community": 22, + "norm_label": "lint" + }, + { + "label": "dependencies", + "file_type": "code", + "source_file": "packages/schemas/package.json", + "source_location": "L17", + "_origin": "ast", + "id": "packages_schemas_package_dependencies", + "community": 22, + "norm_label": "dependencies" + }, + { + "label": "drizzle-orm", + "file_type": "code", + "source_file": "packages/schemas/package.json", + "source_location": "L18", + "_origin": "ast", + "id": "packages_schemas_package_dependencies_drizzle_orm", + "community": 22, + "norm_label": "drizzle-orm" + }, + { + "label": "drizzle-zod", + "file_type": "code", + "source_file": "packages/schemas/package.json", + "source_location": "L19", + "_origin": "ast", + "id": "packages_schemas_package_dependencies_drizzle_zod", + "community": 22, + "norm_label": "drizzle-zod" + }, + { + "label": "zod", + "file_type": "code", + "source_file": "packages/schemas/package.json", + "source_location": "L20", + "_origin": "ast", + "id": "packages_schemas_package_dependencies_zod", + "community": 22, + "norm_label": "zod" + }, + { + "label": "devDependencies", + "file_type": "code", + "source_file": "packages/schemas/package.json", + "source_location": "L22", + "_origin": "ast", + "id": "packages_schemas_package_devdependencies", + "community": 22, + "norm_label": "devdependencies" + }, + { + "label": "@types/node", + "file_type": "code", + "source_file": "packages/schemas/package.json", + "source_location": "L23", + "_origin": "ast", + "id": "packages_schemas_package_devdependencies_types_node", + "community": 22, + "norm_label": "@types/node" + }, + { + "label": "typescript", + "file_type": "code", + "source_file": "packages/schemas/package.json", + "source_location": "L24", + "_origin": "ast", + "id": "packages_schemas_package_devdependencies_typescript", + "community": 22, + "norm_label": "typescript" + }, + { + "label": "db.ts", + "file_type": "code", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L1", + "_origin": "ast", + "id": "packages_schemas_src_db", + "community": 9, + "norm_label": "db.ts" + }, + { + "label": "user", + "file_type": "code", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L14", + "_origin": "ast", + "id": "packages_schemas_src_db_user", + "community": 9, + "norm_label": "user" + }, + { + "label": "session", + "file_type": "code", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L24", + "_origin": "ast", + "id": "packages_schemas_src_db_session", + "community": 9, + "norm_label": "session" + }, + { + "label": "account", + "file_type": "code", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L41", + "_origin": "ast", + "id": "packages_schemas_src_db_account", + "community": 9, + "norm_label": "account" + }, + { + "label": "verification", + "file_type": "code", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L63", + "_origin": "ast", + "id": "packages_schemas_src_db_verification", + "community": 9, + "norm_label": "verification" + }, + { + "label": "toolCategories", + "file_type": "code", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L80", + "_origin": "ast", + "id": "packages_schemas_src_db_toolcategories", + "community": 9, + "norm_label": "toolcategories" + }, + { + "label": "tools", + "file_type": "code", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L87", + "_origin": "ast", + "id": "packages_schemas_src_db_tools", + "community": 9, + "norm_label": "tools" + }, + { + "label": "compatibilities", + "file_type": "code", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L107", + "_origin": "ast", + "id": "packages_schemas_src_db_compatibilities", + "community": 9, + "norm_label": "compatibilities" + }, + { + "label": "stackTemplates", + "file_type": "code", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L120", + "_origin": "ast", + "id": "packages_schemas_src_db_stacktemplates", + "community": 9, + "norm_label": "stacktemplates" + }, + { + "label": "toolCategoryJunction", + "file_type": "code", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L136", + "_origin": "ast", + "id": "packages_schemas_src_db_toolcategoryjunction", + "community": 9, + "norm_label": "toolcategoryjunction" + }, + { + "label": "stackRules", + "file_type": "code", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L143", + "_origin": "ast", + "id": "packages_schemas_src_db_stackrules", + "community": 9, + "norm_label": "stackrules" + }, + { + "label": "migrationPaths", + "file_type": "code", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L154", + "_origin": "ast", + "id": "packages_schemas_src_db_migrationpaths", + "community": 9, + "norm_label": "migrationpaths" + }, + { + "label": "toolCategoriesRelations", + "file_type": "code", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L165", + "_origin": "ast", + "id": "packages_schemas_src_db_toolcategoriesrelations", + "community": 9, + "norm_label": "toolcategoriesrelations" + }, + { + "label": "toolsRelations", + "file_type": "code", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L170", + "_origin": "ast", + "id": "packages_schemas_src_db_toolsrelations", + "community": 9, + "norm_label": "toolsrelations" + }, + { + "label": "toolCategoryJunctionRelations", + "file_type": "code", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L180", + "_origin": "ast", + "id": "packages_schemas_src_db_toolcategoryjunctionrelations", + "community": 9, + "norm_label": "toolcategoryjunctionrelations" + }, + { + "label": "compatibilitiesRelations", + "file_type": "code", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L191", + "_origin": "ast", + "id": "packages_schemas_src_db_compatibilitiesrelations", + "community": 9, + "norm_label": "compatibilitiesrelations" + }, + { + "label": "insertToolCategorySchema", + "file_type": "code", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L204", + "_origin": "ast", + "id": "packages_schemas_src_db_inserttoolcategoryschema", + "community": 9, + "norm_label": "inserttoolcategoryschema" + }, + { + "label": "insertToolSchema", + "file_type": "code", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L205", + "_origin": "ast", + "id": "packages_schemas_src_db_inserttoolschema", + "community": 9, + "norm_label": "inserttoolschema" + }, + { + "label": "insertCompatibilitySchema", + "file_type": "code", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L206", + "_origin": "ast", + "id": "packages_schemas_src_db_insertcompatibilityschema", + "community": 9, + "norm_label": "insertcompatibilityschema" + }, + { + "label": "insertStackTemplateSchema", + "file_type": "code", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L207", + "_origin": "ast", + "id": "packages_schemas_src_db_insertstacktemplateschema", + "community": 9, + "norm_label": "insertstacktemplateschema" + }, + { + "label": "insertStackRuleSchema", + "file_type": "code", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L208", + "_origin": "ast", + "id": "packages_schemas_src_db_insertstackruleschema", + "community": 9, + "norm_label": "insertstackruleschema" + }, + { + "label": "insertMigrationPathSchema", + "file_type": "code", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L209", + "_origin": "ast", + "id": "packages_schemas_src_db_insertmigrationpathschema", + "community": 9, + "norm_label": "insertmigrationpathschema" + }, + { + "label": "insertToolCategoryJunctionSchema", + "file_type": "code", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L210", + "_origin": "ast", + "id": "packages_schemas_src_db_inserttoolcategoryjunctionschema", + "community": 9, + "norm_label": "inserttoolcategoryjunctionschema" + }, + { + "label": "ToolCategoryRecord", + "file_type": "code", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L212", + "_origin": "ast", + "id": "packages_schemas_src_db_toolcategoryrecord", + "community": 9, + "norm_label": "toolcategoryrecord" + }, + { + "label": "ToolRecord", + "file_type": "code", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L213", + "_origin": "ast", + "id": "packages_schemas_src_db_toolrecord", + "community": 9, + "norm_label": "toolrecord" + }, + { + "label": "CompatibilityRecord", + "file_type": "code", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L214", + "_origin": "ast", + "id": "packages_schemas_src_db_compatibilityrecord", + "community": 9, + "norm_label": "compatibilityrecord" + }, + { + "label": "StackTemplateRecord", + "file_type": "code", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L215", + "_origin": "ast", + "id": "packages_schemas_src_db_stacktemplaterecord", + "community": 9, + "norm_label": "stacktemplaterecord" + }, + { + "label": "StackRuleRecord", + "file_type": "code", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L216", + "_origin": "ast", + "id": "packages_schemas_src_db_stackrulerecord", + "community": 9, + "norm_label": "stackrulerecord" + }, + { + "label": "MigrationPathRecord", + "file_type": "code", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L217", + "_origin": "ast", + "id": "packages_schemas_src_db_migrationpathrecord", + "community": 9, + "norm_label": "migrationpathrecord" + }, + { + "label": "ToolCategoryJunctionRecord", + "file_type": "code", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L218", + "_origin": "ast", + "id": "packages_schemas_src_db_toolcategoryjunctionrecord", + "community": 9, + "norm_label": "toolcategoryjunctionrecord" + }, + { + "label": "InsertToolCategory", + "file_type": "code", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L220", + "_origin": "ast", + "id": "packages_schemas_src_db_inserttoolcategory", + "community": 9, + "norm_label": "inserttoolcategory" + }, + { + "label": "InsertTool", + "file_type": "code", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L221", + "_origin": "ast", + "id": "packages_schemas_src_db_inserttool", + "community": 9, + "norm_label": "inserttool" + }, + { + "label": "InsertCompatibility", + "file_type": "code", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L222", + "_origin": "ast", + "id": "packages_schemas_src_db_insertcompatibility", + "community": 9, + "norm_label": "insertcompatibility" + }, + { + "label": "InsertStackTemplate", + "file_type": "code", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L223", + "_origin": "ast", + "id": "packages_schemas_src_db_insertstacktemplate", + "community": 9, + "norm_label": "insertstacktemplate" + }, + { + "label": "InsertStackRule", + "file_type": "code", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L224", + "_origin": "ast", + "id": "packages_schemas_src_db_insertstackrule", + "community": 9, + "norm_label": "insertstackrule" + }, + { + "label": "InsertMigrationPath", + "file_type": "code", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L225", + "_origin": "ast", + "id": "packages_schemas_src_db_insertmigrationpath", + "community": 9, + "norm_label": "insertmigrationpath" + }, + { + "label": "InsertToolCategoryJunction", + "file_type": "code", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L226", + "_origin": "ast", + "id": "packages_schemas_src_db_inserttoolcategoryjunction", + "community": 9, + "norm_label": "inserttoolcategoryjunction" + }, + { + "label": "ToolWithCategory", + "file_type": "code", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L228", + "_origin": "ast", + "id": "packages_schemas_src_db_toolwithcategory", + "community": 9, + "norm_label": "toolwithcategory" + }, + { + "label": "CompatibilityMatrix", + "file_type": "code", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L232", + "_origin": "ast", + "id": "packages_schemas_src_db_compatibilitymatrix", + "community": 9, + "norm_label": "compatibilitymatrix" + }, + { + "label": "domain.ts", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L1", + "_origin": "ast", + "id": "packages_schemas_src_domain", + "community": 1, + "norm_label": "domain.ts" + }, + { + "label": "CategoryIdSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L3", + "_origin": "ast", + "id": "packages_schemas_src_domain_categoryidschema", + "community": 1, + "norm_label": "categoryidschema" + }, + { + "label": "CategoryId", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L26", + "_origin": "ast", + "id": "packages_schemas_src_domain_categoryid", + "community": 50, + "norm_label": "categoryid" + }, + { + "label": "CardinalitySchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L28", + "_origin": "ast", + "id": "packages_schemas_src_domain_cardinalityschema", + "community": 1, + "norm_label": "cardinalityschema" + }, + { + "label": "Cardinality", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L35", + "_origin": "ast", + "id": "packages_schemas_src_domain_cardinality", + "community": 1, + "norm_label": "cardinality" + }, + { + "label": "CategorySchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L37", + "_origin": "ast", + "id": "packages_schemas_src_domain_categoryschema", + "community": 39, + "norm_label": "categoryschema" + }, + { + "label": "Category", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L47", + "_origin": "ast", + "id": "packages_schemas_src_domain_category", + "community": 25, + "norm_label": "category" + }, + { + "label": "PricingModelSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L49", + "_origin": "ast", + "id": "packages_schemas_src_domain_pricingmodelschema", + "community": 1, + "norm_label": "pricingmodelschema" + }, + { + "label": "PricingModel", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L50", + "_origin": "ast", + "id": "packages_schemas_src_domain_pricingmodel", + "community": 1, + "norm_label": "pricingmodel" + }, + { + "label": "ToolPricingSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L52", + "_origin": "ast", + "id": "packages_schemas_src_domain_toolpricingschema", + "community": 1, + "norm_label": "toolpricingschema" + }, + { + "label": "ToolPricing", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L59", + "_origin": "ast", + "id": "packages_schemas_src_domain_toolpricing", + "community": 1, + "norm_label": "toolpricing" + }, + { + "label": "ToolRequirementsSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L61", + "_origin": "ast", + "id": "packages_schemas_src_domain_toolrequirementsschema", + "community": 1, + "norm_label": "toolrequirementsschema" + }, + { + "label": "ToolRequirements", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L66", + "_origin": "ast", + "id": "packages_schemas_src_domain_toolrequirements", + "community": 1, + "norm_label": "toolrequirements" + }, + { + "label": "ToolSupportsSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L68", + "_origin": "ast", + "id": "packages_schemas_src_domain_toolsupportsschema", + "community": 1, + "norm_label": "toolsupportsschema" + }, + { + "label": "ToolSupports", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L74", + "_origin": "ast", + "id": "packages_schemas_src_domain_toolsupports", + "community": 1, + "norm_label": "toolsupports" + }, + { + "label": "ToolSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L76", + "_origin": "ast", + "id": "packages_schemas_src_domain_toolschema", + "community": 39, + "norm_label": "toolschema" + }, + { + "label": "Tool", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L100", + "_origin": "ast", + "id": "packages_schemas_src_domain_tool", + "community": 0, + "norm_label": "tool" + }, + { + "label": "ToolId", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L101", + "_origin": "ast", + "id": "packages_schemas_src_domain_toolid", + "community": 1, + "norm_label": "toolid" + }, + { + "label": "BaseRuleSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L103", + "_origin": "ast", + "id": "packages_schemas_src_domain_baseruleschema", + "community": 1, + "norm_label": "baseruleschema" + }, + { + "label": "MutualExclusiveCategoryRuleSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L109", + "_origin": "ast", + "id": "packages_schemas_src_domain_mutualexclusivecategoryruleschema", + "community": 1, + "norm_label": "mutualexclusivecategoryruleschema" + }, + { + "label": "HardConflictRuleSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L115", + "_origin": "ast", + "id": "packages_schemas_src_domain_hardconflictruleschema", + "community": 1, + "norm_label": "hardconflictruleschema" + }, + { + "label": "RequiresToolRuleSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L123", + "_origin": "ast", + "id": "packages_schemas_src_domain_requirestoolruleschema", + "community": 1, + "norm_label": "requirestoolruleschema" + }, + { + "label": "SynergyRuleSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L131", + "_origin": "ast", + "id": "packages_schemas_src_domain_synergyruleschema", + "community": 1, + "norm_label": "synergyruleschema" + }, + { + "label": "CapabilityCompatRuleSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L139", + "_origin": "ast", + "id": "packages_schemas_src_domain_capabilitycompatruleschema", + "community": 1, + "norm_label": "capabilitycompatruleschema" + }, + { + "label": "CategoryCoverageRuleSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L147", + "_origin": "ast", + "id": "packages_schemas_src_domain_categorycoverageruleschema", + "community": 1, + "norm_label": "categorycoverageruleschema" + }, + { + "label": "RuleSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L153", + "_origin": "ast", + "id": "packages_schemas_src_domain_ruleschema", + "community": 39, + "norm_label": "ruleschema" + }, + { + "label": "Rule", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L162", + "_origin": "ast", + "id": "packages_schemas_src_domain_rule", + "community": 25, + "norm_label": "rule" + }, + { + "label": "MutualExclusiveCategoryRule", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L163", + "_origin": "ast", + "id": "packages_schemas_src_domain_mutualexclusivecategoryrule", + "community": 13, + "norm_label": "mutualexclusivecategoryrule" + }, + { + "label": "HardConflictRule", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L164", + "_origin": "ast", + "id": "packages_schemas_src_domain_hardconflictrule", + "community": 13, + "norm_label": "hardconflictrule" + }, + { + "label": "RequiresToolRule", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L165", + "_origin": "ast", + "id": "packages_schemas_src_domain_requirestoolrule", + "community": 13, + "norm_label": "requirestoolrule" + }, + { + "label": "SynergyRule", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L166", + "_origin": "ast", + "id": "packages_schemas_src_domain_synergyrule", + "community": 13, + "norm_label": "synergyrule" + }, + { + "label": "CapabilityCompatRule", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L167", + "_origin": "ast", + "id": "packages_schemas_src_domain_capabilitycompatrule", + "community": 13, + "norm_label": "capabilitycompatrule" + }, + { + "label": "CategoryCoverageRule", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L168", + "_origin": "ast", + "id": "packages_schemas_src_domain_categorycoveragerule", + "community": 13, + "norm_label": "categorycoveragerule" + }, + { + "label": "DiagnosticLevelSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L170", + "_origin": "ast", + "id": "packages_schemas_src_domain_diagnosticlevelschema", + "community": 1, + "norm_label": "diagnosticlevelschema" + }, + { + "label": "DiagnosticLevel", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L171", + "_origin": "ast", + "id": "packages_schemas_src_domain_diagnosticlevel", + "community": 1, + "norm_label": "diagnosticlevel" + }, + { + "label": "DiagnosticCategorySchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L173", + "_origin": "ast", + "id": "packages_schemas_src_domain_diagnosticcategoryschema", + "community": 1, + "norm_label": "diagnosticcategoryschema" + }, + { + "label": "DiagnosticCategory", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L179", + "_origin": "ast", + "id": "packages_schemas_src_domain_diagnosticcategory", + "community": 1, + "norm_label": "diagnosticcategory" + }, + { + "label": "DiagnosticCTASchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L181", + "_origin": "ast", + "id": "packages_schemas_src_domain_diagnosticctaschema", + "community": 1, + "norm_label": "diagnosticctaschema" + }, + { + "label": "DiagnosticCTA", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L188", + "_origin": "ast", + "id": "packages_schemas_src_domain_diagnosticcta", + "community": 1, + "norm_label": "diagnosticcta" + }, + { + "label": "DiagnosticSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L190", + "_origin": "ast", + "id": "packages_schemas_src_domain_diagnosticschema", + "community": 1, + "norm_label": "diagnosticschema" + }, + { + "label": "Diagnostic", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L202", + "_origin": "ast", + "id": "packages_schemas_src_domain_diagnostic", + "community": 0, + "norm_label": "diagnostic" + }, + { + "label": "ScoreBreakdownSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L204", + "_origin": "ast", + "id": "packages_schemas_src_domain_scorebreakdownschema", + "community": 1, + "norm_label": "scorebreakdownschema" + }, + { + "label": "ScoreBreakdown", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L211", + "_origin": "ast", + "id": "packages_schemas_src_domain_scorebreakdown", + "community": 13, + "norm_label": "scorebreakdown" + }, + { + "label": "EvaluationResultSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L213", + "_origin": "ast", + "id": "packages_schemas_src_domain_evaluationresultschema", + "community": 1, + "norm_label": "evaluationresultschema" + }, + { + "label": "EvaluationResult", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L220", + "_origin": "ast", + "id": "packages_schemas_src_domain_evaluationresult", + "community": 13, + "norm_label": "evaluationresult" + }, + { + "label": "CatalogManifestSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L222", + "_origin": "ast", + "id": "packages_schemas_src_domain_catalogmanifestschema", + "community": 24, + "norm_label": "catalogmanifestschema" + }, + { + "label": "CatalogManifest", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L233", + "_origin": "ast", + "id": "packages_schemas_src_domain_catalogmanifest", + "community": 1, + "norm_label": "catalogmanifest" + }, + { + "label": "CatalogSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L235", + "_origin": "ast", + "id": "packages_schemas_src_domain_catalogschema", + "community": 1, + "norm_label": "catalogschema" + }, + { + "label": "Catalog", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L244", + "_origin": "ast", + "id": "packages_schemas_src_domain_catalog", + "community": 25, + "norm_label": "catalog" + }, + { + "label": "MergeStrategySchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L246", + "_origin": "ast", + "id": "packages_schemas_src_domain_mergestrategyschema", + "community": 1, + "norm_label": "mergestrategyschema" + }, + { + "label": "MergeStrategy", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L247", + "_origin": "ast", + "id": "packages_schemas_src_domain_mergestrategy", + "community": 1, + "norm_label": "mergestrategy" + }, + { + "label": "PackageJsonTargetSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L249", + "_origin": "ast", + "id": "packages_schemas_src_domain_packagejsontargetschema", + "community": 1, + "norm_label": "packagejsontargetschema" + }, + { + "label": "PackageJsonTarget", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L257", + "_origin": "ast", + "id": "packages_schemas_src_domain_packagejsontarget", + "community": 1, + "norm_label": "packagejsontarget" + }, + { + "label": "FileTargetSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L261", + "_origin": "ast", + "id": "packages_schemas_src_domain_filetargetschema", + "community": 1, + "norm_label": "filetargetschema" + }, + { + "label": "FileTarget", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L267", + "_origin": "ast", + "id": "packages_schemas_src_domain_filetarget", + "community": 6, + "norm_label": "filetarget" + }, + { + "label": "EnvTargetSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L269", + "_origin": "ast", + "id": "packages_schemas_src_domain_envtargetschema", + "community": 1, + "norm_label": "envtargetschema" + }, + { + "label": "EnvTarget", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L274", + "_origin": "ast", + "id": "packages_schemas_src_domain_envtarget", + "community": 1, + "norm_label": "envtarget" + }, + { + "label": "ReadmeConfigSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L276", + "_origin": "ast", + "id": "packages_schemas_src_domain_readmeconfigschema", + "community": 1, + "norm_label": "readmeconfigschema" + }, + { + "label": "ReadmeConfig", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L282", + "_origin": "ast", + "id": "packages_schemas_src_domain_readmeconfig", + "community": 1, + "norm_label": "readmeconfig" + }, + { + "label": "RecipeTargetsSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L284", + "_origin": "ast", + "id": "packages_schemas_src_domain_recipetargetsschema", + "community": 1, + "norm_label": "recipetargetsschema" + }, + { + "label": "RecipeTargets", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L293", + "_origin": "ast", + "id": "packages_schemas_src_domain_recipetargets", + "community": 6, + "norm_label": "recipetargets" + }, + { + "label": "ExportRecipe", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L297", + "_origin": "ast", + "id": "packages_schemas_src_domain_exportrecipe", + "community": 6, + "norm_label": "exportrecipe" + }, + { + "label": "ExportRecipeMetadataSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L305", + "_origin": "ast", + "id": "packages_schemas_src_domain_exportrecipemetadataschema", + "community": 6, + "norm_label": "exportrecipemetadataschema" + }, + { + "label": "ExportFormatSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L312", + "_origin": "ast", + "id": "packages_schemas_src_domain_exportformatschema", + "community": 1, + "norm_label": "exportformatschema" + }, + { + "label": "ExportFormat", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L313", + "_origin": "ast", + "id": "packages_schemas_src_domain_exportformat", + "community": 18, + "norm_label": "exportformat" + }, + { + "label": "AppliedRecipeSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L315", + "_origin": "ast", + "id": "packages_schemas_src_domain_appliedrecipeschema", + "community": 1, + "norm_label": "appliedrecipeschema" + }, + { + "label": "AppliedRecipe", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L321", + "_origin": "ast", + "id": "packages_schemas_src_domain_appliedrecipe", + "community": 1, + "norm_label": "appliedrecipe" + }, + { + "label": "SkippedRecipeSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L323", + "_origin": "ast", + "id": "packages_schemas_src_domain_skippedrecipeschema", + "community": 1, + "norm_label": "skippedrecipeschema" + }, + { + "label": "SkippedRecipe", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L328", + "_origin": "ast", + "id": "packages_schemas_src_domain_skippedrecipe", + "community": 1, + "norm_label": "skippedrecipe" + }, + { + "label": "ExportLogSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L330", + "_origin": "ast", + "id": "packages_schemas_src_domain_exportlogschema", + "community": 1, + "norm_label": "exportlogschema" + }, + { + "label": "ExportLog", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L336", + "_origin": "ast", + "id": "packages_schemas_src_domain_exportlog", + "community": 6, + "norm_label": "exportlog" + }, + { + "label": "ExportMetadataSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L338", + "_origin": "ast", + "id": "packages_schemas_src_domain_exportmetadataschema", + "community": 1, + "norm_label": "exportmetadataschema" + }, + { + "label": "ExportMetadata", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L344", + "_origin": "ast", + "id": "packages_schemas_src_domain_exportmetadata", + "community": 1, + "norm_label": "exportmetadata" + }, + { + "label": "ExportFileSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L346", + "_origin": "ast", + "id": "packages_schemas_src_domain_exportfileschema", + "community": 1, + "norm_label": "exportfileschema" + }, + { + "label": "ExportFile", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L351", + "_origin": "ast", + "id": "packages_schemas_src_domain_exportfile", + "community": 6, + "norm_label": "exportfile" + }, + { + "label": "ExportDataSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L353", + "_origin": "ast", + "id": "packages_schemas_src_domain_exportdataschema", + "community": 1, + "norm_label": "exportdataschema" + }, + { + "label": "ExportData", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L360", + "_origin": "ast", + "id": "packages_schemas_src_domain_exportdata", + "community": 18, + "norm_label": "exportdata" + }, + { + "label": "StackAnalyzeRequestSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L362", + "_origin": "ast", + "id": "packages_schemas_src_domain_stackanalyzerequestschema", + "community": 5, + "norm_label": "stackanalyzerequestschema" + }, + { + "label": "StackAnalyzeResponseSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L366", + "_origin": "ast", + "id": "packages_schemas_src_domain_stackanalyzeresponseschema", + "community": 1, + "norm_label": "stackanalyzeresponseschema" + }, + { + "label": "ScaffoldRequestSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L374", + "_origin": "ast", + "id": "packages_schemas_src_domain_scaffoldrequestschema", + "community": 5, + "norm_label": "scaffoldrequestschema" + }, + { + "label": "BlueprintRequestSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L379", + "_origin": "ast", + "id": "packages_schemas_src_domain_blueprintrequestschema", + "community": 5, + "norm_label": "blueprintrequestschema" + }, + { + "label": "StackAnalyzeRequest", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L388", + "_origin": "ast", + "id": "packages_schemas_src_domain_stackanalyzerequest", + "community": 3, + "norm_label": "stackanalyzerequest" + }, + { + "label": "StackAnalyzeResponse", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L389", + "_origin": "ast", + "id": "packages_schemas_src_domain_stackanalyzeresponse", + "community": 42, + "norm_label": "stackanalyzeresponse" + }, + { + "label": "ScaffoldRequest", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L390", + "_origin": "ast", + "id": "packages_schemas_src_domain_scaffoldrequest", + "community": 3, + "norm_label": "scaffoldrequest" + }, + { + "label": "ScaffoldResponseSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L392", + "_origin": "ast", + "id": "packages_schemas_src_domain_scaffoldresponseschema", + "community": 1, + "norm_label": "scaffoldresponseschema" + }, + { + "label": "ScaffoldResponse", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L395", + "_origin": "ast", + "id": "packages_schemas_src_domain_scaffoldresponse", + "community": 42, + "norm_label": "scaffoldresponse" + }, + { + "label": "BlueprintRequest", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L397", + "_origin": "ast", + "id": "packages_schemas_src_domain_blueprintrequest", + "community": 42, + "norm_label": "blueprintrequest" + }, + { + "label": "BlueprintAlternativeSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L399", + "_origin": "ast", + "id": "packages_schemas_src_domain_blueprintalternativeschema", + "community": 1, + "norm_label": "blueprintalternativeschema" + }, + { + "label": "BlueprintAlternative", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L406", + "_origin": "ast", + "id": "packages_schemas_src_domain_blueprintalternative", + "community": 1, + "norm_label": "blueprintalternative" + }, + { + "label": "BlueprintResponseSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L408", + "_origin": "ast", + "id": "packages_schemas_src_domain_blueprintresponseschema", + "community": 1, + "norm_label": "blueprintresponseschema" + }, + { + "label": "BlueprintResponse", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L419", + "_origin": "ast", + "id": "packages_schemas_src_domain_blueprintresponse", + "community": 1, + "norm_label": "blueprintresponse" + }, + { + "label": "CompatibilityResponseSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L421", + "_origin": "ast", + "id": "packages_schemas_src_domain_compatibilityresponseschema", + "community": 1, + "norm_label": "compatibilityresponseschema" + }, + { + "label": "CompatibilityResponse", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L428", + "_origin": "ast", + "id": "packages_schemas_src_domain_compatibilityresponse", + "community": 42, + "norm_label": "compatibilityresponse" + }, + { + "label": "MigrationResponseSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L430", + "_origin": "ast", + "id": "packages_schemas_src_domain_migrationresponseschema", + "community": 1, + "norm_label": "migrationresponseschema" + }, + { + "label": "MigrationResponse", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L437", + "_origin": "ast", + "id": "packages_schemas_src_domain_migrationresponse", + "community": 42, + "norm_label": "migrationresponse" + }, + { + "label": "ToolCostEstimateSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L443", + "_origin": "ast", + "id": "packages_schemas_src_domain_toolcostestimateschema", + "community": 1, + "norm_label": "toolcostestimateschema" + }, + { + "label": "ToolCostEstimate", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L450", + "_origin": "ast", + "id": "packages_schemas_src_domain_toolcostestimate", + "community": 1, + "norm_label": "toolcostestimate" + }, + { + "label": "BlueprintCostEstimateSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L452", + "_origin": "ast", + "id": "packages_schemas_src_domain_blueprintcostestimateschema", + "community": 1, + "norm_label": "blueprintcostestimateschema" + }, + { + "label": "BlueprintCostEstimate", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L458", + "_origin": "ast", + "id": "packages_schemas_src_domain_blueprintcostestimate", + "community": 0, + "norm_label": "blueprintcostestimate" + }, + { + "label": "RoadmapPhaseSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L460", + "_origin": "ast", + "id": "packages_schemas_src_domain_roadmapphaseschema", + "community": 1, + "norm_label": "roadmapphaseschema" + }, + { + "label": "RoadmapPhase", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L465", + "_origin": "ast", + "id": "packages_schemas_src_domain_roadmapphase", + "community": 1, + "norm_label": "roadmapphase" + }, + { + "label": "ImplementationRoadmapSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L467", + "_origin": "ast", + "id": "packages_schemas_src_domain_implementationroadmapschema", + "community": 1, + "norm_label": "implementationroadmapschema" + }, + { + "label": "ImplementationRoadmap", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L471", + "_origin": "ast", + "id": "packages_schemas_src_domain_implementationroadmap", + "community": 0, + "norm_label": "implementationroadmap" + }, + { + "label": "WhyNotExplanationSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L473", + "_origin": "ast", + "id": "packages_schemas_src_domain_whynotexplanationschema", + "community": 1, + "norm_label": "whynotexplanationschema" + }, + { + "label": "WhyNotExplanation", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L477", + "_origin": "ast", + "id": "packages_schemas_src_domain_whynotexplanation", + "community": 0, + "norm_label": "whynotexplanation" + }, + { + "label": "EnhancedAlternativeSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L479", + "_origin": "ast", + "id": "packages_schemas_src_domain_enhancedalternativeschema", + "community": 1, + "norm_label": "enhancedalternativeschema" + }, + { + "label": "EnhancedAlternative", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L488", + "_origin": "ast", + "id": "packages_schemas_src_domain_enhancedalternative", + "community": 0, + "norm_label": "enhancedalternative" + }, + { + "label": "EnhancedBlueprintResponseSchema", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L490", + "_origin": "ast", + "id": "packages_schemas_src_domain_enhancedblueprintresponseschema", + "community": 1, + "norm_label": "enhancedblueprintresponseschema" + }, + { + "label": "EnhancedBlueprintResponse", + "file_type": "code", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L509", + "_origin": "ast", + "id": "packages_schemas_src_domain_enhancedblueprintresponse", + "community": 42, + "norm_label": "enhancedblueprintresponse" + }, + { + "label": "index.ts", + "file_type": "code", + "source_file": "packages/schemas/src/index.ts", + "source_location": "L1", + "_origin": "ast", + "id": "packages_schemas_src_index", + "community": 0, + "norm_label": "index.ts" + }, + { + "label": "tsconfig.json", + "file_type": "code", + "source_file": "packages/schemas/tsconfig.json", + "source_location": "L1", + "_origin": "ast", + "id": "packages_schemas_tsconfig", + "community": 65, + "norm_label": "tsconfig.json" + }, + { + "label": "extends", + "file_type": "code", + "source_file": "packages/schemas/tsconfig.json", + "source_location": "L2", + "_origin": "ast", + "id": "packages_schemas_tsconfig_extends", + "community": 65, + "norm_label": "extends" + }, + { + "label": "compilerOptions", + "file_type": "code", + "source_file": "packages/schemas/tsconfig.json", + "source_location": "L3", + "_origin": "ast", + "id": "packages_schemas_tsconfig_compileroptions", + "community": 65, + "norm_label": "compileroptions" + }, + { + "label": "outDir", + "file_type": "code", + "source_file": "packages/schemas/tsconfig.json", + "source_location": "L4", + "_origin": "ast", + "id": "packages_schemas_tsconfig_compileroptions_outdir", + "community": 65, + "norm_label": "outdir" + }, + { + "label": "rootDir", + "file_type": "code", + "source_file": "packages/schemas/tsconfig.json", + "source_location": "L5", + "_origin": "ast", + "id": "packages_schemas_tsconfig_compileroptions_rootdir", + "community": 65, + "norm_label": "rootdir" + }, + { + "label": "include", + "file_type": "code", + "source_file": "packages/schemas/tsconfig.json", + "source_location": "L7", + "_origin": "ast", + "id": "packages_schemas_tsconfig_include", + "community": 65, + "norm_label": "include" + }, + { + "label": "package.json", + "file_type": "code", + "source_file": "packages/shared/package.json", + "source_location": "L1", + "_origin": "ast", + "id": "packages_shared_package", + "community": 40, + "norm_label": "package.json" + }, + { + "label": "name", + "file_type": "code", + "source_file": "packages/shared/package.json", + "source_location": "L2", + "_origin": "ast", + "id": "packages_shared_package_name", + "community": 40, + "norm_label": "name" + }, + { + "label": "version", + "file_type": "code", + "source_file": "packages/shared/package.json", + "source_location": "L3", + "_origin": "ast", + "id": "packages_shared_package_version", + "community": 40, + "norm_label": "version" + }, + { + "label": "private", + "file_type": "code", + "source_file": "packages/shared/package.json", + "source_location": "L4", + "_origin": "ast", + "id": "packages_shared_package_private", + "community": 40, + "norm_label": "private" + }, + { + "label": "type", + "file_type": "code", + "source_file": "packages/shared/package.json", + "source_location": "L5", + "_origin": "ast", + "id": "packages_shared_package_type", + "community": 40, + "norm_label": "type" + }, + { + "label": "main", + "file_type": "code", + "source_file": "packages/shared/package.json", + "source_location": "L6", + "_origin": "ast", + "id": "packages_shared_package_main", + "community": 40, + "norm_label": "main" + }, + { + "label": "types", + "file_type": "code", + "source_file": "packages/shared/package.json", + "source_location": "L7", + "_origin": "ast", + "id": "packages_shared_package_types", + "community": 40, + "norm_label": "types" + }, + { + "label": "scripts", + "file_type": "code", + "source_file": "packages/shared/package.json", + "source_location": "L8", + "_origin": "ast", + "id": "packages_shared_package_scripts", + "community": 40, + "norm_label": "scripts" + }, + { + "label": "lint", + "file_type": "code", + "source_file": "packages/shared/package.json", + "source_location": "L9", + "_origin": "ast", + "id": "packages_shared_package_scripts_lint", + "community": 40, + "norm_label": "lint" + }, + { + "label": "type-check", + "file_type": "code", + "source_file": "packages/shared/package.json", + "source_location": "L10", + "_origin": "ast", + "id": "packages_shared_package_scripts_type_check", + "community": 40, + "norm_label": "type-check" + }, + { + "label": "test", + "file_type": "code", + "source_file": "packages/shared/package.json", + "source_location": "L11", + "_origin": "ast", + "id": "packages_shared_package_scripts_test", + "community": 40, + "norm_label": "test" + }, + { + "label": "devDependencies", + "file_type": "code", + "source_file": "packages/shared/package.json", + "source_location": "L13", + "_origin": "ast", + "id": "packages_shared_package_devdependencies", + "community": 40, + "norm_label": "devdependencies" + }, + { + "label": "typescript", + "file_type": "code", + "source_file": "packages/shared/package.json", + "source_location": "L14", + "_origin": "ast", + "id": "packages_shared_package_devdependencies_typescript", + "community": 40, + "norm_label": "typescript" + }, + { + "label": "index.ts", + "file_type": "code", + "source_file": "packages/shared/src/index.ts", + "source_location": "L1", + "_origin": "ast", + "id": "packages_shared_src_index", + "community": 93, + "norm_label": "index.ts" + }, + { + "label": "tsconfig.json", + "file_type": "code", + "source_file": "packages/shared/tsconfig.json", + "source_location": "L1", + "_origin": "ast", + "id": "packages_shared_tsconfig", + "community": 66, + "norm_label": "tsconfig.json" + }, + { + "label": "extends", + "file_type": "code", + "source_file": "packages/shared/tsconfig.json", + "source_location": "L2", + "_origin": "ast", + "id": "packages_shared_tsconfig_extends", + "community": 66, + "norm_label": "extends" + }, + { + "label": "compilerOptions", + "file_type": "code", + "source_file": "packages/shared/tsconfig.json", + "source_location": "L3", + "_origin": "ast", + "id": "packages_shared_tsconfig_compileroptions", + "community": 66, + "norm_label": "compileroptions" + }, + { + "label": "outDir", + "file_type": "code", + "source_file": "packages/shared/tsconfig.json", + "source_location": "L4", + "_origin": "ast", + "id": "packages_shared_tsconfig_compileroptions_outdir", + "community": 66, + "norm_label": "outdir" + }, + { + "label": "rootDir", + "file_type": "code", + "source_file": "packages/shared/tsconfig.json", + "source_location": "L5", + "_origin": "ast", + "id": "packages_shared_tsconfig_compileroptions_rootdir", + "community": 66, + "norm_label": "rootdir" + }, + { + "label": "include", + "file_type": "code", + "source_file": "packages/shared/tsconfig.json", + "source_location": "L7", + "_origin": "ast", + "id": "packages_shared_tsconfig_include", + "community": 66, + "norm_label": "include" + }, + { + "label": "playwright.config.ts", + "file_type": "code", + "source_file": "playwright.config.ts", + "source_location": "L1", + "_origin": "ast", + "id": "playwright_config", + "community": 72, + "norm_label": "playwright.config.ts" + }, + { + "label": "webPort", + "file_type": "code", + "source_file": "playwright.config.ts", + "source_location": "L3", + "_origin": "ast", + "id": "playwright_config_webport", + "community": 72, + "norm_label": "webport" + }, + { + "label": "apiPort", + "file_type": "code", + "source_file": "playwright.config.ts", + "source_location": "L4", + "_origin": "ast", + "id": "playwright_config_apiport", + "community": 72, + "norm_label": "apiport" + }, + { + "label": "migrate.ts", + "file_type": "code", + "source_file": "scripts/deploy/migrate.ts", + "source_location": "L1", + "_origin": "ast", + "id": "scripts_deploy_migrate", + "community": 30, + "norm_label": "migrate.ts" + }, + { + "label": "REPO_ROOT", + "file_type": "code", + "source_file": "scripts/deploy/migrate.ts", + "source_location": "L49", + "_origin": "ast", + "id": "scripts_deploy_migrate_repo_root", + "community": 30, + "norm_label": "repo_root" + }, + { + "label": "log()", + "file_type": "code", + "source_file": "scripts/deploy/migrate.ts", + "source_location": "L51", + "_origin": "ast", + "id": "scripts_deploy_migrate_log", + "community": 30, + "norm_label": "log()" + }, + { + "label": "errorLog()", + "file_type": "code", + "source_file": "scripts/deploy/migrate.ts", + "source_location": "L55", + "_origin": "ast", + "id": "scripts_deploy_migrate_errorlog", + "community": 30, + "norm_label": "errorlog()" + }, + { + "label": "sleep()", + "file_type": "code", + "source_file": "scripts/deploy/migrate.ts", + "source_location": "L59", + "_origin": "ast", + "id": "scripts_deploy_migrate_sleep", + "community": 30, + "norm_label": "sleep()" + }, + { + "label": "CliArgs", + "file_type": "code", + "source_file": "scripts/deploy/migrate.ts", + "source_location": "L63", + "_origin": "ast", + "id": "scripts_deploy_migrate_cliargs", + "community": 30, + "norm_label": "cliargs" + }, + { + "label": "parseArgs()", + "file_type": "code", + "source_file": "scripts/deploy/migrate.ts", + "source_location": "L67", + "_origin": "ast", + "id": "scripts_deploy_migrate_parseargs", + "community": 30, + "norm_label": "parseargs()" + }, + { + "label": "ConnectionTarget", + "file_type": "code", + "source_file": "scripts/deploy/migrate.ts", + "source_location": "L71", + "_origin": "ast", + "id": "scripts_deploy_migrate_connectiontarget", + "community": 30, + "norm_label": "connectiontarget" + }, + { + "label": "resolveTarget()", + "file_type": "code", + "source_file": "scripts/deploy/migrate.ts", + "source_location": "L80", + "_origin": "ast", + "id": "scripts_deploy_migrate_resolvetarget", + "community": 30, + "norm_label": "resolvetarget()" + }, + { + "label": "probeOnce()", + "file_type": "code", + "source_file": "scripts/deploy/migrate.ts", + "source_location": "L102", + "_origin": "ast", + "id": "scripts_deploy_migrate_probeonce", + "community": 30, + "norm_label": "probeonce()" + }, + { + "label": "waitForConnection()", + "file_type": "code", + "source_file": "scripts/deploy/migrate.ts", + "source_location": "L126", + "_origin": "ast", + "id": "scripts_deploy_migrate_waitforconnection", + "community": 30, + "norm_label": "waitforconnection()" + }, + { + "label": "drizzleKitArgs()", + "file_type": "code", + "source_file": "scripts/deploy/migrate.ts", + "source_location": "L161", + "_origin": "ast", + "id": "scripts_deploy_migrate_drizzlekitargs", + "community": 30, + "norm_label": "drizzlekitargs()" + }, + { + "label": "spawnPnpm()", + "file_type": "code", + "source_file": "scripts/deploy/migrate.ts", + "source_location": "L175", + "_origin": "ast", + "id": "scripts_deploy_migrate_spawnpnpm", + "community": 30, + "norm_label": "spawnpnpm()" + }, + { + "label": "killTree()", + "file_type": "code", + "source_file": "scripts/deploy/migrate.ts", + "source_location": "L185", + "_origin": "ast", + "id": "scripts_deploy_migrate_killtree", + "community": 30, + "norm_label": "killtree()" + }, + { + "label": "runApply()", + "file_type": "code", + "source_file": "scripts/deploy/migrate.ts", + "source_location": "L201", + "_origin": "ast", + "id": "scripts_deploy_migrate_runapply", + "community": 30, + "norm_label": "runapply()" + }, + { + "label": "runDryRun()", + "file_type": "code", + "source_file": "scripts/deploy/migrate.ts", + "source_location": "L229", + "_origin": "ast", + "id": "scripts_deploy_migrate_rundryrun", + "community": 30, + "norm_label": "rundryrun()" + }, + { + "label": "main()", + "file_type": "code", + "source_file": "scripts/deploy/migrate.ts", + "source_location": "L298", + "_origin": "ast", + "id": "scripts_deploy_migrate_main", + "community": 30, + "norm_label": "main()" + }, + { + "label": "smoke.ts", + "file_type": "code", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L1", + "_origin": "ast", + "id": "scripts_deploy_smoke", + "community": 31, + "norm_label": "smoke.ts" + }, + { + "label": "REPO_ROOT", + "file_type": "code", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L50", + "_origin": "ast", + "id": "scripts_deploy_smoke_repo_root", + "community": 31, + "norm_label": "repo_root" + }, + { + "label": "CliArgs", + "file_type": "code", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L65", + "_origin": "ast", + "id": "scripts_deploy_smoke_cliargs", + "community": 31, + "norm_label": "cliargs" + }, + { + "label": "AssertionResult", + "file_type": "code", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L70", + "_origin": "ast", + "id": "scripts_deploy_smoke_assertionresult", + "community": 31, + "norm_label": "assertionresult" + }, + { + "label": "log()", + "file_type": "code", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L77", + "_origin": "ast", + "id": "scripts_deploy_smoke_log", + "community": 31, + "norm_label": "log()" + }, + { + "label": "errorLog()", + "file_type": "code", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L81", + "_origin": "ast", + "id": "scripts_deploy_smoke_errorlog", + "community": 31, + "norm_label": "errorlog()" + }, + { + "label": "parseArgs()", + "file_type": "code", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L85", + "_origin": "ast", + "id": "scripts_deploy_smoke_parseargs", + "community": 31, + "norm_label": "parseargs()" + }, + { + "label": "timedFetch()", + "file_type": "code", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L105", + "_origin": "ast", + "id": "scripts_deploy_smoke_timedfetch", + "community": 31, + "norm_label": "timedfetch()" + }, + { + "label": "checkHealth()", + "file_type": "code", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L121", + "_origin": "ast", + "id": "scripts_deploy_smoke_checkhealth", + "community": 31, + "norm_label": "checkhealth()" + }, + { + "label": "burst()", + "file_type": "code", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L144", + "_origin": "ast", + "id": "scripts_deploy_smoke_burst", + "community": 31, + "norm_label": "burst()" + }, + { + "label": "checkGenerationBurst()", + "file_type": "code", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L164", + "_origin": "ast", + "id": "scripts_deploy_smoke_checkgenerationburst", + "community": 31, + "norm_label": "checkgenerationburst()" + }, + { + "label": "checkReadBurst()", + "file_type": "code", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L198", + "_origin": "ast", + "id": "scripts_deploy_smoke_checkreadburst", + "community": 31, + "norm_label": "checkreadburst()" + }, + { + "label": "checkAdmin401()", + "file_type": "code", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L228", + "_origin": "ast", + "id": "scripts_deploy_smoke_checkadmin401", + "community": 31, + "norm_label": "checkadmin401()" + }, + { + "label": "checkCorsSameOrigin()", + "file_type": "code", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L254", + "_origin": "ast", + "id": "scripts_deploy_smoke_checkcorssameorigin", + "community": 31, + "norm_label": "checkcorssameorigin()" + }, + { + "label": "checkCorsEvilOrigin()", + "file_type": "code", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L292", + "_origin": "ast", + "id": "scripts_deploy_smoke_checkcorsevilorigin", + "community": 31, + "norm_label": "checkcorsevilorigin()" + }, + { + "label": "writeReport()", + "file_type": "code", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L325", + "_origin": "ast", + "id": "scripts_deploy_smoke_writereport", + "community": 31, + "norm_label": "writereport()" + }, + { + "label": "main()", + "file_type": "code", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L333", + "_origin": "ast", + "id": "scripts_deploy_smoke_main", + "community": 31, + "norm_label": "main()" + }, + { + "label": "deploy-admin-401.spec.ts", + "file_type": "code", + "source_file": "tests/e2e/deploy-admin-401.spec.ts", + "source_location": "L1", + "_origin": "ast", + "id": "tests_e2e_deploy_admin_401_spec", + "community": 73, + "norm_label": "deploy-admin-401.spec.ts" + }, + { + "label": "API_ORIGIN", + "file_type": "code", + "source_file": "tests/e2e/deploy-admin-401.spec.ts", + "source_location": "L25", + "_origin": "ast", + "id": "tests_e2e_deploy_admin_401_spec_api_origin", + "community": 73, + "norm_label": "api_origin" + }, + { + "label": "ADMIN_PATHS", + "file_type": "code", + "source_file": "tests/e2e/deploy-admin-401.spec.ts", + "source_location": "L30", + "_origin": "ast", + "id": "tests_e2e_deploy_admin_401_spec_admin_paths", + "community": 73, + "norm_label": "admin_paths" + }, + { + "label": "deploy-cross-origin-auth.spec.ts", + "file_type": "code", + "source_file": "tests/e2e/deploy-cross-origin-auth.spec.ts", + "source_location": "L1", + "_origin": "ast", + "id": "tests_e2e_deploy_cross_origin_auth_spec", + "community": 80, + "norm_label": "deploy-cross-origin-auth.spec.ts" + }, + { + "label": "API_ORIGIN", + "file_type": "code", + "source_file": "tests/e2e/deploy-cross-origin-auth.spec.ts", + "source_location": "L36", + "_origin": "ast", + "id": "tests_e2e_deploy_cross_origin_auth_spec_api_origin", + "community": 80, + "norm_label": "api_origin" + }, + { + "label": "deploy-health.spec.ts", + "file_type": "code", + "source_file": "tests/e2e/deploy-health.spec.ts", + "source_location": "L1", + "_origin": "ast", + "id": "tests_e2e_deploy_health_spec", + "community": 81, + "norm_label": "deploy-health.spec.ts" + }, + { + "label": "API_ORIGIN", + "file_type": "code", + "source_file": "tests/e2e/deploy-health.spec.ts", + "source_location": "L23", + "_origin": "ast", + "id": "tests_e2e_deploy_health_spec_api_origin", + "community": 81, + "norm_label": "api_origin" + }, + { + "label": "deploy-rate-limit.spec.ts", + "file_type": "code", + "source_file": "tests/e2e/deploy-rate-limit.spec.ts", + "source_location": "L1", + "_origin": "ast", + "id": "tests_e2e_deploy_rate_limit_spec", + "community": 74, + "norm_label": "deploy-rate-limit.spec.ts" + }, + { + "label": "freshClientIp()", + "file_type": "code", + "source_file": "tests/e2e/deploy-rate-limit.spec.ts", + "source_location": "L33", + "_origin": "ast", + "id": "tests_e2e_deploy_rate_limit_spec_freshclientip", + "community": 74, + "norm_label": "freshclientip()" + }, + { + "label": "lastStatusOfBurst()", + "file_type": "code", + "source_file": "tests/e2e/deploy-rate-limit.spec.ts", + "source_location": "L38", + "_origin": "ast", + "id": "tests_e2e_deploy_rate_limit_spec_laststatusofburst", + "community": 74, + "norm_label": "laststatusofburst()" + }, + { + "label": "mvp-flows.spec.ts", + "file_type": "code", + "source_file": "tests/e2e/mvp-flows.spec.ts", + "source_location": "L1", + "_origin": "ast", + "id": "tests_e2e_mvp_flows_spec", + "community": 96, + "norm_label": "mvp-flows.spec.ts" + }, + { + "label": "tsconfig.base.json", + "file_type": "code", + "source_file": "tsconfig.base.json", + "source_location": "L1", + "_origin": "ast", + "id": "tsconfig_base", + "community": 48, + "norm_label": "tsconfig.base.json" + }, + { + "label": "compilerOptions", + "file_type": "code", + "source_file": "tsconfig.base.json", + "source_location": "L2", + "_origin": "ast", + "id": "tsconfig_base_compileroptions", + "community": 48, + "norm_label": "compileroptions" + }, + { + "label": "target", + "file_type": "code", + "source_file": "tsconfig.base.json", + "source_location": "L3", + "_origin": "ast", + "id": "tsconfig_base_compileroptions_target", + "community": 48, + "norm_label": "target" + }, + { + "label": "module", + "file_type": "code", + "source_file": "tsconfig.base.json", + "source_location": "L4", + "_origin": "ast", + "id": "tsconfig_base_compileroptions_module", + "community": 48, + "norm_label": "module" + }, + { + "label": "moduleResolution", + "file_type": "code", + "source_file": "tsconfig.base.json", + "source_location": "L5", + "_origin": "ast", + "id": "tsconfig_base_compileroptions_moduleresolution", + "community": 48, + "norm_label": "moduleresolution" + }, + { + "label": "strict", + "file_type": "code", + "source_file": "tsconfig.base.json", + "source_location": "L6", + "_origin": "ast", + "id": "tsconfig_base_compileroptions_strict", + "community": 48, + "norm_label": "strict" + }, + { + "label": "esModuleInterop", + "file_type": "code", + "source_file": "tsconfig.base.json", + "source_location": "L7", + "_origin": "ast", + "id": "tsconfig_base_compileroptions_esmoduleinterop", + "community": 48, + "norm_label": "esmoduleinterop" + }, + { + "label": "skipLibCheck", + "file_type": "code", + "source_file": "tsconfig.base.json", + "source_location": "L8", + "_origin": "ast", + "id": "tsconfig_base_compileroptions_skiplibcheck", + "community": 48, + "norm_label": "skiplibcheck" + }, + { + "label": "forceConsistentCasingInFileNames", + "file_type": "code", + "source_file": "tsconfig.base.json", + "source_location": "L9", + "_origin": "ast", + "id": "tsconfig_base_compileroptions_forceconsistentcasinginfilenames", + "community": 48, + "norm_label": "forceconsistentcasinginfilenames" + }, + { + "label": "resolveJsonModule", + "file_type": "code", + "source_file": "tsconfig.base.json", + "source_location": "L10", + "_origin": "ast", + "id": "tsconfig_base_compileroptions_resolvejsonmodule", + "community": 48, + "norm_label": "resolvejsonmodule" + }, + { + "label": "isolatedModules", + "file_type": "code", + "source_file": "tsconfig.base.json", + "source_location": "L11", + "_origin": "ast", + "id": "tsconfig_base_compileroptions_isolatedmodules", + "community": 48, + "norm_label": "isolatedmodules" + }, + { + "label": "vitest.package.config.ts", + "file_type": "code", + "source_file": "vitest.package.config.ts", + "source_location": "L1", + "_origin": "ast", + "id": "vitest_package_config", + "community": 97, + "norm_label": "vitest.package.config.ts" + }, + { + "label": "vitest.workspace.ts", + "file_type": "code", + "source_file": "vitest.workspace.ts", + "source_location": "L1", + "_origin": "ast", + "id": "vitest_workspace", + "community": 98, + "norm_label": "vitest.workspace.ts" + }, + { + "label": "useSelections", + "file_type": "code", + "source_file": "apps/web/src/context/SelectionsContext.tsx", + "source_location": "L174", + "_origin": "ast", + "id": "apps_web_src_context_selectionscontext_useselections", + "community": 86, + "norm_label": "useselections" + }, + { + "label": "{ signIn, signOut, useSession }", + "file_type": "code", + "source_file": "apps/web/src/lib/auth-client.ts", + "source_location": "L11", + "_origin": "ast", + "id": "apps_web_src_lib_auth_client_signin_signout_usesession", + "community": 88, + "norm_label": "{ signin, signout, usesession }" + }, + { + "label": "Agent Workflow Specification", + "file_type": "document", + "source_file": "Agents.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "agents_agent_workflow_specification", + "community": 69, + "norm_label": "agent workflow specification" + }, + { + "label": "Orchestrator", + "file_type": "concept", + "source_file": "Agents.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "agents_orchestrator", + "community": 69, + "norm_label": "orchestrator" + }, + { + "label": "Cleanup Agent", + "file_type": "concept", + "source_file": "Agents.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "agents_cleanup_agent", + "community": 59, + "norm_label": "cleanup agent" + }, + { + "label": "Architect Agent", + "file_type": "concept", + "source_file": "Agents.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "agents_architect_agent", + "community": 34, + "norm_label": "architect agent" + }, + { + "label": "Engine Agent", + "file_type": "concept", + "source_file": "Agents.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "agents_engine_agent", + "community": 32, + "norm_label": "engine agent" + }, + { + "label": "API Agent", + "file_type": "concept", + "source_file": "Agents.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "agents_api_agent", + "community": 53, + "norm_label": "api agent" + }, + { + "label": "UI Agent", + "file_type": "concept", + "source_file": "Agents.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "agents_ui_agent", + "community": 32, + "norm_label": "ui agent" + }, + { + "label": "QA Agent", + "file_type": "concept", + "source_file": "Agents.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "agents_qa_agent", + "community": 49, + "norm_label": "qa agent" + }, + { + "label": "Phase Gate Criteria", + "file_type": "concept", + "source_file": "Agents.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "agents_phase_gate_criteria", + "community": 69, + "norm_label": "phase gate criteria" + }, + { + "label": "Agent Handoff Protocol", + "file_type": "concept", + "source_file": "Agents.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "agents_handoff_protocol", + "community": 69, + "norm_label": "agent handoff protocol" + }, + { + "label": "Package Dependency Graph", + "file_type": "concept", + "source_file": "Agents.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "agents_package_dependency_graph", + "community": 34, + "norm_label": "package dependency graph" + }, + { + "label": "pnpm Workspaces", + "file_type": "code", + "source_file": "pnpm-workspace.yaml", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "pnpm_workspace_pnpm_workspaces", + "community": 34, + "norm_label": "pnpm workspaces" + }, + { + "label": "apps/* Workspace Package Pattern", + "file_type": "code", + "source_file": "pnpm-workspace.yaml", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "pnpm_workspace_apps_workspace", + "community": 34, + "norm_label": "apps/* workspace package pattern" + }, + { + "label": "packages/* Workspace Package Pattern", + "file_type": "code", + "source_file": "pnpm-workspace.yaml", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "pnpm_workspace_packages_workspace", + "community": 34, + "norm_label": "packages/* workspace package pattern" + }, + { + "label": "Stackfast 2026", + "file_type": "document", + "source_file": "readme.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "readme_stackfast_2026", + "community": 53, + "norm_label": "stackfast 2026" + }, + { + "label": "Monorepo Architecture", + "file_type": "concept", + "source_file": "readme.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "readme_monorepo_architecture", + "community": 32, + "norm_label": "monorepo architecture" + }, + { + "label": "apps/api Hono API Server", + "file_type": "concept", + "source_file": "readme.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "readme_apps_api", + "community": 34, + "norm_label": "apps/api hono api server" + }, + { + "label": "apps/web React Vite Web App", + "file_type": "concept", + "source_file": "readme.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "readme_apps_web", + "community": 32, + "norm_label": "apps/web react vite web app" + }, + { + "label": "packages/ai Blueprint Explanation Providers", + "file_type": "concept", + "source_file": "readme.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "readme_packages_ai", + "community": 47, + "norm_label": "packages/ai blueprint explanation providers" + }, + { + "label": "packages/exporter Scaffold Generation", + "file_type": "concept", + "source_file": "readme.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "readme_packages_exporter", + "community": 32, + "norm_label": "packages/exporter scaffold generation" + }, + { + "label": "packages/registry Catalog Loading and Validation", + "file_type": "concept", + "source_file": "readme.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "readme_packages_registry", + "community": 32, + "norm_label": "packages/registry catalog loading and validation" + }, + { + "label": "packages/rules-engine Compatibility Scoring", + "file_type": "concept", + "source_file": "readme.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "readme_packages_rules_engine", + "community": 32, + "norm_label": "packages/rules-engine compatibility scoring" + }, + { + "label": "packages/schemas Shared Zod API and Drizzle Schemas", + "file_type": "concept", + "source_file": "readme.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "readme_packages_schemas", + "community": 32, + "norm_label": "packages/schemas shared zod api and drizzle schemas" + }, + { + "label": "packages/shared Utilities", + "file_type": "concept", + "source_file": "readme.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "readme_packages_shared", + "community": 32, + "norm_label": "packages/shared utilities" + }, + { + "label": "Public MVP API Surface", + "file_type": "concept", + "source_file": "readme.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "readme_api_surface", + "community": 53, + "norm_label": "public mvp api surface" + }, + { + "label": "Testing and Quality Gate", + "file_type": "concept", + "source_file": "readme.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "readme_quality_gate", + "community": 53, + "norm_label": "testing and quality gate" + }, + { + "label": "Production Deployment Runbook", + "file_type": "concept", + "source_file": "readme.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "readme_production_deployment", + "community": 37, + "norm_label": "production deployment runbook" + }, + { + "label": "stackfast-api Railway Service", + "file_type": "concept", + "source_file": "readme.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "readme_stackfast_api_service", + "community": 37, + "norm_label": "stackfast-api railway service" + }, + { + "label": "stackfast-web Railway Service", + "file_type": "concept", + "source_file": "readme.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "readme_stackfast_web_service", + "community": 37, + "norm_label": "stackfast-web railway service" + }, + { + "label": "Production Environment Variables", + "file_type": "concept", + "source_file": "readme.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "readme_production_env_vars", + "community": 37, + "norm_label": "production environment variables" + }, + { + "label": "Cross-Origin Production Auth Cookie Behavior", + "file_type": "concept", + "source_file": "readme.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "readme_cross_origin_production_auth", + "community": 37, + "norm_label": "cross-origin production auth cookie behavior" + }, + { + "label": "AI-Assisted Architecture and Starter-Stack Copilot Product Vision", + "file_type": "rationale", + "source_file": "ROADMAP.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "roadmap_product_vision", + "community": 44, + "norm_label": "ai-assisted architecture and starter-stack copilot product vision" + }, + { + "label": "Phase 0 Freeze and Preserve", + "file_type": "concept", + "source_file": "ROADMAP.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "roadmap_phase_0_cleanup", + "community": 59, + "norm_label": "phase 0 freeze and preserve" + }, + { + "label": "Phase 1 Monorepo Scaffold", + "file_type": "concept", + "source_file": "ROADMAP.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "roadmap_phase_1_monorepo_scaffold", + "community": 34, + "norm_label": "phase 1 monorepo scaffold" + }, + { + "label": "Phase 2 Extract Core Engine", + "file_type": "concept", + "source_file": "ROADMAP.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "roadmap_phase_2_core_engine", + "community": 32, + "norm_label": "phase 2 extract core engine" + }, + { + "label": "Phase 3 Clean API Surface", + "file_type": "concept", + "source_file": "ROADMAP.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "roadmap_phase_3_api_surface", + "community": 53, + "norm_label": "phase 3 clean api surface" + }, + { + "label": "Phase 4 Rebuild UI", + "file_type": "concept", + "source_file": "ROADMAP.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "roadmap_phase_4_ui_rebuild", + "community": 32, + "norm_label": "phase 4 rebuild ui" + }, + { + "label": "Phase 5 Blueprint Generator and AI", + "file_type": "concept", + "source_file": "ROADMAP.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "roadmap_phase_5_blueprint_ai", + "community": 47, + "norm_label": "phase 5 blueprint generator and ai" + }, + { + "label": "Phase 6 Registry Expansion", + "file_type": "concept", + "source_file": "ROADMAP.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "roadmap_phase_6_registry_expansion", + "community": 94, + "norm_label": "phase 6 registry expansion" + }, + { + "label": "Phase 7 Quality Gate", + "file_type": "concept", + "source_file": "ROADMAP.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "roadmap_phase_7_quality_gate", + "community": 49, + "norm_label": "phase 7 quality gate" + }, + { + "label": "Phase 8 Deployment and Operations", + "file_type": "concept", + "source_file": "ROADMAP.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "roadmap_phase_8_deployment_operations", + "community": 49, + "norm_label": "phase 8 deployment and operations" + }, + { + "label": "Phase 9 MVP Ship", + "file_type": "concept", + "source_file": "ROADMAP.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "roadmap_phase_9_mvp_ship", + "community": 49, + "norm_label": "phase 9 mvp ship" + }, + { + "label": "Post-MVP Roadmap", + "file_type": "concept", + "source_file": "ROADMAP.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "roadmap_post_mvp_roadmap", + "community": 95, + "norm_label": "post-mvp roadmap" + }, + { + "label": "Success Metrics", + "file_type": "concept", + "source_file": "ROADMAP.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "roadmap_success_metrics", + "community": 44, + "norm_label": "success metrics" + }, + { + "label": "Salvage Manifest", + "file_type": "document", + "source_file": "SALVAGE_MANIFEST.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "salvage_manifest_salvage_manifest", + "community": 59, + "norm_label": "salvage manifest" + }, + { + "label": "Branches/StackfastPro Primary Base", + "file_type": "concept", + "source_file": "SALVAGE_MANIFEST.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "salvage_manifest_stackfastpro_primary_base", + "community": 59, + "norm_label": "branches/stackfastpro primary base" + }, + { + "label": "Root App Salvage Sources", + "file_type": "concept", + "source_file": "SALVAGE_MANIFEST.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "salvage_manifest_root_app_salvage", + "community": 34, + "norm_label": "root app salvage sources" + }, + { + "label": "WebAILyzer Deferred Preservation", + "file_type": "concept", + "source_file": "SALVAGE_MANIFEST.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "salvage_manifest_webailyzer_deferred", + "community": 59, + "norm_label": "webailyzer deferred preservation" + }, + { + "label": "Detailed File Mapping", + "file_type": "concept", + "source_file": "SALVAGE_MANIFEST.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "salvage_manifest_file_mapping", + "community": 32, + "norm_label": "detailed file mapping" + }, + { + "label": "Post-Extraction Cleanup", + "file_type": "concept", + "source_file": "SALVAGE_MANIFEST.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "salvage_manifest_post_extraction_cleanup", + "community": 44, + "norm_label": "post-extraction cleanup" + }, + { + "label": "Stackfast 2026 Rebuild Implementation Plan", + "file_type": "document", + "source_file": "Stackfast2026 implementation plan.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "stackfast2026_implementation_plan_rebuild_plan", + "community": 34, + "norm_label": "stackfast 2026 rebuild implementation plan" + }, + { + "label": "Reset Don't Rescue Strategy", + "file_type": "rationale", + "source_file": "Stackfast2026 implementation plan.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "stackfast2026_implementation_plan_reset_dont_rescue", + "community": 34, + "norm_label": "reset don't rescue strategy" + }, + { + "label": "Target Architecture", + "file_type": "concept", + "source_file": "Stackfast2026 implementation plan.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "stackfast2026_implementation_plan_target_architecture", + "community": 34, + "norm_label": "target architecture" + }, + { + "label": "Rebuild Tech Stack", + "file_type": "concept", + "source_file": "Stackfast2026 implementation plan.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "stackfast2026_implementation_plan_tech_stack", + "community": 41, + "norm_label": "rebuild tech stack" + }, + { + "label": "Canonical API Surface", + "file_type": "concept", + "source_file": "Stackfast2026 implementation plan.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "stackfast2026_implementation_plan_canonical_api", + "community": 53, + "norm_label": "canonical api surface" + }, + { + "label": "Blueprint Output Shape", + "file_type": "concept", + "source_file": "Stackfast2026 implementation plan.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "stackfast2026_implementation_plan_blueprint_output_shape", + "community": 47, + "norm_label": "blueprint output shape" + }, + { + "label": "Admin-Only Mutations Rule", + "file_type": "rationale", + "source_file": "Stackfast2026 implementation plan.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "stackfast2026_implementation_plan_admin_only_mutations", + "community": 58, + "norm_label": "admin-only mutations rule" + }, + { + "label": "Verification Plan", + "file_type": "concept", + "source_file": "Stackfast2026 implementation plan.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "stackfast2026_implementation_plan_verification_plan", + "community": 53, + "norm_label": "verification plan" + }, + { + "label": "Stackfast Codebase Revival Audit", + "file_type": "document", + "source_file": "Stackfast2026.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "stackfast2026_codebase_revival_audit", + "community": 34, + "norm_label": "stackfast codebase revival audit" + }, + { + "label": "Branches/StackfastPro Candidate", + "file_type": "concept", + "source_file": "Stackfast2026.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "stackfast2026_stackfastpro_candidate", + "community": 59, + "norm_label": "branches/stackfastpro candidate" + }, + { + "label": "Root App Candidate", + "file_type": "concept", + "source_file": "Stackfast2026.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "stackfast2026_root_app_candidate", + "community": 34, + "norm_label": "root app candidate" + }, + { + "label": "StackFast-101 Candidate", + "file_type": "concept", + "source_file": "Stackfast2026.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "stackfast2026_stackfast_101_candidate", + "community": 34, + "norm_label": "stackfast-101 candidate" + }, + { + "label": "Public Mutation Routes Risk", + "file_type": "rationale", + "source_file": "Stackfast2026.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "stackfast2026_public_mutation_routes_risk", + "community": 58, + "norm_label": "public mutation routes risk" + }, + { + "label": "Explainable Stack Intelligence Platform", + "file_type": "rationale", + "source_file": "Stackfast2026.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "stackfast2026_explainable_stack_intelligence_platform", + "community": 44, + "norm_label": "explainable stack intelligence platform" + }, + { + "label": "Recipe-Based Scaffolding", + "file_type": "concept", + "source_file": "Stackfast2026.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "stackfast2026_recipe_based_scaffolding", + "community": 32, + "norm_label": "recipe-based scaffolding" + }, + { + "label": "Compatibility and Migration Graph", + "file_type": "concept", + "source_file": "Stackfast2026.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "stackfast2026_compatibility_and_migration_graph", + "community": 32, + "norm_label": "compatibility and migration graph" + }, + { + "label": "Neon Serverless Postgres", + "file_type": "document", + "source_file": ".agents/skills/neon-postgres/SKILL.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "agents_skills_neon_postgres_skill_neon_serverless_postgres", + "community": 41, + "norm_label": "neon serverless postgres" + }, + { + "label": "Neon Documentation Source of Truth", + "file_type": "rationale", + "source_file": ".agents/skills/neon-postgres/SKILL.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "agents_skills_neon_postgres_skill_docs_source_of_truth", + "community": 41, + "norm_label": "neon documentation source of truth" + }, + { + "label": "Neon Serverless Driver", + "file_type": "concept", + "source_file": ".agents/skills/neon-postgres/SKILL.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "agents_skills_neon_postgres_skill_serverless_driver", + "community": 41, + "norm_label": "neon serverless driver" + }, + { + "label": "Neon Auth", + "file_type": "concept", + "source_file": ".agents/skills/neon-postgres/SKILL.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "agents_skills_neon_postgres_skill_neon_auth", + "community": 41, + "norm_label": "neon auth" + }, + { + "label": "Neon Branching", + "file_type": "concept", + "source_file": ".agents/skills/neon-postgres/SKILL.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "agents_skills_neon_postgres_skill_branching", + "community": 41, + "norm_label": "neon branching" + }, + { + "label": "Neon Scale to Zero", + "file_type": "concept", + "source_file": ".agents/skills/neon-postgres/SKILL.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "agents_skills_neon_postgres_skill_scale_to_zero", + "community": 41, + "norm_label": "neon scale to zero" + }, + { + "label": "Neon Connection Pooling", + "file_type": "concept", + "source_file": ".agents/skills/neon-postgres/SKILL.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "agents_skills_neon_postgres_skill_connection_pooling", + "community": 41, + "norm_label": "neon connection pooling" + }, + { + "label": "CI Workflow", + "file_type": "code", + "source_file": ".github/workflows/ci.yml", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "github_workflows_ci_ci_pipeline", + "community": 49, + "norm_label": "ci workflow" + }, + { + "label": "validate Job", + "file_type": "code", + "source_file": ".github/workflows/ci.yml", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "github_workflows_ci_validate_job", + "community": 49, + "norm_label": "validate job" + }, + { + "label": "Type Check Lint Build Test Steps", + "file_type": "code", + "source_file": ".github/workflows/ci.yml", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "github_workflows_ci_quality_steps", + "community": 49, + "norm_label": "type check lint build test steps" + }, + { + "label": "Validate Registry Step", + "file_type": "code", + "source_file": ".github/workflows/ci.yml", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "github_workflows_ci_registry_validation_step", + "community": 49, + "norm_label": "validate registry step" + }, + { + "label": "Playwright E2E Step", + "file_type": "code", + "source_file": ".github/workflows/ci.yml", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "github_workflows_ci_playwright_e2e_step", + "community": 49, + "norm_label": "playwright e2e step" + }, + { + "label": "Phase 8 Deployment Design", + "file_type": "document", + "source_file": ".kiro/specs/phase-8-deployment/design.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "kiro_specs_phase_8_deployment_design_phase_8_design", + "community": 37, + "norm_label": "phase 8 deployment design" + }, + { + "label": "apps/api Rate Limit Module", + "file_type": "concept", + "source_file": ".kiro/specs/phase-8-deployment/design.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "kiro_specs_phase_8_deployment_design_rate_limit_module", + "community": 56, + "norm_label": "apps/api rate limit module" + }, + { + "label": "RateLimitBackend Interface", + "file_type": "concept", + "source_file": ".kiro/specs/phase-8-deployment/design.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "kiro_specs_phase_8_deployment_design_rate_limit_backend_interface", + "community": 56, + "norm_label": "ratelimitbackend interface" + }, + { + "label": "Upstash Rate Limit Backend", + "file_type": "concept", + "source_file": ".kiro/specs/phase-8-deployment/design.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "kiro_specs_phase_8_deployment_design_upstash_backend", + "community": 56, + "norm_label": "upstash rate limit backend" + }, + { + "label": "Memory Rate Limit Backend", + "file_type": "concept", + "source_file": ".kiro/specs/phase-8-deployment/design.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "kiro_specs_phase_8_deployment_design_memory_backend", + "community": 56, + "norm_label": "memory rate limit backend" + }, + { + "label": "Rate Limit Fail-Open Wrapper", + "file_type": "rationale", + "source_file": ".kiro/specs/phase-8-deployment/design.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "kiro_specs_phase_8_deployment_design_fail_open_wrapper", + "community": 68, + "norm_label": "rate limit fail-open wrapper" + }, + { + "label": "Sentry Observability Wiring", + "file_type": "concept", + "source_file": ".kiro/specs/phase-8-deployment/design.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "kiro_specs_phase_8_deployment_design_sentry_observability", + "community": 68, + "norm_label": "sentry observability wiring" + }, + { + "label": "Production Auth Fail-Closed Guard", + "file_type": "rationale", + "source_file": ".kiro/specs/phase-8-deployment/design.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "kiro_specs_phase_8_deployment_design_auth_fail_closed_guard", + "community": 46, + "norm_label": "production auth fail-closed guard" + }, + { + "label": "Railway Service Topology", + "file_type": "concept", + "source_file": ".kiro/specs/phase-8-deployment/design.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "kiro_specs_phase_8_deployment_design_railway_service_topology", + "community": 77, + "norm_label": "railway service topology" + }, + { + "label": "Cross-Origin Cookie Round Trip", + "file_type": "concept", + "source_file": ".kiro/specs/phase-8-deployment/design.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "kiro_specs_phase_8_deployment_design_cross_origin_cookie_flow", + "community": 46, + "norm_label": "cross-origin cookie round trip" + }, + { + "label": "Drizzle Migration One-Shot", + "file_type": "concept", + "source_file": ".kiro/specs/phase-8-deployment/design.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "kiro_specs_phase_8_deployment_design_migration_one_shot", + "community": 76, + "norm_label": "drizzle migration one-shot" + }, + { + "label": "Deploy Smoke Script", + "file_type": "concept", + "source_file": ".kiro/specs/phase-8-deployment/design.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "kiro_specs_phase_8_deployment_design_deploy_smoke_script", + "community": 46, + "norm_label": "deploy smoke script" + }, + { + "label": "Phase 8 Property-Based Tests", + "file_type": "concept", + "source_file": ".kiro/specs/phase-8-deployment/design.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "kiro_specs_phase_8_deployment_design_property_based_tests", + "community": 68, + "norm_label": "phase 8 property-based tests" + }, + { + "label": "Rate Limiter Migration Plan", + "file_type": "concept", + "source_file": ".kiro/specs/phase-8-deployment/design.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "kiro_specs_phase_8_deployment_design_rate_limiter_migration_plan", + "community": 56, + "norm_label": "rate limiter migration plan" + }, + { + "label": "Failure Modes and Fail-Open Fail-Closed Matrix", + "file_type": "concept", + "source_file": ".kiro/specs/phase-8-deployment/design.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "kiro_specs_phase_8_deployment_design_failure_modes_matrix", + "community": 47, + "norm_label": "failure modes and fail-open fail-closed matrix" + }, + { + "label": "Phase 8 Requirements", + "file_type": "document", + "source_file": ".kiro/specs/phase-8-deployment/requirements.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "kiro_specs_phase_8_deployment_requirements_phase_8_requirements", + "community": 37, + "norm_label": "phase 8 requirements" + }, + { + "label": "Requirement 1 Split Railway Services", + "file_type": "concept", + "source_file": ".kiro/specs/phase-8-deployment/requirements.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "kiro_specs_phase_8_deployment_requirements_split_railway_services", + "community": 77, + "norm_label": "requirement 1 split railway services" + }, + { + "label": "Requirement 2 Neon Postgres Production Branch", + "file_type": "concept", + "source_file": ".kiro/specs/phase-8-deployment/requirements.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "kiro_specs_phase_8_deployment_requirements_neon_production_branch", + "community": 76, + "norm_label": "requirement 2 neon postgres production branch" + }, + { + "label": "Requirement 3 Better Auth GitHub OAuth in Production", + "file_type": "concept", + "source_file": ".kiro/specs/phase-8-deployment/requirements.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "kiro_specs_phase_8_deployment_requirements_better_auth_github_oauth", + "community": 46, + "norm_label": "requirement 3 better auth github oauth in production" + }, + { + "label": "Requirement 4 Upstash Redis Rate Limiter", + "file_type": "concept", + "source_file": ".kiro/specs/phase-8-deployment/requirements.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "kiro_specs_phase_8_deployment_requirements_upstash_rate_limiter", + "community": 56, + "norm_label": "requirement 4 upstash redis rate limiter" + }, + { + "label": "Requirement 5 Production Health Check", + "file_type": "concept", + "source_file": ".kiro/specs/phase-8-deployment/requirements.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "kiro_specs_phase_8_deployment_requirements_production_health_check", + "community": 46, + "norm_label": "requirement 5 production health check" + }, + { + "label": "Requirement 7 Sentry Feature-Flagged Error Tracking", + "file_type": "concept", + "source_file": ".kiro/specs/phase-8-deployment/requirements.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "kiro_specs_phase_8_deployment_requirements_sentry_error_tracking", + "community": 68, + "norm_label": "requirement 7 sentry feature-flagged error tracking" + }, + { + "label": "Requirement 8 Admin API Key Enforcement", + "file_type": "concept", + "source_file": ".kiro/specs/phase-8-deployment/requirements.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "kiro_specs_phase_8_deployment_requirements_admin_api_key_enforcement", + "community": 58, + "norm_label": "requirement 8 admin api key enforcement" + }, + { + "label": "Requirement 10 CORS and Cross-Origin Policy", + "file_type": "concept", + "source_file": ".kiro/specs/phase-8-deployment/requirements.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "kiro_specs_phase_8_deployment_requirements_cors_policy", + "community": 46, + "norm_label": "requirement 10 cors and cross-origin policy" + }, + { + "label": "Requirement 11 Auth Fails Closed in Production", + "file_type": "rationale", + "source_file": ".kiro/specs/phase-8-deployment/requirements.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "kiro_specs_phase_8_deployment_requirements_auth_fails_closed", + "community": 46, + "norm_label": "requirement 11 auth fails closed in production" + }, + { + "label": "Requirement 12 Rollback Procedure", + "file_type": "concept", + "source_file": ".kiro/specs/phase-8-deployment/requirements.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "kiro_specs_phase_8_deployment_requirements_rollback_procedure", + "community": 52, + "norm_label": "requirement 12 rollback procedure" + }, + { + "label": "Requirement 13 Staging Environment Isolation", + "file_type": "concept", + "source_file": ".kiro/specs/phase-8-deployment/requirements.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "kiro_specs_phase_8_deployment_requirements_staging_isolation", + "community": 78, + "norm_label": "requirement 13 staging environment isolation" + }, + { + "label": "Requirement 14 README Deployment Documentation", + "file_type": "concept", + "source_file": ".kiro/specs/phase-8-deployment/requirements.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "kiro_specs_phase_8_deployment_requirements_readme_deployment_docs", + "community": 92, + "norm_label": "requirement 14 readme deployment documentation" + }, + { + "label": "Phase 8 Implementation Plan", + "file_type": "document", + "source_file": ".kiro/specs/phase-8-deployment/tasks.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "kiro_specs_phase_8_deployment_tasks_phase_8_implementation_plan", + "community": 37, + "norm_label": "phase 8 implementation plan" + }, + { + "label": "Batch A Rate Limiter Module", + "file_type": "concept", + "source_file": ".kiro/specs/phase-8-deployment/tasks.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "kiro_specs_phase_8_deployment_tasks_batch_a_rate_limiter", + "community": 56, + "norm_label": "batch a rate limiter module" + }, + { + "label": "Batch B Sentry Wiring", + "file_type": "concept", + "source_file": ".kiro/specs/phase-8-deployment/tasks.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "kiro_specs_phase_8_deployment_tasks_batch_b_sentry", + "community": 68, + "norm_label": "batch b sentry wiring" + }, + { + "label": "Batch C Auth Hardening and Deploy Tests", + "file_type": "concept", + "source_file": ".kiro/specs/phase-8-deployment/tasks.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "kiro_specs_phase_8_deployment_tasks_batch_c_auth_deploy_tests", + "community": 46, + "norm_label": "batch c auth hardening and deploy tests" + }, + { + "label": "Batch D Railway Manifests and Runbook Scripts", + "file_type": "concept", + "source_file": ".kiro/specs/phase-8-deployment/tasks.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "kiro_specs_phase_8_deployment_tasks_batch_d_railway_scripts", + "community": 46, + "norm_label": "batch d railway manifests and runbook scripts" + }, + { + "label": "Batch E Env Example and README", + "file_type": "concept", + "source_file": ".kiro/specs/phase-8-deployment/tasks.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "kiro_specs_phase_8_deployment_tasks_batch_e_env_readme", + "community": 37, + "norm_label": "batch e env example and readme" + }, + { + "label": "Batch F External Provisioning", + "file_type": "concept", + "source_file": ".kiro/specs/phase-8-deployment/tasks.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "kiro_specs_phase_8_deployment_tasks_batch_f_external_provisioning", + "community": 78, + "norm_label": "batch f external provisioning" + }, + { + "label": "Batch G Staging Cutover", + "file_type": "concept", + "source_file": ".kiro/specs/phase-8-deployment/tasks.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "kiro_specs_phase_8_deployment_tasks_batch_g_staging_cutover", + "community": 79, + "norm_label": "batch g staging cutover" + }, + { + "label": "Batch H Production Cutover", + "file_type": "concept", + "source_file": ".kiro/specs/phase-8-deployment/tasks.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "kiro_specs_phase_8_deployment_tasks_batch_h_production_cutover", + "community": 79, + "norm_label": "batch h production cutover" + }, + { + "label": "Batch I Post-Deploy Cleanup", + "file_type": "concept", + "source_file": ".kiro/specs/phase-8-deployment/tasks.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "kiro_specs_phase_8_deployment_tasks_batch_i_post_deploy_cleanup", + "community": 49, + "norm_label": "batch i post-deploy cleanup" + }, + { + "label": "Task Dependency Graph", + "file_type": "concept", + "source_file": ".kiro/specs/phase-8-deployment/tasks.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "kiro_specs_phase_8_deployment_tasks_dependency_graph", + "community": 37, + "norm_label": "task dependency graph" + }, + { + "label": "StackFast Web HTML Entry", + "file_type": "code", + "source_file": "apps/web/index.html", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "apps_web_index_stackfast_web_entry", + "community": 71, + "norm_label": "stackfast web html entry" + }, + { + "label": "SEO Metadata", + "file_type": "code", + "source_file": "apps/web/index.html", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "apps_web_index_seo_metadata", + "community": 71, + "norm_label": "seo metadata" + }, + { + "label": "Security Meta Headers", + "file_type": "code", + "source_file": "apps/web/index.html", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "apps_web_index_security_meta_headers", + "community": 71, + "norm_label": "security meta headers" + }, + { + "label": "Content Security Policy", + "file_type": "code", + "source_file": "apps/web/index.html", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "apps_web_index_content_security_policy", + "community": 71, + "norm_label": "content security policy" + }, + { + "label": "Historical Integration Plan", + "file_type": "document", + "source_file": "docs/backlog/INTEGRATION_PLAN.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "docs_backlog_integration_plan_historical_integration_plan", + "community": 44, + "norm_label": "historical integration plan" + }, + { + "label": "Tool Profile Unification", + "file_type": "concept", + "source_file": "docs/backlog/INTEGRATION_PLAN.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "docs_backlog_integration_plan_tool_profile_unification", + "community": 44, + "norm_label": "tool profile unification" + }, + { + "label": "PostgreSQL and Firestore Database Strategy", + "file_type": "concept", + "source_file": "docs/backlog/INTEGRATION_PLAN.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "docs_backlog_integration_plan_database_strategy", + "community": 44, + "norm_label": "postgresql and firestore database strategy" + }, + { + "label": "Unified API Endpoints", + "file_type": "concept", + "source_file": "docs/backlog/INTEGRATION_PLAN.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "docs_backlog_integration_plan_unified_endpoints", + "community": 53, + "norm_label": "unified api endpoints" + }, + { + "label": "Worker Enrichment Pipeline", + "file_type": "concept", + "source_file": "docs/backlog/INTEGRATION_PLAN.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "docs_backlog_integration_plan_worker_enrichment_pipeline", + "community": 44, + "norm_label": "worker enrichment pipeline" + }, + { + "label": "Compatibility-Aware Search", + "file_type": "concept", + "source_file": "docs/backlog/INTEGRATION_PLAN.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "docs_backlog_integration_plan_compatibility_aware_search", + "community": 32, + "norm_label": "compatibility-aware search" + }, + { + "label": "Migration Paths", + "file_type": "concept", + "source_file": "docs/backlog/INTEGRATION_PLAN.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "docs_backlog_integration_plan_migration_paths", + "community": 32, + "norm_label": "migration paths" + }, + { + "label": "ADR-001 Authentication Strategy", + "file_type": "document", + "source_file": "docs/decisions/001-authentication-strategy.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "docs_decisions_001_authentication_strategy_authentication_strategy", + "community": 58, + "norm_label": "adr-001 authentication strategy" + }, + { + "label": "Better Auth", + "file_type": "concept", + "source_file": "docs/decisions/001-authentication-strategy.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "docs_decisions_001_authentication_strategy_better_auth", + "community": 41, + "norm_label": "better auth" + }, + { + "label": "GitHub OAuth", + "file_type": "concept", + "source_file": "docs/decisions/001-authentication-strategy.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "docs_decisions_001_authentication_strategy_github_oauth", + "community": 46, + "norm_label": "github oauth" + }, + { + "label": "Stack Auth via Neon Auth", + "file_type": "concept", + "source_file": "docs/decisions/001-authentication-strategy.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "docs_decisions_001_authentication_strategy_stack_auth_neon_auth", + "community": 58, + "norm_label": "stack auth via neon auth" + }, + { + "label": "Admin API Key Protection", + "file_type": "concept", + "source_file": "docs/decisions/001-authentication-strategy.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "docs_decisions_001_authentication_strategy_admin_api_key", + "community": 58, + "norm_label": "admin api key protection" + }, + { + "label": "Auth Data Ownership", + "file_type": "rationale", + "source_file": "docs/decisions/001-authentication-strategy.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "docs_decisions_001_authentication_strategy_auth_data_ownership", + "community": 41, + "norm_label": "auth data ownership" + }, + { + "label": "Branch-Aware Auth", + "file_type": "rationale", + "source_file": "docs/decisions/001-authentication-strategy.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "docs_decisions_001_authentication_strategy_branch_aware_auth", + "community": 41, + "norm_label": "branch-aware auth" + }, + { + "label": "ADR-002 AI Provider Strategy", + "file_type": "document", + "source_file": "docs/decisions/002-ai-provider-strategy.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "docs_decisions_002_ai_provider_strategy_ai_provider_strategy", + "community": 47, + "norm_label": "adr-002 ai provider strategy" + }, + { + "label": "BlueprintExplainer Interface", + "file_type": "concept", + "source_file": "docs/decisions/002-ai-provider-strategy.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "docs_decisions_002_ai_provider_strategy_blueprint_explainer", + "community": 47, + "norm_label": "blueprintexplainer interface" + }, + { + "label": "FallbackExplainer", + "file_type": "concept", + "source_file": "docs/decisions/002-ai-provider-strategy.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "docs_decisions_002_ai_provider_strategy_fallback_explainer", + "community": 47, + "norm_label": "fallbackexplainer" + }, + { + "label": "Heuristic AI Provider", + "file_type": "concept", + "source_file": "docs/decisions/002-ai-provider-strategy.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "docs_decisions_002_ai_provider_strategy_heuristic_provider", + "community": 47, + "norm_label": "heuristic ai provider" + }, + { + "label": "Gemini AI Provider", + "file_type": "concept", + "source_file": "docs/decisions/002-ai-provider-strategy.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "docs_decisions_002_ai_provider_strategy_gemini_provider", + "community": 47, + "norm_label": "gemini ai provider" + }, + { + "label": "Azure OpenAI Provider", + "file_type": "concept", + "source_file": "docs/decisions/002-ai-provider-strategy.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "docs_decisions_002_ai_provider_strategy_azure_openai_provider", + "community": 47, + "norm_label": "azure openai provider" + }, + { + "label": "AI Response Zod Validation", + "file_type": "concept", + "source_file": "docs/decisions/002-ai-provider-strategy.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "docs_decisions_002_ai_provider_strategy_zod_validation", + "community": 47, + "norm_label": "ai response zod validation" + }, + { + "label": "ADR-003 Deployment Architecture", + "file_type": "document", + "source_file": "docs/decisions/003-deployment-architecture.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "docs_decisions_003_deployment_architecture_deployment_architecture", + "community": 37, + "norm_label": "adr-003 deployment architecture" + }, + { + "label": "Split Web and API Railway Services", + "file_type": "rationale", + "source_file": "docs/decisions/003-deployment-architecture.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "docs_decisions_003_deployment_architecture_split_railway_services", + "community": 37, + "norm_label": "split web and api railway services" + }, + { + "label": "Neon Postgres Deployment Database", + "file_type": "concept", + "source_file": "docs/decisions/003-deployment-architecture.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "docs_decisions_003_deployment_architecture_neon_postgres", + "community": 41, + "norm_label": "neon postgres deployment database" + }, + { + "label": "Upstash Redis Rate Limiting", + "file_type": "concept", + "source_file": "docs/decisions/003-deployment-architecture.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "docs_decisions_003_deployment_architecture_upstash_rate_limiting", + "community": 56, + "norm_label": "upstash redis rate limiting" + }, + { + "label": "Cookie and CORS Strategy", + "file_type": "concept", + "source_file": "docs/decisions/003-deployment-architecture.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "docs_decisions_003_deployment_architecture_cookie_cors_strategy", + "community": 46, + "norm_label": "cookie and cors strategy" + }, + { + "label": "Sentry Feature Flag", + "file_type": "concept", + "source_file": "docs/decisions/003-deployment-architecture.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "docs_decisions_003_deployment_architecture_sentry_feature_flag", + "community": 37, + "norm_label": "sentry feature flag" + }, + { + "label": "Railway Secrets and Configuration", + "file_type": "concept", + "source_file": "docs/decisions/003-deployment-architecture.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "docs_decisions_003_deployment_architecture_secrets_config", + "community": 37, + "norm_label": "railway secrets and configuration" + }, + { + "label": "Deployment Rollback Strategy", + "file_type": "concept", + "source_file": "docs/decisions/003-deployment-architecture.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "docs_decisions_003_deployment_architecture_rollback_strategy", + "community": 52, + "norm_label": "deployment rollback strategy" + }, + { + "label": "WebAILyzer Deferred", + "file_type": "document", + "source_file": "docs/deferred/webailyzer.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "docs_deferred_webailyzer_webailyzer_deferred", + "community": 44, + "norm_label": "webailyzer deferred" + }, + { + "label": "SSRF Hardening Requirement", + "file_type": "rationale", + "source_file": "docs/deferred/webailyzer.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "docs_deferred_webailyzer_ssrf_hardening", + "community": 58, + "norm_label": "ssrf hardening requirement" + }, + { + "label": "Orphaned WebAILyzer Submodule Gitlink", + "file_type": "concept", + "source_file": "docs/deferred/webailyzer.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "docs_deferred_webailyzer_orphaned_submodule_gitlink", + "community": 44, + "norm_label": "orphaned webailyzer submodule gitlink" + }, + { + "label": "WebAILyzer Pre-Integration Checklist", + "file_type": "concept", + "source_file": "docs/deferred/webailyzer.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "docs_deferred_webailyzer_pre_integration_checklist", + "community": 44, + "norm_label": "webailyzer pre-integration checklist" + }, + { + "label": "Internal-Only WebAILyzer Service", + "file_type": "rationale", + "source_file": "docs/deferred/webailyzer.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "docs_deferred_webailyzer_internal_only_service", + "community": 44, + "norm_label": "internal-only webailyzer service" + }, + { + "label": "Rollback Runbook", + "file_type": "document", + "source_file": "scripts/deploy/rollback.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "scripts_deploy_rollback_rollback_runbook", + "community": 52, + "norm_label": "rollback runbook" + }, + { + "label": "stackfast-web Rollback", + "file_type": "concept", + "source_file": "scripts/deploy/rollback.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "scripts_deploy_rollback_stackfast_web_rollback", + "community": 52, + "norm_label": "stackfast-web rollback" + }, + { + "label": "stackfast-api Rollback", + "file_type": "concept", + "source_file": "scripts/deploy/rollback.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "scripts_deploy_rollback_stackfast_api_rollback", + "community": 52, + "norm_label": "stackfast-api rollback" + }, + { + "label": "Schema Compatibility Gate", + "file_type": "rationale", + "source_file": "scripts/deploy/rollback.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "scripts_deploy_rollback_schema_compatibility_gate", + "community": 52, + "norm_label": "schema compatibility gate" + }, + { + "label": "Two-Deploy Schema Rule", + "file_type": "rationale", + "source_file": "scripts/deploy/rollback.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "scripts_deploy_rollback_two_deploy_schema_rule", + "community": 52, + "norm_label": "two-deploy schema rule" + }, + { + "label": "Manual Forward-Migration Intervention", + "file_type": "concept", + "source_file": "scripts/deploy/rollback.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "scripts_deploy_rollback_manual_forward_migration_intervention", + "community": 52, + "norm_label": "manual forward-migration intervention" + }, + { + "label": "Post-Rollback Smoke Test Verification", + "file_type": "concept", + "source_file": "scripts/deploy/rollback.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "scripts_deploy_rollback_smoke_test_verification", + "community": 52, + "norm_label": "post-rollback smoke test verification" + }, + { + "label": "Vite Logo", + "file_type": "image", + "source_file": "apps/web/public/vite.svg", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "apps_web_public_vite_vite_logo", + "community": 67, + "norm_label": "vite logo" + }, + { + "label": "Iconify Logo Asset", + "file_type": "image", + "source_file": "apps/web/public/vite.svg", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "apps_web_public_vite_iconify_logo_asset", + "community": 67, + "norm_label": "iconify logo asset" + }, + { + "label": "Blue Purple Gradient", + "file_type": "image", + "source_file": "apps/web/public/vite.svg", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "apps_web_public_vite_blue_purple_gradient", + "community": 67, + "norm_label": "blue purple gradient" + }, + { + "label": "Yellow Orange Gradient", + "file_type": "image", + "source_file": "apps/web/public/vite.svg", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "apps_web_public_vite_yellow_orange_gradient", + "community": 67, + "norm_label": "yellow orange gradient" + }, + { + "label": "Yellow Lightning Bolt", + "file_type": "image", + "source_file": "apps/web/public/vite.svg", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "apps_web_public_vite_yellow_lightning_bolt", + "community": 67, + "norm_label": "yellow lightning bolt" + } + ], + "links": [ + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/package.json", + "source_location": "L15", + "weight": 1.0, + "source": "apps_api_package", + "target": "apps_api_package_dependencies", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/package.json", + "source_location": "L32", + "weight": 1.0, + "source": "apps_api_package", + "target": "apps_api_package_devdependencies", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/package.json", + "source_location": "L2", + "weight": 1.0, + "source": "apps_api_package", + "target": "apps_api_package_name", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/package.json", + "source_location": "L4", + "weight": 1.0, + "source": "apps_api_package", + "target": "apps_api_package_private", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/package.json", + "source_location": "L6", + "weight": 1.0, + "source": "apps_api_package", + "target": "apps_api_package_scripts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/package.json", + "source_location": "L5", + "weight": 1.0, + "source": "apps_api_package", + "target": "apps_api_package_type", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/package.json", + "source_location": "L3", + "weight": 1.0, + "source": "apps_api_package", + "target": "apps_api_package_version", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/package.json", + "source_location": "L8", + "weight": 1.0, + "source": "apps_api_package_scripts", + "target": "apps_api_package_scripts_build", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/package.json", + "source_location": "L7", + "weight": 1.0, + "source": "apps_api_package_scripts", + "target": "apps_api_package_scripts_dev", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/package.json", + "source_location": "L10", + "weight": 1.0, + "source": "apps_api_package_scripts", + "target": "apps_api_package_scripts_lint", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/package.json", + "source_location": "L13", + "weight": 1.0, + "source": "apps_api_package_scripts", + "target": "apps_api_package_scripts_seed", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/package.json", + "source_location": "L9", + "weight": 1.0, + "source": "apps_api_package_scripts", + "target": "apps_api_package_scripts_start", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/package.json", + "source_location": "L12", + "weight": 1.0, + "source": "apps_api_package_scripts", + "target": "apps_api_package_scripts_test", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/package.json", + "source_location": "L11", + "weight": 1.0, + "source": "apps_api_package_scripts", + "target": "apps_api_package_scripts_type_check", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/package.json", + "source_location": "L27", + "weight": 1.0, + "source": "apps_api_package_dependencies", + "target": "apps_api_package_dependencies_better_auth", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/package.json", + "source_location": "L28", + "weight": 1.0, + "source": "apps_api_package_dependencies", + "target": "apps_api_package_dependencies_drizzle_orm", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/package.json", + "source_location": "L29", + "weight": 1.0, + "source": "apps_api_package_dependencies", + "target": "apps_api_package_dependencies_hono", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/package.json", + "source_location": "L16", + "weight": 1.0, + "source": "apps_api_package_dependencies", + "target": "apps_api_package_dependencies_hono_node_server", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/package.json", + "source_location": "L17", + "weight": 1.0, + "source": "apps_api_package_dependencies", + "target": "apps_api_package_dependencies_neondatabase_serverless", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/package.json", + "source_location": "L18", + "weight": 1.0, + "source": "apps_api_package_dependencies", + "target": "apps_api_package_dependencies_sentry_node", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/package.json", + "source_location": "L19", + "weight": 1.0, + "source": "apps_api_package_dependencies", + "target": "apps_api_package_dependencies_stackfast_ai", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/package.json", + "source_location": "L20", + "weight": 1.0, + "source": "apps_api_package_dependencies", + "target": "apps_api_package_dependencies_stackfast_exporter", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/package.json", + "source_location": "L21", + "weight": 1.0, + "source": "apps_api_package_dependencies", + "target": "apps_api_package_dependencies_stackfast_registry", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/package.json", + "source_location": "L22", + "weight": 1.0, + "source": "apps_api_package_dependencies", + "target": "apps_api_package_dependencies_stackfast_rules_engine", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/package.json", + "source_location": "L23", + "weight": 1.0, + "source": "apps_api_package_dependencies", + "target": "apps_api_package_dependencies_stackfast_schemas", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/package.json", + "source_location": "L24", + "weight": 1.0, + "source": "apps_api_package_dependencies", + "target": "apps_api_package_dependencies_stackfast_shared", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/package.json", + "source_location": "L25", + "weight": 1.0, + "source": "apps_api_package_dependencies", + "target": "apps_api_package_dependencies_upstash_ratelimit", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/package.json", + "source_location": "L26", + "weight": 1.0, + "source": "apps_api_package_dependencies", + "target": "apps_api_package_dependencies_upstash_redis", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/package.json", + "source_location": "L30", + "weight": 1.0, + "source": "apps_api_package_dependencies", + "target": "apps_api_package_dependencies_zod", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/package.json", + "source_location": "L34", + "weight": 1.0, + "source": "apps_api_package_devdependencies", + "target": "apps_api_package_devdependencies_drizzle_kit", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/package.json", + "source_location": "L35", + "weight": 1.0, + "source": "apps_api_package_devdependencies", + "target": "apps_api_package_devdependencies_fast_check", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/package.json", + "source_location": "L36", + "weight": 1.0, + "source": "apps_api_package_devdependencies", + "target": "apps_api_package_devdependencies_tsx", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/package.json", + "source_location": "L33", + "weight": 1.0, + "source": "apps_api_package_devdependencies", + "target": "apps_api_package_devdependencies_types_node", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/package.json", + "source_location": "L37", + "weight": 1.0, + "source": "apps_api_package_devdependencies", + "target": "apps_api_package_devdependencies_typescript", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.pbt.test.ts", + "source_location": "L41", + "weight": 1.0, + "source": "apps_api_src_app_pbt_test", + "target": "apps_api_src_app", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.pbt.test.ts", + "source_location": "L41", + "weight": 1.0, + "source": "apps_api_src_app_pbt_test", + "target": "apps_api_src_app_app", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.pbt.test.ts", + "source_location": "L71", + "weight": 1.0, + "source": "apps_api_src_app_pbt_test", + "target": "apps_api_src_app_pbt_test_buildapp", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.pbt.test.ts", + "source_location": "L188", + "weight": 1.0, + "source": "apps_api_src_app_pbt_test", + "target": "apps_api_src_app_pbt_test_check", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.pbt.test.ts", + "source_location": "L55", + "weight": 1.0, + "source": "apps_api_src_app_pbt_test", + "target": "apps_api_src_app_pbt_test_requestableapp", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.pbt.test.ts", + "source_location": "L42", + "weight": 1.0, + "source": "apps_api_src_app_pbt_test", + "target": "apps_api_src_rate_limit_buckets", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.pbt.test.ts", + "source_location": "L42", + "weight": 1.0, + "source": "apps_api_src_app_pbt_test", + "target": "apps_api_src_rate_limit_buckets_buckets", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.pbt.test.ts", + "source_location": "L43", + "weight": 1.0, + "source": "apps_api_src_app_pbt_test", + "target": "apps_api_src_rate_limit_index", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.pbt.test.ts", + "source_location": "L43", + "weight": 1.0, + "source": "apps_api_src_app_pbt_test", + "target": "apps_api_src_rate_limit_index_resetbackendfortests", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.pbt.test.ts", + "source_location": "L44", + "weight": 1.0, + "source": "apps_api_src_app_pbt_test", + "target": "apps_api_src_rate_limit_types", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.pbt.test.ts", + "source_location": "L44", + "weight": 1.0, + "source": "apps_api_src_app_pbt_test", + "target": "apps_api_src_rate_limit_types_ratelimitbackend", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.pbt.test.ts", + "source_location": "L44", + "weight": 1.0, + "source": "apps_api_src_app_pbt_test", + "target": "apps_api_src_rate_limit_types_ratelimitcheckargs", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.pbt.test.ts", + "source_location": "L44", + "weight": 1.0, + "source": "apps_api_src_app_pbt_test", + "target": "apps_api_src_rate_limit_types_ratelimitdecision", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.pbt.test.ts", + "source_location": "L87", + "weight": 1.0, + "source": "apps_api_src_app_pbt_test_buildapp", + "target": "apps_api_src_app", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.sentry.test.ts", + "source_location": "L3", + "weight": 1.0, + "source": "apps_api_src_app_sentry_test", + "target": "apps_api_src_app", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.sentry.test.ts", + "source_location": "L3", + "weight": 1.0, + "source": "apps_api_src_app_sentry_test", + "target": "apps_api_src_app_app", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.sentry.test.ts", + "source_location": "L4", + "weight": 1.0, + "source": "apps_api_src_app_sentry_test", + "target": "apps_api_src_observability_sentry", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.sentry.test.ts", + "source_location": "L4", + "weight": 1.0, + "source": "apps_api_src_app_sentry_test", + "target": "apps_api_src_observability_sentry_initsentry", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.sentry.test.ts", + "source_location": "L4", + "weight": 1.0, + "source": "apps_api_src_app_sentry_test", + "target": "apps_api_src_observability_sentry_resetsentryfortests", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.test.ts", + "source_location": "L2", + "weight": 1.0, + "source": "apps_api_src_app_test", + "target": "apps_api_src_app", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.test.ts", + "source_location": "L2", + "weight": 1.0, + "source": "apps_api_src_app_test", + "target": "apps_api_src_app_app", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.test.ts", + "source_location": "L699", + "weight": 1.0, + "source": "apps_api_src_app_test", + "target": "apps_api_src_app_test_check", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.test.ts", + "source_location": "L519", + "weight": 1.0, + "source": "apps_api_src_app_test", + "target": "apps_api_src_app_test_createsharedstatebackend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.test.ts", + "source_location": "L491", + "weight": 1.0, + "source": "apps_api_src_app_test", + "target": "apps_api_src_app_test_createspybackend", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.test.ts", + "source_location": "L3", + "weight": 1.0, + "source": "apps_api_src_app_test", + "target": "apps_api_src_rate_limit_buckets", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.test.ts", + "source_location": "L3", + "weight": 1.0, + "source": "apps_api_src_app_test", + "target": "apps_api_src_rate_limit_buckets_buckets", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.test.ts", + "source_location": "L4", + "weight": 1.0, + "source": "apps_api_src_app_test", + "target": "apps_api_src_rate_limit_index", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.test.ts", + "source_location": "L4", + "weight": 1.0, + "source": "apps_api_src_app_test", + "target": "apps_api_src_rate_limit_index_resetbackendfortests", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.test.ts", + "source_location": "L7", + "weight": 1.0, + "source": "apps_api_src_app_test", + "target": "apps_api_src_rate_limit_types", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.test.ts", + "source_location": "L7", + "weight": 1.0, + "source": "apps_api_src_app_test", + "target": "apps_api_src_rate_limit_types_ratelimitbackend", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.test.ts", + "source_location": "L7", + "weight": 1.0, + "source": "apps_api_src_app_test", + "target": "apps_api_src_rate_limit_types_ratelimitcheckargs", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.test.ts", + "source_location": "L7", + "weight": 1.0, + "source": "apps_api_src_app_test", + "target": "apps_api_src_rate_limit_types_ratelimitdecision", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L62", + "weight": 1.0, + "source": "apps_api_src_app", + "target": "apps_api_src_app_aiprovider", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L79", + "weight": 1.0, + "source": "apps_api_src_app", + "target": "apps_api_src_app_app", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L25", + "weight": 1.0, + "source": "apps_api_src_app", + "target": "apps_api_src_app_bindings", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L424", + "weight": 1.0, + "source": "apps_api_src_app", + "target": "apps_api_src_app_buildalternatives", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L447", + "weight": 1.0, + "source": "apps_api_src_app", + "target": "apps_api_src_app_buildrecommendations", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L58", + "weight": 1.0, + "source": "apps_api_src_app", + "target": "apps_api_src_app_catalogloader", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L394", + "weight": 1.0, + "source": "apps_api_src_app", + "target": "apps_api_src_app_chooseblueprinttools", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L53", + "weight": 1.0, + "source": "apps_api_src_app", + "target": "apps_api_src_app_enrichtoolschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L63", + "weight": 1.0, + "source": "apps_api_src_app", + "target": "apps_api_src_app_explainer", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L436", + "weight": 1.0, + "source": "apps_api_src_app", + "target": "apps_api_src_app_generatesafeexport", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L49", + "weight": 1.0, + "source": "apps_api_src_app", + "target": "apps_api_src_app_importtoolsschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L44", + "weight": 1.0, + "source": "apps_api_src_app", + "target": "apps_api_src_app_migrationparamsschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L345", + "weight": 1.0, + "source": "apps_api_src_app", + "target": "apps_api_src_app_parsejson", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L429", + "weight": 1.0, + "source": "apps_api_src_app", + "target": "apps_api_src_app_replacetool", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L369", + "weight": 1.0, + "source": "apps_api_src_app", + "target": "apps_api_src_app_requireadminapikey", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L360", + "weight": 1.0, + "source": "apps_api_src_app", + "target": "apps_api_src_app_resolvetools", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L382", + "weight": 1.0, + "source": "apps_api_src_app", + "target": "apps_api_src_app_sorttools", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L34", + "weight": 1.0, + "source": "apps_api_src_app", + "target": "apps_api_src_app_toolsearchqueryschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L30", + "weight": 1.0, + "source": "apps_api_src_app", + "target": "apps_api_src_app_variables", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L21", + "weight": 1.0, + "source": "apps_api_src_app", + "target": "apps_api_src_middleware_auth", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L21", + "weight": 1.0, + "source": "apps_api_src_app", + "target": "apps_api_src_middleware_auth_getauth", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L21", + "weight": 1.0, + "source": "apps_api_src_app", + "target": "apps_api_src_middleware_auth_optionalsession", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L21", + "weight": 1.0, + "source": "apps_api_src_app", + "target": "apps_api_src_middleware_auth_requiresession", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L23", + "weight": 1.0, + "source": "apps_api_src_app", + "target": "apps_api_src_observability_sentry", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L23", + "weight": 1.0, + "source": "apps_api_src_app", + "target": "apps_api_src_observability_sentry_isenabled", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L20", + "weight": 1.0, + "source": "apps_api_src_app", + "target": "apps_api_src_openapi", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L20", + "weight": 1.0, + "source": "apps_api_src_app", + "target": "apps_api_src_openapi_openapidocument", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L22", + "weight": 1.0, + "source": "apps_api_src_app", + "target": "apps_api_src_rate_limit_index", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L22", + "weight": 1.0, + "source": "apps_api_src_app", + "target": "apps_api_src_rate_limit_index_createratelimitmiddleware", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L1", + "weight": 1.0, + "source": "apps_api_src_app", + "target": "packages_ai_src_cost_estimator_estimatecosts", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L1", + "weight": 1.0, + "source": "apps_api_src_app", + "target": "packages_ai_src_index", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L1", + "weight": 1.0, + "source": "apps_api_src_app", + "target": "packages_ai_src_index_createexplainer", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L2", + "weight": 1.0, + "source": "apps_api_src_app", + "target": "packages_exporter_src_export_generator_exporterror", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L2", + "weight": 1.0, + "source": "apps_api_src_app", + "target": "packages_exporter_src_export_generator_generateexport", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L2", + "weight": 1.0, + "source": "apps_api_src_app", + "target": "packages_exporter_src_index", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L3", + "weight": 1.0, + "source": "apps_api_src_app", + "target": "packages_registry_src_index", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L3", + "weight": 1.0, + "source": "apps_api_src_app", + "target": "packages_registry_src_index_catalogloader", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L4", + "weight": 1.0, + "source": "apps_api_src_app", + "target": "packages_rules_engine_src_index", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L4", + "weight": 1.0, + "source": "apps_api_src_app", + "target": "packages_rules_engine_src_rules_engine_evaluaterulessync", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L5", + "weight": 1.0, + "source": "apps_api_src_app", + "target": "packages_schemas_src_domain_blueprintrequestschema", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L5", + "weight": 1.0, + "source": "apps_api_src_app", + "target": "packages_schemas_src_domain_categoryid", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L5", + "weight": 1.0, + "source": "apps_api_src_app", + "target": "packages_schemas_src_domain_diagnostic", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L5", + "weight": 1.0, + "source": "apps_api_src_app", + "target": "packages_schemas_src_domain_scaffoldrequestschema", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L5", + "weight": 1.0, + "source": "apps_api_src_app", + "target": "packages_schemas_src_domain_stackanalyzerequestschema", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L5", + "weight": 1.0, + "source": "apps_api_src_app", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L5", + "weight": 1.0, + "source": "apps_api_src_app", + "target": "packages_schemas_src_index", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L17", + "weight": 1.0, + "source": "apps_api_src_app", + "target": "packages_ai_src_types", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "export", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/index.ts", + "source_location": "L19", + "weight": 1.0, + "source": "apps_api_src_index", + "target": "apps_api_src_app", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/index.ts", + "source_location": "L2", + "weight": 1.0, + "source": "apps_api_src_index", + "target": "apps_api_src_app_app", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L425", + "weight": 1.0, + "source": "apps_api_src_app_buildalternatives", + "target": "apps_api_src_app_replacetool", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/app.ts", + "source_location": "L438", + "weight": 1.0, + "source": "apps_api_src_app_generatesafeexport", + "target": "packages_exporter_src_export_generator_generateexport", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/db/client.ts", + "source_location": "L7", + "weight": 1.0, + "source": "apps_api_src_db_client", + "target": "apps_api_src_db_client_createdrizzle", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/db/client.ts", + "source_location": "L39", + "weight": 1.0, + "source": "apps_api_src_db_client", + "target": "apps_api_src_db_client_db", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/db/client.ts", + "source_location": "L23", + "weight": 1.0, + "source": "apps_api_src_db_client", + "target": "apps_api_src_db_client_getdb", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/db/client.ts", + "source_location": "L35", + "weight": 1.0, + "source": "apps_api_src_db_client", + "target": "apps_api_src_db_client_isdatabaseavailable", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/db/client.ts", + "source_location": "L3", + "weight": 1.0, + "source": "apps_api_src_db_client", + "target": "packages_schemas_src_db", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/middleware/auth.ts", + "source_location": "L5", + "weight": 1.0, + "source": "apps_api_src_middleware_auth", + "target": "apps_api_src_db_client", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/main.tsx", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_main", + "target": "apps_api_src_db_client", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/db/client.ts", + "source_location": "L25", + "weight": 1.0, + "source": "apps_api_src_db_client_getdb", + "target": "apps_api_src_db_client_createdrizzle", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/middleware/auth.ts", + "source_location": "L5", + "weight": 1.0, + "source": "apps_api_src_middleware_auth", + "target": "apps_api_src_db_client_getdb", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/middleware/auth.ts", + "source_location": "L74", + "weight": 1.0, + "source": "apps_api_src_middleware_auth_createauth", + "target": "apps_api_src_db_client_getdb", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/middleware/auth.ts", + "source_location": "L5", + "weight": 1.0, + "source": "apps_api_src_middleware_auth", + "target": "apps_api_src_db_client_isdatabaseavailable", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/api/src/middleware/auth.ts", + "source_location": "L86", + "weight": 1.0, + "source": "apps_api_src_middleware_auth_getauth", + "target": "apps_api_src_db_client_isdatabaseavailable" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/db/seed.ts", + "source_location": "L17", + "weight": 1.0, + "source": "apps_api_src_db_seed", + "target": "apps_api_src_db_seed_seed", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/db/seed.ts", + "source_location": "L15", + "weight": 1.0, + "source": "apps_api_src_db_seed", + "target": "packages_registry_src_index", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/db/seed.ts", + "source_location": "L15", + "weight": 1.0, + "source": "apps_api_src_db_seed", + "target": "packages_registry_src_index_catalogloader", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/index.ts", + "source_location": "L5", + "weight": 1.0, + "source": "apps_api_src_index", + "target": "apps_api_src_index_port", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/index.ts", + "source_location": "L3", + "weight": 1.0, + "source": "apps_api_src_index", + "target": "apps_api_src_observability_sentry", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/index.ts", + "source_location": "L3", + "weight": 1.0, + "source": "apps_api_src_index", + "target": "apps_api_src_observability_sentry_initsentry", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/middleware/auth.test.ts", + "source_location": "L2", + "weight": 1.0, + "source": "apps_api_src_middleware_auth_test", + "target": "apps_api_src_middleware_auth", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/middleware/auth.test.ts", + "source_location": "L2", + "weight": 1.0, + "source": "apps_api_src_middleware_auth_test", + "target": "apps_api_src_middleware_auth_buildauthoptions", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/middleware/auth.test.ts", + "source_location": "L2", + "weight": 1.0, + "source": "apps_api_src_middleware_auth_test", + "target": "apps_api_src_middleware_auth_getauth", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/middleware/auth.ts", + "source_location": "L110", + "weight": 1.0, + "source": "apps_api_src_middleware_auth", + "target": "apps_api_src_middleware_auth_authbindings", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/middleware/auth.ts", + "source_location": "L115", + "weight": 1.0, + "source": "apps_api_src_middleware_auth", + "target": "apps_api_src_middleware_auth_authvariables", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/middleware/auth.ts", + "source_location": "L38", + "weight": 1.0, + "source": "apps_api_src_middleware_auth", + "target": "apps_api_src_middleware_auth_buildauthoptions", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/middleware/auth.ts", + "source_location": "L124", + "weight": 1.0, + "source": "apps_api_src_middleware_auth", + "target": "apps_api_src_middleware_auth_canbypassauthforlocaldev", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/middleware/auth.ts", + "source_location": "L73", + "weight": 1.0, + "source": "apps_api_src_middleware_auth", + "target": "apps_api_src_middleware_auth_createauth", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/middleware/auth.ts", + "source_location": "L85", + "weight": 1.0, + "source": "apps_api_src_middleware_auth", + "target": "apps_api_src_middleware_auth_getauth", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/middleware/auth.ts", + "source_location": "L120", + "weight": 1.0, + "source": "apps_api_src_middleware_auth", + "target": "apps_api_src_middleware_auth_isproduction", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/middleware/auth.ts", + "source_location": "L223", + "weight": 1.0, + "source": "apps_api_src_middleware_auth", + "target": "apps_api_src_middleware_auth_optionalsession", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/middleware/auth.ts", + "source_location": "L144", + "weight": 1.0, + "source": "apps_api_src_middleware_auth", + "target": "apps_api_src_middleware_auth_requiresession", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/middleware/auth.ts", + "source_location": "L99", + "weight": 1.0, + "source": "apps_api_src_middleware_auth", + "target": "apps_api_src_middleware_auth_sessionuser", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/middleware/auth.ts", + "source_location": "L3", + "weight": 1.0, + "source": "apps_api_src_middleware_auth", + "target": "packages_ai_src_types", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/middleware/auth.ts", + "source_location": "L56", + "weight": 1.0, + "source": "apps_api_src_middleware_auth_buildauthoptions", + "target": "apps_api_src_middleware_auth_isproduction", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/middleware/auth.ts", + "source_location": "L77", + "weight": 1.0, + "source": "apps_api_src_middleware_auth_createauth", + "target": "apps_api_src_middleware_auth_buildauthoptions", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/middleware/auth.ts", + "source_location": "L90", + "weight": 1.0, + "source": "apps_api_src_middleware_auth_getauth", + "target": "apps_api_src_middleware_auth_createauth", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/middleware/auth.ts", + "source_location": "L125", + "weight": 1.0, + "source": "apps_api_src_middleware_auth_canbypassauthforlocaldev", + "target": "apps_api_src_middleware_auth_isproduction", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/observability/sentry.pbt.test.ts", + "source_location": "L59", + "weight": 1.0, + "source": "apps_api_src_observability_sentry_pbt_test", + "target": "apps_api_src_observability_sentry", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/observability/sentry.pbt.test.ts", + "source_location": "L59", + "weight": 1.0, + "source": "apps_api_src_observability_sentry_pbt_test", + "target": "apps_api_src_observability_sentry_initsentry", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/observability/sentry.pbt.test.ts", + "source_location": "L59", + "weight": 1.0, + "source": "apps_api_src_observability_sentry_pbt_test", + "target": "apps_api_src_observability_sentry_isenabled", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/observability/sentry.pbt.test.ts", + "source_location": "L68", + "weight": 1.0, + "source": "apps_api_src_observability_sentry_pbt_test", + "target": "apps_api_src_observability_sentry_pbt_test_env_keys", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/observability/sentry.pbt.test.ts", + "source_location": "L99", + "weight": 1.0, + "source": "apps_api_src_observability_sentry_pbt_test", + "target": "apps_api_src_observability_sentry_pbt_test_eventarb", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/observability/sentry.pbt.test.ts", + "source_location": "L92", + "weight": 1.0, + "source": "apps_api_src_observability_sentry_pbt_test", + "target": "apps_api_src_observability_sentry_pbt_test_sentryevent", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/observability/sentry.pbt.test.ts", + "source_location": "L112", + "weight": 1.0, + "source": "apps_api_src_observability_sentry_pbt_test", + "target": "apps_api_src_observability_sentry_pbt_test_silentlogger", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/observability/sentry.pbt.test.ts", + "source_location": "L63", + "weight": 1.0, + "source": "apps_api_src_observability_sentry_pbt_test", + "target": "apps_api_src_observability_sentry_pbt_test_valid_dsns", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/observability/sentry.pbt.test.ts", + "source_location": "L59", + "weight": 1.0, + "source": "apps_api_src_observability_sentry_pbt_test", + "target": "apps_api_src_observability_sentry_resetsentryfortests", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/observability/sentry.test.ts", + "source_location": "L3", + "weight": 1.0, + "source": "apps_api_src_observability_sentry_test", + "target": "apps_api_src_observability_sentry", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/observability/sentry.test.ts", + "source_location": "L3", + "weight": 1.0, + "source": "apps_api_src_observability_sentry_test", + "target": "apps_api_src_observability_sentry_attachsentrytohono", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/observability/sentry.test.ts", + "source_location": "L3", + "weight": 1.0, + "source": "apps_api_src_observability_sentry_test", + "target": "apps_api_src_observability_sentry_initsentry", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/observability/sentry.test.ts", + "source_location": "L3", + "weight": 1.0, + "source": "apps_api_src_observability_sentry_test", + "target": "apps_api_src_observability_sentry_isenabled", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/observability/sentry.test.ts", + "source_location": "L3", + "weight": 1.0, + "source": "apps_api_src_observability_sentry_test", + "target": "apps_api_src_observability_sentry_resetsentryfortests", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/observability/sentry.test.ts", + "source_location": "L3", + "weight": 1.0, + "source": "apps_api_src_observability_sentry_test", + "target": "apps_api_src_observability_sentry_scrubevent", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/observability/sentry.test.ts", + "source_location": "L25", + "weight": 1.0, + "source": "apps_api_src_observability_sentry_test", + "target": "apps_api_src_observability_sentry_test_env_keys", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/observability/sentry.ts", + "source_location": "L104", + "weight": 1.0, + "source": "apps_api_src_observability_sentry", + "target": "apps_api_src_observability_sentry_attachsentrytohono", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/observability/sentry.ts", + "source_location": "L45", + "weight": 1.0, + "source": "apps_api_src_observability_sentry", + "target": "apps_api_src_observability_sentry_initsentry", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/observability/sentry.ts", + "source_location": "L28", + "weight": 1.0, + "source": "apps_api_src_observability_sentry", + "target": "apps_api_src_observability_sentry_initsentryoptions", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/observability/sentry.ts", + "source_location": "L124", + "weight": 1.0, + "source": "apps_api_src_observability_sentry", + "target": "apps_api_src_observability_sentry_isenabled", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/observability/sentry.ts", + "source_location": "L39", + "weight": 1.0, + "source": "apps_api_src_observability_sentry", + "target": "apps_api_src_observability_sentry_logger", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/observability/sentry.ts", + "source_location": "L175", + "weight": 1.0, + "source": "apps_api_src_observability_sentry", + "target": "apps_api_src_observability_sentry_resetsentryfortests", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/observability/sentry.ts", + "source_location": "L140", + "weight": 1.0, + "source": "apps_api_src_observability_sentry", + "target": "apps_api_src_observability_sentry_scrubevent", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/observability/sentry.ts", + "source_location": "L109", + "weight": 1.0, + "source": "apps_api_src_observability_sentry_attachsentrytohono", + "target": "apps_api_src_observability_sentry_isenabled", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/openapi.ts", + "source_location": "L77", + "weight": 1.0, + "source": "apps_api_src_openapi", + "target": "apps_api_src_openapi_category", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/openapi.ts", + "source_location": "L62", + "weight": 1.0, + "source": "apps_api_src_openapi", + "target": "apps_api_src_openapi_diagnostic", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/openapi.ts", + "source_location": "L9", + "weight": 1.0, + "source": "apps_api_src_openapi", + "target": "apps_api_src_openapi_errorresponse", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/openapi.ts", + "source_location": "L91", + "weight": 1.0, + "source": "apps_api_src_openapi", + "target": "apps_api_src_openapi_openapidocument", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/openapi.ts", + "source_location": "L37", + "weight": 1.0, + "source": "apps_api_src_openapi", + "target": "apps_api_src_openapi_tooldetail", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/openapi.ts", + "source_location": "L18", + "weight": 1.0, + "source": "apps_api_src_openapi", + "target": "apps_api_src_openapi_toolpricing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/openapi.ts", + "source_location": "L28", + "weight": 1.0, + "source": "apps_api_src_openapi", + "target": "apps_api_src_openapi_toolsupports", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/buckets.test.ts", + "source_location": "L2", + "weight": 1.0, + "source": "apps_api_src_rate_limit_buckets_test", + "target": "apps_api_src_rate_limit_buckets", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/buckets.test.ts", + "source_location": "L2", + "weight": 1.0, + "source": "apps_api_src_rate_limit_buckets_test", + "target": "apps_api_src_rate_limit_buckets_bucket_names", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/buckets.test.ts", + "source_location": "L2", + "weight": 1.0, + "source": "apps_api_src_rate_limit_buckets_test", + "target": "apps_api_src_rate_limit_buckets_bucketname", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/buckets.test.ts", + "source_location": "L2", + "weight": 1.0, + "source": "apps_api_src_rate_limit_buckets_test", + "target": "apps_api_src_rate_limit_buckets_buckets", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/buckets.ts", + "source_location": "L27", + "weight": 1.0, + "source": "apps_api_src_rate_limit_buckets", + "target": "apps_api_src_rate_limit_buckets_bucket_names", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/buckets.ts", + "source_location": "L17", + "weight": 1.0, + "source": "apps_api_src_rate_limit_buckets", + "target": "apps_api_src_rate_limit_buckets_bucketconfig", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/buckets.ts", + "source_location": "L15", + "weight": 1.0, + "source": "apps_api_src_rate_limit_buckets", + "target": "apps_api_src_rate_limit_buckets_bucketname", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/buckets.ts", + "source_location": "L22", + "weight": 1.0, + "source": "apps_api_src_rate_limit_buckets", + "target": "apps_api_src_rate_limit_buckets_buckets", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/fail-open.ts", + "source_location": "L44", + "weight": 1.0, + "source": "apps_api_src_rate_limit_fail_open", + "target": "apps_api_src_rate_limit_buckets", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/fail-open.test.ts", + "source_location": "L2", + "weight": 1.0, + "source": "apps_api_src_rate_limit_fail_open_test", + "target": "apps_api_src_rate_limit_buckets", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "export", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/index.ts", + "source_location": "L168", + "weight": 1.0, + "source": "apps_api_src_rate_limit_index", + "target": "apps_api_src_rate_limit_buckets", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/memory.ts", + "source_location": "L19", + "weight": 1.0, + "source": "apps_api_src_rate_limit_memory", + "target": "apps_api_src_rate_limit_buckets", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/memory.test.ts", + "source_location": "L2", + "weight": 1.0, + "source": "apps_api_src_rate_limit_memory_test", + "target": "apps_api_src_rate_limit_buckets", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/rate-limit.pbt.test.ts", + "source_location": "L66", + "weight": 1.0, + "source": "apps_api_src_rate_limit_rate_limit_pbt_test", + "target": "apps_api_src_rate_limit_buckets", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/types.ts", + "source_location": "L10", + "weight": 1.0, + "source": "apps_api_src_rate_limit_types", + "target": "apps_api_src_rate_limit_buckets", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/upstash.ts", + "source_location": "L57", + "weight": 1.0, + "source": "apps_api_src_rate_limit_upstash", + "target": "apps_api_src_rate_limit_buckets", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/upstash.test.ts", + "source_location": "L3", + "weight": 1.0, + "source": "apps_api_src_rate_limit_upstash_test", + "target": "apps_api_src_rate_limit_buckets", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/index.ts", + "source_location": "L168", + "weight": 1.0, + "source": "apps_api_src_rate_limit_index", + "target": "apps_api_src_rate_limit_buckets_bucketname", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/rate-limit.pbt.test.ts", + "source_location": "L66", + "weight": 1.0, + "source": "apps_api_src_rate_limit_rate_limit_pbt_test", + "target": "apps_api_src_rate_limit_buckets_bucketname", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/types.ts", + "source_location": "L10", + "weight": 1.0, + "source": "apps_api_src_rate_limit_types", + "target": "apps_api_src_rate_limit_buckets_bucketname", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/types.ts", + "source_location": "L35", + "weight": 1.0, + "source": "apps_api_src_rate_limit_types_ratelimitcheckargs", + "target": "apps_api_src_rate_limit_buckets_bucketname", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/upstash.ts", + "source_location": "L57", + "weight": 1.0, + "source": "apps_api_src_rate_limit_upstash", + "target": "apps_api_src_rate_limit_buckets_bucketname", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/fail-open.ts", + "source_location": "L44", + "weight": 1.0, + "source": "apps_api_src_rate_limit_fail_open", + "target": "apps_api_src_rate_limit_buckets_buckets", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/fail-open.test.ts", + "source_location": "L2", + "weight": 1.0, + "source": "apps_api_src_rate_limit_fail_open_test", + "target": "apps_api_src_rate_limit_buckets_buckets", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/index.ts", + "source_location": "L30", + "weight": 1.0, + "source": "apps_api_src_rate_limit_index", + "target": "apps_api_src_rate_limit_buckets_buckets", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/memory.ts", + "source_location": "L19", + "weight": 1.0, + "source": "apps_api_src_rate_limit_memory", + "target": "apps_api_src_rate_limit_buckets_buckets", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/memory.test.ts", + "source_location": "L2", + "weight": 1.0, + "source": "apps_api_src_rate_limit_memory_test", + "target": "apps_api_src_rate_limit_buckets_buckets", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/upstash.ts", + "source_location": "L57", + "weight": 1.0, + "source": "apps_api_src_rate_limit_upstash", + "target": "apps_api_src_rate_limit_buckets_buckets", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/upstash.test.ts", + "source_location": "L3", + "weight": 1.0, + "source": "apps_api_src_rate_limit_upstash_test", + "target": "apps_api_src_rate_limit_buckets_buckets", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/rate-limit.pbt.test.ts", + "source_location": "L66", + "weight": 1.0, + "source": "apps_api_src_rate_limit_rate_limit_pbt_test", + "target": "apps_api_src_rate_limit_buckets_bucket_names", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/upstash.ts", + "source_location": "L57", + "weight": 1.0, + "source": "apps_api_src_rate_limit_upstash", + "target": "apps_api_src_rate_limit_buckets_bucket_names", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/client-id.test.ts", + "source_location": "L2", + "weight": 1.0, + "source": "apps_api_src_rate_limit_client_id_test", + "target": "apps_api_src_rate_limit_client_id", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/client-id.test.ts", + "source_location": "L2", + "weight": 1.0, + "source": "apps_api_src_rate_limit_client_id_test", + "target": "apps_api_src_rate_limit_client_id_resolveclientid", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/client-id.ts", + "source_location": "L17", + "weight": 1.0, + "source": "apps_api_src_rate_limit_client_id", + "target": "apps_api_src_rate_limit_client_id_headerlookup", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/client-id.ts", + "source_location": "L46", + "weight": 1.0, + "source": "apps_api_src_rate_limit_client_id", + "target": "apps_api_src_rate_limit_client_id_readheader", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/client-id.ts", + "source_location": "L26", + "weight": 1.0, + "source": "apps_api_src_rate_limit_client_id", + "target": "apps_api_src_rate_limit_client_id_resolveclientid", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/index.ts", + "source_location": "L31", + "weight": 1.0, + "source": "apps_api_src_rate_limit_index", + "target": "apps_api_src_rate_limit_client_id", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/client-id.ts", + "source_location": "L27", + "weight": 1.0, + "source": "apps_api_src_rate_limit_client_id_resolveclientid", + "target": "apps_api_src_rate_limit_client_id_readheader", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/index.ts", + "source_location": "L31", + "weight": 1.0, + "source": "apps_api_src_rate_limit_index", + "target": "apps_api_src_rate_limit_client_id_resolveclientid", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/fail-open.test.ts", + "source_location": "L3", + "weight": 1.0, + "source": "apps_api_src_rate_limit_fail_open_test", + "target": "apps_api_src_rate_limit_fail_open", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/fail-open.test.ts", + "source_location": "L13", + "weight": 1.0, + "source": "apps_api_src_rate_limit_fail_open_test", + "target": "apps_api_src_rate_limit_fail_open_test_makeclock", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/fail-open.test.ts", + "source_location": "L42", + "weight": 1.0, + "source": "apps_api_src_rate_limit_fail_open_test", + "target": "apps_api_src_rate_limit_fail_open_test_makescriptedbackend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/fail-open.test.ts", + "source_location": "L72", + "weight": 1.0, + "source": "apps_api_src_rate_limit_fail_open_test", + "target": "apps_api_src_rate_limit_fail_open_test_okdecision", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/fail-open.test.ts", + "source_location": "L36", + "weight": 1.0, + "source": "apps_api_src_rate_limit_fail_open_test", + "target": "apps_api_src_rate_limit_fail_open_test_scriptstep", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/fail-open.test.ts", + "source_location": "L3", + "weight": 1.0, + "source": "apps_api_src_rate_limit_fail_open_test", + "target": "apps_api_src_rate_limit_fail_open_wrapfailopen", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/fail-open.test.ts", + "source_location": "L4", + "weight": 1.0, + "source": "apps_api_src_rate_limit_fail_open_test", + "target": "apps_api_src_rate_limit_types", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/fail-open.test.ts", + "source_location": "L4", + "weight": 1.0, + "source": "apps_api_src_rate_limit_fail_open_test", + "target": "apps_api_src_rate_limit_types_ratelimitbackend", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/fail-open.test.ts", + "source_location": "L4", + "weight": 1.0, + "source": "apps_api_src_rate_limit_fail_open_test", + "target": "apps_api_src_rate_limit_types_ratelimitcheckargs", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/fail-open.test.ts", + "source_location": "L4", + "weight": 1.0, + "source": "apps_api_src_rate_limit_fail_open_test", + "target": "apps_api_src_rate_limit_types_ratelimitdecision", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/fail-open.ts", + "source_location": "L68", + "weight": 1.0, + "source": "apps_api_src_rate_limit_fail_open", + "target": "apps_api_src_rate_limit_fail_open_defaultlogger", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/fail-open.ts", + "source_location": "L76", + "weight": 1.0, + "source": "apps_api_src_rate_limit_fail_open", + "target": "apps_api_src_rate_limit_fail_open_errormessage", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/fail-open.ts", + "source_location": "L54", + "weight": 1.0, + "source": "apps_api_src_rate_limit_fail_open", + "target": "apps_api_src_rate_limit_fail_open_failopenoptions", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/fail-open.ts", + "source_location": "L93", + "weight": 1.0, + "source": "apps_api_src_rate_limit_fail_open", + "target": "apps_api_src_rate_limit_fail_open_wrapfailopen", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/fail-open.ts", + "source_location": "L45", + "weight": 1.0, + "source": "apps_api_src_rate_limit_fail_open", + "target": "apps_api_src_rate_limit_types", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/fail-open.ts", + "source_location": "L45", + "weight": 1.0, + "source": "apps_api_src_rate_limit_fail_open", + "target": "apps_api_src_rate_limit_types_ratelimitbackend", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/fail-open.ts", + "source_location": "L45", + "weight": 1.0, + "source": "apps_api_src_rate_limit_fail_open", + "target": "apps_api_src_rate_limit_types_ratelimitcheckargs", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/fail-open.ts", + "source_location": "L45", + "weight": 1.0, + "source": "apps_api_src_rate_limit_fail_open", + "target": "apps_api_src_rate_limit_types_ratelimitdecision", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/index.ts", + "source_location": "L34", + "weight": 1.0, + "source": "apps_api_src_rate_limit_index", + "target": "apps_api_src_rate_limit_fail_open", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/rate-limit.pbt.test.ts", + "source_location": "L67", + "weight": 1.0, + "source": "apps_api_src_rate_limit_rate_limit_pbt_test", + "target": "apps_api_src_rate_limit_fail_open", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/index.ts", + "source_location": "L34", + "weight": 1.0, + "source": "apps_api_src_rate_limit_index", + "target": "apps_api_src_rate_limit_fail_open_wrapfailopen", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/index.ts", + "source_location": "L59", + "weight": 1.0, + "source": "apps_api_src_rate_limit_index_selectbackend", + "target": "apps_api_src_rate_limit_fail_open_wrapfailopen", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/rate-limit.pbt.test.ts", + "source_location": "L67", + "weight": 1.0, + "source": "apps_api_src_rate_limit_rate_limit_pbt_test", + "target": "apps_api_src_rate_limit_fail_open_wrapfailopen", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/rate-limit.pbt.test.ts", + "source_location": "L120", + "weight": 1.0, + "source": "apps_api_src_rate_limit_rate_limit_pbt_test_runsequence", + "target": "apps_api_src_rate_limit_fail_open_wrapfailopen", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/index.ts", + "source_location": "L37", + "weight": 1.0, + "source": "apps_api_src_rate_limit_index", + "target": "apps_api_src_rate_limit_index_bindings", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/index.ts", + "source_location": "L98", + "weight": 1.0, + "source": "apps_api_src_rate_limit_index", + "target": "apps_api_src_rate_limit_index_createratelimitmiddleware", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/index.ts", + "source_location": "L68", + "weight": 1.0, + "source": "apps_api_src_rate_limit_index", + "target": "apps_api_src_rate_limit_index_getbackend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/index.ts", + "source_location": "L150", + "weight": 1.0, + "source": "apps_api_src_rate_limit_index", + "target": "apps_api_src_rate_limit_index_ratelimithealth", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/index.ts", + "source_location": "L85", + "weight": 1.0, + "source": "apps_api_src_rate_limit_index", + "target": "apps_api_src_rate_limit_index_resetbackendfortests", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/index.ts", + "source_location": "L53", + "weight": 1.0, + "source": "apps_api_src_rate_limit_index", + "target": "apps_api_src_rate_limit_index_selectbackend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/index.ts", + "source_location": "L42", + "weight": 1.0, + "source": "apps_api_src_rate_limit_index", + "target": "apps_api_src_rate_limit_index_variables", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/index.ts", + "source_location": "L32", + "weight": 1.0, + "source": "apps_api_src_rate_limit_index", + "target": "apps_api_src_rate_limit_memory", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/index.ts", + "source_location": "L32", + "weight": 1.0, + "source": "apps_api_src_rate_limit_index", + "target": "apps_api_src_rate_limit_memory_creatememorybackend", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "export", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/index.ts", + "source_location": "L169", + "weight": 1.0, + "source": "apps_api_src_rate_limit_index", + "target": "apps_api_src_rate_limit_types", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/index.ts", + "source_location": "L169", + "weight": 1.0, + "source": "apps_api_src_rate_limit_index", + "target": "apps_api_src_rate_limit_types_ratelimitbackend", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/index.ts", + "source_location": "L169", + "weight": 1.0, + "source": "apps_api_src_rate_limit_index", + "target": "apps_api_src_rate_limit_types_ratelimitcheckargs", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/index.ts", + "source_location": "L169", + "weight": 1.0, + "source": "apps_api_src_rate_limit_index", + "target": "apps_api_src_rate_limit_types_ratelimitdecision", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/index.ts", + "source_location": "L33", + "weight": 1.0, + "source": "apps_api_src_rate_limit_index", + "target": "apps_api_src_rate_limit_upstash", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/index.ts", + "source_location": "L33", + "weight": 1.0, + "source": "apps_api_src_rate_limit_index", + "target": "apps_api_src_rate_limit_upstash_createupstashbackend", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/index.ts", + "source_location": "L27", + "weight": 1.0, + "source": "apps_api_src_rate_limit_index", + "target": "packages_ai_src_types", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/index.ts", + "source_location": "L70", + "weight": 1.0, + "source": "apps_api_src_rate_limit_index_getbackend", + "target": "apps_api_src_rate_limit_index_selectbackend", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/index.ts", + "source_location": "L62", + "weight": 1.0, + "source": "apps_api_src_rate_limit_index_selectbackend", + "target": "apps_api_src_rate_limit_memory_creatememorybackend", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/index.ts", + "source_location": "L57", + "weight": 1.0, + "source": "apps_api_src_rate_limit_index_selectbackend", + "target": "apps_api_src_rate_limit_upstash_createupstashbackend", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/index.ts", + "source_location": "L155", + "weight": 1.0, + "source": "apps_api_src_rate_limit_index_ratelimithealth", + "target": "apps_api_src_rate_limit_index_getbackend", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/memory.test.ts", + "source_location": "L3", + "weight": 1.0, + "source": "apps_api_src_rate_limit_memory_test", + "target": "apps_api_src_rate_limit_memory", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/memory.test.ts", + "source_location": "L3", + "weight": 1.0, + "source": "apps_api_src_rate_limit_memory_test", + "target": "apps_api_src_rate_limit_memory_creatememorybackend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/memory.test.ts", + "source_location": "L8", + "weight": 1.0, + "source": "apps_api_src_rate_limit_memory_test", + "target": "apps_api_src_rate_limit_memory_test_makeclock", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/memory.ts", + "source_location": "L47", + "weight": 1.0, + "source": "apps_api_src_rate_limit_memory", + "target": "apps_api_src_rate_limit_memory_creatememorybackend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/memory.ts", + "source_location": "L31", + "weight": 1.0, + "source": "apps_api_src_rate_limit_memory", + "target": "apps_api_src_rate_limit_memory_memorybackendoptions", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/memory.ts", + "source_location": "L26", + "weight": 1.0, + "source": "apps_api_src_rate_limit_memory", + "target": "apps_api_src_rate_limit_memory_memoryentry", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/memory.ts", + "source_location": "L20", + "weight": 1.0, + "source": "apps_api_src_rate_limit_memory", + "target": "apps_api_src_rate_limit_types", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/memory.ts", + "source_location": "L20", + "weight": 1.0, + "source": "apps_api_src_rate_limit_memory", + "target": "apps_api_src_rate_limit_types_ratelimitbackend", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/memory.ts", + "source_location": "L20", + "weight": 1.0, + "source": "apps_api_src_rate_limit_memory", + "target": "apps_api_src_rate_limit_types_ratelimitcheckargs", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/memory.ts", + "source_location": "L20", + "weight": 1.0, + "source": "apps_api_src_rate_limit_memory", + "target": "apps_api_src_rate_limit_types_ratelimitdecision", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/rate-limit.pbt.test.ts", + "source_location": "L68", + "weight": 1.0, + "source": "apps_api_src_rate_limit_rate_limit_pbt_test", + "target": "apps_api_src_rate_limit_memory", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/rate-limit.pbt.test.ts", + "source_location": "L68", + "weight": 1.0, + "source": "apps_api_src_rate_limit_rate_limit_pbt_test", + "target": "apps_api_src_rate_limit_memory_creatememorybackend", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/rate-limit.pbt.test.ts", + "source_location": "L105", + "weight": 1.0, + "source": "apps_api_src_rate_limit_rate_limit_pbt_test_runsequence", + "target": "apps_api_src_rate_limit_memory_creatememorybackend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/rate-limit.pbt.test.ts", + "source_location": "L76", + "weight": 1.0, + "source": "apps_api_src_rate_limit_rate_limit_pbt_test", + "target": "apps_api_src_rate_limit_rate_limit_pbt_test_makeclock", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/rate-limit.pbt.test.ts", + "source_location": "L95", + "weight": 1.0, + "source": "apps_api_src_rate_limit_rate_limit_pbt_test", + "target": "apps_api_src_rate_limit_rate_limit_pbt_test_runsequence", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/rate-limit.pbt.test.ts", + "source_location": "L69", + "weight": 1.0, + "source": "apps_api_src_rate_limit_rate_limit_pbt_test", + "target": "apps_api_src_rate_limit_types", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/rate-limit.pbt.test.ts", + "source_location": "L69", + "weight": 1.0, + "source": "apps_api_src_rate_limit_rate_limit_pbt_test", + "target": "apps_api_src_rate_limit_types_ratelimitbackend", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/rate-limit.pbt.test.ts", + "source_location": "L100", + "weight": 1.0, + "source": "apps_api_src_rate_limit_rate_limit_pbt_test_runsequence", + "target": "apps_api_src_rate_limit_rate_limit_pbt_test_makeclock", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/types.ts", + "source_location": "L47", + "weight": 1.0, + "source": "apps_api_src_rate_limit_types", + "target": "apps_api_src_rate_limit_types_ratelimitbackend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/types.ts", + "source_location": "L34", + "weight": 1.0, + "source": "apps_api_src_rate_limit_types", + "target": "apps_api_src_rate_limit_types_ratelimitcheckargs", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/types.ts", + "source_location": "L22", + "weight": 1.0, + "source": "apps_api_src_rate_limit_types", + "target": "apps_api_src_rate_limit_types_ratelimitdecision", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/upstash.ts", + "source_location": "L58", + "weight": 1.0, + "source": "apps_api_src_rate_limit_upstash", + "target": "apps_api_src_rate_limit_types", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/upstash.ts", + "source_location": "L58", + "weight": 1.0, + "source": "apps_api_src_rate_limit_upstash", + "target": "apps_api_src_rate_limit_types_ratelimitdecision", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/upstash.ts", + "source_location": "L58", + "weight": 1.0, + "source": "apps_api_src_rate_limit_upstash", + "target": "apps_api_src_rate_limit_types_ratelimitcheckargs", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/types.ts", + "source_location": "L49", + "weight": 1.0, + "source": "apps_api_src_rate_limit_types_ratelimitbackend", + "target": "apps_api_src_rate_limit_types_ratelimitbackend_check", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/upstash.ts", + "source_location": "L58", + "weight": 1.0, + "source": "apps_api_src_rate_limit_upstash", + "target": "apps_api_src_rate_limit_types_ratelimitbackend", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/upstash.test.ts", + "source_location": "L4", + "weight": 1.0, + "source": "apps_api_src_rate_limit_upstash_test", + "target": "apps_api_src_rate_limit_upstash", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/upstash.test.ts", + "source_location": "L4", + "weight": 1.0, + "source": "apps_api_src_rate_limit_upstash_test", + "target": "apps_api_src_rate_limit_upstash_createupstashbackend", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/upstash.test.ts", + "source_location": "L4", + "weight": 1.0, + "source": "apps_api_src_rate_limit_upstash_test", + "target": "apps_api_src_rate_limit_upstash_ratelimitinstance", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/upstash.test.ts", + "source_location": "L4", + "weight": 1.0, + "source": "apps_api_src_rate_limit_upstash_test", + "target": "apps_api_src_rate_limit_upstash_ratelimitresponse", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/upstash.test.ts", + "source_location": "L190", + "weight": 1.0, + "source": "apps_api_src_rate_limit_upstash_test", + "target": "apps_api_src_rate_limit_upstash_test_limit", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/upstash.test.ts", + "source_location": "L37", + "weight": 1.0, + "source": "apps_api_src_rate_limit_upstash_test", + "target": "apps_api_src_rate_limit_upstash_test_makefakelimiter", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/upstash.ts", + "source_location": "L136", + "weight": 1.0, + "source": "apps_api_src_rate_limit_upstash", + "target": "apps_api_src_rate_limit_upstash_createupstashbackend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/upstash.ts", + "source_location": "L113", + "weight": 1.0, + "source": "apps_api_src_rate_limit_upstash", + "target": "apps_api_src_rate_limit_upstash_defaultratelimitctor", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/upstash.ts", + "source_location": "L109", + "weight": 1.0, + "source": "apps_api_src_rate_limit_upstash", + "target": "apps_api_src_rate_limit_upstash_defaultredisctor", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/upstash.ts", + "source_location": "L83", + "weight": 1.0, + "source": "apps_api_src_rate_limit_upstash", + "target": "apps_api_src_rate_limit_upstash_ratelimitctor", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/upstash.ts", + "source_location": "L77", + "weight": 1.0, + "source": "apps_api_src_rate_limit_upstash", + "target": "apps_api_src_rate_limit_upstash_ratelimitinstance", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/upstash.ts", + "source_location": "L69", + "weight": 1.0, + "source": "apps_api_src_rate_limit_upstash", + "target": "apps_api_src_rate_limit_upstash_ratelimitresponse", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/upstash.ts", + "source_location": "L81", + "weight": 1.0, + "source": "apps_api_src_rate_limit_upstash", + "target": "apps_api_src_rate_limit_upstash_redisctor", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/upstash.ts", + "source_location": "L89", + "weight": 1.0, + "source": "apps_api_src_rate_limit_upstash", + "target": "apps_api_src_rate_limit_upstash_upstashbackendoptions", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "apps/api/src/rate-limit/upstash.ts", + "source_location": "L78", + "weight": 1.0, + "source": "apps_api_src_rate_limit_upstash_ratelimitinstance", + "target": "apps_api_src_rate_limit_upstash_ratelimitinstance_limit", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "apps/api/src/rate-limit/upstash.ts", + "source_location": "L152", + "weight": 1.0, + "source": "apps_api_src_rate_limit_upstash_createupstashbackend", + "target": "apps_api_src_rate_limit_upstash_redisctor" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "apps/api/src/rate-limit/upstash.ts", + "source_location": "L165", + "weight": 1.0, + "source": "apps_api_src_rate_limit_upstash_createupstashbackend", + "target": "apps_api_src_rate_limit_upstash_ratelimitctor" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/tsconfig.json", + "source_location": "L3", + "weight": 1.0, + "source": "apps_api_tsconfig", + "target": "apps_api_tsconfig_compileroptions", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/tsconfig.json", + "source_location": "L2", + "weight": 1.0, + "source": "apps_api_tsconfig", + "target": "apps_api_tsconfig_extends", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/tsconfig.json", + "source_location": "L7", + "weight": 1.0, + "source": "apps_api_tsconfig", + "target": "apps_api_tsconfig_include", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/tsconfig.json", + "source_location": "L4", + "weight": 1.0, + "source": "apps_api_tsconfig_compileroptions", + "target": "apps_api_tsconfig_compileroptions_outdir", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/api/tsconfig.json", + "source_location": "L5", + "weight": 1.0, + "source": "apps_api_tsconfig_compileroptions", + "target": "apps_api_tsconfig_compileroptions_rootdir", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/components.json", + "source_location": "L13", + "weight": 1.0, + "source": "apps_web_components", + "target": "apps_web_components_aliases", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/components.json", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_components", + "target": "apps_web_components_rsc", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/components.json", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_components", + "target": "apps_web_components_schema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/components.json", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_components", + "target": "apps_web_components_style", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/components.json", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_components", + "target": "apps_web_components_tailwind", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/components.json", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_components", + "target": "apps_web_components_tsx", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/components.json", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_components_tailwind", + "target": "apps_web_components_tailwind_basecolor", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/components.json", + "source_location": "L7", + "weight": 1.0, + "source": "apps_web_components_tailwind", + "target": "apps_web_components_tailwind_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/components.json", + "source_location": "L8", + "weight": 1.0, + "source": "apps_web_components_tailwind", + "target": "apps_web_components_tailwind_css", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/components.json", + "source_location": "L10", + "weight": 1.0, + "source": "apps_web_components_tailwind", + "target": "apps_web_components_tailwind_cssvariables", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/components.json", + "source_location": "L11", + "weight": 1.0, + "source": "apps_web_components_tailwind", + "target": "apps_web_components_tailwind_prefix", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/components.json", + "source_location": "L14", + "weight": 1.0, + "source": "apps_web_components_aliases", + "target": "apps_web_components_aliases_components", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/components.json", + "source_location": "L18", + "weight": 1.0, + "source": "apps_web_components_aliases", + "target": "apps_web_components_aliases_hooks", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/components.json", + "source_location": "L17", + "weight": 1.0, + "source": "apps_web_components_aliases", + "target": "apps_web_components_aliases_lib", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/components.json", + "source_location": "L16", + "weight": 1.0, + "source": "apps_web_components_aliases", + "target": "apps_web_components_aliases_ui", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/components.json", + "source_location": "L15", + "weight": 1.0, + "source": "apps_web_components_aliases", + "target": "apps_web_components_aliases_utils", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/package.json", + "source_location": "L14", + "weight": 1.0, + "source": "apps_web_package", + "target": "apps_web_package_dependencies", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/package.json", + "source_location": "L38", + "weight": 1.0, + "source": "apps_web_package", + "target": "apps_web_package_devdependencies", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/package.json", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_package", + "target": "apps_web_package_name", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/package.json", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_package", + "target": "apps_web_package_private", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/package.json", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_package", + "target": "apps_web_package_scripts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/package.json", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_package", + "target": "apps_web_package_type", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/package.json", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_package", + "target": "apps_web_package_version", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/package.json", + "source_location": "L8", + "weight": 1.0, + "source": "apps_web_package_scripts", + "target": "apps_web_package_scripts_build", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/package.json", + "source_location": "L7", + "weight": 1.0, + "source": "apps_web_package_scripts", + "target": "apps_web_package_scripts_dev", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/package.json", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_package_scripts", + "target": "apps_web_package_scripts_lint", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/package.json", + "source_location": "L10", + "weight": 1.0, + "source": "apps_web_package_scripts", + "target": "apps_web_package_scripts_preview", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/package.json", + "source_location": "L12", + "weight": 1.0, + "source": "apps_web_package_scripts", + "target": "apps_web_package_scripts_test", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/package.json", + "source_location": "L11", + "weight": 1.0, + "source": "apps_web_package_scripts", + "target": "apps_web_package_scripts_type_check", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/package.json", + "source_location": "L27", + "weight": 1.0, + "source": "apps_web_package_dependencies", + "target": "apps_web_package_dependencies_better_auth", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/package.json", + "source_location": "L28", + "weight": 1.0, + "source": "apps_web_package_dependencies", + "target": "apps_web_package_dependencies_class_variance_authority", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/package.json", + "source_location": "L29", + "weight": 1.0, + "source": "apps_web_package_dependencies", + "target": "apps_web_package_dependencies_clsx", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/package.json", + "source_location": "L30", + "weight": 1.0, + "source": "apps_web_package_dependencies", + "target": "apps_web_package_dependencies_jszip", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/package.json", + "source_location": "L31", + "weight": 1.0, + "source": "apps_web_package_dependencies", + "target": "apps_web_package_dependencies_lucide_react", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/package.json", + "source_location": "L15", + "weight": 1.0, + "source": "apps_web_package_dependencies", + "target": "apps_web_package_dependencies_radix_ui_react_collapsible", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/package.json", + "source_location": "L16", + "weight": 1.0, + "source": "apps_web_package_dependencies", + "target": "apps_web_package_dependencies_radix_ui_react_dialog", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/package.json", + "source_location": "L17", + "weight": 1.0, + "source": "apps_web_package_dependencies", + "target": "apps_web_package_dependencies_radix_ui_react_slot", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/package.json", + "source_location": "L18", + "weight": 1.0, + "source": "apps_web_package_dependencies", + "target": "apps_web_package_dependencies_radix_ui_react_toast", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/package.json", + "source_location": "L19", + "weight": 1.0, + "source": "apps_web_package_dependencies", + "target": "apps_web_package_dependencies_radix_ui_react_tooltip", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/package.json", + "source_location": "L32", + "weight": 1.0, + "source": "apps_web_package_dependencies", + "target": "apps_web_package_dependencies_react", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/package.json", + "source_location": "L33", + "weight": 1.0, + "source": "apps_web_package_dependencies", + "target": "apps_web_package_dependencies_react_dom", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/package.json", + "source_location": "L20", + "weight": 1.0, + "source": "apps_web_package_dependencies", + "target": "apps_web_package_dependencies_sentry_react", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/package.json", + "source_location": "L21", + "weight": 1.0, + "source": "apps_web_package_dependencies", + "target": "apps_web_package_dependencies_sentry_vite_plugin", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/package.json", + "source_location": "L22", + "weight": 1.0, + "source": "apps_web_package_dependencies", + "target": "apps_web_package_dependencies_stackfast_registry", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/package.json", + "source_location": "L23", + "weight": 1.0, + "source": "apps_web_package_dependencies", + "target": "apps_web_package_dependencies_stackfast_rules_engine", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/package.json", + "source_location": "L24", + "weight": 1.0, + "source": "apps_web_package_dependencies", + "target": "apps_web_package_dependencies_stackfast_schemas", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/package.json", + "source_location": "L25", + "weight": 1.0, + "source": "apps_web_package_dependencies", + "target": "apps_web_package_dependencies_stackfast_shared", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/package.json", + "source_location": "L34", + "weight": 1.0, + "source": "apps_web_package_dependencies", + "target": "apps_web_package_dependencies_tailwind_merge", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/package.json", + "source_location": "L26", + "weight": 1.0, + "source": "apps_web_package_dependencies", + "target": "apps_web_package_dependencies_tanstack_react_query", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/package.json", + "source_location": "L35", + "weight": 1.0, + "source": "apps_web_package_dependencies", + "target": "apps_web_package_dependencies_wouter", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/package.json", + "source_location": "L36", + "weight": 1.0, + "source": "apps_web_package_dependencies", + "target": "apps_web_package_dependencies_zod", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/src/hooks/use-toast.ts", + "source_location": "L173", + "weight": 1.0, + "source": "apps_web_src_hooks_use_toast_usetoast", + "target": "apps_web_package_dependencies_react" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/package.json", + "source_location": "L42", + "weight": 1.0, + "source": "apps_web_package_devdependencies", + "target": "apps_web_package_devdependencies_autoprefixer", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/package.json", + "source_location": "L43", + "weight": 1.0, + "source": "apps_web_package_devdependencies", + "target": "apps_web_package_devdependencies_happy_dom", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/package.json", + "source_location": "L44", + "weight": 1.0, + "source": "apps_web_package_devdependencies", + "target": "apps_web_package_devdependencies_postcss", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/package.json", + "source_location": "L45", + "weight": 1.0, + "source": "apps_web_package_devdependencies", + "target": "apps_web_package_devdependencies_tailwindcss", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/package.json", + "source_location": "L46", + "weight": 1.0, + "source": "apps_web_package_devdependencies", + "target": "apps_web_package_devdependencies_tailwindcss_animate", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/package.json", + "source_location": "L39", + "weight": 1.0, + "source": "apps_web_package_devdependencies", + "target": "apps_web_package_devdependencies_types_react", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/package.json", + "source_location": "L40", + "weight": 1.0, + "source": "apps_web_package_devdependencies", + "target": "apps_web_package_devdependencies_types_react_dom", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/package.json", + "source_location": "L47", + "weight": 1.0, + "source": "apps_web_package_devdependencies", + "target": "apps_web_package_devdependencies_typescript", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/package.json", + "source_location": "L48", + "weight": 1.0, + "source": "apps_web_package_devdependencies", + "target": "apps_web_package_devdependencies_vite", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/package.json", + "source_location": "L41", + "weight": 1.0, + "source": "apps_web_package_devdependencies", + "target": "apps_web_package_devdependencies_vitejs_plugin_react", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/public/catalog/v1/manifest.json", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_public_catalog_v1_manifest", + "target": "apps_web_public_catalog_v1_manifest_etag", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/public/catalog/v1/manifest.json", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_public_catalog_v1_manifest", + "target": "apps_web_public_catalog_v1_manifest_files", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/public/catalog/v1/manifest.json", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_public_catalog_v1_manifest", + "target": "apps_web_public_catalog_v1_manifest_updatedat", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/public/catalog/v1/manifest.json", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_public_catalog_v1_manifest", + "target": "apps_web_public_catalog_v1_manifest_version", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/public/catalog/v1/manifest.json", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_public_catalog_v1_manifest_files", + "target": "apps_web_public_catalog_v1_manifest_files_categories", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/public/catalog/v1/manifest.json", + "source_location": "L7", + "weight": 1.0, + "source": "apps_web_public_catalog_v1_manifest_files", + "target": "apps_web_public_catalog_v1_manifest_files_rules", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/public/catalog/v1/manifest.json", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_public_catalog_v1_manifest_files", + "target": "apps_web_public_catalog_v1_manifest_files_tools", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/App.tsx", + "source_location": "L19", + "weight": 1.0, + "source": "apps_web_src_app", + "target": "apps_web_src_app_app", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/App.tsx", + "source_location": "L10", + "weight": 1.0, + "source": "apps_web_src_app", + "target": "apps_web_src_app_queryclient", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/App.tsx", + "source_location": "L8", + "weight": 1.0, + "source": "apps_web_src_app", + "target": "apps_web_src_components_errorboundary", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/App.tsx", + "source_location": "L8", + "weight": 1.0, + "source": "apps_web_src_app", + "target": "apps_web_src_components_errorboundary_errorboundary", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/App.tsx", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_app", + "target": "apps_web_src_pages_blueprintbuilder", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/App.tsx", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_app", + "target": "apps_web_src_pages_blueprintbuilder_blueprintbuilder", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/App.tsx", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_app", + "target": "apps_web_src_pages_compatibilityview", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/App.tsx", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_app", + "target": "apps_web_src_pages_compatibilityview_compatibilityview", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/App.tsx", + "source_location": "L7", + "weight": 1.0, + "source": "apps_web_src_app", + "target": "apps_web_src_pages_migrationexplorer", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/App.tsx", + "source_location": "L7", + "weight": 1.0, + "source": "apps_web_src_app", + "target": "apps_web_src_pages_migrationexplorer_migrationexplorer", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/App.tsx", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_app", + "target": "apps_web_src_pages_stackbuilderpage", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/App.tsx", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_app", + "target": "apps_web_src_pages_stackbuilderpage_stackbuilderpage", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/App.tsx", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_app", + "target": "apps_web_src_pages_toolcatalog", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/App.tsx", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_app", + "target": "apps_web_src_pages_toolcatalog_toolcatalog", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/main.tsx", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_main", + "target": "apps_web_src_app", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/main.tsx", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_main", + "target": "apps_web_src_app_app", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/AlternativesComparison.tsx", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_src_components_alternativescomparison", + "target": "apps_web_src_components_alternativescomparison_alternativescomparison", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/AlternativesComparison.tsx", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_components_alternativescomparison", + "target": "apps_web_src_components_alternativescomparison_alternativescomparisonprops", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/AlternativesComparison.tsx", + "source_location": "L1", + "weight": 1.0, + "source": "apps_web_src_components_alternativescomparison", + "target": "packages_schemas_src_domain_enhancedalternative", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/AlternativesComparison.tsx", + "source_location": "L1", + "weight": 1.0, + "source": "apps_web_src_components_alternativescomparison", + "target": "packages_schemas_src_index", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/BlueprintOutputCard.tsx", + "source_location": "L15", + "weight": 1.0, + "source": "apps_web_src_components_blueprintoutputcard", + "target": "apps_web_src_components_alternativescomparison", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/AlternativesComparison.tsx", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_components_alternativescomparison_alternativescomparisonprops", + "target": "packages_schemas_src_domain_enhancedalternative", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/BlueprintOutputCard.tsx", + "source_location": "L15", + "weight": 1.0, + "source": "apps_web_src_components_blueprintoutputcard", + "target": "apps_web_src_components_alternativescomparison_alternativescomparison", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ArchitecturePreview.tsx", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_src_components_architecturepreview", + "target": "apps_web_src_components_architecturepreview_architecturepreview", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ArchitecturePreview.tsx", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_components_architecturepreview", + "target": "apps_web_src_components_architecturepreview_architecturepreviewprops", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ArchitecturePreview.tsx", + "source_location": "L1", + "weight": 1.0, + "source": "apps_web_src_components_architecturepreview", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ArchitecturePreview.tsx", + "source_location": "L1", + "weight": 1.0, + "source": "apps_web_src_components_architecturepreview", + "target": "packages_schemas_src_index", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/BlueprintOutputCard.tsx", + "source_location": "L17", + "weight": 1.0, + "source": "apps_web_src_components_blueprintoutputcard", + "target": "apps_web_src_components_architecturepreview", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ArchitecturePreview.tsx", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_components_architecturepreview_architecturepreviewprops", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/BlueprintOutputCard.tsx", + "source_location": "L17", + "weight": 1.0, + "source": "apps_web_src_components_blueprintoutputcard", + "target": "apps_web_src_components_architecturepreview_architecturepreview", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/AuthStatus.tsx", + "source_location": "L12", + "weight": 1.0, + "source": "apps_web_src_components_authstatus", + "target": "apps_web_src_components_authstatus_authstatus", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/AuthStatus.tsx", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_components_authstatus", + "target": "apps_web_src_components_authstatus_getcallbackurl", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/AuthStatus.tsx", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_components_authstatus", + "target": "apps_web_src_components_ui_button", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/AuthStatus.tsx", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_components_authstatus", + "target": "apps_web_src_components_ui_button_button", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/AuthStatus.tsx", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_components_authstatus", + "target": "apps_web_src_lib_auth_client", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/Layout.tsx", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_components_layout", + "target": "apps_web_src_components_authstatus", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/Layout.tsx", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_components_layout", + "target": "apps_web_src_components_authstatus_authstatus", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/BlueprintOutputCard.tsx", + "source_location": "L24", + "weight": 1.0, + "source": "apps_web_src_components_blueprintoutputcard", + "target": "apps_web_src_components_blueprintoutputcard_blueprintoutputcard", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/BlueprintOutputCard.tsx", + "source_location": "L20", + "weight": 1.0, + "source": "apps_web_src_components_blueprintoutputcard", + "target": "apps_web_src_components_blueprintoutputcard_blueprintoutputcardprops", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/BlueprintOutputCard.tsx", + "source_location": "L16", + "weight": 1.0, + "source": "apps_web_src_components_blueprintoutputcard", + "target": "apps_web_src_components_costestimator", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/BlueprintOutputCard.tsx", + "source_location": "L16", + "weight": 1.0, + "source": "apps_web_src_components_blueprintoutputcard", + "target": "apps_web_src_components_costestimator_costestimator", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/BlueprintOutputCard.tsx", + "source_location": "L18", + "weight": 1.0, + "source": "apps_web_src_components_blueprintoutputcard", + "target": "apps_web_src_components_implementationroadmap", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/BlueprintOutputCard.tsx", + "source_location": "L18", + "weight": 1.0, + "source": "apps_web_src_components_blueprintoutputcard", + "target": "apps_web_src_components_implementationroadmap_implementationroadmap", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/BlueprintOutputCard.tsx", + "source_location": "L1", + "weight": 1.0, + "source": "apps_web_src_components_blueprintoutputcard", + "target": "packages_schemas_src_domain_enhancedblueprintresponse", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/BlueprintOutputCard.tsx", + "source_location": "L1", + "weight": 1.0, + "source": "apps_web_src_components_blueprintoutputcard", + "target": "packages_schemas_src_index", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L14", + "weight": 1.0, + "source": "apps_web_src_pages_blueprintbuilder", + "target": "apps_web_src_components_blueprintoutputcard", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/BlueprintOutputCard.tsx", + "source_location": "L21", + "weight": 1.0, + "source": "apps_web_src_components_blueprintoutputcard_blueprintoutputcardprops", + "target": "packages_schemas_src_domain_enhancedblueprintresponse", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L14", + "weight": 1.0, + "source": "apps_web_src_pages_blueprintbuilder", + "target": "apps_web_src_components_blueprintoutputcard_blueprintoutputcard", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CategorySection.tsx", + "source_location": "L29", + "weight": 1.0, + "source": "apps_web_src_components_categorysection", + "target": "apps_web_src_components_categorysection_categorysection", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CategorySection.tsx", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_src_components_categorysection", + "target": "apps_web_src_components_categorysection_categorysectionprops", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CategorySection.tsx", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_components_categorysection", + "target": "apps_web_src_components_toolselector", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CategorySection.tsx", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_components_categorysection", + "target": "apps_web_src_components_toolselector_toolselector", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CategorySection.tsx", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_components_categorysection", + "target": "apps_web_src_components_ui_badge", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CategorySection.tsx", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_components_categorysection", + "target": "apps_web_src_components_ui_badge_badge", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CategorySection.tsx", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_components_categorysection", + "target": "apps_web_src_components_ui_collapsible", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CategorySection.tsx", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_components_categorysection", + "target": "apps_web_src_types_category", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CategorySection.tsx", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_components_categorysection", + "target": "apps_web_src_types_category_category", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CategorySection.tsx", + "source_location": "L7", + "weight": 1.0, + "source": "apps_web_src_components_categorysection", + "target": "apps_web_src_types_diagnostic", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CategorySection.tsx", + "source_location": "L7", + "weight": 1.0, + "source": "apps_web_src_components_categorysection", + "target": "apps_web_src_types_diagnostic_diagnostic", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CategorySection.tsx", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_components_categorysection", + "target": "apps_web_src_types_tool", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CategorySection.tsx", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_components_categorysection", + "target": "apps_web_src_types_tool_tool", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/index.ts", + "source_location": "L8", + "weight": 1.0, + "source": "apps_web_src_components_index", + "target": "apps_web_src_components_categorysection", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/StackBuilder.tsx", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_components_stackbuilder", + "target": "apps_web_src_components_categorysection", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CategorySection.tsx", + "source_location": "L10", + "weight": 1.0, + "source": "apps_web_src_components_categorysection_categorysectionprops", + "target": "apps_web_src_types_category_category", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CategorySection.tsx", + "source_location": "L14", + "weight": 1.0, + "source": "apps_web_src_components_categorysection_categorysectionprops", + "target": "apps_web_src_types_diagnostic_diagnostic", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CategorySection.tsx", + "source_location": "L11", + "weight": 1.0, + "source": "apps_web_src_components_categorysection_categorysectionprops", + "target": "apps_web_src_types_tool_tool", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/index.ts", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_src_components_index", + "target": "apps_web_src_components_categorysection_categorysectionprops", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/index.ts", + "source_location": "L8", + "weight": 1.0, + "source": "apps_web_src_components_index", + "target": "apps_web_src_components_categorysection_categorysection", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/StackBuilder.tsx", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_components_stackbuilder", + "target": "apps_web_src_components_categorysection_categorysection", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CompatibilityHeatmap.tsx", + "source_location": "L22", + "weight": 1.0, + "source": "apps_web_src_components_compatibilityheatmap", + "target": "apps_web_src_components_compatibilityheatmap_compatibilityheatmap", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CompatibilityHeatmap.tsx", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_components_compatibilityheatmap", + "target": "apps_web_src_components_compatibilityheatmap_compatibilityheatmapprops", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CompatibilityHeatmap.tsx", + "source_location": "L11", + "weight": 1.0, + "source": "apps_web_src_components_compatibilityheatmap", + "target": "apps_web_src_components_compatibilityheatmap_heatmapcell", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CompatibilityHeatmap.tsx", + "source_location": "L190", + "weight": 1.0, + "source": "apps_web_src_components_compatibilityheatmap", + "target": "apps_web_src_components_compatibilityheatmap_heatmapcellview", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CompatibilityHeatmap.tsx", + "source_location": "L168", + "weight": 1.0, + "source": "apps_web_src_components_compatibilityheatmap", + "target": "apps_web_src_components_compatibilityheatmap_heatmaplegend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CompatibilityHeatmap.tsx", + "source_location": "L181", + "weight": 1.0, + "source": "apps_web_src_components_compatibilityheatmap", + "target": "apps_web_src_components_compatibilityheatmap_legendswatch", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CompatibilityHeatmap.tsx", + "source_location": "L225", + "weight": 1.0, + "source": "apps_web_src_components_compatibilityheatmap", + "target": "apps_web_src_components_compatibilityheatmap_scoretoclass", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CompatibilityHeatmap.tsx", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_components_compatibilityheatmap", + "target": "apps_web_src_engine_index", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CompatibilityHeatmap.tsx", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_components_compatibilityheatmap", + "target": "apps_web_src_engine_rules_engine_evaluaterulessync", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CompatibilityHeatmap.tsx", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_components_compatibilityheatmap", + "target": "packages_schemas_src_domain_categoryid", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CompatibilityHeatmap.tsx", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_components_compatibilityheatmap", + "target": "packages_schemas_src_domain_rule", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CompatibilityHeatmap.tsx", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_components_compatibilityheatmap", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CompatibilityHeatmap.tsx", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_components_compatibilityheatmap", + "target": "packages_schemas_src_index", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/CompatibilityView.tsx", + "source_location": "L12", + "weight": 1.0, + "source": "apps_web_src_pages_compatibilityview", + "target": "apps_web_src_components_compatibilityheatmap", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CompatibilityHeatmap.tsx", + "source_location": "L8", + "weight": 1.0, + "source": "apps_web_src_components_compatibilityheatmap_compatibilityheatmapprops", + "target": "packages_schemas_src_domain_categoryid", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CompatibilityHeatmap.tsx", + "source_location": "L7", + "weight": 1.0, + "source": "apps_web_src_components_compatibilityheatmap_compatibilityheatmapprops", + "target": "packages_schemas_src_domain_rule", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CompatibilityHeatmap.tsx", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_components_compatibilityheatmap_compatibilityheatmapprops", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CompatibilityHeatmap.tsx", + "source_location": "L12", + "weight": 1.0, + "source": "apps_web_src_components_compatibilityheatmap_heatmapcell", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/CompatibilityView.tsx", + "source_location": "L12", + "weight": 1.0, + "source": "apps_web_src_pages_compatibilityview", + "target": "apps_web_src_components_compatibilityheatmap_compatibilityheatmap", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CompatibilityHeatmap.tsx", + "source_location": "L192", + "weight": 1.0, + "source": "apps_web_src_components_compatibilityheatmap_heatmapcellview", + "target": "apps_web_src_components_compatibilityheatmap_scoretoclass", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CompatibilityScore.tsx", + "source_location": "L31", + "weight": 1.0, + "source": "apps_web_src_components_compatibilityscore", + "target": "apps_web_src_components_compatibilityscore_compatibilityscore", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CompatibilityScore.tsx", + "source_location": "L16", + "weight": 1.0, + "source": "apps_web_src_components_compatibilityscore", + "target": "apps_web_src_components_compatibilityscore_compatibilityscoreprops", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CompatibilityScore.tsx", + "source_location": "L263", + "weight": 1.0, + "source": "apps_web_src_components_compatibilityscore", + "target": "apps_web_src_components_compatibilityscore_getscorebarcolor", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CompatibilityScore.tsx", + "source_location": "L231", + "weight": 1.0, + "source": "apps_web_src_components_compatibilityscore", + "target": "apps_web_src_components_compatibilityscore_getscorecolor", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CompatibilityScore.tsx", + "source_location": "L240", + "weight": 1.0, + "source": "apps_web_src_components_compatibilityscore", + "target": "apps_web_src_components_compatibilityscore_getscorelabel", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CompatibilityScore.tsx", + "source_location": "L249", + "weight": 1.0, + "source": "apps_web_src_components_compatibilityscore", + "target": "apps_web_src_components_compatibilityscore_getscoretextcolor", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CompatibilityScore.tsx", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_src_components_compatibilityscore", + "target": "apps_web_src_components_compatibilityscore_scorebreakdown", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CompatibilityScore.tsx", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_components_compatibilityscore", + "target": "apps_web_src_components_ui_badge", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CompatibilityScore.tsx", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_components_compatibilityscore", + "target": "apps_web_src_components_ui_badge_badge", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CompatibilityScore.tsx", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_components_compatibilityscore", + "target": "apps_web_src_components_ui_button", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CompatibilityScore.tsx", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_components_compatibilityscore", + "target": "apps_web_src_components_ui_button_button", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CompatibilityScore.tsx", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_components_compatibilityscore", + "target": "apps_web_src_components_ui_card", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CompatibilityScore.tsx", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_components_compatibilityscore", + "target": "apps_web_src_components_ui_card_card", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CompatibilityScore.tsx", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_components_compatibilityscore", + "target": "apps_web_src_components_ui_card_cardcontent", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CompatibilityScore.tsx", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_components_compatibilityscore", + "target": "apps_web_src_components_ui_card_cardheader", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CompatibilityScore.tsx", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_components_compatibilityscore", + "target": "apps_web_src_components_ui_card_cardtitle", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CompatibilityScore.tsx", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_components_compatibilityscore", + "target": "apps_web_src_components_ui_collapsible", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CompatibilityScore.tsx", + "source_location": "L7", + "weight": 1.0, + "source": "apps_web_src_components_compatibilityscore", + "target": "apps_web_src_types_diagnostic", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CompatibilityScore.tsx", + "source_location": "L7", + "weight": 1.0, + "source": "apps_web_src_components_compatibilityscore", + "target": "apps_web_src_types_diagnostic_diagnostic", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/index.ts", + "source_location": "L14", + "weight": 1.0, + "source": "apps_web_src_components_index", + "target": "apps_web_src_components_compatibilityscore", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/StackBuilder.tsx", + "source_location": "L16", + "weight": 1.0, + "source": "apps_web_src_components_stackbuilder", + "target": "apps_web_src_components_compatibilityscore", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/index.ts", + "source_location": "L15", + "weight": 1.0, + "source": "apps_web_src_components_index", + "target": "apps_web_src_components_compatibilityscore_scorebreakdown", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/StackBuilder.tsx", + "source_location": "L16", + "weight": 1.0, + "source": "apps_web_src_components_stackbuilder", + "target": "apps_web_src_components_compatibilityscore_scorebreakdown", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CompatibilityScore.tsx", + "source_location": "L19", + "weight": 1.0, + "source": "apps_web_src_components_compatibilityscore_compatibilityscoreprops", + "target": "apps_web_src_types_diagnostic_diagnostic", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/index.ts", + "source_location": "L15", + "weight": 1.0, + "source": "apps_web_src_components_index", + "target": "apps_web_src_components_compatibilityscore_compatibilityscoreprops", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CompatibilityScore.tsx", + "source_location": "L70", + "weight": 1.0, + "source": "apps_web_src_components_compatibilityscore_compatibilityscore", + "target": "apps_web_src_components_compatibilityscore_getscorebarcolor", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CompatibilityScore.tsx", + "source_location": "L38", + "weight": 1.0, + "source": "apps_web_src_components_compatibilityscore_compatibilityscore", + "target": "apps_web_src_components_compatibilityscore_getscorecolor", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CompatibilityScore.tsx", + "source_location": "L39", + "weight": 1.0, + "source": "apps_web_src_components_compatibilityscore_compatibilityscore", + "target": "apps_web_src_components_compatibilityscore_getscorelabel", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CompatibilityScore.tsx", + "source_location": "L62", + "weight": 1.0, + "source": "apps_web_src_components_compatibilityscore_compatibilityscore", + "target": "apps_web_src_components_compatibilityscore_getscoretextcolor", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/index.ts", + "source_location": "L14", + "weight": 1.0, + "source": "apps_web_src_components_index", + "target": "apps_web_src_components_compatibilityscore_compatibilityscore", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/StackBuilder.tsx", + "source_location": "L7", + "weight": 1.0, + "source": "apps_web_src_components_stackbuilder", + "target": "apps_web_src_components_compatibilityscore_compatibilityscore", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CostEstimator.tsx", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_src_components_costestimator", + "target": "apps_web_src_components_costestimator_costestimator", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CostEstimator.tsx", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_components_costestimator", + "target": "apps_web_src_components_costestimator_costestimatorprops", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CostEstimator.tsx", + "source_location": "L1", + "weight": 1.0, + "source": "apps_web_src_components_costestimator", + "target": "packages_schemas_src_domain_blueprintcostestimate", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CostEstimator.tsx", + "source_location": "L1", + "weight": 1.0, + "source": "apps_web_src_components_costestimator", + "target": "packages_schemas_src_index", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/CostEstimator.tsx", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_components_costestimator_costestimatorprops", + "target": "packages_schemas_src_domain_blueprintcostestimate", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/DiagnosticList.tsx", + "source_location": "L138", + "weight": 1.0, + "source": "apps_web_src_components_diagnosticlist", + "target": "apps_web_src_components_diagnosticlist_diagnosticitem", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/DiagnosticList.tsx", + "source_location": "L21", + "weight": 1.0, + "source": "apps_web_src_components_diagnosticlist", + "target": "apps_web_src_components_diagnosticlist_diagnosticlist", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/DiagnosticList.tsx", + "source_location": "L7", + "weight": 1.0, + "source": "apps_web_src_components_diagnosticlist", + "target": "apps_web_src_components_diagnosticlist_diagnosticlistprops", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/DiagnosticList.tsx", + "source_location": "L209", + "weight": 1.0, + "source": "apps_web_src_components_diagnosticlist", + "target": "apps_web_src_components_diagnosticlist_getlevelicon", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/DiagnosticList.tsx", + "source_location": "L225", + "weight": 1.0, + "source": "apps_web_src_components_diagnosticlist", + "target": "apps_web_src_components_diagnosticlist_getlevelstyles", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/DiagnosticList.tsx", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_components_diagnosticlist", + "target": "apps_web_src_components_ui_badge", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/DiagnosticList.tsx", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_components_diagnosticlist", + "target": "apps_web_src_components_ui_badge_badge", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/DiagnosticList.tsx", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_components_diagnosticlist", + "target": "apps_web_src_components_ui_button", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/DiagnosticList.tsx", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_components_diagnosticlist", + "target": "apps_web_src_components_ui_button_button", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/DiagnosticList.tsx", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_components_diagnosticlist", + "target": "apps_web_src_components_ui_card", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/DiagnosticList.tsx", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_components_diagnosticlist", + "target": "apps_web_src_components_ui_card_card", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/DiagnosticList.tsx", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_components_diagnosticlist", + "target": "apps_web_src_components_ui_card_cardcontent", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/DiagnosticList.tsx", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_components_diagnosticlist", + "target": "apps_web_src_components_ui_card_cardheader", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/DiagnosticList.tsx", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_components_diagnosticlist", + "target": "apps_web_src_components_ui_card_cardtitle", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/DiagnosticList.tsx", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_components_diagnosticlist", + "target": "apps_web_src_types_diagnostic", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/DiagnosticList.tsx", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_components_diagnosticlist", + "target": "apps_web_src_types_diagnostic_diagnostic", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/index.ts", + "source_location": "L20", + "weight": 1.0, + "source": "apps_web_src_components_index", + "target": "apps_web_src_components_diagnosticlist", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/StackBuilder.tsx", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_src_components_stackbuilder", + "target": "apps_web_src_components_diagnosticlist", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/DiagnosticList.tsx", + "source_location": "L8", + "weight": 1.0, + "source": "apps_web_src_components_diagnosticlist_diagnosticlistprops", + "target": "apps_web_src_types_diagnostic_diagnostic", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/index.ts", + "source_location": "L21", + "weight": 1.0, + "source": "apps_web_src_components_index", + "target": "apps_web_src_components_diagnosticlist_diagnosticlistprops", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/index.ts", + "source_location": "L20", + "weight": 1.0, + "source": "apps_web_src_components_index", + "target": "apps_web_src_components_diagnosticlist_diagnosticlist", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/StackBuilder.tsx", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_src_components_stackbuilder", + "target": "apps_web_src_components_diagnosticlist_diagnosticlist", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/DiagnosticList.tsx", + "source_location": "L162", + "weight": 1.0, + "source": "apps_web_src_components_diagnosticlist_diagnosticitem", + "target": "apps_web_src_components_diagnosticlist_getlevelicon", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/DiagnosticList.tsx", + "source_location": "L155", + "weight": 1.0, + "source": "apps_web_src_components_diagnosticlist_diagnosticitem", + "target": "apps_web_src_components_diagnosticlist_getlevelstyles", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ErrorBoundary.tsx", + "source_location": "L19", + "weight": 1.0, + "source": "apps_web_src_components_errorboundary", + "target": "apps_web_src_components_errorboundary_errorboundary", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ErrorBoundary.tsx", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_components_errorboundary", + "target": "apps_web_src_components_errorboundary_errorboundaryprops", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ErrorBoundary.tsx", + "source_location": "L10", + "weight": 1.0, + "source": "apps_web_src_components_errorboundary", + "target": "apps_web_src_components_errorboundary_errorboundarystate", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ErrorBoundary.tsx", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_components_errorboundary", + "target": "apps_web_src_components_ui_button", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ErrorBoundary.tsx", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_components_errorboundary", + "target": "apps_web_src_components_ui_button_button", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/index.ts", + "source_location": "L25", + "weight": 1.0, + "source": "apps_web_src_components_index", + "target": "apps_web_src_components_errorboundary", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/StackBuilderPage.tsx", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_pages_stackbuilderpage", + "target": "apps_web_src_components_errorboundary", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ErrorBoundary.tsx", + "source_location": "L35", + "weight": 1.0, + "source": "apps_web_src_components_errorboundary_errorboundary", + "target": "apps_web_src_components_errorboundary_errorboundary_componentdidcatch", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ErrorBoundary.tsx", + "source_location": "L20", + "weight": 1.0, + "source": "apps_web_src_components_errorboundary_errorboundary", + "target": "apps_web_src_components_errorboundary_errorboundary_constructor", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ErrorBoundary.tsx", + "source_location": "L28", + "weight": 1.0, + "source": "apps_web_src_components_errorboundary_errorboundary", + "target": "apps_web_src_components_errorboundary_errorboundary_getderivedstatefromerror", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ErrorBoundary.tsx", + "source_location": "L39", + "weight": 1.0, + "source": "apps_web_src_components_errorboundary_errorboundary", + "target": "apps_web_src_components_errorboundary_errorboundary_handlereset", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ErrorBoundary.tsx", + "source_location": "L46", + "weight": 1.0, + "source": "apps_web_src_components_errorboundary_errorboundary", + "target": "apps_web_src_components_errorboundary_errorboundary_render", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/index.ts", + "source_location": "L25", + "weight": 1.0, + "source": "apps_web_src_components_index", + "target": "apps_web_src_components_errorboundary_errorboundary", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/StackBuilderPage.tsx", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_pages_stackbuilderpage", + "target": "apps_web_src_components_errorboundary_errorboundary", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ExportDialog.tsx", + "source_location": "L247", + "weight": 1.0, + "source": "apps_web_src_components_exportdialog", + "target": "apps_web_src_components_exportdialog_errormessage", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ExportDialog.tsx", + "source_location": "L33", + "weight": 1.0, + "source": "apps_web_src_components_exportdialog", + "target": "apps_web_src_components_exportdialog_exportdialog", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ExportDialog.tsx", + "source_location": "L28", + "weight": 1.0, + "source": "apps_web_src_components_exportdialog", + "target": "apps_web_src_components_exportdialog_exportdialogprops", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ExportDialog.tsx", + "source_location": "L22", + "weight": 1.0, + "source": "apps_web_src_components_exportdialog", + "target": "apps_web_src_components_exportdialog_generateexportastext", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ExportDialog.tsx", + "source_location": "L17", + "weight": 1.0, + "source": "apps_web_src_components_exportdialog", + "target": "apps_web_src_components_ui_badge", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ExportDialog.tsx", + "source_location": "L17", + "weight": 1.0, + "source": "apps_web_src_components_exportdialog", + "target": "apps_web_src_components_ui_badge_badge", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ExportDialog.tsx", + "source_location": "L16", + "weight": 1.0, + "source": "apps_web_src_components_exportdialog", + "target": "apps_web_src_components_ui_button", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ExportDialog.tsx", + "source_location": "L16", + "weight": 1.0, + "source": "apps_web_src_components_exportdialog", + "target": "apps_web_src_components_ui_button_button", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ExportDialog.tsx", + "source_location": "L8", + "weight": 1.0, + "source": "apps_web_src_components_exportdialog", + "target": "apps_web_src_components_ui_dialog", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ExportDialog.tsx", + "source_location": "L8", + "weight": 1.0, + "source": "apps_web_src_components_exportdialog", + "target": "apps_web_src_components_ui_dialog_dialogcontent", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ExportDialog.tsx", + "source_location": "L8", + "weight": 1.0, + "source": "apps_web_src_components_exportdialog", + "target": "apps_web_src_components_ui_dialog_dialogdescription", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ExportDialog.tsx", + "source_location": "L8", + "weight": 1.0, + "source": "apps_web_src_components_exportdialog", + "target": "apps_web_src_components_ui_dialog_dialogfooter", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ExportDialog.tsx", + "source_location": "L8", + "weight": 1.0, + "source": "apps_web_src_components_exportdialog", + "target": "apps_web_src_components_ui_dialog_dialogheader", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ExportDialog.tsx", + "source_location": "L8", + "weight": 1.0, + "source": "apps_web_src_components_exportdialog", + "target": "apps_web_src_components_ui_dialog_dialogtitle", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ExportDialog.tsx", + "source_location": "L18", + "weight": 1.0, + "source": "apps_web_src_components_exportdialog", + "target": "apps_web_src_context_selectionscontext", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ExportDialog.tsx", + "source_location": "L18", + "weight": 1.0, + "source": "apps_web_src_components_exportdialog", + "target": "apps_web_src_context_selectionscontext_useselectionscontext", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ExportDialog.tsx", + "source_location": "L19", + "weight": 1.0, + "source": "apps_web_src_components_exportdialog", + "target": "apps_web_src_hooks_useapi", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ExportDialog.tsx", + "source_location": "L19", + "weight": 1.0, + "source": "apps_web_src_components_exportdialog", + "target": "apps_web_src_hooks_useapi_usegeneratescaffold", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ExportDialog.tsx", + "source_location": "L20", + "weight": 1.0, + "source": "apps_web_src_components_exportdialog", + "target": "apps_web_src_lib_archive_generator", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ExportDialog.tsx", + "source_location": "L20", + "weight": 1.0, + "source": "apps_web_src_components_exportdialog", + "target": "apps_web_src_lib_archive_generator_downloadarchive", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ExportDialog.tsx", + "source_location": "L20", + "weight": 1.0, + "source": "apps_web_src_components_exportdialog", + "target": "apps_web_src_lib_archive_generator_generatearchive", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ExportDialog.tsx", + "source_location": "L7", + "weight": 1.0, + "source": "apps_web_src_components_exportdialog", + "target": "packages_schemas_src_domain_exportdata", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ExportDialog.tsx", + "source_location": "L7", + "weight": 1.0, + "source": "apps_web_src_components_exportdialog", + "target": "packages_schemas_src_domain_exportformat", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ExportDialog.tsx", + "source_location": "L7", + "weight": 1.0, + "source": "apps_web_src_components_exportdialog", + "target": "packages_schemas_src_index", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/index.ts", + "source_location": "L22", + "weight": 1.0, + "source": "apps_web_src_components_index", + "target": "apps_web_src_components_exportdialog", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/StackBuilderPage.tsx", + "source_location": "L7", + "weight": 1.0, + "source": "apps_web_src_pages_stackbuilderpage", + "target": "apps_web_src_components_exportdialog", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/index.ts", + "source_location": "L23", + "weight": 1.0, + "source": "apps_web_src_components_index", + "target": "apps_web_src_components_exportdialog_exportdialogprops", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ExportDialog.tsx", + "source_location": "L106", + "weight": 1.0, + "source": "apps_web_src_components_exportdialog_exportdialog", + "target": "apps_web_src_components_exportdialog_errormessage", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/src/components/ExportDialog.tsx", + "source_location": "L38", + "weight": 1.0, + "source": "apps_web_src_components_exportdialog_exportdialog", + "target": "apps_web_src_context_selectionscontext_useselectionscontext" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/src/components/ExportDialog.tsx", + "source_location": "L51", + "weight": 1.0, + "source": "apps_web_src_components_exportdialog_exportdialog", + "target": "apps_web_src_hooks_useapi_usegeneratescaffold" + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/index.ts", + "source_location": "L22", + "weight": 1.0, + "source": "apps_web_src_components_index", + "target": "apps_web_src_components_exportdialog_exportdialog", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/StackBuilderPage.tsx", + "source_location": "L7", + "weight": 1.0, + "source": "apps_web_src_pages_stackbuilderpage", + "target": "apps_web_src_components_exportdialog_exportdialog", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ImplementationRoadmap.tsx", + "source_location": "L8", + "weight": 1.0, + "source": "apps_web_src_components_implementationroadmap", + "target": "apps_web_src_components_implementationroadmap_implementationroadmap", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ImplementationRoadmap.tsx", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_components_implementationroadmap", + "target": "apps_web_src_components_implementationroadmap_implementationroadmapprops", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ImplementationRoadmap.tsx", + "source_location": "L1", + "weight": 1.0, + "source": "apps_web_src_components_implementationroadmap", + "target": "packages_schemas_src_domain_implementationroadmap", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ImplementationRoadmap.tsx", + "source_location": "L1", + "weight": 1.0, + "source": "apps_web_src_components_implementationroadmap", + "target": "packages_schemas_src_index", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ImplementationRoadmap.tsx", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_components_implementationroadmap_implementationroadmapprops", + "target": "packages_schemas_src_domain_implementationroadmap", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/Layout.tsx", + "source_location": "L10", + "weight": 1.0, + "source": "apps_web_src_components_layout", + "target": "apps_web_src_components_layout_layout", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/Layout.tsx", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_components_layout", + "target": "apps_web_src_components_layout_layoutprops", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L15", + "weight": 1.0, + "source": "apps_web_src_pages_blueprintbuilder", + "target": "apps_web_src_components_layout", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/CompatibilityView.tsx", + "source_location": "L11", + "weight": 1.0, + "source": "apps_web_src_pages_compatibilityview", + "target": "apps_web_src_components_layout", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/MigrationExplorer.tsx", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_pages_migrationexplorer", + "target": "apps_web_src_components_layout", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/StackBuilderPage.tsx", + "source_location": "L13", + "weight": 1.0, + "source": "apps_web_src_pages_stackbuilderpage", + "target": "apps_web_src_components_layout", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/ToolCatalog.tsx", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_pages_toolcatalog", + "target": "apps_web_src_components_layout", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L15", + "weight": 1.0, + "source": "apps_web_src_pages_blueprintbuilder", + "target": "apps_web_src_components_layout_layout", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/CompatibilityView.tsx", + "source_location": "L11", + "weight": 1.0, + "source": "apps_web_src_pages_compatibilityview", + "target": "apps_web_src_components_layout_layout", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/MigrationExplorer.tsx", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_pages_migrationexplorer", + "target": "apps_web_src_components_layout_layout", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/StackBuilderPage.tsx", + "source_location": "L13", + "weight": 1.0, + "source": "apps_web_src_pages_stackbuilderpage", + "target": "apps_web_src_components_layout_layout", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/ToolCatalog.tsx", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_pages_toolcatalog", + "target": "apps_web_src_components_layout_layout", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/index.ts", + "source_location": "L17", + "weight": 1.0, + "source": "apps_web_src_components_index", + "target": "apps_web_src_components_smartsuggestion", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/SmartSuggestion.tsx", + "source_location": "L166", + "weight": 1.0, + "source": "apps_web_src_components_smartsuggestion", + "target": "apps_web_src_components_smartsuggestion_getprioritylabel", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/SmartSuggestion.tsx", + "source_location": "L152", + "weight": 1.0, + "source": "apps_web_src_components_smartsuggestion", + "target": "apps_web_src_components_smartsuggestion_getpriorityvariant", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/SmartSuggestion.tsx", + "source_location": "L25", + "weight": 1.0, + "source": "apps_web_src_components_smartsuggestion", + "target": "apps_web_src_components_smartsuggestion_smartsuggestion", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/SmartSuggestion.tsx", + "source_location": "L8", + "weight": 1.0, + "source": "apps_web_src_components_smartsuggestion", + "target": "apps_web_src_components_smartsuggestion_smartsuggestionprops", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/SmartSuggestion.tsx", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_components_smartsuggestion", + "target": "apps_web_src_components_ui_badge", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/SmartSuggestion.tsx", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_components_smartsuggestion", + "target": "apps_web_src_components_ui_badge_badge", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/SmartSuggestion.tsx", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_components_smartsuggestion", + "target": "apps_web_src_components_ui_button", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/SmartSuggestion.tsx", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_components_smartsuggestion", + "target": "apps_web_src_components_ui_button_button", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/SmartSuggestion.tsx", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_components_smartsuggestion", + "target": "apps_web_src_components_ui_card", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/SmartSuggestion.tsx", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_components_smartsuggestion", + "target": "apps_web_src_components_ui_card_card", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/SmartSuggestion.tsx", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_components_smartsuggestion", + "target": "apps_web_src_components_ui_card_cardcontent", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/SmartSuggestion.tsx", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_components_smartsuggestion", + "target": "apps_web_src_hooks_use_toast", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/SmartSuggestion.tsx", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_components_smartsuggestion", + "target": "apps_web_src_hooks_use_toast_usetoast", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/SmartSuggestion.tsx", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_components_smartsuggestion", + "target": "apps_web_src_types_suggestion", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/SmartSuggestion.tsx", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_components_smartsuggestion", + "target": "apps_web_src_types_suggestion_suggestion", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/StackBuilder.tsx", + "source_location": "L8", + "weight": 1.0, + "source": "apps_web_src_components_stackbuilder", + "target": "apps_web_src_components_smartsuggestion", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/index.ts", + "source_location": "L18", + "weight": 1.0, + "source": "apps_web_src_components_index", + "target": "apps_web_src_components_smartsuggestion_smartsuggestionprops", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/SmartSuggestion.tsx", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_src_components_smartsuggestion_smartsuggestionprops", + "target": "apps_web_src_types_suggestion_suggestion", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/index.ts", + "source_location": "L17", + "weight": 1.0, + "source": "apps_web_src_components_index", + "target": "apps_web_src_components_smartsuggestion_smartsuggestion", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/SmartSuggestion.tsx", + "source_location": "L110", + "weight": 1.0, + "source": "apps_web_src_components_smartsuggestion_smartsuggestion", + "target": "apps_web_src_components_smartsuggestion_getprioritylabel", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/SmartSuggestion.tsx", + "source_location": "L107", + "weight": 1.0, + "source": "apps_web_src_components_smartsuggestion_smartsuggestion", + "target": "apps_web_src_components_smartsuggestion_getpriorityvariant", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/src/components/SmartSuggestion.tsx", + "source_location": "L31", + "weight": 1.0, + "source": "apps_web_src_components_smartsuggestion_smartsuggestion", + "target": "apps_web_src_hooks_use_toast_usetoast" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/StackBuilder.tsx", + "source_location": "L8", + "weight": 1.0, + "source": "apps_web_src_components_stackbuilder", + "target": "apps_web_src_components_smartsuggestion_smartsuggestion", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/index.ts", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_components_index", + "target": "apps_web_src_components_stackbuilder", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/StackBuilder.tsx", + "source_location": "L38", + "weight": 1.0, + "source": "apps_web_src_components_stackbuilder", + "target": "apps_web_src_components_stackbuilder_stackbuilder", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/StackBuilder.tsx", + "source_location": "L18", + "weight": 1.0, + "source": "apps_web_src_components_stackbuilder", + "target": "apps_web_src_components_stackbuilder_stackbuilderprops", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/StackBuilder.tsx", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_components_stackbuilder", + "target": "apps_web_src_components_ui_button", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/StackBuilder.tsx", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_components_stackbuilder", + "target": "apps_web_src_components_ui_button_button", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/StackBuilder.tsx", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_components_stackbuilder", + "target": "apps_web_src_components_ui_toaster", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/StackBuilder.tsx", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_components_stackbuilder", + "target": "apps_web_src_components_ui_toaster_toaster", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/StackBuilder.tsx", + "source_location": "L12", + "weight": 1.0, + "source": "apps_web_src_components_stackbuilder", + "target": "apps_web_src_context_index", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/StackBuilder.tsx", + "source_location": "L12", + "weight": 1.0, + "source": "apps_web_src_components_stackbuilder", + "target": "apps_web_src_context_suggestionscontext_usesuggestionscontext", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/StackBuilder.tsx", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_components_stackbuilder", + "target": "apps_web_src_hooks_use_toast", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/StackBuilder.tsx", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_components_stackbuilder", + "target": "apps_web_src_hooks_use_toast_usetoast", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/StackBuilder.tsx", + "source_location": "L11", + "weight": 1.0, + "source": "apps_web_src_components_stackbuilder", + "target": "apps_web_src_hooks_userulesengine", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/StackBuilder.tsx", + "source_location": "L11", + "weight": 1.0, + "source": "apps_web_src_components_stackbuilder", + "target": "apps_web_src_hooks_userulesengine_userulesengine", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/StackBuilder.tsx", + "source_location": "L10", + "weight": 1.0, + "source": "apps_web_src_components_stackbuilder", + "target": "apps_web_src_hooks_usestackselection", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/StackBuilder.tsx", + "source_location": "L10", + "weight": 1.0, + "source": "apps_web_src_components_stackbuilder", + "target": "apps_web_src_hooks_usestackselection_usestackselection", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/StackBuilder.tsx", + "source_location": "L13", + "weight": 1.0, + "source": "apps_web_src_components_stackbuilder", + "target": "apps_web_src_lib_catalog_loader", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/StackBuilder.tsx", + "source_location": "L13", + "weight": 1.0, + "source": "apps_web_src_components_stackbuilder", + "target": "apps_web_src_lib_catalog_loader_clearcatalogcache", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/StackBuilder.tsx", + "source_location": "L14", + "weight": 1.0, + "source": "apps_web_src_components_stackbuilder", + "target": "apps_web_src_types_category_category", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/StackBuilder.tsx", + "source_location": "L14", + "weight": 1.0, + "source": "apps_web_src_components_stackbuilder", + "target": "apps_web_src_types_diagnostic_diagnostic", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/StackBuilder.tsx", + "source_location": "L14", + "weight": 1.0, + "source": "apps_web_src_components_stackbuilder", + "target": "apps_web_src_types_index", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/StackBuilder.tsx", + "source_location": "L14", + "weight": 1.0, + "source": "apps_web_src_components_stackbuilder", + "target": "apps_web_src_types_rule_rule", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/StackBuilder.tsx", + "source_location": "L15", + "weight": 1.0, + "source": "apps_web_src_components_stackbuilder", + "target": "apps_web_src_types_suggestion", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/StackBuilder.tsx", + "source_location": "L15", + "weight": 1.0, + "source": "apps_web_src_components_stackbuilder", + "target": "apps_web_src_types_suggestion_suggestion", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/StackBuilder.tsx", + "source_location": "L14", + "weight": 1.0, + "source": "apps_web_src_components_stackbuilder", + "target": "apps_web_src_types_tool_tool", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/StackBuilderPage.tsx", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_pages_stackbuilderpage", + "target": "apps_web_src_components_stackbuilder", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/index.ts", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_components_index", + "target": "apps_web_src_components_stackbuilder_stackbuilderprops", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/StackBuilder.tsx", + "source_location": "L20", + "weight": 1.0, + "source": "apps_web_src_components_stackbuilder_stackbuilderprops", + "target": "apps_web_src_types_category_category", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/StackBuilder.tsx", + "source_location": "L21", + "weight": 1.0, + "source": "apps_web_src_components_stackbuilder_stackbuilderprops", + "target": "apps_web_src_types_rule_rule", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/StackBuilder.tsx", + "source_location": "L19", + "weight": 1.0, + "source": "apps_web_src_components_stackbuilder_stackbuilderprops", + "target": "apps_web_src_types_tool_tool", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/index.ts", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_components_index", + "target": "apps_web_src_components_stackbuilder_stackbuilder", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/src/components/StackBuilder.tsx", + "source_location": "L61", + "weight": 1.0, + "source": "apps_web_src_components_stackbuilder_stackbuilder", + "target": "apps_web_src_context_suggestionscontext_usesuggestionscontext" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/src/components/StackBuilder.tsx", + "source_location": "L46", + "weight": 1.0, + "source": "apps_web_src_components_stackbuilder_stackbuilder", + "target": "apps_web_src_hooks_use_toast_usetoast" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/src/components/StackBuilder.tsx", + "source_location": "L72", + "weight": 1.0, + "source": "apps_web_src_components_stackbuilder_stackbuilder", + "target": "apps_web_src_hooks_userulesengine_userulesengine" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/src/components/StackBuilder.tsx", + "source_location": "L54", + "weight": 1.0, + "source": "apps_web_src_components_stackbuilder_stackbuilder", + "target": "apps_web_src_hooks_usestackselection_usestackselection" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/StackBuilderPage.tsx", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_pages_stackbuilderpage", + "target": "apps_web_src_components_stackbuilder_stackbuilder", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/index.ts", + "source_location": "L11", + "weight": 1.0, + "source": "apps_web_src_components_index", + "target": "apps_web_src_components_toolselector", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ToolSelector.tsx", + "source_location": "L219", + "weight": 1.0, + "source": "apps_web_src_components_toolselector", + "target": "apps_web_src_components_toolselector_formatdate", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ToolSelector.tsx", + "source_location": "L205", + "weight": 1.0, + "source": "apps_web_src_components_toolselector", + "target": "apps_web_src_components_toolselector_isdatastale", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ToolSelector.tsx", + "source_location": "L28", + "weight": 1.0, + "source": "apps_web_src_components_toolselector", + "target": "apps_web_src_components_toolselector_toolselector", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ToolSelector.tsx", + "source_location": "L11", + "weight": 1.0, + "source": "apps_web_src_components_toolselector", + "target": "apps_web_src_components_toolselector_toolselectorprops", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ToolSelector.tsx", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_components_toolselector", + "target": "apps_web_src_components_ui_badge", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ToolSelector.tsx", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_components_toolselector", + "target": "apps_web_src_components_ui_badge_badge", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ToolSelector.tsx", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_components_toolselector", + "target": "apps_web_src_components_ui_tooltip", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ToolSelector.tsx", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_components_toolselector", + "target": "apps_web_src_components_ui_tooltip_tooltipcontent", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ToolSelector.tsx", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_src_components_toolselector", + "target": "apps_web_src_types_tool", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ToolSelector.tsx", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_src_components_toolselector", + "target": "apps_web_src_types_tool_tool", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/index.ts", + "source_location": "L12", + "weight": 1.0, + "source": "apps_web_src_components_index", + "target": "apps_web_src_components_toolselector_toolselectorprops", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ToolSelector.tsx", + "source_location": "L12", + "weight": 1.0, + "source": "apps_web_src_components_toolselector_toolselectorprops", + "target": "apps_web_src_types_tool_tool", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/index.ts", + "source_location": "L11", + "weight": 1.0, + "source": "apps_web_src_components_index", + "target": "apps_web_src_components_toolselector_toolselector", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ToolSelector.tsx", + "source_location": "L124", + "weight": 1.0, + "source": "apps_web_src_components_toolselector_toolselector", + "target": "apps_web_src_components_toolselector_formatdate", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ToolSelector.tsx", + "source_location": "L36", + "weight": 1.0, + "source": "apps_web_src_components_toolselector_toolselector", + "target": "apps_web_src_components_toolselector_isdatastale", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/badge.tsx", + "source_location": "L30", + "weight": 1.0, + "source": "apps_web_src_components_ui_badge", + "target": "apps_web_src_components_ui_badge_badge", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/badge.tsx", + "source_location": "L26", + "weight": 1.0, + "source": "apps_web_src_components_ui_badge", + "target": "apps_web_src_components_ui_badge_badgeprops", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/badge.tsx", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_components_ui_badge", + "target": "apps_web_src_components_ui_badge_badgevariants", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/badge.tsx", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_components_ui_badge", + "target": "apps_web_src_lib_utils", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/badge.tsx", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_components_ui_badge", + "target": "apps_web_src_lib_utils_cn", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/badge.tsx", + "source_location": "L32", + "weight": 1.0, + "source": "apps_web_src_components_ui_badge_badge", + "target": "apps_web_src_components_ui_badge_badgevariants", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/src/components/ui/badge.tsx", + "source_location": "L32", + "weight": 1.0, + "source": "apps_web_src_components_ui_badge_badge", + "target": "apps_web_src_lib_utils_cn" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/button.tsx", + "source_location": "L41", + "weight": 1.0, + "source": "apps_web_src_components_ui_button", + "target": "apps_web_src_components_ui_button_button", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/button.tsx", + "source_location": "L35", + "weight": 1.0, + "source": "apps_web_src_components_ui_button", + "target": "apps_web_src_components_ui_button_buttonprops", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/button.tsx", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_components_ui_button", + "target": "apps_web_src_components_ui_button_buttonvariants", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/button.tsx", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_components_ui_button", + "target": "apps_web_src_lib_utils", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/button.tsx", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_components_ui_button", + "target": "apps_web_src_lib_utils_cn", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/StackBuilderPage.tsx", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_pages_stackbuilderpage", + "target": "apps_web_src_components_ui_button", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/StackBuilderPage.tsx", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_pages_stackbuilderpage", + "target": "apps_web_src_components_ui_button_button", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/card.tsx", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_components_ui_card", + "target": "apps_web_src_components_ui_card_card", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/card.tsx", + "source_location": "L59", + "weight": 1.0, + "source": "apps_web_src_components_ui_card", + "target": "apps_web_src_components_ui_card_cardcontent", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/card.tsx", + "source_location": "L47", + "weight": 1.0, + "source": "apps_web_src_components_ui_card", + "target": "apps_web_src_components_ui_card_carddescription", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/card.tsx", + "source_location": "L67", + "weight": 1.0, + "source": "apps_web_src_components_ui_card", + "target": "apps_web_src_components_ui_card_cardfooter", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/card.tsx", + "source_location": "L20", + "weight": 1.0, + "source": "apps_web_src_components_ui_card", + "target": "apps_web_src_components_ui_card_cardheader", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/card.tsx", + "source_location": "L32", + "weight": 1.0, + "source": "apps_web_src_components_ui_card", + "target": "apps_web_src_components_ui_card_cardtitle", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/card.tsx", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_components_ui_card", + "target": "apps_web_src_lib_utils", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/card.tsx", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_components_ui_card", + "target": "apps_web_src_lib_utils_cn", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/dialog.tsx", + "source_location": "L30", + "weight": 1.0, + "source": "apps_web_src_components_ui_dialog", + "target": "apps_web_src_components_ui_dialog_dialogcontent", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/dialog.tsx", + "source_location": "L97", + "weight": 1.0, + "source": "apps_web_src_components_ui_dialog", + "target": "apps_web_src_components_ui_dialog_dialogdescription", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/dialog.tsx", + "source_location": "L68", + "weight": 1.0, + "source": "apps_web_src_components_ui_dialog", + "target": "apps_web_src_components_ui_dialog_dialogfooter", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/dialog.tsx", + "source_location": "L54", + "weight": 1.0, + "source": "apps_web_src_components_ui_dialog", + "target": "apps_web_src_components_ui_dialog_dialogheader", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/dialog.tsx", + "source_location": "L15", + "weight": 1.0, + "source": "apps_web_src_components_ui_dialog", + "target": "apps_web_src_components_ui_dialog_dialogoverlay", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/dialog.tsx", + "source_location": "L82", + "weight": 1.0, + "source": "apps_web_src_components_ui_dialog", + "target": "apps_web_src_components_ui_dialog_dialogtitle", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/dialog.tsx", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_components_ui_dialog", + "target": "apps_web_src_lib_utils", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/dialog.tsx", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_components_ui_dialog", + "target": "apps_web_src_lib_utils_cn", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/src/components/ui/dialog.tsx", + "source_location": "L59", + "weight": 1.0, + "source": "apps_web_src_components_ui_dialog_dialogheader", + "target": "apps_web_src_lib_utils_cn" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/src/components/ui/dialog.tsx", + "source_location": "L73", + "weight": 1.0, + "source": "apps_web_src_components_ui_dialog_dialogfooter", + "target": "apps_web_src_lib_utils_cn" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/toast.tsx", + "source_location": "L41", + "weight": 1.0, + "source": "apps_web_src_components_ui_toast", + "target": "apps_web_src_components_ui_toast_toast", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/toast.tsx", + "source_location": "L56", + "weight": 1.0, + "source": "apps_web_src_components_ui_toast", + "target": "apps_web_src_components_ui_toast_toastaction", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/toast.tsx", + "source_location": "L115", + "weight": 1.0, + "source": "apps_web_src_components_ui_toast", + "target": "apps_web_src_components_ui_toast_toastactionelement", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/toast.tsx", + "source_location": "L71", + "weight": 1.0, + "source": "apps_web_src_components_ui_toast", + "target": "apps_web_src_components_ui_toast_toastclose", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/toast.tsx", + "source_location": "L101", + "weight": 1.0, + "source": "apps_web_src_components_ui_toast", + "target": "apps_web_src_components_ui_toast_toastdescription", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/toast.tsx", + "source_location": "L113", + "weight": 1.0, + "source": "apps_web_src_components_ui_toast", + "target": "apps_web_src_components_ui_toast_toastprops", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/toast.tsx", + "source_location": "L89", + "weight": 1.0, + "source": "apps_web_src_components_ui_toast", + "target": "apps_web_src_components_ui_toast_toasttitle", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/toast.tsx", + "source_location": "L25", + "weight": 1.0, + "source": "apps_web_src_components_ui_toast", + "target": "apps_web_src_components_ui_toast_toastvariants", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/toast.tsx", + "source_location": "L10", + "weight": 1.0, + "source": "apps_web_src_components_ui_toast", + "target": "apps_web_src_components_ui_toast_toastviewport", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/toast.tsx", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_components_ui_toast", + "target": "apps_web_src_lib_utils", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/toast.tsx", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_components_ui_toast", + "target": "apps_web_src_lib_utils_cn", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/toaster.tsx", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_components_ui_toaster", + "target": "apps_web_src_components_ui_toast", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/use-toast.ts", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_hooks_use_toast", + "target": "apps_web_src_components_ui_toast", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/toaster.tsx", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_components_ui_toaster", + "target": "apps_web_src_components_ui_toast_toastviewport", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/toaster.tsx", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_components_ui_toaster", + "target": "apps_web_src_components_ui_toast_toast", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/toaster.tsx", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_components_ui_toaster", + "target": "apps_web_src_components_ui_toast_toastclose", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/toaster.tsx", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_components_ui_toaster", + "target": "apps_web_src_components_ui_toast_toasttitle", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/toaster.tsx", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_components_ui_toaster", + "target": "apps_web_src_components_ui_toast_toastdescription", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/use-toast.ts", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_hooks_use_toast", + "target": "apps_web_src_components_ui_toast_toastprops", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/use-toast.ts", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_hooks_use_toast", + "target": "apps_web_src_components_ui_toast_toastactionelement", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/toaster.tsx", + "source_location": "L11", + "weight": 1.0, + "source": "apps_web_src_components_ui_toaster", + "target": "apps_web_src_components_ui_toaster_toaster", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/toaster.tsx", + "source_location": "L1", + "weight": 1.0, + "source": "apps_web_src_components_ui_toaster", + "target": "apps_web_src_hooks_use_toast", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/toaster.tsx", + "source_location": "L1", + "weight": 1.0, + "source": "apps_web_src_components_ui_toaster", + "target": "apps_web_src_hooks_use_toast_usetoast", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/src/components/ui/toaster.tsx", + "source_location": "L12", + "weight": 1.0, + "source": "apps_web_src_components_ui_toaster_toaster", + "target": "apps_web_src_hooks_use_toast_usetoast" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/tooltip.tsx", + "source_location": "L12", + "weight": 1.0, + "source": "apps_web_src_components_ui_tooltip", + "target": "apps_web_src_components_ui_tooltip_tooltipcontent", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/tooltip.tsx", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_components_ui_tooltip", + "target": "apps_web_src_lib_utils", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/components/ui/tooltip.tsx", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_components_ui_tooltip", + "target": "apps_web_src_lib_utils_cn", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/EvaluationContext.tsx", + "source_location": "L31", + "weight": 1.0, + "source": "apps_web_src_context_evaluationcontext", + "target": "apps_web_src_context_evaluationcontext_evaluationcontext", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/EvaluationContext.tsx", + "source_location": "L16", + "weight": 1.0, + "source": "apps_web_src_context_evaluationcontext", + "target": "apps_web_src_context_evaluationcontext_evaluationcontextvalue", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/EvaluationContext.tsx", + "source_location": "L44", + "weight": 1.0, + "source": "apps_web_src_context_evaluationcontext", + "target": "apps_web_src_context_evaluationcontext_evaluationprovider", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/EvaluationContext.tsx", + "source_location": "L36", + "weight": 1.0, + "source": "apps_web_src_context_evaluationcontext", + "target": "apps_web_src_context_evaluationcontext_evaluationproviderprops", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/EvaluationContext.tsx", + "source_location": "L7", + "weight": 1.0, + "source": "apps_web_src_context_evaluationcontext", + "target": "apps_web_src_context_evaluationcontext_evaluationstate", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/EvaluationContext.tsx", + "source_location": "L80", + "weight": 1.0, + "source": "apps_web_src_context_evaluationcontext", + "target": "apps_web_src_context_evaluationcontext_useevaluationcontext", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/EvaluationContext.tsx", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_context_evaluationcontext", + "target": "apps_web_src_types_diagnostic_diagnostic", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/EvaluationContext.tsx", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_context_evaluationcontext", + "target": "apps_web_src_types_index", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/EvaluationContext.tsx", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_context_evaluationcontext", + "target": "apps_web_src_types_worker_evaluationresult", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/index.ts", + "source_location": "L13", + "weight": 1.0, + "source": "apps_web_src_context_index", + "target": "apps_web_src_context_evaluationcontext", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/StackBuilderPage.tsx", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_src_pages_stackbuilderpage", + "target": "apps_web_src_context_evaluationcontext", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/EvaluationContext.tsx", + "source_location": "L8", + "weight": 1.0, + "source": "apps_web_src_context_evaluationcontext_evaluationstate", + "target": "apps_web_src_types_worker_evaluationresult", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/index.ts", + "source_location": "L13", + "weight": 1.0, + "source": "apps_web_src_context_index", + "target": "apps_web_src_context_evaluationcontext_evaluationstate", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/EvaluationContext.tsx", + "source_location": "L21", + "weight": 1.0, + "source": "apps_web_src_context_evaluationcontext_evaluationcontextvalue", + "target": "apps_web_src_types_diagnostic_diagnostic", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/EvaluationContext.tsx", + "source_location": "L17", + "weight": 1.0, + "source": "apps_web_src_context_evaluationcontext_evaluationcontextvalue", + "target": "apps_web_src_types_worker_evaluationresult", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/index.ts", + "source_location": "L13", + "weight": 1.0, + "source": "apps_web_src_context_index", + "target": "apps_web_src_context_evaluationcontext_evaluationcontextvalue", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/index.ts", + "source_location": "L13", + "weight": 1.0, + "source": "apps_web_src_context_index", + "target": "apps_web_src_context_evaluationcontext_evaluationproviderprops", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/index.ts", + "source_location": "L13", + "weight": 1.0, + "source": "apps_web_src_context_index", + "target": "apps_web_src_context_evaluationcontext_evaluationprovider", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/StackBuilderPage.tsx", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_src_pages_stackbuilderpage", + "target": "apps_web_src_context_evaluationcontext_evaluationprovider", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/index.ts", + "source_location": "L13", + "weight": 1.0, + "source": "apps_web_src_context_index", + "target": "apps_web_src_context_evaluationcontext_useevaluationcontext", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useRulesEngine.ts", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_hooks_userulesengine", + "target": "apps_web_src_context_evaluationcontext_useevaluationcontext", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/src/hooks/useRulesEngine.ts", + "source_location": "L91", + "weight": 1.0, + "source": "apps_web_src_hooks_userulesengine_userulesengine", + "target": "apps_web_src_context_evaluationcontext_useevaluationcontext" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/ExportContext.tsx", + "source_location": "L32", + "weight": 1.0, + "source": "apps_web_src_context_exportcontext", + "target": "apps_web_src_context_exportcontext_exportcontext", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/ExportContext.tsx", + "source_location": "L17", + "weight": 1.0, + "source": "apps_web_src_context_exportcontext", + "target": "apps_web_src_context_exportcontext_exportcontextvalue", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/ExportContext.tsx", + "source_location": "L45", + "weight": 1.0, + "source": "apps_web_src_context_exportcontext", + "target": "apps_web_src_context_exportcontext_exportprovider", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/ExportContext.tsx", + "source_location": "L37", + "weight": 1.0, + "source": "apps_web_src_context_exportcontext", + "target": "apps_web_src_context_exportcontext_exportproviderprops", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/ExportContext.tsx", + "source_location": "L7", + "weight": 1.0, + "source": "apps_web_src_context_exportcontext", + "target": "apps_web_src_context_exportcontext_exportstate", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/ExportContext.tsx", + "source_location": "L80", + "weight": 1.0, + "source": "apps_web_src_context_exportcontext", + "target": "apps_web_src_context_exportcontext_useexportcontext", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/ExportContext.tsx", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_context_exportcontext", + "target": "apps_web_src_types_export_exportdata", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/ExportContext.tsx", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_context_exportcontext", + "target": "apps_web_src_types_export_exportformat", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/ExportContext.tsx", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_context_exportcontext", + "target": "apps_web_src_types_index", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/index.ts", + "source_location": "L28", + "weight": 1.0, + "source": "apps_web_src_context_index", + "target": "apps_web_src_context_exportcontext", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/StackBuilderPage.tsx", + "source_location": "L11", + "weight": 1.0, + "source": "apps_web_src_pages_stackbuilderpage", + "target": "apps_web_src_context_exportcontext", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/ExportContext.tsx", + "source_location": "L8", + "weight": 1.0, + "source": "apps_web_src_context_exportcontext_exportstate", + "target": "apps_web_src_types_export_exportdata", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/ExportContext.tsx", + "source_location": "L11", + "weight": 1.0, + "source": "apps_web_src_context_exportcontext_exportstate", + "target": "apps_web_src_types_export_exportformat", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/index.ts", + "source_location": "L28", + "weight": 1.0, + "source": "apps_web_src_context_index", + "target": "apps_web_src_context_exportcontext_exportstate", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/ExportContext.tsx", + "source_location": "L18", + "weight": 1.0, + "source": "apps_web_src_context_exportcontext_exportcontextvalue", + "target": "apps_web_src_types_export_exportdata", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/ExportContext.tsx", + "source_location": "L21", + "weight": 1.0, + "source": "apps_web_src_context_exportcontext_exportcontextvalue", + "target": "apps_web_src_types_export_exportformat", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/index.ts", + "source_location": "L28", + "weight": 1.0, + "source": "apps_web_src_context_index", + "target": "apps_web_src_context_exportcontext_exportcontextvalue", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/index.ts", + "source_location": "L28", + "weight": 1.0, + "source": "apps_web_src_context_index", + "target": "apps_web_src_context_exportcontext_exportproviderprops", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/index.ts", + "source_location": "L28", + "weight": 1.0, + "source": "apps_web_src_context_index", + "target": "apps_web_src_context_exportcontext_exportprovider", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/StackBuilderPage.tsx", + "source_location": "L11", + "weight": 1.0, + "source": "apps_web_src_pages_stackbuilderpage", + "target": "apps_web_src_context_exportcontext_exportprovider", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/index.ts", + "source_location": "L28", + "weight": 1.0, + "source": "apps_web_src_context_index", + "target": "apps_web_src_context_exportcontext_useexportcontext", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/index.ts", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_context_index", + "target": "apps_web_src_context_selectionscontext", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/SelectionsContext.tsx", + "source_location": "L45", + "weight": 1.0, + "source": "apps_web_src_context_selectionscontext", + "target": "apps_web_src_context_selectionscontext_loadselectionsfromstorage", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/SelectionsContext.tsx", + "source_location": "L68", + "weight": 1.0, + "source": "apps_web_src_context_selectionscontext", + "target": "apps_web_src_context_selectionscontext_saveselectionstostorage", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/SelectionsContext.tsx", + "source_location": "L32", + "weight": 1.0, + "source": "apps_web_src_context_selectionscontext", + "target": "apps_web_src_context_selectionscontext_selectionscontext", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/SelectionsContext.tsx", + "source_location": "L19", + "weight": 1.0, + "source": "apps_web_src_context_selectionscontext", + "target": "apps_web_src_context_selectionscontext_selectionscontextvalue", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/SelectionsContext.tsx", + "source_location": "L86", + "weight": 1.0, + "source": "apps_web_src_context_selectionscontext", + "target": "apps_web_src_context_selectionscontext_selectionsprovider", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/SelectionsContext.tsx", + "source_location": "L37", + "weight": 1.0, + "source": "apps_web_src_context_selectionscontext", + "target": "apps_web_src_context_selectionscontext_selectionsproviderprops", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/SelectionsContext.tsx", + "source_location": "L12", + "weight": 1.0, + "source": "apps_web_src_context_selectionscontext", + "target": "apps_web_src_context_selectionscontext_selectionsstate", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/SelectionsContext.tsx", + "source_location": "L163", + "weight": 1.0, + "source": "apps_web_src_context_selectionscontext", + "target": "apps_web_src_context_selectionscontext_useselectionscontext", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/SelectionsContext.tsx", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_context_selectionscontext", + "target": "apps_web_src_types_category_categoryid", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/SelectionsContext.tsx", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_context_selectionscontext", + "target": "apps_web_src_types_index", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/SelectionsContext.tsx", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_context_selectionscontext", + "target": "apps_web_src_types_tool_tool", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/SelectionsContext.tsx", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_context_selectionscontext", + "target": "apps_web_src_types_tool_toolid", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/StackBuilderPage.tsx", + "source_location": "L8", + "weight": 1.0, + "source": "apps_web_src_pages_stackbuilderpage", + "target": "apps_web_src_context_selectionscontext", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/index.ts", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_context_index", + "target": "apps_web_src_context_selectionscontext_selectionsstate", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "generic_arg", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/SelectionsContext.tsx", + "source_location": "L13", + "weight": 1.0, + "source": "apps_web_src_context_selectionscontext_selectionsstate", + "target": "apps_web_src_types_category_categoryid", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "generic_arg", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/SelectionsContext.tsx", + "source_location": "L13", + "weight": 1.0, + "source": "apps_web_src_context_selectionscontext_selectionsstate", + "target": "apps_web_src_types_tool_tool", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/index.ts", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_context_index", + "target": "apps_web_src_context_selectionscontext_selectionscontextvalue", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/SelectionsContext.tsx", + "source_location": "L22", + "weight": 1.0, + "source": "apps_web_src_context_selectionscontext_selectionscontextvalue", + "target": "apps_web_src_types_category_categoryid", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/SelectionsContext.tsx", + "source_location": "L21", + "weight": 1.0, + "source": "apps_web_src_context_selectionscontext_selectionscontextvalue", + "target": "apps_web_src_types_tool_tool", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/SelectionsContext.tsx", + "source_location": "L26", + "weight": 1.0, + "source": "apps_web_src_context_selectionscontext_selectionscontextvalue", + "target": "apps_web_src_types_tool_toolid", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/index.ts", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_context_index", + "target": "apps_web_src_context_selectionscontext_selectionsproviderprops", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "generic_arg", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/SelectionsContext.tsx", + "source_location": "L39", + "weight": 1.0, + "source": "apps_web_src_context_selectionscontext_selectionsproviderprops", + "target": "apps_web_src_types_category_categoryid", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "generic_arg", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/SelectionsContext.tsx", + "source_location": "L39", + "weight": 1.0, + "source": "apps_web_src_context_selectionscontext_selectionsproviderprops", + "target": "apps_web_src_types_tool_tool", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/index.ts", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_context_index", + "target": "apps_web_src_context_selectionscontext_selectionsprovider", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/StackBuilderPage.tsx", + "source_location": "L8", + "weight": 1.0, + "source": "apps_web_src_pages_stackbuilderpage", + "target": "apps_web_src_context_selectionscontext_selectionsprovider", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/index.ts", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_context_index", + "target": "apps_web_src_context_selectionscontext_useselectionscontext", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useStackSelection.ts", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_hooks_usestackselection", + "target": "apps_web_src_context_selectionscontext_useselectionscontext", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/src/hooks/useStackSelection.ts", + "source_location": "L52", + "weight": 1.0, + "source": "apps_web_src_hooks_usestackselection_usestackselection", + "target": "apps_web_src_context_selectionscontext_useselectionscontext" + }, + { + "relation": "re_exports", + "context": "export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/index.ts", + "source_location": "L21", + "weight": 1.0, + "source": "apps_web_src_context_index", + "target": "apps_web_src_context_suggestionscontext", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/SuggestionsContext.tsx", + "source_location": "L20", + "weight": 1.0, + "source": "apps_web_src_context_suggestionscontext", + "target": "apps_web_src_context_suggestionscontext_suggestionscontext", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/SuggestionsContext.tsx", + "source_location": "L7", + "weight": 1.0, + "source": "apps_web_src_context_suggestionscontext", + "target": "apps_web_src_context_suggestionscontext_suggestionscontextvalue", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/SuggestionsContext.tsx", + "source_location": "L33", + "weight": 1.0, + "source": "apps_web_src_context_suggestionscontext", + "target": "apps_web_src_context_suggestionscontext_suggestionsprovider", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/SuggestionsContext.tsx", + "source_location": "L25", + "weight": 1.0, + "source": "apps_web_src_context_suggestionscontext", + "target": "apps_web_src_context_suggestionscontext_suggestionsproviderprops", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/SuggestionsContext.tsx", + "source_location": "L88", + "weight": 1.0, + "source": "apps_web_src_context_suggestionscontext", + "target": "apps_web_src_context_suggestionscontext_usesuggestionscontext", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/SuggestionsContext.tsx", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_context_suggestionscontext", + "target": "apps_web_src_types_index", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/SuggestionsContext.tsx", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_context_suggestionscontext", + "target": "apps_web_src_types_suggestion_suggestion", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/StackBuilderPage.tsx", + "source_location": "L10", + "weight": 1.0, + "source": "apps_web_src_pages_stackbuilderpage", + "target": "apps_web_src_context_suggestionscontext", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/index.ts", + "source_location": "L21", + "weight": 1.0, + "source": "apps_web_src_context_index", + "target": "apps_web_src_context_suggestionscontext_suggestionscontextvalue", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/SuggestionsContext.tsx", + "source_location": "L8", + "weight": 1.0, + "source": "apps_web_src_context_suggestionscontext_suggestionscontextvalue", + "target": "apps_web_src_types_suggestion_suggestion", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/index.ts", + "source_location": "L21", + "weight": 1.0, + "source": "apps_web_src_context_index", + "target": "apps_web_src_context_suggestionscontext_suggestionsproviderprops", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/index.ts", + "source_location": "L21", + "weight": 1.0, + "source": "apps_web_src_context_index", + "target": "apps_web_src_context_suggestionscontext_suggestionsprovider", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/StackBuilderPage.tsx", + "source_location": "L10", + "weight": 1.0, + "source": "apps_web_src_pages_stackbuilderpage", + "target": "apps_web_src_context_suggestionscontext_suggestionsprovider", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/context/index.ts", + "source_location": "L21", + "weight": 1.0, + "source": "apps_web_src_context_index", + "target": "apps_web_src_context_suggestionscontext_usesuggestionscontext", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useSuggestions.ts", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_hooks_usesuggestions", + "target": "apps_web_src_context_suggestionscontext_usesuggestionscontext", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/src/hooks/useSuggestions.ts", + "source_location": "L37", + "weight": 1.0, + "source": "apps_web_src_hooks_usesuggestions_usesuggestions", + "target": "apps_web_src_context_suggestionscontext_usesuggestionscontext" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useRulesEngine.ts", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_hooks_userulesengine", + "target": "apps_web_src_context_index", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useStackSelection.ts", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_hooks_usestackselection", + "target": "apps_web_src_context_index", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useSuggestions.ts", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_hooks_usesuggestions", + "target": "apps_web_src_context_index", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/data/recipes/index.ts", + "source_location": "L40", + "weight": 1.0, + "source": "apps_web_src_data_recipes_index", + "target": "apps_web_src_data_recipes_index_getapplicablerecipes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/data/recipes/index.ts", + "source_location": "L33", + "weight": 1.0, + "source": "apps_web_src_data_recipes_index", + "target": "apps_web_src_data_recipes_index_getrecipebyid", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/data/recipes/index.ts", + "source_location": "L16", + "weight": 1.0, + "source": "apps_web_src_data_recipes_index", + "target": "apps_web_src_data_recipes_index_recipes", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/data/recipes/index.ts", + "source_location": "L7", + "weight": 1.0, + "source": "apps_web_src_data_recipes_index", + "target": "apps_web_src_data_recipes_nextjs_base", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/data/recipes/index.ts", + "source_location": "L7", + "weight": 1.0, + "source": "apps_web_src_data_recipes_index", + "target": "apps_web_src_data_recipes_nextjs_base_nextjsbaserecipe", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/data/recipes/index.ts", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_src_data_recipes_index", + "target": "apps_web_src_data_recipes_nextjs_clerk", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/data/recipes/index.ts", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_src_data_recipes_index", + "target": "apps_web_src_data_recipes_nextjs_clerk_nextjsclerkrecipe", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/data/recipes/index.ts", + "source_location": "L8", + "weight": 1.0, + "source": "apps_web_src_data_recipes_index", + "target": "apps_web_src_data_recipes_nextjs_prisma_postgres", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/data/recipes/index.ts", + "source_location": "L8", + "weight": 1.0, + "source": "apps_web_src_data_recipes_index", + "target": "apps_web_src_data_recipes_nextjs_prisma_postgres_nextjsprismapostgresrecipe", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/data/recipes/index.ts", + "source_location": "L10", + "weight": 1.0, + "source": "apps_web_src_data_recipes_index", + "target": "apps_web_src_data_recipes_stripe_integration", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/data/recipes/index.ts", + "source_location": "L10", + "weight": 1.0, + "source": "apps_web_src_data_recipes_index", + "target": "apps_web_src_data_recipes_stripe_integration_stripeintegrationrecipe", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/data/recipes/index.ts", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_data_recipes_index", + "target": "apps_web_src_types_index", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/data/recipes/index.ts", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_data_recipes_index", + "target": "apps_web_src_types_recipe_exportrecipe", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/export-generator.ts", + "source_location": "L13", + "weight": 1.0, + "source": "apps_web_src_lib_export_generator", + "target": "apps_web_src_data_recipes_index", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/export-generator.ts", + "source_location": "L13", + "weight": 1.0, + "source": "apps_web_src_lib_export_generator", + "target": "apps_web_src_data_recipes_index_getapplicablerecipes", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/src/lib/export-generator.ts", + "source_location": "L35", + "weight": 1.0, + "source": "apps_web_src_lib_export_generator_generateexport", + "target": "apps_web_src_data_recipes_index_getapplicablerecipes" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/data/recipes/nextjs-base.ts", + "source_location": "L7", + "weight": 1.0, + "source": "apps_web_src_data_recipes_nextjs_base", + "target": "apps_web_src_data_recipes_nextjs_base_nextjsbaserecipe", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/data/recipes/nextjs-base.ts", + "source_location": "L1", + "weight": 1.0, + "source": "apps_web_src_data_recipes_nextjs_base", + "target": "apps_web_src_types_index", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/data/recipes/nextjs-base.ts", + "source_location": "L1", + "weight": 1.0, + "source": "apps_web_src_data_recipes_nextjs_base", + "target": "apps_web_src_types_recipe_exportrecipe", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/data/recipes/nextjs-base.ts", + "source_location": "L1", + "weight": 1.0, + "source": "apps_web_src_data_recipes_nextjs_base", + "target": "apps_web_src_types_tool_tool", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/data/recipes/nextjs-clerk.ts", + "source_location": "L7", + "weight": 1.0, + "source": "apps_web_src_data_recipes_nextjs_clerk", + "target": "apps_web_src_data_recipes_nextjs_clerk_nextjsclerkrecipe", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/data/recipes/nextjs-clerk.ts", + "source_location": "L1", + "weight": 1.0, + "source": "apps_web_src_data_recipes_nextjs_clerk", + "target": "apps_web_src_types_index", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/data/recipes/nextjs-clerk.ts", + "source_location": "L1", + "weight": 1.0, + "source": "apps_web_src_data_recipes_nextjs_clerk", + "target": "apps_web_src_types_recipe_exportrecipe", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/data/recipes/nextjs-clerk.ts", + "source_location": "L1", + "weight": 1.0, + "source": "apps_web_src_data_recipes_nextjs_clerk", + "target": "apps_web_src_types_tool_tool", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/data/recipes/nextjs-prisma-postgres.ts", + "source_location": "L7", + "weight": 1.0, + "source": "apps_web_src_data_recipes_nextjs_prisma_postgres", + "target": "apps_web_src_data_recipes_nextjs_prisma_postgres_nextjsprismapostgresrecipe", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/data/recipes/nextjs-prisma-postgres.ts", + "source_location": "L1", + "weight": 1.0, + "source": "apps_web_src_data_recipes_nextjs_prisma_postgres", + "target": "apps_web_src_types_index", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/data/recipes/nextjs-prisma-postgres.ts", + "source_location": "L1", + "weight": 1.0, + "source": "apps_web_src_data_recipes_nextjs_prisma_postgres", + "target": "apps_web_src_types_recipe_exportrecipe", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/data/recipes/nextjs-prisma-postgres.ts", + "source_location": "L1", + "weight": 1.0, + "source": "apps_web_src_data_recipes_nextjs_prisma_postgres", + "target": "apps_web_src_types_tool_tool", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/data/recipes/stripe-integration.ts", + "source_location": "L7", + "weight": 1.0, + "source": "apps_web_src_data_recipes_stripe_integration", + "target": "apps_web_src_data_recipes_stripe_integration_stripeintegrationrecipe", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/data/recipes/stripe-integration.ts", + "source_location": "L1", + "weight": 1.0, + "source": "apps_web_src_data_recipes_stripe_integration", + "target": "apps_web_src_types_index", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/data/recipes/stripe-integration.ts", + "source_location": "L1", + "weight": 1.0, + "source": "apps_web_src_data_recipes_stripe_integration", + "target": "apps_web_src_types_recipe_exportrecipe", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/data/recipes/stripe-integration.ts", + "source_location": "L1", + "weight": 1.0, + "source": "apps_web_src_data_recipes_stripe_integration", + "target": "apps_web_src_types_tool_tool", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/data/suggestions.ts", + "source_location": "L150", + "weight": 1.0, + "source": "apps_web_src_data_suggestions", + "target": "apps_web_src_data_suggestions_authdatabasetopaymentsrule", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/data/suggestions.ts", + "source_location": "L60", + "weight": 1.0, + "source": "apps_web_src_data_suggestions", + "target": "apps_web_src_data_suggestions_databasetoormrule", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/data/suggestions.ts", + "source_location": "L23", + "weight": 1.0, + "source": "apps_web_src_data_suggestions", + "target": "apps_web_src_data_suggestions_findtoolbyid", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/data/suggestions.ts", + "source_location": "L33", + "weight": 1.0, + "source": "apps_web_src_data_suggestions", + "target": "apps_web_src_data_suggestions_frontendtodatabaserule", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/data/suggestions.ts", + "source_location": "L188", + "weight": 1.0, + "source": "apps_web_src_data_suggestions", + "target": "apps_web_src_data_suggestions_generatesuggestions", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/data/suggestions.ts", + "source_location": "L16", + "weight": 1.0, + "source": "apps_web_src_data_suggestions", + "target": "apps_web_src_data_suggestions_hastoolincategory", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/data/suggestions.ts", + "source_location": "L124", + "weight": 1.0, + "source": "apps_web_src_data_suggestions", + "target": "apps_web_src_data_suggestions_nextjstotailwindrule", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/data/suggestions.ts", + "source_location": "L98", + "weight": 1.0, + "source": "apps_web_src_data_suggestions", + "target": "apps_web_src_data_suggestions_nextjstovercelrule", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/data/suggestions.ts", + "source_location": "L7", + "weight": 1.0, + "source": "apps_web_src_data_suggestions", + "target": "apps_web_src_data_suggestions_suggestionrule", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/data/suggestions.ts", + "source_location": "L174", + "weight": 1.0, + "source": "apps_web_src_data_suggestions", + "target": "apps_web_src_data_suggestions_suggestionrules", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/data/suggestions.ts", + "source_location": "L1", + "weight": 1.0, + "source": "apps_web_src_data_suggestions", + "target": "apps_web_src_types_category_categoryid", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/data/suggestions.ts", + "source_location": "L1", + "weight": 1.0, + "source": "apps_web_src_data_suggestions", + "target": "apps_web_src_types_index", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/data/suggestions.ts", + "source_location": "L1", + "weight": 1.0, + "source": "apps_web_src_data_suggestions", + "target": "apps_web_src_types_suggestion_suggestion", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/data/suggestions.ts", + "source_location": "L1", + "weight": 1.0, + "source": "apps_web_src_data_suggestions", + "target": "apps_web_src_types_tool_tool", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useSuggestions.ts", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_hooks_usesuggestions", + "target": "apps_web_src_data_suggestions", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/data/suggestions.ts", + "source_location": "L10", + "weight": 1.0, + "source": "apps_web_src_data_suggestions_suggestionrule", + "target": "apps_web_src_types_suggestion_suggestion", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/data/suggestions.ts", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_src_data_suggestions_suggestionrule", + "target": "apps_web_src_types_tool_tool", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useSuggestions.ts", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_hooks_usesuggestions", + "target": "apps_web_src_data_suggestions_generatesuggestions", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/evaluate-with-fallback.ts", + "source_location": "L35", + "weight": 1.0, + "source": "apps_web_src_engine_evaluate_with_fallback", + "target": "apps_web_src_engine_evaluate_with_fallback_evaluateruleswithfallback", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/evaluate-with-fallback.ts", + "source_location": "L20", + "weight": 1.0, + "source": "apps_web_src_engine_evaluate_with_fallback", + "target": "apps_web_src_engine_evaluate_with_fallback_getworker", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/evaluate-with-fallback.ts", + "source_location": "L60", + "weight": 1.0, + "source": "apps_web_src_engine_evaluate_with_fallback", + "target": "apps_web_src_engine_evaluate_with_fallback_terminateworker", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/evaluate-with-fallback.ts", + "source_location": "L70", + "weight": 1.0, + "source": "apps_web_src_engine_evaluate_with_fallback", + "target": "apps_web_src_engine_rules_engine", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/evaluate-with-fallback.ts", + "source_location": "L8", + "weight": 1.0, + "source": "apps_web_src_engine_evaluate_with_fallback", + "target": "apps_web_src_engine_rules_engine_evaluaterulessync", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/evaluate-with-fallback.ts", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_src_engine_evaluate_with_fallback", + "target": "apps_web_src_engine_worker_wrapper", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/evaluate-with-fallback.ts", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_src_engine_evaluate_with_fallback", + "target": "apps_web_src_engine_worker_wrapper_makerulesworker", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/evaluate-with-fallback.ts", + "source_location": "L10", + "weight": 1.0, + "source": "apps_web_src_engine_evaluate_with_fallback", + "target": "apps_web_src_types_index", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/evaluate-with-fallback.ts", + "source_location": "L10", + "weight": 1.0, + "source": "apps_web_src_engine_evaluate_with_fallback", + "target": "apps_web_src_types_rule_rule", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/evaluate-with-fallback.ts", + "source_location": "L10", + "weight": 1.0, + "source": "apps_web_src_engine_evaluate_with_fallback", + "target": "apps_web_src_types_tool_tool", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/evaluate-with-fallback.ts", + "source_location": "L10", + "weight": 1.0, + "source": "apps_web_src_engine_evaluate_with_fallback", + "target": "apps_web_src_types_worker_evaluationresult", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/index.ts", + "source_location": "L7", + "weight": 1.0, + "source": "apps_web_src_engine_index", + "target": "apps_web_src_engine_evaluate_with_fallback", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/evaluate-with-fallback.ts", + "source_location": "L39", + "weight": 1.0, + "source": "apps_web_src_engine_evaluate_with_fallback_evaluateruleswithfallback", + "target": "apps_web_src_engine_evaluate_with_fallback_getworker", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/evaluate-with-fallback.ts", + "source_location": "L22", + "weight": 1.0, + "source": "apps_web_src_engine_evaluate_with_fallback_getworker", + "target": "apps_web_src_engine_worker_wrapper_makerulesworker", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/src/engine/evaluate-with-fallback.ts", + "source_location": "L43", + "weight": 1.0, + "source": "apps_web_src_engine_evaluate_with_fallback_evaluateruleswithfallback", + "target": "apps_web_src_engine_rules_engine_evaluaterulessync" + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/index.ts", + "source_location": "L7", + "weight": 1.0, + "source": "apps_web_src_engine_index", + "target": "apps_web_src_engine_evaluate_with_fallback_evaluateruleswithfallback", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useRulesEngine.ts", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_hooks_userulesengine", + "target": "apps_web_src_engine_evaluate_with_fallback_evaluateruleswithfallback", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/index.ts", + "source_location": "L7", + "weight": 1.0, + "source": "apps_web_src_engine_index", + "target": "apps_web_src_engine_evaluate_with_fallback_terminateworker", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/index.ts", + "source_location": "L17", + "weight": 1.0, + "source": "apps_web_src_engine_index", + "target": "apps_web_src_engine_score_calculator", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/index.ts", + "source_location": "L17", + "weight": 1.0, + "source": "apps_web_src_engine_index", + "target": "apps_web_src_engine_score_calculator_applycapabilitycompatcap", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/index.ts", + "source_location": "L17", + "weight": 1.0, + "source": "apps_web_src_engine_index", + "target": "apps_web_src_engine_score_calculator_calculatescore", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/index.ts", + "source_location": "L17", + "weight": 1.0, + "source": "apps_web_src_engine_index", + "target": "apps_web_src_engine_score_calculator_validatescorebreakdown", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/index.ts", + "source_location": "L13", + "weight": 1.0, + "source": "apps_web_src_engine_index", + "target": "apps_web_src_engine_worker_wrapper", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/index.ts", + "source_location": "L13", + "weight": 1.0, + "source": "apps_web_src_engine_index", + "target": "apps_web_src_engine_worker_wrapper_makerulesworker", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/index.ts", + "source_location": "L15", + "weight": 1.0, + "source": "apps_web_src_engine_index", + "target": "apps_web_src_engine_worker_wrapper_rulesengineworker", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/index.ts", + "source_location": "L13", + "weight": 1.0, + "source": "apps_web_src_engine_index", + "target": "apps_web_src_engine_worker_wrapper_workererror", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useRulesEngine.ts", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_hooks_userulesengine", + "target": "apps_web_src_engine_index", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/rules-engine.ts", + "source_location": "L194", + "weight": 1.0, + "source": "apps_web_src_engine_rules_engine", + "target": "apps_web_src_engine_rules_engine_evaluatecapabilitycompat", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/rules-engine.ts", + "source_location": "L219", + "weight": 1.0, + "source": "apps_web_src_engine_rules_engine", + "target": "apps_web_src_engine_rules_engine_evaluatecategorycoverage", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/rules-engine.ts", + "source_location": "L103", + "weight": 1.0, + "source": "apps_web_src_engine_rules_engine", + "target": "apps_web_src_engine_rules_engine_evaluatehardconflict", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/rules-engine.ts", + "source_location": "L78", + "weight": 1.0, + "source": "apps_web_src_engine_rules_engine", + "target": "apps_web_src_engine_rules_engine_evaluatemutualexclusivecategory", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/rules-engine.ts", + "source_location": "L128", + "weight": 1.0, + "source": "apps_web_src_engine_rules_engine", + "target": "apps_web_src_engine_rules_engine_evaluaterequirestool", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/rules-engine.ts", + "source_location": "L26", + "weight": 1.0, + "source": "apps_web_src_engine_rules_engine", + "target": "apps_web_src_engine_rules_engine_evaluaterulessync", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/rules-engine.ts", + "source_location": "L169", + "weight": 1.0, + "source": "apps_web_src_engine_rules_engine", + "target": "apps_web_src_engine_rules_engine_evaluatesynergy", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/rules-engine.ts", + "source_location": "L21", + "weight": 1.0, + "source": "apps_web_src_engine_rules_engine", + "target": "apps_web_src_engine_score_calculator", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/rules-engine.ts", + "source_location": "L21", + "weight": 1.0, + "source": "apps_web_src_engine_rules_engine", + "target": "apps_web_src_engine_score_calculator_applycapabilitycompatcap", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/rules-engine.ts", + "source_location": "L21", + "weight": 1.0, + "source": "apps_web_src_engine_rules_engine", + "target": "apps_web_src_engine_score_calculator_calculatescore", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/rules-engine.ts", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_src_engine_rules_engine", + "target": "apps_web_src_types_diagnostic_diagnostic", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/rules-engine.ts", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_src_engine_rules_engine", + "target": "apps_web_src_types_index", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/rules-engine.ts", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_src_engine_rules_engine", + "target": "apps_web_src_types_rule_capabilitycompatrule", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/rules-engine.ts", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_src_engine_rules_engine", + "target": "apps_web_src_types_rule_categorycoveragerule", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/rules-engine.ts", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_src_engine_rules_engine", + "target": "apps_web_src_types_rule_hardconflictrule", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/rules-engine.ts", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_src_engine_rules_engine", + "target": "apps_web_src_types_rule_mutualexclusivecategoryrule", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/rules-engine.ts", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_src_engine_rules_engine", + "target": "apps_web_src_types_rule_requirestoolrule", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/rules-engine.ts", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_src_engine_rules_engine", + "target": "apps_web_src_types_rule_rule", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/rules-engine.ts", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_src_engine_rules_engine", + "target": "apps_web_src_types_rule_synergyrule", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/rules-engine.ts", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_src_engine_rules_engine", + "target": "apps_web_src_types_tool_tool", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/rules-engine.ts", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_src_engine_rules_engine", + "target": "apps_web_src_types_worker_evaluationresult", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/rules-engine.worker.ts", + "source_location": "L8", + "weight": 1.0, + "source": "apps_web_src_engine_rules_engine_worker", + "target": "apps_web_src_engine_rules_engine", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/rules-engine.ts", + "source_location": "L50", + "weight": 1.0, + "source": "apps_web_src_engine_rules_engine_evaluaterulessync", + "target": "apps_web_src_engine_rules_engine_evaluatecapabilitycompat", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/rules-engine.ts", + "source_location": "L53", + "weight": 1.0, + "source": "apps_web_src_engine_rules_engine_evaluaterulessync", + "target": "apps_web_src_engine_rules_engine_evaluatecategorycoverage", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/rules-engine.ts", + "source_location": "L41", + "weight": 1.0, + "source": "apps_web_src_engine_rules_engine_evaluaterulessync", + "target": "apps_web_src_engine_rules_engine_evaluatehardconflict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/rules-engine.ts", + "source_location": "L38", + "weight": 1.0, + "source": "apps_web_src_engine_rules_engine_evaluaterulessync", + "target": "apps_web_src_engine_rules_engine_evaluatemutualexclusivecategory", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/rules-engine.ts", + "source_location": "L44", + "weight": 1.0, + "source": "apps_web_src_engine_rules_engine_evaluaterulessync", + "target": "apps_web_src_engine_rules_engine_evaluaterequirestool", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/rules-engine.ts", + "source_location": "L47", + "weight": 1.0, + "source": "apps_web_src_engine_rules_engine_evaluaterulessync", + "target": "apps_web_src_engine_rules_engine_evaluatesynergy", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/src/engine/rules-engine.ts", + "source_location": "L59", + "weight": 1.0, + "source": "apps_web_src_engine_rules_engine_evaluaterulessync", + "target": "apps_web_src_engine_score_calculator_applycapabilitycompatcap" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/src/engine/rules-engine.ts", + "source_location": "L62", + "weight": 1.0, + "source": "apps_web_src_engine_rules_engine_evaluaterulessync", + "target": "apps_web_src_engine_score_calculator_calculatescore" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/rules-engine.worker.ts", + "source_location": "L8", + "weight": 1.0, + "source": "apps_web_src_engine_rules_engine_worker", + "target": "apps_web_src_engine_rules_engine_evaluaterulessync", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/rules-engine.worker.ts", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_src_engine_rules_engine_worker", + "target": "apps_web_src_types_index", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/rules-engine.worker.ts", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_src_engine_rules_engine_worker", + "target": "apps_web_src_types_worker_workerreq", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/rules-engine.worker.ts", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_src_engine_rules_engine_worker", + "target": "apps_web_src_types_worker_workerres", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/score-calculator.ts", + "source_location": "L72", + "weight": 1.0, + "source": "apps_web_src_engine_score_calculator", + "target": "apps_web_src_engine_score_calculator_applycapabilitycompatcap", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/score-calculator.ts", + "source_location": "L28", + "weight": 1.0, + "source": "apps_web_src_engine_score_calculator", + "target": "apps_web_src_engine_score_calculator_calculatescore", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/score-calculator.ts", + "source_location": "L113", + "weight": 1.0, + "source": "apps_web_src_engine_score_calculator", + "target": "apps_web_src_engine_score_calculator_validatescorebreakdown", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/score-calculator.ts", + "source_location": "L16", + "weight": 1.0, + "source": "apps_web_src_engine_score_calculator", + "target": "apps_web_src_types_diagnostic_diagnostic", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/score-calculator.ts", + "source_location": "L16", + "weight": 1.0, + "source": "apps_web_src_engine_score_calculator", + "target": "apps_web_src_types_index", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/score-calculator.ts", + "source_location": "L16", + "weight": 1.0, + "source": "apps_web_src_engine_score_calculator", + "target": "apps_web_src_types_worker_scorebreakdown", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/worker-wrapper.ts", + "source_location": "L35", + "weight": 1.0, + "source": "apps_web_src_engine_worker_wrapper", + "target": "apps_web_src_engine_worker_wrapper_makerulesworker", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/worker-wrapper.ts", + "source_location": "L13", + "weight": 1.0, + "source": "apps_web_src_engine_worker_wrapper", + "target": "apps_web_src_engine_worker_wrapper_rulesengineworker", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/worker-wrapper.ts", + "source_location": "L21", + "weight": 1.0, + "source": "apps_web_src_engine_worker_wrapper", + "target": "apps_web_src_engine_worker_wrapper_workererror", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/worker-wrapper.ts", + "source_location": "L8", + "weight": 1.0, + "source": "apps_web_src_engine_worker_wrapper", + "target": "apps_web_src_types_index", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/worker-wrapper.ts", + "source_location": "L8", + "weight": 1.0, + "source": "apps_web_src_engine_worker_wrapper", + "target": "apps_web_src_types_rule_rule", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/worker-wrapper.ts", + "source_location": "L8", + "weight": 1.0, + "source": "apps_web_src_engine_worker_wrapper", + "target": "apps_web_src_types_tool_tool", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/worker-wrapper.ts", + "source_location": "L8", + "weight": 1.0, + "source": "apps_web_src_engine_worker_wrapper", + "target": "apps_web_src_types_worker_evaluationresult", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/worker-wrapper.ts", + "source_location": "L8", + "weight": 1.0, + "source": "apps_web_src_engine_worker_wrapper", + "target": "apps_web_src_types_worker_workerreq", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/worker-wrapper.ts", + "source_location": "L8", + "weight": 1.0, + "source": "apps_web_src_engine_worker_wrapper", + "target": "apps_web_src_types_worker_workerres", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/worker-wrapper.ts", + "source_location": "L14", + "weight": 1.0, + "source": "apps_web_src_engine_worker_wrapper_rulesengineworker", + "target": "apps_web_src_engine_worker_wrapper_rulesengineworker_evaluate", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/worker-wrapper.ts", + "source_location": "L15", + "weight": 1.0, + "source": "apps_web_src_engine_worker_wrapper_rulesengineworker", + "target": "apps_web_src_engine_worker_wrapper_rulesengineworker_terminate", + "confidence_score": 1.0 + }, + { + "relation": "indirect_call", + "context": "collection", + "confidence": "INFERRED", + "source_file": "apps/web/src/engine/worker-wrapper.ts", + "source_location": "L140", + "weight": 1.0, + "source": "apps_web_src_engine_worker_wrapper_makerulesworker", + "target": "apps_web_src_engine_worker_wrapper_rulesengineworker_evaluate", + "confidence_score": 0.5 + }, + { + "relation": "references", + "context": "parameter_type", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/worker-wrapper.ts", + "source_location": "L14", + "weight": 1.0, + "source": "apps_web_src_engine_worker_wrapper_rulesengineworker_evaluate", + "target": "apps_web_src_types_rule_rule", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "parameter_type", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/worker-wrapper.ts", + "source_location": "L14", + "weight": 1.0, + "source": "apps_web_src_engine_worker_wrapper_rulesengineworker_evaluate", + "target": "apps_web_src_types_tool_tool", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "generic_arg", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/worker-wrapper.ts", + "source_location": "L14", + "weight": 1.0, + "source": "apps_web_src_engine_worker_wrapper_rulesengineworker_evaluate", + "target": "apps_web_src_types_worker_evaluationresult", + "confidence_score": 1.0 + }, + { + "relation": "indirect_call", + "context": "collection", + "confidence": "INFERRED", + "source_file": "apps/web/src/engine/worker-wrapper.ts", + "source_location": "L140", + "weight": 1.0, + "source": "apps_web_src_engine_worker_wrapper_makerulesworker", + "target": "apps_web_src_engine_worker_wrapper_rulesengineworker_terminate", + "confidence_score": 0.5 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/engine/worker-wrapper.ts", + "source_location": "L22", + "weight": 1.0, + "source": "apps_web_src_engine_worker_wrapper_workererror", + "target": "apps_web_src_engine_worker_wrapper_workererror_constructor", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/index.ts", + "source_location": "L18", + "weight": 1.0, + "source": "apps_web_src_hooks_index", + "target": "apps_web_src_hooks_useexport", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/index.ts", + "source_location": "L18", + "weight": 1.0, + "source": "apps_web_src_hooks_index", + "target": "apps_web_src_hooks_useexport_useexport", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/index.ts", + "source_location": "L19", + "weight": 1.0, + "source": "apps_web_src_hooks_index", + "target": "apps_web_src_hooks_useexport_useexportresult", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/index.ts", + "source_location": "L10", + "weight": 1.0, + "source": "apps_web_src_hooks_index", + "target": "apps_web_src_hooks_userulesengine", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/index.ts", + "source_location": "L10", + "weight": 1.0, + "source": "apps_web_src_hooks_index", + "target": "apps_web_src_hooks_userulesengine_userulesengine", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/index.ts", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_hooks_index", + "target": "apps_web_src_hooks_usestackselection", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/index.ts", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_hooks_index", + "target": "apps_web_src_hooks_usestackselection_cardinalityviolationerror", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/index.ts", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_hooks_index", + "target": "apps_web_src_hooks_usestackselection_usestackselection", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/index.ts", + "source_location": "L14", + "weight": 1.0, + "source": "apps_web_src_hooks_index", + "target": "apps_web_src_hooks_usesuggestions", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/index.ts", + "source_location": "L14", + "weight": 1.0, + "source": "apps_web_src_hooks_index", + "target": "apps_web_src_hooks_usesuggestions_usesuggestions", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/use-toast.ts", + "source_location": "L35", + "weight": 1.0, + "source": "apps_web_src_hooks_use_toast", + "target": "apps_web_src_hooks_use_toast_action", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/use-toast.ts", + "source_location": "L21", + "weight": 1.0, + "source": "apps_web_src_hooks_use_toast", + "target": "apps_web_src_hooks_use_toast_actiontypes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/use-toast.ts", + "source_location": "L59", + "weight": 1.0, + "source": "apps_web_src_hooks_use_toast", + "target": "apps_web_src_hooks_use_toast_addtoremovequeue", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/use-toast.ts", + "source_location": "L134", + "weight": 1.0, + "source": "apps_web_src_hooks_use_toast", + "target": "apps_web_src_hooks_use_toast_dispatch", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/use-toast.ts", + "source_location": "L30", + "weight": 1.0, + "source": "apps_web_src_hooks_use_toast", + "target": "apps_web_src_hooks_use_toast_genid", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/use-toast.ts", + "source_location": "L130", + "weight": 1.0, + "source": "apps_web_src_hooks_use_toast", + "target": "apps_web_src_hooks_use_toast_listeners", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/use-toast.ts", + "source_location": "L132", + "weight": 1.0, + "source": "apps_web_src_hooks_use_toast", + "target": "apps_web_src_hooks_use_toast_memorystate", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/use-toast.ts", + "source_location": "L75", + "weight": 1.0, + "source": "apps_web_src_hooks_use_toast", + "target": "apps_web_src_hooks_use_toast_reducer", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/use-toast.ts", + "source_location": "L53", + "weight": 1.0, + "source": "apps_web_src_hooks_use_toast", + "target": "apps_web_src_hooks_use_toast_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/use-toast.ts", + "source_location": "L143", + "weight": 1.0, + "source": "apps_web_src_hooks_use_toast", + "target": "apps_web_src_hooks_use_toast_toast", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/use-toast.ts", + "source_location": "L14", + "weight": 1.0, + "source": "apps_web_src_hooks_use_toast", + "target": "apps_web_src_hooks_use_toast_toastertoast", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/use-toast.ts", + "source_location": "L57", + "weight": 1.0, + "source": "apps_web_src_hooks_use_toast", + "target": "apps_web_src_hooks_use_toast_toasttimeouts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/use-toast.ts", + "source_location": "L172", + "weight": 1.0, + "source": "apps_web_src_hooks_use_toast", + "target": "apps_web_src_hooks_use_toast_usetoast", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/use-toast.ts", + "source_location": "L144", + "weight": 1.0, + "source": "apps_web_src_hooks_use_toast_toast", + "target": "apps_web_src_hooks_use_toast_genid", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/use-toast.ts", + "source_location": "L97", + "weight": 1.0, + "source": "apps_web_src_hooks_use_toast_reducer", + "target": "apps_web_src_hooks_use_toast_addtoremovequeue", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/use-toast.ts", + "source_location": "L135", + "weight": 1.0, + "source": "apps_web_src_hooks_use_toast_dispatch", + "target": "apps_web_src_hooks_use_toast_reducer", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/use-toast.ts", + "source_location": "L153", + "weight": 1.0, + "source": "apps_web_src_hooks_use_toast_toast", + "target": "apps_web_src_hooks_use_toast_dispatch", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useApi.ts", + "source_location": "L73", + "weight": 1.0, + "source": "apps_web_src_hooks_useapi", + "target": "apps_web_src_hooks_useapi_useanalyzestack", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useApi.ts", + "source_location": "L44", + "weight": 1.0, + "source": "apps_web_src_hooks_useapi", + "target": "apps_web_src_hooks_useapi_usecatalog", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useApi.ts", + "source_location": "L33", + "weight": 1.0, + "source": "apps_web_src_hooks_useapi", + "target": "apps_web_src_hooks_useapi_usecategories", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useApi.ts", + "source_location": "L65", + "weight": 1.0, + "source": "apps_web_src_hooks_useapi", + "target": "apps_web_src_hooks_useapi_usecompatibility", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useApi.ts", + "source_location": "L79", + "weight": 1.0, + "source": "apps_web_src_hooks_useapi", + "target": "apps_web_src_hooks_useapi_usegenerateblueprint", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useApi.ts", + "source_location": "L85", + "weight": 1.0, + "source": "apps_web_src_hooks_useapi", + "target": "apps_web_src_hooks_useapi_usegeneratescaffold", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useApi.ts", + "source_location": "L91", + "weight": 1.0, + "source": "apps_web_src_hooks_useapi", + "target": "apps_web_src_hooks_useapi_usemigrationpath", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useApi.ts", + "source_location": "L56", + "weight": 1.0, + "source": "apps_web_src_hooks_useapi", + "target": "apps_web_src_hooks_useapi_usestackbuildercatalog", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useApi.ts", + "source_location": "L25", + "weight": 1.0, + "source": "apps_web_src_hooks_useapi", + "target": "apps_web_src_hooks_useapi_usetool", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useApi.ts", + "source_location": "L10", + "weight": 1.0, + "source": "apps_web_src_hooks_useapi", + "target": "apps_web_src_hooks_useapi_usetools", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useApi.ts", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_hooks_useapi", + "target": "apps_web_src_lib_api_client", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useApi.ts", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_hooks_useapi", + "target": "apps_web_src_lib_api_client_apiclient", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useApi.ts", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_hooks_useapi", + "target": "apps_web_src_lib_catalog_loader", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useApi.ts", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_hooks_useapi", + "target": "apps_web_src_lib_catalog_loader_loadcatalog", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useApi.ts", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_hooks_useapi", + "target": "packages_schemas_src_domain_blueprintrequest", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useApi.ts", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_hooks_useapi", + "target": "packages_schemas_src_domain_scaffoldrequest", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useApi.ts", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_hooks_useapi", + "target": "packages_schemas_src_domain_stackanalyzerequest", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useApi.ts", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_hooks_useapi", + "target": "packages_schemas_src_index", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L13", + "weight": 1.0, + "source": "apps_web_src_pages_blueprintbuilder", + "target": "apps_web_src_hooks_useapi", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/CompatibilityView.tsx", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_pages_compatibilityview", + "target": "apps_web_src_hooks_useapi", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/MigrationExplorer.tsx", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_pages_migrationexplorer", + "target": "apps_web_src_hooks_useapi", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/StackBuilderPage.tsx", + "source_location": "L14", + "weight": 1.0, + "source": "apps_web_src_pages_stackbuilderpage", + "target": "apps_web_src_hooks_useapi", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/ToolCatalog.tsx", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_pages_toolcatalog", + "target": "apps_web_src_hooks_useapi", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/CompatibilityView.tsx", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_pages_compatibilityview", + "target": "apps_web_src_hooks_useapi_usetools", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/src/pages/CompatibilityView.tsx", + "source_location": "L85", + "weight": 1.0, + "source": "apps_web_src_pages_compatibilityview_pairwiseanalyzer", + "target": "apps_web_src_hooks_useapi_usetools" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/MigrationExplorer.tsx", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_pages_migrationexplorer", + "target": "apps_web_src_hooks_useapi_usetools", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/src/pages/MigrationExplorer.tsx", + "source_location": "L10", + "weight": 1.0, + "source": "apps_web_src_pages_migrationexplorer_migrationexplorer", + "target": "apps_web_src_hooks_useapi_usetools" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/ToolCatalog.tsx", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_pages_toolcatalog", + "target": "apps_web_src_hooks_useapi_usetools", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/src/pages/ToolCatalog.tsx", + "source_location": "L17", + "weight": 1.0, + "source": "apps_web_src_pages_toolcatalog_toolcatalog", + "target": "apps_web_src_hooks_useapi_usetools" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/ToolCatalog.tsx", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_pages_toolcatalog", + "target": "apps_web_src_hooks_useapi_usecategories", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/src/pages/ToolCatalog.tsx", + "source_location": "L23", + "weight": 1.0, + "source": "apps_web_src_pages_toolcatalog_toolcatalog", + "target": "apps_web_src_hooks_useapi_usecategories" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/CompatibilityView.tsx", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_pages_compatibilityview", + "target": "apps_web_src_hooks_useapi_usecatalog", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/src/pages/CompatibilityView.tsx", + "source_location": "L245", + "weight": 1.0, + "source": "apps_web_src_pages_compatibilityview_matrixanalyzer", + "target": "apps_web_src_hooks_useapi_usecatalog" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/StackBuilderPage.tsx", + "source_location": "L14", + "weight": 1.0, + "source": "apps_web_src_pages_stackbuilderpage", + "target": "apps_web_src_hooks_useapi_usestackbuildercatalog", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/src/pages/StackBuilderPage.tsx", + "source_location": "L26", + "weight": 1.0, + "source": "apps_web_src_pages_stackbuilderpage_stackbuilderpage", + "target": "apps_web_src_hooks_useapi_usestackbuildercatalog" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/CompatibilityView.tsx", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_pages_compatibilityview", + "target": "apps_web_src_hooks_useapi_usecompatibility", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/src/pages/CompatibilityView.tsx", + "source_location": "L86", + "weight": 1.0, + "source": "apps_web_src_pages_compatibilityview_pairwiseanalyzer", + "target": "apps_web_src_hooks_useapi_usecompatibility" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L13", + "weight": 1.0, + "source": "apps_web_src_pages_blueprintbuilder", + "target": "apps_web_src_hooks_useapi_usegenerateblueprint", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L46", + "weight": 1.0, + "source": "apps_web_src_pages_blueprintbuilder_blueprintbuilder", + "target": "apps_web_src_hooks_useapi_usegenerateblueprint" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L13", + "weight": 1.0, + "source": "apps_web_src_pages_blueprintbuilder", + "target": "apps_web_src_hooks_useapi_usegeneratescaffold", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L54", + "weight": 1.0, + "source": "apps_web_src_pages_blueprintbuilder_blueprintbuilder", + "target": "apps_web_src_hooks_useapi_usegeneratescaffold" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/MigrationExplorer.tsx", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_pages_migrationexplorer", + "target": "apps_web_src_hooks_useapi_usemigrationpath", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/src/pages/MigrationExplorer.tsx", + "source_location": "L11", + "weight": 1.0, + "source": "apps_web_src_pages_migrationexplorer_migrationexplorer", + "target": "apps_web_src_hooks_useapi_usemigrationpath" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useExport.ts", + "source_location": "L27", + "weight": 1.0, + "source": "apps_web_src_hooks_useexport", + "target": "apps_web_src_hooks_useexport_useexport", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useExport.ts", + "source_location": "L11", + "weight": 1.0, + "source": "apps_web_src_hooks_useexport", + "target": "apps_web_src_hooks_useexport_useexportresult", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useExport.ts", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_src_hooks_useexport", + "target": "apps_web_src_lib_archive_generator", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useExport.ts", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_src_hooks_useexport", + "target": "apps_web_src_lib_archive_generator_downloadarchive", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useExport.ts", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_src_hooks_useexport", + "target": "apps_web_src_lib_archive_generator_generatearchive", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useExport.ts", + "source_location": "L8", + "weight": 1.0, + "source": "apps_web_src_hooks_useexport", + "target": "apps_web_src_lib_export_generator", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useExport.ts", + "source_location": "L8", + "weight": 1.0, + "source": "apps_web_src_hooks_useexport", + "target": "apps_web_src_lib_export_generator_generateexport", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useExport.ts", + "source_location": "L7", + "weight": 1.0, + "source": "apps_web_src_hooks_useexport", + "target": "apps_web_src_types_diagnostic_diagnostic", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useExport.ts", + "source_location": "L7", + "weight": 1.0, + "source": "apps_web_src_hooks_useexport", + "target": "apps_web_src_types_export_exportdata", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useExport.ts", + "source_location": "L7", + "weight": 1.0, + "source": "apps_web_src_hooks_useexport", + "target": "apps_web_src_types_export_exportformat", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useExport.ts", + "source_location": "L7", + "weight": 1.0, + "source": "apps_web_src_hooks_useexport", + "target": "apps_web_src_types_index", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useExport.ts", + "source_location": "L7", + "weight": 1.0, + "source": "apps_web_src_hooks_useexport", + "target": "apps_web_src_types_tool_tool", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useExport.ts", + "source_location": "L15", + "weight": 1.0, + "source": "apps_web_src_hooks_useexport_useexportresult", + "target": "apps_web_src_types_diagnostic_diagnostic", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useExport.ts", + "source_location": "L12", + "weight": 1.0, + "source": "apps_web_src_hooks_useexport_useexportresult", + "target": "apps_web_src_types_export_exportdata", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useExport.ts", + "source_location": "L15", + "weight": 1.0, + "source": "apps_web_src_hooks_useexport_useexportresult", + "target": "apps_web_src_types_export_exportformat", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useExport.ts", + "source_location": "L15", + "weight": 1.0, + "source": "apps_web_src_hooks_useexport_useexportresult", + "target": "apps_web_src_types_tool_tool", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useRulesEngine.ts", + "source_location": "L40", + "weight": 1.0, + "source": "apps_web_src_hooks_userulesengine", + "target": "apps_web_src_hooks_userulesengine_buildevaluationresultfromapi", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useRulesEngine.ts", + "source_location": "L13", + "weight": 1.0, + "source": "apps_web_src_hooks_userulesengine", + "target": "apps_web_src_hooks_userulesengine_diagnosticsfromapiresponse", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useRulesEngine.ts", + "source_location": "L79", + "weight": 1.0, + "source": "apps_web_src_hooks_userulesengine", + "target": "apps_web_src_hooks_userulesengine_userulesengine", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useRulesEngine.ts", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_hooks_userulesengine", + "target": "apps_web_src_lib_api_client", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useRulesEngine.ts", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_hooks_userulesengine", + "target": "apps_web_src_lib_api_client_apiclient", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useRulesEngine.ts", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_hooks_userulesengine", + "target": "apps_web_src_types_diagnostic_diagnostic", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useRulesEngine.ts", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_hooks_userulesengine", + "target": "apps_web_src_types_index", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useRulesEngine.ts", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_hooks_userulesengine", + "target": "apps_web_src_types_rule_rule", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useRulesEngine.ts", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_hooks_userulesengine", + "target": "apps_web_src_types_tool_tool", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useRulesEngine.ts", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_hooks_userulesengine", + "target": "apps_web_src_types_worker_evaluationresult", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useRulesEngine.ts", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_hooks_userulesengine", + "target": "packages_schemas_src_domain_stackanalyzeresponse", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useRulesEngine.ts", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_hooks_userulesengine", + "target": "packages_schemas_src_index", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useRulesEngine.ts", + "source_location": "L44", + "weight": 1.0, + "source": "apps_web_src_hooks_userulesengine_buildevaluationresultfromapi", + "target": "apps_web_src_hooks_userulesengine_diagnosticsfromapiresponse", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useStackSelection.ts", + "source_location": "L22", + "weight": 1.0, + "source": "apps_web_src_hooks_usestackselection", + "target": "apps_web_src_hooks_usestackselection_cardinalityviolationerror", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useStackSelection.ts", + "source_location": "L13", + "weight": 1.0, + "source": "apps_web_src_hooks_usestackselection", + "target": "apps_web_src_hooks_usestackselection_serializedselections", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useStackSelection.ts", + "source_location": "L43", + "weight": 1.0, + "source": "apps_web_src_hooks_usestackselection", + "target": "apps_web_src_hooks_usestackselection_usestackselection", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useStackSelection.ts", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_hooks_usestackselection", + "target": "apps_web_src_types_category_category", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useStackSelection.ts", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_hooks_usestackselection", + "target": "apps_web_src_types_category_categoryid", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useStackSelection.ts", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_hooks_usestackselection", + "target": "apps_web_src_types_index", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useStackSelection.ts", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_hooks_usestackselection", + "target": "apps_web_src_types_tool_tool", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "generic_arg", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useStackSelection.ts", + "source_location": "L15", + "weight": 1.0, + "source": "apps_web_src_hooks_usestackselection_serializedselections", + "target": "apps_web_src_types_category_categoryid", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "generic_arg", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useStackSelection.ts", + "source_location": "L15", + "weight": 1.0, + "source": "apps_web_src_hooks_usestackselection_serializedselections", + "target": "apps_web_src_types_tool_tool", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useStackSelection.ts", + "source_location": "L23", + "weight": 1.0, + "source": "apps_web_src_hooks_usestackselection_cardinalityviolationerror", + "target": "apps_web_src_hooks_usestackselection_cardinalityviolationerror_constructor", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useSuggestions.ts", + "source_location": "L22", + "weight": 1.0, + "source": "apps_web_src_hooks_usesuggestions", + "target": "apps_web_src_hooks_usesuggestions_usesuggestions", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useSuggestions.ts", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_hooks_usesuggestions", + "target": "apps_web_src_types_category_category", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useSuggestions.ts", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_hooks_usesuggestions", + "target": "apps_web_src_types_category_categoryid", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useSuggestions.ts", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_hooks_usesuggestions", + "target": "apps_web_src_types_index", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useSuggestions.ts", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_hooks_usesuggestions", + "target": "apps_web_src_types_suggestion", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useSuggestions.ts", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_hooks_usesuggestions", + "target": "apps_web_src_types_suggestion_suggestion", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/hooks/useSuggestions.ts", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_hooks_usesuggestions", + "target": "apps_web_src_types_tool_tool", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/api-client.ts", + "source_location": "L51", + "weight": 1.0, + "source": "apps_web_src_lib_api_client", + "target": "apps_web_src_lib_api_client_apiclient", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/api-client.ts", + "source_location": "L23", + "weight": 1.0, + "source": "apps_web_src_lib_api_client", + "target": "apps_web_src_lib_api_client_apierror", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/api-client.ts", + "source_location": "L17", + "weight": 1.0, + "source": "apps_web_src_lib_api_client", + "target": "apps_web_src_lib_api_client_apierrordata", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/api-client.ts", + "source_location": "L30", + "weight": 1.0, + "source": "apps_web_src_lib_api_client", + "target": "apps_web_src_lib_api_client_fetchapi", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/api-client.ts", + "source_location": "L1", + "weight": 1.0, + "source": "apps_web_src_lib_api_client", + "target": "packages_schemas_src_domain_blueprintrequest", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/api-client.ts", + "source_location": "L1", + "weight": 1.0, + "source": "apps_web_src_lib_api_client", + "target": "packages_schemas_src_domain_catalog", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/api-client.ts", + "source_location": "L1", + "weight": 1.0, + "source": "apps_web_src_lib_api_client", + "target": "packages_schemas_src_domain_category", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/api-client.ts", + "source_location": "L1", + "weight": 1.0, + "source": "apps_web_src_lib_api_client", + "target": "packages_schemas_src_domain_compatibilityresponse", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/api-client.ts", + "source_location": "L1", + "weight": 1.0, + "source": "apps_web_src_lib_api_client", + "target": "packages_schemas_src_domain_enhancedblueprintresponse", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/api-client.ts", + "source_location": "L1", + "weight": 1.0, + "source": "apps_web_src_lib_api_client", + "target": "packages_schemas_src_domain_migrationresponse", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/api-client.ts", + "source_location": "L1", + "weight": 1.0, + "source": "apps_web_src_lib_api_client", + "target": "packages_schemas_src_domain_scaffoldrequest", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/api-client.ts", + "source_location": "L1", + "weight": 1.0, + "source": "apps_web_src_lib_api_client", + "target": "packages_schemas_src_domain_scaffoldresponse", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/api-client.ts", + "source_location": "L1", + "weight": 1.0, + "source": "apps_web_src_lib_api_client", + "target": "packages_schemas_src_domain_stackanalyzerequest", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/api-client.ts", + "source_location": "L1", + "weight": 1.0, + "source": "apps_web_src_lib_api_client", + "target": "packages_schemas_src_domain_stackanalyzeresponse", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/api-client.ts", + "source_location": "L1", + "weight": 1.0, + "source": "apps_web_src_lib_api_client", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/api-client.ts", + "source_location": "L1", + "weight": 1.0, + "source": "apps_web_src_lib_api_client", + "target": "packages_schemas_src_index", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/catalog-loader.ts", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_lib_catalog_loader", + "target": "apps_web_src_lib_api_client", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/api-client.ts", + "source_location": "L24", + "weight": 1.0, + "source": "apps_web_src_lib_api_client_apierror", + "target": "apps_web_src_lib_api_client_apierror_constructor", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/catalog-loader.ts", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_lib_catalog_loader", + "target": "apps_web_src_lib_api_client_apiclient", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/archive-generator.ts", + "source_location": "L95", + "weight": 1.0, + "source": "apps_web_src_lib_archive_generator", + "target": "apps_web_src_lib_archive_generator_downloadarchive", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/archive-generator.ts", + "source_location": "L11", + "weight": 1.0, + "source": "apps_web_src_lib_archive_generator", + "target": "apps_web_src_lib_archive_generator_exporterror", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/archive-generator.ts", + "source_location": "L78", + "weight": 1.0, + "source": "apps_web_src_lib_archive_generator", + "target": "apps_web_src_lib_archive_generator_generatearchive", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/archive-generator.ts", + "source_location": "L64", + "weight": 1.0, + "source": "apps_web_src_lib_archive_generator", + "target": "apps_web_src_lib_archive_generator_generatetararchive", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/archive-generator.ts", + "source_location": "L26", + "weight": 1.0, + "source": "apps_web_src_lib_archive_generator", + "target": "apps_web_src_lib_archive_generator_generateziparchive", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/archive-generator.ts", + "source_location": "L112", + "weight": 1.0, + "source": "apps_web_src_lib_archive_generator", + "target": "apps_web_src_lib_archive_generator_suggestnearestcombination", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/archive-generator.ts", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_lib_archive_generator", + "target": "apps_web_src_types_export_exportfile", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/archive-generator.ts", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_lib_archive_generator", + "target": "apps_web_src_types_export_exportformat", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/archive-generator.ts", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_lib_archive_generator", + "target": "apps_web_src_types_index", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/export-generator.ts", + "source_location": "L23", + "weight": 1.0, + "source": "apps_web_src_lib_export_generator", + "target": "apps_web_src_lib_archive_generator", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L16", + "weight": 1.0, + "source": "apps_web_src_pages_blueprintbuilder", + "target": "apps_web_src_lib_archive_generator", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/archive-generator.ts", + "source_location": "L12", + "weight": 1.0, + "source": "apps_web_src_lib_archive_generator_exporterror", + "target": "apps_web_src_lib_archive_generator_exporterror_constructor", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/export-generator.ts", + "source_location": "L23", + "weight": 1.0, + "source": "apps_web_src_lib_export_generator", + "target": "apps_web_src_lib_archive_generator_exporterror", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/archive-generator.ts", + "source_location": "L84", + "weight": 1.0, + "source": "apps_web_src_lib_archive_generator_generatearchive", + "target": "apps_web_src_lib_archive_generator_generateziparchive", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/archive-generator.ts", + "source_location": "L86", + "weight": 1.0, + "source": "apps_web_src_lib_archive_generator_generatearchive", + "target": "apps_web_src_lib_archive_generator_generatetararchive", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L16", + "weight": 1.0, + "source": "apps_web_src_pages_blueprintbuilder", + "target": "apps_web_src_lib_archive_generator_generatearchive", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L16", + "weight": 1.0, + "source": "apps_web_src_pages_blueprintbuilder", + "target": "apps_web_src_lib_archive_generator_downloadarchive", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/export-generator.ts", + "source_location": "L23", + "weight": 1.0, + "source": "apps_web_src_lib_export_generator", + "target": "apps_web_src_lib_archive_generator_suggestnearestcombination", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/src/lib/export-generator.ts", + "source_location": "L42", + "weight": 1.0, + "source": "apps_web_src_lib_export_generator_generateexport", + "target": "apps_web_src_lib_archive_generator_suggestnearestcombination" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/auth-client.ts", + "source_location": "L7", + "weight": 1.0, + "source": "apps_web_src_lib_auth_client", + "target": "apps_web_src_lib_auth_client_authclient", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/auth-client.ts", + "source_location": "L12", + "weight": 1.0, + "source": "apps_web_src_lib_auth_client", + "target": "apps_web_src_lib_auth_client_session", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/catalog-loader.ts", + "source_location": "L40", + "weight": 1.0, + "source": "apps_web_src_lib_catalog_loader", + "target": "apps_web_src_lib_catalog_loader_cachedcatalog", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/catalog-loader.ts", + "source_location": "L24", + "weight": 1.0, + "source": "apps_web_src_lib_catalog_loader", + "target": "apps_web_src_lib_catalog_loader_catalogdata", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/catalog-loader.ts", + "source_location": "L201", + "weight": 1.0, + "source": "apps_web_src_lib_catalog_loader", + "target": "apps_web_src_lib_catalog_loader_clearcatalogcache", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/catalog-loader.ts", + "source_location": "L82", + "weight": 1.0, + "source": "apps_web_src_lib_catalog_loader", + "target": "apps_web_src_lib_catalog_loader_getcachedcatalog", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/catalog-loader.ts", + "source_location": "L211", + "weight": 1.0, + "source": "apps_web_src_lib_catalog_loader", + "target": "apps_web_src_lib_catalog_loader_hascachedcatalog", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/catalog-loader.ts", + "source_location": "L144", + "weight": 1.0, + "source": "apps_web_src_lib_catalog_loader", + "target": "apps_web_src_lib_catalog_loader_loadcatalog", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/catalog-loader.ts", + "source_location": "L65", + "weight": 1.0, + "source": "apps_web_src_lib_catalog_loader", + "target": "apps_web_src_lib_catalog_loader_loadcatalogfile", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/catalog-loader.ts", + "source_location": "L49", + "weight": 1.0, + "source": "apps_web_src_lib_catalog_loader", + "target": "apps_web_src_lib_catalog_loader_loadmanifest", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/catalog-loader.ts", + "source_location": "L19", + "weight": 1.0, + "source": "apps_web_src_lib_catalog_loader", + "target": "apps_web_src_lib_catalog_loader_manifest", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/catalog-loader.ts", + "source_location": "L8", + "weight": 1.0, + "source": "apps_web_src_lib_catalog_loader", + "target": "apps_web_src_lib_catalog_loader_manifestschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/catalog-loader.ts", + "source_location": "L113", + "weight": 1.0, + "source": "apps_web_src_lib_catalog_loader", + "target": "apps_web_src_lib_catalog_loader_setcachedcatalog", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/catalog-loader.ts", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_lib_catalog_loader", + "target": "packages_schemas_src_domain_category", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/catalog-loader.ts", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_lib_catalog_loader", + "target": "packages_schemas_src_domain_categoryschema", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/catalog-loader.ts", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_lib_catalog_loader", + "target": "packages_schemas_src_domain_rule", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/catalog-loader.ts", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_lib_catalog_loader", + "target": "packages_schemas_src_domain_ruleschema", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/catalog-loader.ts", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_lib_catalog_loader", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/catalog-loader.ts", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_lib_catalog_loader", + "target": "packages_schemas_src_domain_toolschema", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/catalog-loader.ts", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_lib_catalog_loader", + "target": "packages_schemas_src_index", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/StackBuilderPage.tsx", + "source_location": "L12", + "weight": 1.0, + "source": "apps_web_src_pages_stackbuilderpage", + "target": "apps_web_src_lib_catalog_loader", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/src/lib/catalog-loader.ts", + "source_location": "L57", + "weight": 1.0, + "source": "apps_web_src_lib_catalog_loader_loadmanifest", + "target": "apps_web_src_lib_catalog_loader_manifestschema" + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/catalog-loader.ts", + "source_location": "L25", + "weight": 1.0, + "source": "apps_web_src_lib_catalog_loader_catalogdata", + "target": "packages_schemas_src_domain_category", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/catalog-loader.ts", + "source_location": "L27", + "weight": 1.0, + "source": "apps_web_src_lib_catalog_loader_catalogdata", + "target": "packages_schemas_src_domain_rule", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/catalog-loader.ts", + "source_location": "L26", + "weight": 1.0, + "source": "apps_web_src_lib_catalog_loader_catalogdata", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/catalog-loader.ts", + "source_location": "L175", + "weight": 1.0, + "source": "apps_web_src_lib_catalog_loader_loadcatalog", + "target": "apps_web_src_lib_catalog_loader_loadmanifest", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/catalog-loader.ts", + "source_location": "L179", + "weight": 1.0, + "source": "apps_web_src_lib_catalog_loader_loadcatalog", + "target": "apps_web_src_lib_catalog_loader_loadcatalogfile", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/catalog-loader.ts", + "source_location": "L212", + "weight": 1.0, + "source": "apps_web_src_lib_catalog_loader_hascachedcatalog", + "target": "apps_web_src_lib_catalog_loader_getcachedcatalog", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/catalog-loader.ts", + "source_location": "L146", + "weight": 1.0, + "source": "apps_web_src_lib_catalog_loader_loadcatalog", + "target": "apps_web_src_lib_catalog_loader_getcachedcatalog", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/catalog-loader.ts", + "source_location": "L166", + "weight": 1.0, + "source": "apps_web_src_lib_catalog_loader_loadcatalog", + "target": "apps_web_src_lib_catalog_loader_setcachedcatalog", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/StackBuilderPage.tsx", + "source_location": "L12", + "weight": 1.0, + "source": "apps_web_src_pages_stackbuilderpage", + "target": "apps_web_src_lib_catalog_loader_clearcatalogcache", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/export-generator.ts", + "source_location": "L28", + "weight": 1.0, + "source": "apps_web_src_lib_export_generator", + "target": "apps_web_src_lib_export_generator_generateexport", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/export-generator.ts", + "source_location": "L148", + "weight": 1.0, + "source": "apps_web_src_lib_export_generator", + "target": "apps_web_src_lib_export_generator_generateexportastext", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/export-generator.ts", + "source_location": "L22", + "weight": 1.0, + "source": "apps_web_src_lib_export_generator", + "target": "apps_web_src_lib_export_log_generator", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/export-generator.ts", + "source_location": "L22", + "weight": 1.0, + "source": "apps_web_src_lib_export_generator", + "target": "apps_web_src_lib_export_log_generator_generateexportlog", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/export-generator.ts", + "source_location": "L22", + "weight": 1.0, + "source": "apps_web_src_lib_export_generator", + "target": "apps_web_src_lib_export_log_generator_generateexportlogfile", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/export-generator.ts", + "source_location": "L14", + "weight": 1.0, + "source": "apps_web_src_lib_export_generator", + "target": "apps_web_src_lib_recipe_matcher", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/export-generator.ts", + "source_location": "L14", + "weight": 1.0, + "source": "apps_web_src_lib_export_generator", + "target": "apps_web_src_lib_recipe_matcher_mergerecipetargets", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/export-generator.ts", + "source_location": "L14", + "weight": 1.0, + "source": "apps_web_src_lib_export_generator", + "target": "apps_web_src_lib_recipe_matcher_sortrecipesbycategory", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/export-generator.ts", + "source_location": "L21", + "weight": 1.0, + "source": "apps_web_src_lib_export_generator", + "target": "apps_web_src_templates_config_files_index", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/export-generator.ts", + "source_location": "L21", + "weight": 1.0, + "source": "apps_web_src_lib_export_generator", + "target": "apps_web_src_templates_config_files_index_gettemplatecontent", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/export-generator.ts", + "source_location": "L19", + "weight": 1.0, + "source": "apps_web_src_lib_export_generator", + "target": "apps_web_src_templates_env_example", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/export-generator.ts", + "source_location": "L19", + "weight": 1.0, + "source": "apps_web_src_lib_export_generator", + "target": "apps_web_src_templates_env_example_generateenvexample", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/export-generator.ts", + "source_location": "L18", + "weight": 1.0, + "source": "apps_web_src_lib_export_generator", + "target": "apps_web_src_templates_package_json", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/export-generator.ts", + "source_location": "L18", + "weight": 1.0, + "source": "apps_web_src_lib_export_generator", + "target": "apps_web_src_templates_package_json_generatepackagejson", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/export-generator.ts", + "source_location": "L20", + "weight": 1.0, + "source": "apps_web_src_lib_export_generator", + "target": "apps_web_src_templates_readme", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/export-generator.ts", + "source_location": "L20", + "weight": 1.0, + "source": "apps_web_src_lib_export_generator", + "target": "apps_web_src_templates_readme_generatereadme", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/export-generator.ts", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_lib_export_generator", + "target": "apps_web_src_types_diagnostic_diagnostic", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/export-generator.ts", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_lib_export_generator", + "target": "apps_web_src_types_export_exportdata", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/export-generator.ts", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_lib_export_generator", + "target": "apps_web_src_types_export_exportfile", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/export-generator.ts", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_lib_export_generator", + "target": "apps_web_src_types_export_exportformat", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/export-generator.ts", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_lib_export_generator", + "target": "apps_web_src_types_index", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/export-generator.ts", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_lib_export_generator", + "target": "apps_web_src_types_tool_tool", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/src/lib/export-generator.ts", + "source_location": "L123", + "weight": 1.0, + "source": "apps_web_src_lib_export_generator_generateexport", + "target": "apps_web_src_lib_export_log_generator_generateexportlog" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/src/lib/export-generator.ts", + "source_location": "L124", + "weight": 1.0, + "source": "apps_web_src_lib_export_generator_generateexport", + "target": "apps_web_src_lib_export_log_generator_generateexportlogfile" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/src/lib/export-generator.ts", + "source_location": "L50", + "weight": 1.0, + "source": "apps_web_src_lib_export_generator_generateexport", + "target": "apps_web_src_lib_recipe_matcher_mergerecipetargets" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/src/lib/export-generator.ts", + "source_location": "L47", + "weight": 1.0, + "source": "apps_web_src_lib_export_generator_generateexport", + "target": "apps_web_src_lib_recipe_matcher_sortrecipesbycategory" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/src/lib/export-generator.ts", + "source_location": "L84", + "weight": 1.0, + "source": "apps_web_src_lib_export_generator_generateexport", + "target": "apps_web_src_templates_config_files_index_gettemplatecontent" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/src/lib/export-generator.ts", + "source_location": "L71", + "weight": 1.0, + "source": "apps_web_src_lib_export_generator_generateexport", + "target": "apps_web_src_templates_env_example_generateenvexample" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/src/lib/export-generator.ts", + "source_location": "L56", + "weight": 1.0, + "source": "apps_web_src_lib_export_generator_generateexport", + "target": "apps_web_src_templates_package_json_generatepackagejson" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/src/lib/export-generator.ts", + "source_location": "L107", + "weight": 1.0, + "source": "apps_web_src_lib_export_generator_generateexport", + "target": "apps_web_src_templates_readme_generatereadme" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/export-log-generator.ts", + "source_location": "L17", + "weight": 1.0, + "source": "apps_web_src_lib_export_log_generator", + "target": "apps_web_src_lib_export_log_generator_generateexportlog", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/export-log-generator.ts", + "source_location": "L50", + "weight": 1.0, + "source": "apps_web_src_lib_export_log_generator", + "target": "apps_web_src_lib_export_log_generator_generateexportlogfile", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/export-log-generator.ts", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_lib_export_log_generator", + "target": "apps_web_src_types_diagnostic_diagnostic", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/export-log-generator.ts", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_lib_export_log_generator", + "target": "apps_web_src_types_export_appliedrecipe", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/export-log-generator.ts", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_lib_export_log_generator", + "target": "apps_web_src_types_export_exportlog", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/export-log-generator.ts", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_lib_export_log_generator", + "target": "apps_web_src_types_export_skippedrecipe", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/export-log-generator.ts", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_lib_export_log_generator", + "target": "apps_web_src_types_index", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/export-log-generator.ts", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_lib_export_log_generator", + "target": "apps_web_src_types_recipe_exportrecipe", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/recipe-matcher.ts", + "source_location": "L18", + "weight": 1.0, + "source": "apps_web_src_lib_recipe_matcher", + "target": "apps_web_src_lib_recipe_matcher_category_order", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/recipe-matcher.ts", + "source_location": "L171", + "weight": 1.0, + "source": "apps_web_src_lib_recipe_matcher", + "target": "apps_web_src_lib_recipe_matcher_getmostrestrictiveversion", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/recipe-matcher.ts", + "source_location": "L34", + "weight": 1.0, + "source": "apps_web_src_lib_recipe_matcher", + "target": "apps_web_src_lib_recipe_matcher_getrecipecategory", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/recipe-matcher.ts", + "source_location": "L273", + "weight": 1.0, + "source": "apps_web_src_lib_recipe_matcher", + "target": "apps_web_src_lib_recipe_matcher_mergedocslinks", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/recipe-matcher.ts", + "source_location": "L91", + "weight": 1.0, + "source": "apps_web_src_lib_recipe_matcher", + "target": "apps_web_src_lib_recipe_matcher_mergedpackagejson", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/recipe-matcher.ts", + "source_location": "L218", + "weight": 1.0, + "source": "apps_web_src_lib_recipe_matcher", + "target": "apps_web_src_lib_recipe_matcher_mergeenvtargets", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/recipe-matcher.ts", + "source_location": "L182", + "weight": 1.0, + "source": "apps_web_src_lib_recipe_matcher", + "target": "apps_web_src_lib_recipe_matcher_mergefiletargets", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/recipe-matcher.ts", + "source_location": "L108", + "weight": 1.0, + "source": "apps_web_src_lib_recipe_matcher", + "target": "apps_web_src_lib_recipe_matcher_mergepackagejsontargets", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/recipe-matcher.ts", + "source_location": "L253", + "weight": 1.0, + "source": "apps_web_src_lib_recipe_matcher", + "target": "apps_web_src_lib_recipe_matcher_mergepostinstallsteps", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/recipe-matcher.ts", + "source_location": "L288", + "weight": 1.0, + "source": "apps_web_src_lib_recipe_matcher", + "target": "apps_web_src_lib_recipe_matcher_mergerecipetargets", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/recipe-matcher.ts", + "source_location": "L73", + "weight": 1.0, + "source": "apps_web_src_lib_recipe_matcher", + "target": "apps_web_src_lib_recipe_matcher_sortrecipesbycategory", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/recipe-matcher.ts", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_lib_recipe_matcher", + "target": "apps_web_src_types_category_categoryid", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/recipe-matcher.ts", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_lib_recipe_matcher", + "target": "apps_web_src_types_index", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/recipe-matcher.ts", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_lib_recipe_matcher", + "target": "apps_web_src_types_recipe_exportrecipe", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/recipe-matcher.ts", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_lib_recipe_matcher", + "target": "apps_web_src_types_recipe_filetarget", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/recipe-matcher.ts", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_lib_recipe_matcher", + "target": "apps_web_src_types_recipe_recipetargets", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/recipe-matcher.ts", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_lib_recipe_matcher", + "target": "apps_web_src_types_tool_tool", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/recipe-matcher.ts", + "source_location": "L293", + "weight": 1.0, + "source": "apps_web_src_lib_recipe_matcher_mergerecipetargets", + "target": "apps_web_src_lib_recipe_matcher_sortrecipesbycategory", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/recipe-matcher.ts", + "source_location": "L136", + "weight": 1.0, + "source": "apps_web_src_lib_recipe_matcher_mergepackagejsontargets", + "target": "apps_web_src_lib_recipe_matcher_getmostrestrictiveversion", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/recipe-matcher.ts", + "source_location": "L296", + "weight": 1.0, + "source": "apps_web_src_lib_recipe_matcher_mergerecipetargets", + "target": "apps_web_src_lib_recipe_matcher_mergepackagejsontargets", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/recipe-matcher.ts", + "source_location": "L297", + "weight": 1.0, + "source": "apps_web_src_lib_recipe_matcher_mergerecipetargets", + "target": "apps_web_src_lib_recipe_matcher_mergefiletargets", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/recipe-matcher.ts", + "source_location": "L298", + "weight": 1.0, + "source": "apps_web_src_lib_recipe_matcher_mergerecipetargets", + "target": "apps_web_src_lib_recipe_matcher_mergeenvtargets", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/recipe-matcher.ts", + "source_location": "L299", + "weight": 1.0, + "source": "apps_web_src_lib_recipe_matcher_mergerecipetargets", + "target": "apps_web_src_lib_recipe_matcher_mergepostinstallsteps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/recipe-matcher.ts", + "source_location": "L300", + "weight": 1.0, + "source": "apps_web_src_lib_recipe_matcher_mergerecipetargets", + "target": "apps_web_src_lib_recipe_matcher_mergedocslinks", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/sentry.test.ts", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_lib_sentry_test", + "target": "apps_web_src_lib_sentry", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/sentry.test.ts", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_lib_sentry_test", + "target": "apps_web_src_lib_sentry_initsentry", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/sentry.test.ts", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_lib_sentry_test", + "target": "apps_web_src_lib_sentry_isenabled", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/sentry.test.ts", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_lib_sentry_test", + "target": "apps_web_src_lib_sentry_resetsentryfortests", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/sentry.ts", + "source_location": "L40", + "weight": 1.0, + "source": "apps_web_src_lib_sentry", + "target": "apps_web_src_lib_sentry_asstring", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/sentry.ts", + "source_location": "L45", + "weight": 1.0, + "source": "apps_web_src_lib_sentry", + "target": "apps_web_src_lib_sentry_initsentry", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/sentry.ts", + "source_location": "L23", + "weight": 1.0, + "source": "apps_web_src_lib_sentry", + "target": "apps_web_src_lib_sentry_initsentryoptions", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/sentry.ts", + "source_location": "L84", + "weight": 1.0, + "source": "apps_web_src_lib_sentry", + "target": "apps_web_src_lib_sentry_isenabled", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/sentry.ts", + "source_location": "L34", + "weight": 1.0, + "source": "apps_web_src_lib_sentry", + "target": "apps_web_src_lib_sentry_logger", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/sentry.ts", + "source_location": "L97", + "weight": 1.0, + "source": "apps_web_src_lib_sentry", + "target": "apps_web_src_lib_sentry_resetsentryfortests", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/main.tsx", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_main", + "target": "apps_web_src_lib_sentry", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/sentry.ts", + "source_location": "L48", + "weight": 1.0, + "source": "apps_web_src_lib_sentry_initsentry", + "target": "apps_web_src_lib_sentry_asstring", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/main.tsx", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_main", + "target": "apps_web_src_lib_sentry_initsentry", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/lib/utils.ts", + "source_location": "L7", + "weight": 1.0, + "source": "apps_web_src_lib_utils", + "target": "apps_web_src_lib_utils_cn", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/main.tsx", + "source_location": "L11", + "weight": 1.0, + "source": "apps_web_src_main", + "target": "apps_web_src_main_rootelement", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L30", + "weight": 1.0, + "source": "apps_web_src_pages_blueprintbuilder", + "target": "apps_web_src_pages_blueprintbuilder_blueprintbuilder", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L27", + "weight": 1.0, + "source": "apps_web_src_pages_blueprintbuilder", + "target": "apps_web_src_pages_blueprintbuilder_budgetoption", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L309", + "weight": 1.0, + "source": "apps_web_src_pages_blueprintbuilder", + "target": "apps_web_src_pages_blueprintbuilder_constraintsstep", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L296", + "weight": 1.0, + "source": "apps_web_src_pages_blueprintbuilder", + "target": "apps_web_src_pages_blueprintbuilder_constraintsstepprops", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L634", + "weight": 1.0, + "source": "apps_web_src_pages_blueprintbuilder", + "target": "apps_web_src_pages_blueprintbuilder_errormessage", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L418", + "weight": 1.0, + "source": "apps_web_src_pages_blueprintbuilder", + "target": "apps_web_src_pages_blueprintbuilder_exportstep", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L407", + "weight": 1.0, + "source": "apps_web_src_pages_blueprintbuilder", + "target": "apps_web_src_pages_blueprintbuilder_exportstepprops", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L269", + "weight": 1.0, + "source": "apps_web_src_pages_blueprintbuilder", + "target": "apps_web_src_pages_blueprintbuilder_ideastep", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L264", + "weight": 1.0, + "source": "apps_web_src_pages_blueprintbuilder", + "target": "apps_web_src_pages_blueprintbuilder_ideastepprops", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L20", + "weight": 1.0, + "source": "apps_web_src_pages_blueprintbuilder", + "target": "apps_web_src_pages_blueprintbuilder_steps", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L28", + "weight": 1.0, + "source": "apps_web_src_pages_blueprintbuilder", + "target": "apps_web_src_pages_blueprintbuilder_timelineoption", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L565", + "weight": 1.0, + "source": "apps_web_src_pages_blueprintbuilder", + "target": "apps_web_src_pages_blueprintbuilder_wizardcontrols", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L554", + "weight": 1.0, + "source": "apps_web_src_pages_blueprintbuilder", + "target": "apps_web_src_pages_blueprintbuilder_wizardcontrolsprops", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L212", + "weight": 1.0, + "source": "apps_web_src_pages_blueprintbuilder", + "target": "apps_web_src_pages_blueprintbuilder_wizardprogress", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L18", + "weight": 1.0, + "source": "apps_web_src_pages_blueprintbuilder", + "target": "apps_web_src_pages_blueprintbuilder_wizardstep", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L12", + "weight": 1.0, + "source": "apps_web_src_pages_blueprintbuilder", + "target": "packages_schemas_src_domain_scaffoldresponse", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L12", + "weight": 1.0, + "source": "apps_web_src_pages_blueprintbuilder", + "target": "packages_schemas_src_index", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L56", + "weight": 1.0, + "source": "apps_web_src_pages_blueprintbuilder_blueprintbuilder", + "target": "apps_web_src_pages_blueprintbuilder_steps" + }, + { + "relation": "references", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L213", + "weight": 1.0, + "source": "apps_web_src_pages_blueprintbuilder_wizardprogress", + "target": "apps_web_src_pages_blueprintbuilder_steps" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/BlueprintBuilder.tsx", + "source_location": "L166", + "weight": 1.0, + "source": "apps_web_src_pages_blueprintbuilder_blueprintbuilder", + "target": "apps_web_src_pages_blueprintbuilder_errormessage", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/CompatibilityView.tsx", + "source_location": "L16", + "weight": 1.0, + "source": "apps_web_src_pages_compatibilityview", + "target": "apps_web_src_pages_compatibilityview_compatibilityview", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/CompatibilityView.tsx", + "source_location": "L225", + "weight": 1.0, + "source": "apps_web_src_pages_compatibilityview", + "target": "apps_web_src_pages_compatibilityview_diagnosticicon", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/CompatibilityView.tsx", + "source_location": "L244", + "weight": 1.0, + "source": "apps_web_src_pages_compatibilityview", + "target": "apps_web_src_pages_compatibilityview_matrixanalyzer", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/CompatibilityView.tsx", + "source_location": "L14", + "weight": 1.0, + "source": "apps_web_src_pages_compatibilityview", + "target": "apps_web_src_pages_compatibilityview_mode", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/CompatibilityView.tsx", + "source_location": "L41", + "weight": 1.0, + "source": "apps_web_src_pages_compatibilityview", + "target": "apps_web_src_pages_compatibilityview_modetabs", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/CompatibilityView.tsx", + "source_location": "L82", + "weight": 1.0, + "source": "apps_web_src_pages_compatibilityview", + "target": "apps_web_src_pages_compatibilityview_pairwiseanalyzer", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/CompatibilityView.tsx", + "source_location": "L152", + "weight": 1.0, + "source": "apps_web_src_pages_compatibilityview", + "target": "apps_web_src_pages_compatibilityview_pairwiseresult", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/MigrationExplorer.tsx", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_pages_migrationexplorer", + "target": "apps_web_src_pages_migrationexplorer_migrationexplorer", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/StackBuilderPage.tsx", + "source_location": "L16", + "weight": 1.0, + "source": "apps_web_src_pages_stackbuilderpage", + "target": "apps_web_src_pages_stackbuilderpage_stackbuilderpage", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/pages/ToolCatalog.tsx", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_pages_toolcatalog", + "target": "apps_web_src_pages_toolcatalog_toolcatalog", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/templates/config-files/clerk-middleware.ts", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_templates_config_files_clerk_middleware", + "target": "apps_web_src_templates_config_files_clerk_middleware_generateclerkmiddleware", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/templates/config-files/index.ts", + "source_location": "L10", + "weight": 1.0, + "source": "apps_web_src_templates_config_files_index", + "target": "apps_web_src_templates_config_files_clerk_middleware", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/templates/config-files/index.ts", + "source_location": "L10", + "weight": 1.0, + "source": "apps_web_src_templates_config_files_index", + "target": "apps_web_src_templates_config_files_clerk_middleware_generateclerkmiddleware", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/templates/config-files/clerk-signin-page.ts", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_templates_config_files_clerk_signin_page", + "target": "apps_web_src_templates_config_files_clerk_signin_page_generateclerksigninpage", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/templates/config-files/index.ts", + "source_location": "L11", + "weight": 1.0, + "source": "apps_web_src_templates_config_files_index", + "target": "apps_web_src_templates_config_files_clerk_signin_page", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/templates/config-files/index.ts", + "source_location": "L11", + "weight": 1.0, + "source": "apps_web_src_templates_config_files_index", + "target": "apps_web_src_templates_config_files_clerk_signin_page_generateclerksigninpage", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/templates/config-files/clerk-signup-page.ts", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_templates_config_files_clerk_signup_page", + "target": "apps_web_src_templates_config_files_clerk_signup_page_generateclerksignuppage", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/templates/config-files/index.ts", + "source_location": "L12", + "weight": 1.0, + "source": "apps_web_src_templates_config_files_index", + "target": "apps_web_src_templates_config_files_clerk_signup_page", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/templates/config-files/index.ts", + "source_location": "L12", + "weight": 1.0, + "source": "apps_web_src_templates_config_files_index", + "target": "apps_web_src_templates_config_files_clerk_signup_page_generateclerksignuppage", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/templates/config-files/eslint-nextjs.ts", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_templates_config_files_eslint_nextjs", + "target": "apps_web_src_templates_config_files_eslint_nextjs_generateeslintnextjs", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/templates/config-files/index.ts", + "source_location": "L7", + "weight": 1.0, + "source": "apps_web_src_templates_config_files_index", + "target": "apps_web_src_templates_config_files_eslint_nextjs", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/templates/config-files/index.ts", + "source_location": "L7", + "weight": 1.0, + "source": "apps_web_src_templates_config_files_index", + "target": "apps_web_src_templates_config_files_eslint_nextjs_generateeslintnextjs", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/templates/config-files/index.ts", + "source_location": "L39", + "weight": 1.0, + "source": "apps_web_src_templates_config_files_index", + "target": "apps_web_src_templates_config_files_index_gettemplatecontent", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/templates/config-files/index.ts", + "source_location": "L21", + "weight": 1.0, + "source": "apps_web_src_templates_config_files_index", + "target": "apps_web_src_templates_config_files_index_templategenerators", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/templates/config-files/index.ts", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_templates_config_files_index", + "target": "apps_web_src_templates_config_files_next_config", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/templates/config-files/index.ts", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_templates_config_files_index", + "target": "apps_web_src_templates_config_files_next_config_generatenextconfig", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/templates/config-files/index.ts", + "source_location": "L16", + "weight": 1.0, + "source": "apps_web_src_templates_config_files_index", + "target": "apps_web_src_templates_config_files_nextjs_home_page", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/templates/config-files/index.ts", + "source_location": "L16", + "weight": 1.0, + "source": "apps_web_src_templates_config_files_index", + "target": "apps_web_src_templates_config_files_nextjs_home_page_generatenextjshomepage", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/templates/config-files/index.ts", + "source_location": "L15", + "weight": 1.0, + "source": "apps_web_src_templates_config_files_index", + "target": "apps_web_src_templates_config_files_nextjs_root_layout", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/templates/config-files/index.ts", + "source_location": "L15", + "weight": 1.0, + "source": "apps_web_src_templates_config_files_index", + "target": "apps_web_src_templates_config_files_nextjs_root_layout_generatenextjsrootlayout", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/templates/config-files/index.ts", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_src_templates_config_files_index", + "target": "apps_web_src_templates_config_files_prisma_client", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/templates/config-files/index.ts", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_src_templates_config_files_index", + "target": "apps_web_src_templates_config_files_prisma_client_generateprismaclient", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/templates/config-files/index.ts", + "source_location": "L8", + "weight": 1.0, + "source": "apps_web_src_templates_config_files_index", + "target": "apps_web_src_templates_config_files_prisma_schema_postgres", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/templates/config-files/index.ts", + "source_location": "L8", + "weight": 1.0, + "source": "apps_web_src_templates_config_files_index", + "target": "apps_web_src_templates_config_files_prisma_schema_postgres_generateprismaschemapostgres", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/templates/config-files/index.ts", + "source_location": "L13", + "weight": 1.0, + "source": "apps_web_src_templates_config_files_index", + "target": "apps_web_src_templates_config_files_stripe_client", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/templates/config-files/index.ts", + "source_location": "L13", + "weight": 1.0, + "source": "apps_web_src_templates_config_files_index", + "target": "apps_web_src_templates_config_files_stripe_client_generatestripeclient", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/templates/config-files/index.ts", + "source_location": "L14", + "weight": 1.0, + "source": "apps_web_src_templates_config_files_index", + "target": "apps_web_src_templates_config_files_stripe_webhook", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/templates/config-files/index.ts", + "source_location": "L14", + "weight": 1.0, + "source": "apps_web_src_templates_config_files_index", + "target": "apps_web_src_templates_config_files_stripe_webhook_generatestripewebhook", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/templates/config-files/index.ts", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_templates_config_files_index", + "target": "apps_web_src_templates_config_files_tsconfig_nextjs", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/templates/config-files/index.ts", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_templates_config_files_index", + "target": "apps_web_src_templates_config_files_tsconfig_nextjs_generatetsconfignextjs", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/templates/config-files/next-config.ts", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_templates_config_files_next_config", + "target": "apps_web_src_templates_config_files_next_config_generatenextconfig", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/templates/config-files/nextjs-home-page.ts", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_templates_config_files_nextjs_home_page", + "target": "apps_web_src_templates_config_files_nextjs_home_page_generatenextjshomepage", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/templates/config-files/nextjs-root-layout.ts", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_templates_config_files_nextjs_root_layout", + "target": "apps_web_src_templates_config_files_nextjs_root_layout_generatenextjsrootlayout", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/templates/config-files/prisma-client.ts", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_templates_config_files_prisma_client", + "target": "apps_web_src_templates_config_files_prisma_client_generateprismaclient", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/templates/config-files/prisma-schema-postgres.ts", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_templates_config_files_prisma_schema_postgres", + "target": "apps_web_src_templates_config_files_prisma_schema_postgres_generateprismaschemapostgres", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/templates/config-files/stripe-client.ts", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_templates_config_files_stripe_client", + "target": "apps_web_src_templates_config_files_stripe_client_generatestripeclient", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/templates/config-files/stripe-webhook.ts", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_templates_config_files_stripe_webhook", + "target": "apps_web_src_templates_config_files_stripe_webhook_generatestripewebhook", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/templates/config-files/tsconfig-nextjs.ts", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_src_templates_config_files_tsconfig_nextjs", + "target": "apps_web_src_templates_config_files_tsconfig_nextjs_generatetsconfignextjs", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/templates/env-example.ts", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_src_templates_env_example", + "target": "apps_web_src_templates_env_example_generateenvexample", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/templates/package-json.ts", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_src_templates_package_json", + "target": "apps_web_src_templates_package_json_generatepackagejson", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/templates/readme.ts", + "source_location": "L11", + "weight": 1.0, + "source": "apps_web_src_templates_readme", + "target": "apps_web_src_templates_readme_generatereadme", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/templates/readme.ts", + "source_location": "L125", + "weight": 1.0, + "source": "apps_web_src_templates_readme", + "target": "apps_web_src_templates_readme_getenvvardescription", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/templates/readme.ts", + "source_location": "L150", + "weight": 1.0, + "source": "apps_web_src_templates_readme", + "target": "apps_web_src_templates_readme_gettoolnamefromdocslink", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/templates/readme.ts", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_templates_readme", + "target": "apps_web_src_types_diagnostic_diagnostic", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/templates/readme.ts", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_templates_readme", + "target": "apps_web_src_types_index", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/templates/readme.ts", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_templates_readme", + "target": "apps_web_src_types_tool_tool", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/templates/readme.ts", + "source_location": "L78", + "weight": 1.0, + "source": "apps_web_src_templates_readme_generatereadme", + "target": "apps_web_src_templates_readme_getenvvardescription", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/catalog.ts", + "source_location": "L23", + "weight": 1.0, + "source": "apps_web_src_types_catalog", + "target": "apps_web_src_types_catalog_catalog", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/catalog.ts", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_src_types_catalog", + "target": "apps_web_src_types_catalog_catalogmanifest", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/catalog.ts", + "source_location": "L34", + "weight": 1.0, + "source": "apps_web_src_types_catalog", + "target": "apps_web_src_types_catalog_catalogmanifestschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/catalog.ts", + "source_location": "L48", + "weight": 1.0, + "source": "apps_web_src_types_catalog", + "target": "apps_web_src_types_catalog_iscatalogmanifest", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/catalog.ts", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_types_catalog", + "target": "apps_web_src_types_category", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/catalog.ts", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_types_catalog", + "target": "apps_web_src_types_category_category", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/catalog.ts", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_types_catalog", + "target": "apps_web_src_types_rule", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/catalog.ts", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_types_catalog", + "target": "apps_web_src_types_rule_rule", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/catalog.ts", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_types_catalog", + "target": "apps_web_src_types_tool", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/catalog.ts", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_types_catalog", + "target": "apps_web_src_types_tool_tool", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L91", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_catalog", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L91", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_catalog_catalogmanifest", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/catalog.ts", + "source_location": "L27", + "weight": 1.0, + "source": "apps_web_src_types_catalog_catalog", + "target": "apps_web_src_types_category_category", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/catalog.ts", + "source_location": "L28", + "weight": 1.0, + "source": "apps_web_src_types_catalog_catalog", + "target": "apps_web_src_types_rule_rule", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/catalog.ts", + "source_location": "L26", + "weight": 1.0, + "source": "apps_web_src_types_catalog_catalog", + "target": "apps_web_src_types_tool_tool", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L91", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_catalog_catalog", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L95", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_catalog_catalogmanifestschema", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L95", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_catalog_iscatalogmanifest", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/category.ts", + "source_location": "L32", + "weight": 1.0, + "source": "apps_web_src_types_category", + "target": "apps_web_src_types_category_cardinality", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/category.ts", + "source_location": "L76", + "weight": 1.0, + "source": "apps_web_src_types_category", + "target": "apps_web_src_types_category_cardinalityschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/category.ts", + "source_location": "L37", + "weight": 1.0, + "source": "apps_web_src_types_category", + "target": "apps_web_src_types_category_category", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/category.ts", + "source_location": "L7", + "weight": 1.0, + "source": "apps_web_src_types_category", + "target": "apps_web_src_types_category_categoryid", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/category.ts", + "source_location": "L50", + "weight": 1.0, + "source": "apps_web_src_types_category", + "target": "apps_web_src_types_category_categoryidschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/category.ts", + "source_location": "L86", + "weight": 1.0, + "source": "apps_web_src_types_category", + "target": "apps_web_src_types_category_categoryschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/category.ts", + "source_location": "L99", + "weight": 1.0, + "source": "apps_web_src_types_category", + "target": "apps_web_src_types_category_iscategoryid", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/diagnostic.ts", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_types_diagnostic", + "target": "apps_web_src_types_category", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_category", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_types_rule", + "target": "apps_web_src_types_category", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/suggestion.ts", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_types_suggestion", + "target": "apps_web_src_types_category", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/tool.ts", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_types_tool", + "target": "apps_web_src_types_category", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/diagnostic.ts", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_types_diagnostic", + "target": "apps_web_src_types_category_categoryid", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/diagnostic.ts", + "source_location": "L22", + "weight": 1.0, + "source": "apps_web_src_types_diagnostic_diagnosticcta", + "target": "apps_web_src_types_category_categoryid", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_category_categoryid", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_types_rule", + "target": "apps_web_src_types_category_categoryid", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L79", + "weight": 1.0, + "source": "apps_web_src_types_rule_categorycoveragerule", + "target": "apps_web_src_types_category_categoryid", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L21", + "weight": 1.0, + "source": "apps_web_src_types_rule_mutualexclusivecategoryrule", + "target": "apps_web_src_types_category_categoryid", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/suggestion.ts", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_types_suggestion", + "target": "apps_web_src_types_category_categoryid", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/suggestion.ts", + "source_location": "L23", + "weight": 1.0, + "source": "apps_web_src_types_suggestion_suggestion", + "target": "apps_web_src_types_category_categoryid", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/tool.ts", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_types_tool", + "target": "apps_web_src_types_category_categoryid", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/tool.ts", + "source_location": "L48", + "weight": 1.0, + "source": "apps_web_src_types_tool_tool", + "target": "apps_web_src_types_category_categoryid", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/tool.ts", + "source_location": "L29", + "weight": 1.0, + "source": "apps_web_src_types_tool_toolrequirements", + "target": "apps_web_src_types_category_categoryid", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_category_cardinality", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_category_category", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/diagnostic.ts", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_types_diagnostic", + "target": "apps_web_src_types_category_categoryidschema", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L7", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_category_categoryidschema", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_types_rule", + "target": "apps_web_src_types_category_categoryidschema", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/suggestion.ts", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_types_suggestion", + "target": "apps_web_src_types_category_categoryidschema", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/tool.ts", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_types_tool", + "target": "apps_web_src_types_category_categoryidschema", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L7", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_category_cardinalityschema", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L7", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_category_categoryschema", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L7", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_category_iscategoryid", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/diagnostic.ts", + "source_location": "L31", + "weight": 1.0, + "source": "apps_web_src_types_diagnostic", + "target": "apps_web_src_types_diagnostic_diagnostic", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/diagnostic.ts", + "source_location": "L14", + "weight": 1.0, + "source": "apps_web_src_types_diagnostic", + "target": "apps_web_src_types_diagnostic_diagnosticcategory", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/diagnostic.ts", + "source_location": "L51", + "weight": 1.0, + "source": "apps_web_src_types_diagnostic", + "target": "apps_web_src_types_diagnostic_diagnosticcategoryschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/diagnostic.ts", + "source_location": "L20", + "weight": 1.0, + "source": "apps_web_src_types_diagnostic", + "target": "apps_web_src_types_diagnostic_diagnosticcta", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/diagnostic.ts", + "source_location": "L56", + "weight": 1.0, + "source": "apps_web_src_types_diagnostic", + "target": "apps_web_src_types_diagnostic_diagnosticctaschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/diagnostic.ts", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_src_types_diagnostic", + "target": "apps_web_src_types_diagnostic_diagnosticlevel", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/diagnostic.ts", + "source_location": "L46", + "weight": 1.0, + "source": "apps_web_src_types_diagnostic", + "target": "apps_web_src_types_diagnostic_diagnosticlevelschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/diagnostic.ts", + "source_location": "L66", + "weight": 1.0, + "source": "apps_web_src_types_diagnostic", + "target": "apps_web_src_types_diagnostic_diagnosticschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/diagnostic.ts", + "source_location": "L81", + "weight": 1.0, + "source": "apps_web_src_types_diagnostic", + "target": "apps_web_src_types_diagnostic_isdiagnostic", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/diagnostic.ts", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_types_diagnostic", + "target": "apps_web_src_types_tool", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/diagnostic.ts", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_types_diagnostic", + "target": "apps_web_src_types_tool_toolid", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L33", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_diagnostic", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/worker.ts", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_types_worker", + "target": "apps_web_src_types_diagnostic", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L33", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_diagnostic_diagnosticlevel", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L33", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_diagnostic_diagnosticcategory", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/diagnostic.ts", + "source_location": "L23", + "weight": 1.0, + "source": "apps_web_src_types_diagnostic_diagnosticcta", + "target": "apps_web_src_types_tool_toolid", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L33", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_diagnostic_diagnosticcta", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/diagnostic.ts", + "source_location": "L38", + "weight": 1.0, + "source": "apps_web_src_types_diagnostic_diagnostic", + "target": "apps_web_src_types_tool_toolid", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L33", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_diagnostic_diagnostic", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/worker.ts", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_src_types_worker", + "target": "apps_web_src_types_diagnostic_diagnostic", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/worker.ts", + "source_location": "L22", + "weight": 1.0, + "source": "apps_web_src_types_worker_evaluationresult", + "target": "apps_web_src_types_diagnostic_diagnostic", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L39", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_diagnostic_diagnosticlevelschema", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L39", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_diagnostic_diagnosticcategoryschema", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L39", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_diagnostic_diagnosticctaschema", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L39", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_diagnostic_diagnosticschema", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L39", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_diagnostic_isdiagnostic", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/export.ts", + "source_location": "L11", + "weight": 1.0, + "source": "apps_web_src_types_export", + "target": "apps_web_src_types_export_appliedrecipe", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/export.ts", + "source_location": "L65", + "weight": 1.0, + "source": "apps_web_src_types_export", + "target": "apps_web_src_types_export_appliedrecipeschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/export.ts", + "source_location": "L55", + "weight": 1.0, + "source": "apps_web_src_types_export", + "target": "apps_web_src_types_export_exportdata", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/export.ts", + "source_location": "L113", + "weight": 1.0, + "source": "apps_web_src_types_export", + "target": "apps_web_src_types_export_exportdataschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/export.ts", + "source_location": "L47", + "weight": 1.0, + "source": "apps_web_src_types_export", + "target": "apps_web_src_types_export_exportfile", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/export.ts", + "source_location": "L100", + "weight": 1.0, + "source": "apps_web_src_types_export", + "target": "apps_web_src_types_export_exportfileschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/export.ts", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_src_types_export", + "target": "apps_web_src_types_export_exportformat", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/export.ts", + "source_location": "L108", + "weight": 1.0, + "source": "apps_web_src_types_export", + "target": "apps_web_src_types_export_exportformatschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/export.ts", + "source_location": "L29", + "weight": 1.0, + "source": "apps_web_src_types_export", + "target": "apps_web_src_types_export_exportlog", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/export.ts", + "source_location": "L82", + "weight": 1.0, + "source": "apps_web_src_types_export", + "target": "apps_web_src_types_export_exportlogschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/export.ts", + "source_location": "L38", + "weight": 1.0, + "source": "apps_web_src_types_export", + "target": "apps_web_src_types_export_exportmetadata", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/export.ts", + "source_location": "L91", + "weight": 1.0, + "source": "apps_web_src_types_export", + "target": "apps_web_src_types_export_exportmetadataschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/export.ts", + "source_location": "L123", + "weight": 1.0, + "source": "apps_web_src_types_export", + "target": "apps_web_src_types_export_isexportdata", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/export.ts", + "source_location": "L20", + "weight": 1.0, + "source": "apps_web_src_types_export", + "target": "apps_web_src_types_export_skippedrecipe", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/export.ts", + "source_location": "L74", + "weight": 1.0, + "source": "apps_web_src_types_export", + "target": "apps_web_src_types_export_skippedrecipeschema", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L101", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_export", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L101", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_export_exportformat", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L101", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_export_appliedrecipe", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L101", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_export_skippedrecipe", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L101", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_export_exportlog", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L101", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_export_exportmetadata", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L101", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_export_exportfile", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L101", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_export_exportdata", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L110", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_export_appliedrecipeschema", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L110", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_export_skippedrecipeschema", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L110", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_export_exportlogschema", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L110", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_export_exportmetadataschema", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L110", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_export_exportfileschema", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L110", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_export_exportformatschema", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L110", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_export_exportdataschema", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L110", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_export_isexportdata", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L71", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_recipe", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L71", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_recipe_envtarget", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L80", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_recipe_envtargetschema", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L71", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_recipe_exportrecipe", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L80", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_recipe_exportrecipeschema", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L71", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_recipe_filetarget", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L80", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_recipe_filetargetschema", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L71", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_recipe_mergestrategy", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L80", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_recipe_mergestrategyschema", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L71", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_recipe_packagejsontarget", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L80", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_recipe_packagejsontargetschema", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L71", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_recipe_readmeconfig", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L80", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_recipe_readmeconfigschema", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L71", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_recipe_recipetargets", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L80", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_recipe_recipetargetsschema", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L48", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_rule", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L48", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_rule_baserule", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L58", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_rule_baseruleschema", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L48", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_rule_capabilitycompatrule", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L58", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_rule_capabilitycompatruleschema", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L48", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_rule_categorycoveragerule", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L58", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_rule_categorycoverageruleschema", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L48", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_rule_hardconflictrule", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L58", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_rule_hardconflictruleschema", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L58", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_rule_isrule", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L48", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_rule_mutualexclusivecategoryrule", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L58", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_rule_mutualexclusivecategoryruleschema", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L48", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_rule_requirestoolrule", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L58", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_rule_requirestoolruleschema", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L48", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_rule_rule", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L58", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_rule_ruleschema", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L48", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_rule_synergyrule", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L58", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_rule_synergyruleschema", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L140", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_suggestion", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L145", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_suggestion_issuggestion", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L140", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_suggestion_suggestion", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L140", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_suggestion_suggestionaction", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L145", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_suggestion_suggestionactionschema", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L140", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_suggestion_suggestionpriority", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L145", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_suggestion_suggestionpriorityschema", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L145", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_suggestion_suggestionschema", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L15", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_tool", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L23", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_tool_istool", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L15", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_tool_pricingmodel", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L23", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_tool_pricingmodelschema", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L15", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_tool_tool", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L15", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_tool_toolid", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L15", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_tool_toolpricing", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L23", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_tool_toolpricingschema", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L15", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_tool_toolrequirements", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L23", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_tool_toolrequirementsschema", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L23", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_tool_toolschema", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L15", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_tool_toolsupports", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L23", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_tool_toolsupportsschema", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L122", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_worker", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L122", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_worker_evaluatepayload", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L129", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_worker_evaluatepayloadschema", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L122", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_worker_evaluationresult", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L129", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_worker_evaluationresultschema", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L129", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_worker_isworkerreq", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L129", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_worker_isworkerres", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L122", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_worker_scorebreakdown", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L129", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_worker_scorebreakdownschema", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L122", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_worker_workerreq", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L129", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_worker_workerreqschema", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L122", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_worker_workerres", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/index.ts", + "source_location": "L129", + "weight": 1.0, + "source": "apps_web_src_types_index", + "target": "apps_web_src_types_worker_workerresschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/recipe.ts", + "source_location": "L36", + "weight": 1.0, + "source": "apps_web_src_types_recipe", + "target": "apps_web_src_types_recipe_envtarget", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/recipe.ts", + "source_location": "L106", + "weight": 1.0, + "source": "apps_web_src_types_recipe", + "target": "apps_web_src_types_recipe_envtargetschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/recipe.ts", + "source_location": "L66", + "weight": 1.0, + "source": "apps_web_src_types_recipe", + "target": "apps_web_src_types_recipe_exportrecipe", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/recipe.ts", + "source_location": "L135", + "weight": 1.0, + "source": "apps_web_src_types_recipe", + "target": "apps_web_src_types_recipe_exportrecipeschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/recipe.ts", + "source_location": "L27", + "weight": 1.0, + "source": "apps_web_src_types_recipe", + "target": "apps_web_src_types_recipe_filetarget", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/recipe.ts", + "source_location": "L97", + "weight": 1.0, + "source": "apps_web_src_types_recipe", + "target": "apps_web_src_types_recipe_filetargetschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/recipe.ts", + "source_location": "L7", + "weight": 1.0, + "source": "apps_web_src_types_recipe", + "target": "apps_web_src_types_recipe_mergestrategy", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/recipe.ts", + "source_location": "L77", + "weight": 1.0, + "source": "apps_web_src_types_recipe", + "target": "apps_web_src_types_recipe_mergestrategyschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/recipe.ts", + "source_location": "L12", + "weight": 1.0, + "source": "apps_web_src_types_recipe", + "target": "apps_web_src_types_recipe_packagejsontarget", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/recipe.ts", + "source_location": "L82", + "weight": 1.0, + "source": "apps_web_src_types_recipe", + "target": "apps_web_src_types_recipe_packagejsontargetschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/recipe.ts", + "source_location": "L44", + "weight": 1.0, + "source": "apps_web_src_types_recipe", + "target": "apps_web_src_types_recipe_readmeconfig", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/recipe.ts", + "source_location": "L114", + "weight": 1.0, + "source": "apps_web_src_types_recipe", + "target": "apps_web_src_types_recipe_readmeconfigschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/recipe.ts", + "source_location": "L53", + "weight": 1.0, + "source": "apps_web_src_types_recipe", + "target": "apps_web_src_types_recipe_recipetargets", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/recipe.ts", + "source_location": "L123", + "weight": 1.0, + "source": "apps_web_src_types_recipe", + "target": "apps_web_src_types_recipe_recipetargetsschema", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/recipe.ts", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_types_recipe", + "target": "apps_web_src_types_tool", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/recipe.ts", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_types_recipe", + "target": "apps_web_src_types_tool_tool", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/recipe.ts", + "source_location": "L13", + "weight": 1.0, + "source": "apps_web_src_types_recipe_packagejsontarget", + "target": "apps_web_src_types_tool_tool", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/recipe.ts", + "source_location": "L69", + "weight": 1.0, + "source": "apps_web_src_types_recipe_exportrecipe", + "target": "apps_web_src_types_tool_tool", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_src_types_rule", + "target": "apps_web_src_types_rule_baserule", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L97", + "weight": 1.0, + "source": "apps_web_src_types_rule", + "target": "apps_web_src_types_rule_baseruleschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L65", + "weight": 1.0, + "source": "apps_web_src_types_rule", + "target": "apps_web_src_types_rule_capabilitycompatrule", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L148", + "weight": 1.0, + "source": "apps_web_src_types_rule", + "target": "apps_web_src_types_rule_capabilitycompatruleschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L77", + "weight": 1.0, + "source": "apps_web_src_types_rule", + "target": "apps_web_src_types_rule_categorycoveragerule", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L159", + "weight": 1.0, + "source": "apps_web_src_types_rule", + "target": "apps_web_src_types_rule_categorycoverageruleschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L29", + "weight": 1.0, + "source": "apps_web_src_types_rule", + "target": "apps_web_src_types_rule_hardconflictrule", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L115", + "weight": 1.0, + "source": "apps_web_src_types_rule", + "target": "apps_web_src_types_rule_hardconflictruleschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L180", + "weight": 1.0, + "source": "apps_web_src_types_rule", + "target": "apps_web_src_types_rule_isrule", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L19", + "weight": 1.0, + "source": "apps_web_src_types_rule", + "target": "apps_web_src_types_rule_mutualexclusivecategoryrule", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L106", + "weight": 1.0, + "source": "apps_web_src_types_rule", + "target": "apps_web_src_types_rule_mutualexclusivecategoryruleschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L41", + "weight": 1.0, + "source": "apps_web_src_types_rule", + "target": "apps_web_src_types_rule_requirestoolrule", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L126", + "weight": 1.0, + "source": "apps_web_src_types_rule", + "target": "apps_web_src_types_rule_requirestoolruleschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L86", + "weight": 1.0, + "source": "apps_web_src_types_rule", + "target": "apps_web_src_types_rule_rule", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L168", + "weight": 1.0, + "source": "apps_web_src_types_rule", + "target": "apps_web_src_types_rule_ruleschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L53", + "weight": 1.0, + "source": "apps_web_src_types_rule", + "target": "apps_web_src_types_rule_synergyrule", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L137", + "weight": 1.0, + "source": "apps_web_src_types_rule", + "target": "apps_web_src_types_rule_synergyruleschema", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_types_rule", + "target": "apps_web_src_types_tool", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_types_rule", + "target": "apps_web_src_types_tool_toolid", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/worker.ts", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_types_worker", + "target": "apps_web_src_types_rule", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "context": "type", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L65", + "weight": 1.0, + "source": "apps_web_src_types_rule_capabilitycompatrule", + "target": "apps_web_src_types_rule_baserule", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "context": "type", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L77", + "weight": 1.0, + "source": "apps_web_src_types_rule_categorycoveragerule", + "target": "apps_web_src_types_rule_baserule", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "context": "type", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L29", + "weight": 1.0, + "source": "apps_web_src_types_rule_hardconflictrule", + "target": "apps_web_src_types_rule_baserule", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "context": "type", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L19", + "weight": 1.0, + "source": "apps_web_src_types_rule_mutualexclusivecategoryrule", + "target": "apps_web_src_types_rule_baserule", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "context": "type", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L41", + "weight": 1.0, + "source": "apps_web_src_types_rule_requirestoolrule", + "target": "apps_web_src_types_rule_baserule", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "context": "type", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L53", + "weight": 1.0, + "source": "apps_web_src_types_rule_synergyrule", + "target": "apps_web_src_types_rule_baserule", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L31", + "weight": 1.0, + "source": "apps_web_src_types_rule_hardconflictrule", + "target": "apps_web_src_types_tool_toolid", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L43", + "weight": 1.0, + "source": "apps_web_src_types_rule_requirestoolrule", + "target": "apps_web_src_types_tool_toolid", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L55", + "weight": 1.0, + "source": "apps_web_src_types_rule_synergyrule", + "target": "apps_web_src_types_tool_toolid", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/rule.ts", + "source_location": "L67", + "weight": 1.0, + "source": "apps_web_src_types_rule_capabilitycompatrule", + "target": "apps_web_src_types_tool_toolid", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/worker.ts", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_types_worker", + "target": "apps_web_src_types_rule_rule", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/worker.ts", + "source_location": "L31", + "weight": 1.0, + "source": "apps_web_src_types_worker_evaluatepayload", + "target": "apps_web_src_types_rule_rule", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/suggestion.ts", + "source_location": "L53", + "weight": 1.0, + "source": "apps_web_src_types_suggestion", + "target": "apps_web_src_types_suggestion_issuggestion", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/suggestion.ts", + "source_location": "L19", + "weight": 1.0, + "source": "apps_web_src_types_suggestion", + "target": "apps_web_src_types_suggestion_suggestion", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/suggestion.ts", + "source_location": "L14", + "weight": 1.0, + "source": "apps_web_src_types_suggestion", + "target": "apps_web_src_types_suggestion_suggestionaction", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/suggestion.ts", + "source_location": "L36", + "weight": 1.0, + "source": "apps_web_src_types_suggestion", + "target": "apps_web_src_types_suggestion_suggestionactionschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/suggestion.ts", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_src_types_suggestion", + "target": "apps_web_src_types_suggestion_suggestionpriority", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/suggestion.ts", + "source_location": "L31", + "weight": 1.0, + "source": "apps_web_src_types_suggestion", + "target": "apps_web_src_types_suggestion_suggestionpriorityschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/suggestion.ts", + "source_location": "L41", + "weight": 1.0, + "source": "apps_web_src_types_suggestion", + "target": "apps_web_src_types_suggestion_suggestionschema", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/suggestion.ts", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_types_suggestion", + "target": "apps_web_src_types_tool", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/suggestion.ts", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_src_types_suggestion", + "target": "apps_web_src_types_tool_toolid", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/suggestion.ts", + "source_location": "L24", + "weight": 1.0, + "source": "apps_web_src_types_suggestion_suggestion", + "target": "apps_web_src_types_tool_toolid", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/src/types/suggestion.ts", + "source_location": "L54", + "weight": 1.0, + "source": "apps_web_src_types_suggestion_issuggestion", + "target": "apps_web_src_types_suggestion_suggestionschema" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/tool.ts", + "source_location": "L131", + "weight": 1.0, + "source": "apps_web_src_types_tool", + "target": "apps_web_src_types_tool_istool", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/tool.ts", + "source_location": "L13", + "weight": 1.0, + "source": "apps_web_src_types_tool", + "target": "apps_web_src_types_tool_pricingmodel", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/tool.ts", + "source_location": "L77", + "weight": 1.0, + "source": "apps_web_src_types_tool", + "target": "apps_web_src_types_tool_pricingmodelschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/tool.ts", + "source_location": "L45", + "weight": 1.0, + "source": "apps_web_src_types_tool", + "target": "apps_web_src_types_tool_tool", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/tool.ts", + "source_location": "L8", + "weight": 1.0, + "source": "apps_web_src_types_tool", + "target": "apps_web_src_types_tool_toolid", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/tool.ts", + "source_location": "L18", + "weight": 1.0, + "source": "apps_web_src_types_tool", + "target": "apps_web_src_types_tool_toolpricing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/tool.ts", + "source_location": "L82", + "weight": 1.0, + "source": "apps_web_src_types_tool", + "target": "apps_web_src_types_tool_toolpricingschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/tool.ts", + "source_location": "L28", + "weight": 1.0, + "source": "apps_web_src_types_tool", + "target": "apps_web_src_types_tool_toolrequirements", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/tool.ts", + "source_location": "L92", + "weight": 1.0, + "source": "apps_web_src_types_tool", + "target": "apps_web_src_types_tool_toolrequirementsschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/tool.ts", + "source_location": "L109", + "weight": 1.0, + "source": "apps_web_src_types_tool", + "target": "apps_web_src_types_tool_toolschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/tool.ts", + "source_location": "L36", + "weight": 1.0, + "source": "apps_web_src_types_tool", + "target": "apps_web_src_types_tool_toolsupports", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/tool.ts", + "source_location": "L100", + "weight": 1.0, + "source": "apps_web_src_types_tool", + "target": "apps_web_src_types_tool_toolsupportsschema", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/worker.ts", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_types_worker", + "target": "apps_web_src_types_tool", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/worker.ts", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_src_types_worker", + "target": "apps_web_src_types_tool_tool", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/worker.ts", + "source_location": "L30", + "weight": 1.0, + "source": "apps_web_src_types_worker_evaluatepayload", + "target": "apps_web_src_types_tool_tool", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/worker.ts", + "source_location": "L29", + "weight": 1.0, + "source": "apps_web_src_types_worker", + "target": "apps_web_src_types_worker_evaluatepayload", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/worker.ts", + "source_location": "L79", + "weight": 1.0, + "source": "apps_web_src_types_worker", + "target": "apps_web_src_types_worker_evaluatepayloadschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/worker.ts", + "source_location": "L19", + "weight": 1.0, + "source": "apps_web_src_types_worker", + "target": "apps_web_src_types_worker_evaluationresult", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/worker.ts", + "source_location": "L69", + "weight": 1.0, + "source": "apps_web_src_types_worker", + "target": "apps_web_src_types_worker_evaluationresultschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/worker.ts", + "source_location": "L112", + "weight": 1.0, + "source": "apps_web_src_types_worker", + "target": "apps_web_src_types_worker_isworkerreq", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/worker.ts", + "source_location": "L119", + "weight": 1.0, + "source": "apps_web_src_types_worker", + "target": "apps_web_src_types_worker_isworkerres", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/worker.ts", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_src_types_worker", + "target": "apps_web_src_types_worker_scorebreakdown", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/worker.ts", + "source_location": "L53", + "weight": 1.0, + "source": "apps_web_src_types_worker", + "target": "apps_web_src_types_worker_scorebreakdownschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/worker.ts", + "source_location": "L37", + "weight": 1.0, + "source": "apps_web_src_types_worker", + "target": "apps_web_src_types_worker_workerreq", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/worker.ts", + "source_location": "L87", + "weight": 1.0, + "source": "apps_web_src_types_worker", + "target": "apps_web_src_types_worker_workerreqschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/worker.ts", + "source_location": "L46", + "weight": 1.0, + "source": "apps_web_src_types_worker", + "target": "apps_web_src_types_worker_workerres", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/src/types/worker.ts", + "source_location": "L96", + "weight": 1.0, + "source": "apps_web_src_types_worker", + "target": "apps_web_src_types_worker_workerresschema", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/src/types/worker.ts", + "source_location": "L113", + "weight": 1.0, + "source": "apps_web_src_types_worker_isworkerreq", + "target": "apps_web_src_types_worker_workerreqschema" + }, + { + "relation": "references", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/src/types/worker.ts", + "source_location": "L120", + "weight": 1.0, + "source": "apps_web_src_types_worker_isworkerres", + "target": "apps_web_src_types_worker_workerresschema" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/tsconfig.json", + "source_location": "L3", + "weight": 1.0, + "source": "apps_web_tsconfig", + "target": "apps_web_tsconfig_compileroptions", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/tsconfig.json", + "source_location": "L2", + "weight": 1.0, + "source": "apps_web_tsconfig", + "target": "apps_web_tsconfig_extends", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/tsconfig.json", + "source_location": "L14", + "weight": 1.0, + "source": "apps_web_tsconfig", + "target": "apps_web_tsconfig_include", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/tsconfig.json", + "source_location": "L7", + "weight": 1.0, + "source": "apps_web_tsconfig_compileroptions", + "target": "apps_web_tsconfig_compileroptions_allowimportingtsextensions", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/tsconfig.json", + "source_location": "L5", + "weight": 1.0, + "source": "apps_web_tsconfig_compileroptions", + "target": "apps_web_tsconfig_compileroptions_jsx", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/tsconfig.json", + "source_location": "L4", + "weight": 1.0, + "source": "apps_web_tsconfig_compileroptions", + "target": "apps_web_tsconfig_compileroptions_lib", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/tsconfig.json", + "source_location": "L6", + "weight": 1.0, + "source": "apps_web_tsconfig_compileroptions", + "target": "apps_web_tsconfig_compileroptions_moduleresolution", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/tsconfig.json", + "source_location": "L8", + "weight": 1.0, + "source": "apps_web_tsconfig_compileroptions", + "target": "apps_web_tsconfig_compileroptions_noemit", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/tsconfig.json", + "source_location": "L9", + "weight": 1.0, + "source": "apps_web_tsconfig_compileroptions", + "target": "apps_web_tsconfig_compileroptions_paths", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/tsconfig.json", + "source_location": "L12", + "weight": 1.0, + "source": "apps_web_tsconfig_compileroptions", + "target": "apps_web_tsconfig_compileroptions_types", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/tsconfig.json", + "source_location": "L10", + "weight": 1.0, + "source": "apps_web_tsconfig_compileroptions_paths", + "target": "apps_web_tsconfig_paths", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "apps/web/vite.config.ts", + "source_location": "L11", + "weight": 1.0, + "source": "apps_web_vite_config", + "target": "apps_web_vite_config_sentryplugins", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L34", + "weight": 1.0, + "source": "package", + "target": "package_dependencies", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L20", + "weight": 1.0, + "source": "package", + "target": "package_devdependencies", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L4", + "weight": 1.0, + "source": "package", + "target": "package_engines", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L2", + "weight": 1.0, + "source": "package", + "target": "package_name", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L7", + "weight": 1.0, + "source": "package", + "target": "package_packagemanager", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L3", + "weight": 1.0, + "source": "package", + "target": "package_private", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L8", + "weight": 1.0, + "source": "package", + "target": "package_scripts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L5", + "weight": 1.0, + "source": "package_engines", + "target": "package_engines_node", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L12", + "weight": 1.0, + "source": "package_scripts", + "target": "package_scripts_build", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L9", + "weight": 1.0, + "source": "package_scripts", + "target": "package_scripts_dev", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L10", + "weight": 1.0, + "source": "package_scripts", + "target": "package_scripts_dev_api", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L11", + "weight": 1.0, + "source": "package_scripts", + "target": "package_scripts_dev_web", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L13", + "weight": 1.0, + "source": "package_scripts", + "target": "package_scripts_lint", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L17", + "weight": 1.0, + "source": "package_scripts", + "target": "package_scripts_seed", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L14", + "weight": 1.0, + "source": "package_scripts", + "target": "package_scripts_test", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L15", + "weight": 1.0, + "source": "package_scripts", + "target": "package_scripts_test_e2e", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L16", + "weight": 1.0, + "source": "package_scripts", + "target": "package_scripts_type_check", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L18", + "weight": 1.0, + "source": "package_scripts", + "target": "package_scripts_validate_registry", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L24", + "weight": 1.0, + "source": "package_devdependencies", + "target": "package_devdependencies_concurrently", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L25", + "weight": 1.0, + "source": "package_devdependencies", + "target": "package_devdependencies_dotenv_cli", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L26", + "weight": 1.0, + "source": "package_devdependencies", + "target": "package_devdependencies_eslint", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L21", + "weight": 1.0, + "source": "package_devdependencies", + "target": "package_devdependencies_eslint_js", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L22", + "weight": 1.0, + "source": "package_devdependencies", + "target": "package_devdependencies_playwright_test", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L27", + "weight": 1.0, + "source": "package_devdependencies", + "target": "package_devdependencies_prettier", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L28", + "weight": 1.0, + "source": "package_devdependencies", + "target": "package_devdependencies_tsx", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L23", + "weight": 1.0, + "source": "package_devdependencies", + "target": "package_devdependencies_types_node", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L29", + "weight": 1.0, + "source": "package_devdependencies", + "target": "package_devdependencies_typescript", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L30", + "weight": 1.0, + "source": "package_devdependencies", + "target": "package_devdependencies_typescript_eslint", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L31", + "weight": 1.0, + "source": "package_devdependencies", + "target": "package_devdependencies_vite", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L32", + "weight": 1.0, + "source": "package_devdependencies", + "target": "package_devdependencies_vitest", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L35", + "weight": 1.0, + "source": "package_dependencies", + "target": "package_dependencies_better_auth_infra", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/package.json", + "source_location": "L13", + "weight": 1.0, + "source": "packages_ai_package", + "target": "packages_ai_package_dependencies", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/package.json", + "source_location": "L21", + "weight": 1.0, + "source": "packages_ai_package", + "target": "packages_ai_package_devdependencies", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/package.json", + "source_location": "L6", + "weight": 1.0, + "source": "packages_ai_package", + "target": "packages_ai_package_main", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/package.json", + "source_location": "L2", + "weight": 1.0, + "source": "packages_ai_package", + "target": "packages_ai_package_name", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/package.json", + "source_location": "L4", + "weight": 1.0, + "source": "packages_ai_package", + "target": "packages_ai_package_private", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/package.json", + "source_location": "L8", + "weight": 1.0, + "source": "packages_ai_package", + "target": "packages_ai_package_scripts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/package.json", + "source_location": "L5", + "weight": 1.0, + "source": "packages_ai_package", + "target": "packages_ai_package_type", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/package.json", + "source_location": "L7", + "weight": 1.0, + "source": "packages_ai_package", + "target": "packages_ai_package_types", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/package.json", + "source_location": "L3", + "weight": 1.0, + "source": "packages_ai_package", + "target": "packages_ai_package_version", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/package.json", + "source_location": "L9", + "weight": 1.0, + "source": "packages_ai_package_scripts", + "target": "packages_ai_package_scripts_lint", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/package.json", + "source_location": "L11", + "weight": 1.0, + "source": "packages_ai_package_scripts", + "target": "packages_ai_package_scripts_test", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/package.json", + "source_location": "L10", + "weight": 1.0, + "source": "packages_ai_package_scripts", + "target": "packages_ai_package_scripts_type_check", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/package.json", + "source_location": "L18", + "weight": 1.0, + "source": "packages_ai_package_dependencies", + "target": "packages_ai_package_dependencies_ai", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/package.json", + "source_location": "L14", + "weight": 1.0, + "source": "packages_ai_package_dependencies", + "target": "packages_ai_package_dependencies_ai_sdk_azure", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/package.json", + "source_location": "L15", + "weight": 1.0, + "source": "packages_ai_package_dependencies", + "target": "packages_ai_package_dependencies_ai_sdk_google", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/package.json", + "source_location": "L16", + "weight": 1.0, + "source": "packages_ai_package_dependencies", + "target": "packages_ai_package_dependencies_stackfast_schemas", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/package.json", + "source_location": "L17", + "weight": 1.0, + "source": "packages_ai_package_dependencies", + "target": "packages_ai_package_dependencies_stackfast_shared", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/package.json", + "source_location": "L19", + "weight": 1.0, + "source": "packages_ai_package_dependencies", + "target": "packages_ai_package_dependencies_zod", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/package.json", + "source_location": "L22", + "weight": 1.0, + "source": "packages_ai_package_devdependencies", + "target": "packages_ai_package_devdependencies_typescript", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/cost-estimator.ts", + "source_location": "L44", + "weight": 1.0, + "source": "packages_ai_src_cost_estimator", + "target": "packages_ai_src_cost_estimator_estimatecosts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/cost-estimator.ts", + "source_location": "L13", + "weight": 1.0, + "source": "packages_ai_src_cost_estimator", + "target": "packages_ai_src_cost_estimator_static_cost_map", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/cost-estimator.ts", + "source_location": "L2", + "weight": 1.0, + "source": "packages_ai_src_cost_estimator", + "target": "packages_ai_src_types", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/cost-estimator.ts", + "source_location": "L2", + "weight": 1.0, + "source": "packages_ai_src_cost_estimator", + "target": "packages_ai_src_types_blueprintcostestimate", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/cost-estimator.ts", + "source_location": "L2", + "weight": 1.0, + "source": "packages_ai_src_cost_estimator", + "target": "packages_ai_src_types_toolcostestimate", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/cost-estimator.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_ai_src_cost_estimator", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/cost-estimator.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_ai_src_cost_estimator", + "target": "packages_schemas_src_index", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "export", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L345", + "weight": 1.0, + "source": "packages_ai_src_index", + "target": "packages_ai_src_cost_estimator", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L345", + "weight": 1.0, + "source": "packages_ai_src_index", + "target": "packages_ai_src_cost_estimator_estimatecosts", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.test.ts", + "source_location": "L3", + "weight": 1.0, + "source": "packages_ai_src_index_test", + "target": "packages_ai_src_index", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.test.ts", + "source_location": "L3", + "weight": 1.0, + "source": "packages_ai_src_index_test", + "target": "packages_ai_src_index_createexplainer", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.test.ts", + "source_location": "L17", + "weight": 1.0, + "source": "packages_ai_src_index_test", + "target": "packages_ai_src_index_test_sampletools", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.test.ts", + "source_location": "L2", + "weight": 1.0, + "source": "packages_ai_src_index_test", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.test.ts", + "source_location": "L2", + "weight": 1.0, + "source": "packages_ai_src_index_test", + "target": "packages_schemas_src_index", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L45", + "weight": 1.0, + "source": "packages_ai_src_index", + "target": "packages_ai_src_index_blueprintexplainer", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L297", + "weight": 1.0, + "source": "packages_ai_src_index", + "target": "packages_ai_src_index_createexplainer", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L159", + "weight": 1.0, + "source": "packages_ai_src_index", + "target": "packages_ai_src_index_difftoolnames", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L256", + "weight": 1.0, + "source": "packages_ai_src_index", + "target": "packages_ai_src_index_explainerconfig", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L9", + "weight": 1.0, + "source": "packages_ai_src_index", + "target": "packages_ai_src_index_explanationresult", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L205", + "weight": 1.0, + "source": "packages_ai_src_index", + "target": "packages_ai_src_index_fallbackexplainer", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L60", + "weight": 1.0, + "source": "packages_ai_src_index", + "target": "packages_ai_src_index_heuristicexplainer", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L179", + "weight": 1.0, + "source": "packages_ai_src_index", + "target": "packages_ai_src_index_inferbetterfor", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L30", + "weight": 1.0, + "source": "packages_ai_src_index", + "target": "packages_ai_src_index_roadmapresult", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L20", + "weight": 1.0, + "source": "packages_ai_src_index", + "target": "packages_ai_src_index_tradeoffresult", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L25", + "weight": 1.0, + "source": "packages_ai_src_index", + "target": "packages_ai_src_index_whynotresult", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L2", + "weight": 1.0, + "source": "packages_ai_src_index", + "target": "packages_ai_src_providers_azure_openai", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L2", + "weight": 1.0, + "source": "packages_ai_src_index", + "target": "packages_ai_src_providers_azure_openai_azureopenaiexplainer", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L3", + "weight": 1.0, + "source": "packages_ai_src_index", + "target": "packages_ai_src_providers_gemini", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L3", + "weight": 1.0, + "source": "packages_ai_src_index", + "target": "packages_ai_src_providers_gemini_geminiexplainer", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "export", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L347", + "weight": 1.0, + "source": "packages_ai_src_index", + "target": "packages_ai_src_schemas", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L347", + "weight": 1.0, + "source": "packages_ai_src_index", + "target": "packages_ai_src_schemas_aiexplanationresponse", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L347", + "weight": 1.0, + "source": "packages_ai_src_index", + "target": "packages_ai_src_schemas_airoadmapresponse", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L347", + "weight": 1.0, + "source": "packages_ai_src_index", + "target": "packages_ai_src_schemas_aitradeoffresponse", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L347", + "weight": 1.0, + "source": "packages_ai_src_index", + "target": "packages_ai_src_schemas_aiwhynotresponse", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "export", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L346", + "weight": 1.0, + "source": "packages_ai_src_index", + "target": "packages_ai_src_types", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L346", + "weight": 1.0, + "source": "packages_ai_src_index", + "target": "packages_ai_src_types_blueprintcostestimate", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L346", + "weight": 1.0, + "source": "packages_ai_src_index", + "target": "packages_ai_src_types_enhancedalternative", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L346", + "weight": 1.0, + "source": "packages_ai_src_index", + "target": "packages_ai_src_types_enhancedblueprintresponse", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L346", + "weight": 1.0, + "source": "packages_ai_src_index", + "target": "packages_ai_src_types_implementationroadmap", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L346", + "weight": 1.0, + "source": "packages_ai_src_index", + "target": "packages_ai_src_types_toolcostestimate", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "re-export", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L346", + "weight": 1.0, + "source": "packages_ai_src_index", + "target": "packages_ai_src_types_whynotexplanation", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_ai_src_index", + "target": "packages_schemas_src_domain_diagnostic", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_ai_src_index", + "target": "packages_schemas_src_domain_implementationroadmap", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_ai_src_index", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_ai_src_index", + "target": "packages_schemas_src_domain_whynotexplanation", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_ai_src_index", + "target": "packages_schemas_src_index", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L9", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai", + "target": "packages_ai_src_index_explanationresult", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "generic_arg", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L71", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai_azureopenaiexplainer_explainstack", + "target": "packages_ai_src_index_explanationresult", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L4", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini", + "target": "packages_ai_src_index_explanationresult", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "generic_arg", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L49", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini_geminiexplainer_explainstack", + "target": "packages_ai_src_index_explanationresult", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L9", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai", + "target": "packages_ai_src_index_tradeoffresult", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "generic_arg", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L106", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai_azureopenaiexplainer_summarizetradeoffs", + "target": "packages_ai_src_index_tradeoffresult", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L4", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini", + "target": "packages_ai_src_index_tradeoffresult", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "generic_arg", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L84", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini_geminiexplainer_summarizetradeoffs", + "target": "packages_ai_src_index_tradeoffresult", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L26", + "weight": 1.0, + "source": "packages_ai_src_index_whynotresult", + "target": "packages_schemas_src_domain_whynotexplanation", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L9", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai", + "target": "packages_ai_src_index_whynotresult", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "generic_arg", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L144", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai_azureopenaiexplainer_explainwhynot", + "target": "packages_ai_src_index_whynotresult", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L4", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini", + "target": "packages_ai_src_index_whynotresult", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "generic_arg", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L117", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini_geminiexplainer_explainwhynot", + "target": "packages_ai_src_index_whynotresult", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L31", + "weight": 1.0, + "source": "packages_ai_src_index_roadmapresult", + "target": "packages_schemas_src_domain_implementationroadmap", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L9", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai", + "target": "packages_ai_src_index_roadmapresult", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "generic_arg", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L178", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai_azureopenaiexplainer_generateroadmap", + "target": "packages_ai_src_index_roadmapresult", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L4", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini", + "target": "packages_ai_src_index_roadmapresult", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "generic_arg", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L150", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini_geminiexplainer_generateroadmap", + "target": "packages_ai_src_index_roadmapresult", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L46", + "weight": 1.0, + "source": "packages_ai_src_index_blueprintexplainer", + "target": "packages_ai_src_index_blueprintexplainer_explainstack", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L48", + "weight": 1.0, + "source": "packages_ai_src_index_blueprintexplainer", + "target": "packages_ai_src_index_blueprintexplainer_explainwhynot", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L53", + "weight": 1.0, + "source": "packages_ai_src_index_blueprintexplainer", + "target": "packages_ai_src_index_blueprintexplainer_generateroadmap", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L47", + "weight": 1.0, + "source": "packages_ai_src_index_blueprintexplainer", + "target": "packages_ai_src_index_blueprintexplainer_summarizetradeoffs", + "confidence_score": 1.0 + }, + { + "relation": "implements", + "context": "type", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L205", + "weight": 1.0, + "source": "packages_ai_src_index_fallbackexplainer", + "target": "packages_ai_src_index_blueprintexplainer", + "confidence_score": 1.0 + }, + { + "relation": "implements", + "context": "type", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L60", + "weight": 1.0, + "source": "packages_ai_src_index_heuristicexplainer", + "target": "packages_ai_src_index_blueprintexplainer", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L9", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai", + "target": "packages_ai_src_index_blueprintexplainer", + "confidence_score": 1.0 + }, + { + "relation": "implements", + "context": "type", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L54", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai_azureopenaiexplainer", + "target": "packages_ai_src_index_blueprintexplainer", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L4", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini", + "target": "packages_ai_src_index_blueprintexplainer", + "confidence_score": 1.0 + }, + { + "relation": "implements", + "context": "type", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L36", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini_geminiexplainer", + "target": "packages_ai_src_index_blueprintexplainer", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "parameter_type", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L46", + "weight": 1.0, + "source": "packages_ai_src_index_blueprintexplainer_explainstack", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "packages/ai/src/index.ts", + "source_location": "L213", + "weight": 1.0, + "source": "packages_ai_src_index_fallbackexplainer_explainstack", + "target": "packages_ai_src_index_blueprintexplainer_explainstack" + }, + { + "relation": "references", + "context": "parameter_type", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L47", + "weight": 1.0, + "source": "packages_ai_src_index_blueprintexplainer_summarizetradeoffs", + "target": "packages_schemas_src_domain_diagnostic", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "parameter_type", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L47", + "weight": 1.0, + "source": "packages_ai_src_index_blueprintexplainer_summarizetradeoffs", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "packages/ai/src/index.ts", + "source_location": "L222", + "weight": 1.0, + "source": "packages_ai_src_index_fallbackexplainer_summarizetradeoffs", + "target": "packages_ai_src_index_blueprintexplainer_summarizetradeoffs" + }, + { + "relation": "references", + "context": "parameter_type", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L48", + "weight": 1.0, + "source": "packages_ai_src_index_blueprintexplainer_explainwhynot", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "packages/ai/src/index.ts", + "source_location": "L235", + "weight": 1.0, + "source": "packages_ai_src_index_fallbackexplainer_explainwhynot", + "target": "packages_ai_src_index_blueprintexplainer_explainwhynot" + }, + { + "relation": "references", + "context": "parameter_type", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L53", + "weight": 1.0, + "source": "packages_ai_src_index_blueprintexplainer_generateroadmap", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "packages/ai/src/index.ts", + "source_location": "L244", + "weight": 1.0, + "source": "packages_ai_src_index_fallbackexplainer_generateroadmap", + "target": "packages_ai_src_index_blueprintexplainer_generateroadmap" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L61", + "weight": 1.0, + "source": "packages_ai_src_index_heuristicexplainer", + "target": "packages_ai_src_index_heuristicexplainer_explainstack", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L84", + "weight": 1.0, + "source": "packages_ai_src_index_heuristicexplainer", + "target": "packages_ai_src_index_heuristicexplainer_explainwhynot", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L107", + "weight": 1.0, + "source": "packages_ai_src_index_heuristicexplainer", + "target": "packages_ai_src_index_heuristicexplainer_generateroadmap", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L69", + "weight": 1.0, + "source": "packages_ai_src_index_heuristicexplainer", + "target": "packages_ai_src_index_heuristicexplainer_summarizetradeoffs", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "parameter_type", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L61", + "weight": 1.0, + "source": "packages_ai_src_index_heuristicexplainer_explainstack", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "parameter_type", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L69", + "weight": 1.0, + "source": "packages_ai_src_index_heuristicexplainer_summarizetradeoffs", + "target": "packages_schemas_src_domain_diagnostic", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "parameter_type", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L69", + "weight": 1.0, + "source": "packages_ai_src_index_heuristicexplainer_summarizetradeoffs", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L89", + "weight": 1.0, + "source": "packages_ai_src_index_heuristicexplainer_explainwhynot", + "target": "packages_ai_src_index_difftoolnames", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L99", + "weight": 1.0, + "source": "packages_ai_src_index_heuristicexplainer_explainwhynot", + "target": "packages_ai_src_index_inferbetterfor", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "parameter_type", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L84", + "weight": 1.0, + "source": "packages_ai_src_index_heuristicexplainer_explainwhynot", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "parameter_type", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L107", + "weight": 1.0, + "source": "packages_ai_src_index_heuristicexplainer_generateroadmap", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L206", + "weight": 1.0, + "source": "packages_ai_src_index_fallbackexplainer", + "target": "packages_ai_src_index_fallbackexplainer_constructor", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L211", + "weight": 1.0, + "source": "packages_ai_src_index_fallbackexplainer", + "target": "packages_ai_src_index_fallbackexplainer_explainstack", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L229", + "weight": 1.0, + "source": "packages_ai_src_index_fallbackexplainer", + "target": "packages_ai_src_index_fallbackexplainer_explainwhynot", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L242", + "weight": 1.0, + "source": "packages_ai_src_index_fallbackexplainer", + "target": "packages_ai_src_index_fallbackexplainer_generateroadmap", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L220", + "weight": 1.0, + "source": "packages_ai_src_index_fallbackexplainer", + "target": "packages_ai_src_index_fallbackexplainer_summarizetradeoffs", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "parameter_type", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L211", + "weight": 1.0, + "source": "packages_ai_src_index_fallbackexplainer_explainstack", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "parameter_type", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L220", + "weight": 1.0, + "source": "packages_ai_src_index_fallbackexplainer_summarizetradeoffs", + "target": "packages_schemas_src_domain_diagnostic", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "parameter_type", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L220", + "weight": 1.0, + "source": "packages_ai_src_index_fallbackexplainer_summarizetradeoffs", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "parameter_type", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L229", + "weight": 1.0, + "source": "packages_ai_src_index_fallbackexplainer_explainwhynot", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "parameter_type", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/index.ts", + "source_location": "L242", + "weight": 1.0, + "source": "packages_ai_src_index_fallbackexplainer_generateroadmap", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/prompts.ts", + "source_location": "L35", + "weight": 1.0, + "source": "packages_ai_src_prompts", + "target": "packages_ai_src_prompts_buildexplanationprompt", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/prompts.ts", + "source_location": "L93", + "weight": 1.0, + "source": "packages_ai_src_prompts", + "target": "packages_ai_src_prompts_buildroadmapprompt", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/prompts.ts", + "source_location": "L51", + "weight": 1.0, + "source": "packages_ai_src_prompts", + "target": "packages_ai_src_prompts_buildtradeoffprompt", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/prompts.ts", + "source_location": "L75", + "weight": 1.0, + "source": "packages_ai_src_prompts", + "target": "packages_ai_src_prompts_buildwhynotprompt", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/prompts.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_ai_src_prompts", + "target": "packages_schemas_src_domain_diagnostic", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/prompts.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_ai_src_prompts", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/prompts.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_ai_src_prompts", + "target": "packages_schemas_src_index", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L22", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai", + "target": "packages_ai_src_prompts", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L17", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini", + "target": "packages_ai_src_prompts", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L22", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai", + "target": "packages_ai_src_prompts_buildexplanationprompt", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L77", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai_azureopenaiexplainer_explainstack", + "target": "packages_ai_src_prompts_buildexplanationprompt" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L17", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini", + "target": "packages_ai_src_prompts_buildexplanationprompt", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L54", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini_geminiexplainer_explainstack", + "target": "packages_ai_src_prompts_buildexplanationprompt" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L22", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai", + "target": "packages_ai_src_prompts_buildtradeoffprompt", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L115", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai_azureopenaiexplainer_summarizetradeoffs", + "target": "packages_ai_src_prompts_buildtradeoffprompt" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L17", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini", + "target": "packages_ai_src_prompts_buildtradeoffprompt", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L92", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini_geminiexplainer_summarizetradeoffs", + "target": "packages_ai_src_prompts_buildtradeoffprompt" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L22", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai", + "target": "packages_ai_src_prompts_buildwhynotprompt", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L154", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai_azureopenaiexplainer_explainwhynot", + "target": "packages_ai_src_prompts_buildwhynotprompt" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L17", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini", + "target": "packages_ai_src_prompts_buildwhynotprompt", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L126", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini_geminiexplainer_explainwhynot", + "target": "packages_ai_src_prompts_buildwhynotprompt" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L22", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai", + "target": "packages_ai_src_prompts_buildroadmapprompt", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L184", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai_azureopenaiexplainer_generateroadmap", + "target": "packages_ai_src_prompts_buildroadmapprompt" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L17", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini", + "target": "packages_ai_src_prompts_buildroadmapprompt", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L155", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini_geminiexplainer_generateroadmap", + "target": "packages_ai_src_prompts_buildroadmapprompt" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L54", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai", + "target": "packages_ai_src_providers_azure_openai_azureopenaiexplainer", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L39", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai", + "target": "packages_ai_src_providers_azure_openai_azureopenaiexplainerconfig", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L218", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai", + "target": "packages_ai_src_providers_azure_openai_stripjsonfences", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L16", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai", + "target": "packages_ai_src_schemas", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L16", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai", + "target": "packages_ai_src_schemas_aiexplanationresponseschema", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L16", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai", + "target": "packages_ai_src_schemas_airoadmapresponseschema", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L16", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai", + "target": "packages_ai_src_schemas_aitradeoffresponseschema", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L16", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai", + "target": "packages_ai_src_schemas_aiwhynotresponseschema", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L3", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai", + "target": "packages_schemas_src_domain_diagnostic", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L3", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai", + "target": "packages_schemas_src_domain_implementationroadmap", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L3", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L3", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai", + "target": "packages_schemas_src_domain_whynotexplanation", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L3", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai", + "target": "packages_schemas_src_index", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L60", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai_azureopenaiexplainer", + "target": "packages_ai_src_providers_azure_openai_azureopenaiexplainer_constructor", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L71", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai_azureopenaiexplainer", + "target": "packages_ai_src_providers_azure_openai_azureopenaiexplainer_explainstack", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L144", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai_azureopenaiexplainer", + "target": "packages_ai_src_providers_azure_openai_azureopenaiexplainer_explainwhynot", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L178", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai_azureopenaiexplainer", + "target": "packages_ai_src_providers_azure_openai_azureopenaiexplainer_generateroadmap", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L106", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai_azureopenaiexplainer", + "target": "packages_ai_src_providers_azure_openai_azureopenaiexplainer_summarizetradeoffs", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L84", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai_azureopenaiexplainer_explainstack", + "target": "packages_ai_src_providers_azure_openai_stripjsonfences", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L85", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai_azureopenaiexplainer_explainstack", + "target": "packages_ai_src_schemas_aiexplanationresponseschema" + }, + { + "relation": "references", + "context": "parameter_type", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L71", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai_azureopenaiexplainer_explainstack", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L122", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai_azureopenaiexplainer_summarizetradeoffs", + "target": "packages_ai_src_providers_azure_openai_stripjsonfences", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L123", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai_azureopenaiexplainer_summarizetradeoffs", + "target": "packages_ai_src_schemas_aitradeoffresponseschema" + }, + { + "relation": "references", + "context": "parameter_type", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L106", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai_azureopenaiexplainer_summarizetradeoffs", + "target": "packages_schemas_src_domain_diagnostic", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "parameter_type", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L106", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai_azureopenaiexplainer_summarizetradeoffs", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L161", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai_azureopenaiexplainer_explainwhynot", + "target": "packages_ai_src_providers_azure_openai_stripjsonfences", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L162", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai_azureopenaiexplainer_explainwhynot", + "target": "packages_ai_src_schemas_aiwhynotresponseschema" + }, + { + "relation": "references", + "context": "parameter_type", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L144", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai_azureopenaiexplainer_explainwhynot", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L192", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai_azureopenaiexplainer_generateroadmap", + "target": "packages_ai_src_providers_azure_openai_stripjsonfences", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L193", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai_azureopenaiexplainer_generateroadmap", + "target": "packages_ai_src_schemas_airoadmapresponseschema" + }, + { + "relation": "references", + "context": "parameter_type", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/azure-openai.ts", + "source_location": "L178", + "weight": 1.0, + "source": "packages_ai_src_providers_azure_openai_azureopenaiexplainer_generateroadmap", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L36", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini", + "target": "packages_ai_src_providers_gemini_geminiexplainer", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L29", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini", + "target": "packages_ai_src_providers_gemini_geminiexplainerconfig", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L189", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini", + "target": "packages_ai_src_providers_gemini_stripjsonfences", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L11", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini", + "target": "packages_ai_src_schemas", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L11", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini", + "target": "packages_ai_src_schemas_aiexplanationresponseschema", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L11", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini", + "target": "packages_ai_src_schemas_airoadmapresponseschema", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L11", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini", + "target": "packages_ai_src_schemas_aitradeoffresponseschema", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L11", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini", + "target": "packages_ai_src_schemas_aiwhynotresponseschema", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L3", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini", + "target": "packages_schemas_src_domain_diagnostic", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L3", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini", + "target": "packages_schemas_src_domain_implementationroadmap", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L3", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L3", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini", + "target": "packages_schemas_src_domain_whynotexplanation", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L3", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini", + "target": "packages_schemas_src_index", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L42", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini_geminiexplainer", + "target": "packages_ai_src_providers_gemini_geminiexplainer_constructor", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L49", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini_geminiexplainer", + "target": "packages_ai_src_providers_gemini_geminiexplainer_explainstack", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L117", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini_geminiexplainer", + "target": "packages_ai_src_providers_gemini_geminiexplainer_explainwhynot", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L150", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini_geminiexplainer", + "target": "packages_ai_src_providers_gemini_geminiexplainer_generateroadmap", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L84", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini_geminiexplainer", + "target": "packages_ai_src_providers_gemini_geminiexplainer_summarizetradeoffs", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L62", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini_geminiexplainer_explainstack", + "target": "packages_ai_src_providers_gemini_stripjsonfences", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L63", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini_geminiexplainer_explainstack", + "target": "packages_ai_src_schemas_aiexplanationresponseschema" + }, + { + "relation": "references", + "context": "parameter_type", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L49", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini_geminiexplainer_explainstack", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L100", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini_geminiexplainer_summarizetradeoffs", + "target": "packages_ai_src_schemas_aitradeoffresponseschema" + }, + { + "relation": "references", + "context": "parameter_type", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L84", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini_geminiexplainer_summarizetradeoffs", + "target": "packages_schemas_src_domain_diagnostic", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "parameter_type", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L84", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini_geminiexplainer_summarizetradeoffs", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L133", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini_geminiexplainer_explainwhynot", + "target": "packages_ai_src_providers_gemini_stripjsonfences", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L134", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini_geminiexplainer_explainwhynot", + "target": "packages_ai_src_schemas_aiwhynotresponseschema" + }, + { + "relation": "references", + "context": "parameter_type", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L117", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini_geminiexplainer_explainwhynot", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L163", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini_geminiexplainer_generateroadmap", + "target": "packages_ai_src_providers_gemini_stripjsonfences", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L164", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini_geminiexplainer_generateroadmap", + "target": "packages_ai_src_schemas_airoadmapresponseschema" + }, + { + "relation": "references", + "context": "parameter_type", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/providers/gemini.ts", + "source_location": "L150", + "weight": 1.0, + "source": "packages_ai_src_providers_gemini_geminiexplainer_generateroadmap", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/schemas.ts", + "source_location": "L27", + "weight": 1.0, + "source": "packages_ai_src_schemas", + "target": "packages_ai_src_schemas_aiexplanationresponse", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/schemas.ts", + "source_location": "L11", + "weight": 1.0, + "source": "packages_ai_src_schemas", + "target": "packages_ai_src_schemas_aiexplanationresponseschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/schemas.ts", + "source_location": "L83", + "weight": 1.0, + "source": "packages_ai_src_schemas", + "target": "packages_ai_src_schemas_airoadmapresponse", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/schemas.ts", + "source_location": "L63", + "weight": 1.0, + "source": "packages_ai_src_schemas", + "target": "packages_ai_src_schemas_airoadmapresponseschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/schemas.ts", + "source_location": "L45", + "weight": 1.0, + "source": "packages_ai_src_schemas", + "target": "packages_ai_src_schemas_aitradeoffresponse", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/schemas.ts", + "source_location": "L32", + "weight": 1.0, + "source": "packages_ai_src_schemas", + "target": "packages_ai_src_schemas_aitradeoffresponseschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/schemas.ts", + "source_location": "L58", + "weight": 1.0, + "source": "packages_ai_src_schemas", + "target": "packages_ai_src_schemas_aiwhynotresponse", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/schemas.ts", + "source_location": "L50", + "weight": 1.0, + "source": "packages_ai_src_schemas", + "target": "packages_ai_src_schemas_aiwhynotresponseschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/types.ts", + "source_location": "L93", + "weight": 1.0, + "source": "packages_ai_src_types", + "target": "packages_ai_src_types_aiproviderconfig", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/types.ts", + "source_location": "L22", + "weight": 1.0, + "source": "packages_ai_src_types", + "target": "packages_ai_src_types_blueprintcostestimate", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/types.ts", + "source_location": "L57", + "weight": 1.0, + "source": "packages_ai_src_types", + "target": "packages_ai_src_types_enhancedalternative", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/types.ts", + "source_location": "L70", + "weight": 1.0, + "source": "packages_ai_src_types", + "target": "packages_ai_src_types_enhancedblueprintresponse", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/types.ts", + "source_location": "L41", + "weight": 1.0, + "source": "packages_ai_src_types", + "target": "packages_ai_src_types_implementationroadmap", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/types.ts", + "source_location": "L32", + "weight": 1.0, + "source": "packages_ai_src_types", + "target": "packages_ai_src_types_roadmapphase", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/types.ts", + "source_location": "L10", + "weight": 1.0, + "source": "packages_ai_src_types", + "target": "packages_ai_src_types_toolcostestimate", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/types.ts", + "source_location": "L49", + "weight": 1.0, + "source": "packages_ai_src_types", + "target": "packages_ai_src_types_whynotexplanation", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/types.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_ai_src_types", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/types.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_ai_src_types", + "target": "packages_schemas_src_index", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "packages/ai/src/types.ts", + "source_location": "L72", + "weight": 1.0, + "source": "packages_ai_src_types_enhancedblueprintresponse", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/tsconfig.json", + "source_location": "L3", + "weight": 1.0, + "source": "packages_ai_tsconfig", + "target": "packages_ai_tsconfig_compileroptions", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/tsconfig.json", + "source_location": "L2", + "weight": 1.0, + "source": "packages_ai_tsconfig", + "target": "packages_ai_tsconfig_extends", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/tsconfig.json", + "source_location": "L7", + "weight": 1.0, + "source": "packages_ai_tsconfig", + "target": "packages_ai_tsconfig_include", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/tsconfig.json", + "source_location": "L4", + "weight": 1.0, + "source": "packages_ai_tsconfig_compileroptions", + "target": "packages_ai_tsconfig_compileroptions_outdir", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/ai/tsconfig.json", + "source_location": "L5", + "weight": 1.0, + "source": "packages_ai_tsconfig_compileroptions", + "target": "packages_ai_tsconfig_compileroptions_rootdir", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/package.json", + "source_location": "L13", + "weight": 1.0, + "source": "packages_exporter_package", + "target": "packages_exporter_package_dependencies", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/package.json", + "source_location": "L19", + "weight": 1.0, + "source": "packages_exporter_package", + "target": "packages_exporter_package_devdependencies", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/package.json", + "source_location": "L6", + "weight": 1.0, + "source": "packages_exporter_package", + "target": "packages_exporter_package_main", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/package.json", + "source_location": "L2", + "weight": 1.0, + "source": "packages_exporter_package", + "target": "packages_exporter_package_name", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/package.json", + "source_location": "L4", + "weight": 1.0, + "source": "packages_exporter_package", + "target": "packages_exporter_package_private", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/package.json", + "source_location": "L8", + "weight": 1.0, + "source": "packages_exporter_package", + "target": "packages_exporter_package_scripts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/package.json", + "source_location": "L5", + "weight": 1.0, + "source": "packages_exporter_package", + "target": "packages_exporter_package_type", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/package.json", + "source_location": "L7", + "weight": 1.0, + "source": "packages_exporter_package", + "target": "packages_exporter_package_types", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/package.json", + "source_location": "L3", + "weight": 1.0, + "source": "packages_exporter_package", + "target": "packages_exporter_package_version", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/package.json", + "source_location": "L9", + "weight": 1.0, + "source": "packages_exporter_package_scripts", + "target": "packages_exporter_package_scripts_lint", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/package.json", + "source_location": "L11", + "weight": 1.0, + "source": "packages_exporter_package_scripts", + "target": "packages_exporter_package_scripts_test", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/package.json", + "source_location": "L10", + "weight": 1.0, + "source": "packages_exporter_package_scripts", + "target": "packages_exporter_package_scripts_type_check", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/package.json", + "source_location": "L16", + "weight": 1.0, + "source": "packages_exporter_package_dependencies", + "target": "packages_exporter_package_dependencies_stackfast_registry", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/package.json", + "source_location": "L17", + "weight": 1.0, + "source": "packages_exporter_package_dependencies", + "target": "packages_exporter_package_dependencies_stackfast_rules_engine", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/package.json", + "source_location": "L15", + "weight": 1.0, + "source": "packages_exporter_package_dependencies", + "target": "packages_exporter_package_dependencies_stackfast_schemas", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/package.json", + "source_location": "L14", + "weight": 1.0, + "source": "packages_exporter_package_dependencies", + "target": "packages_exporter_package_dependencies_stackfast_shared", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/package.json", + "source_location": "L20", + "weight": 1.0, + "source": "packages_exporter_package_devdependencies", + "target": "packages_exporter_package_devdependencies_typescript", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/export-generator.test.ts", + "source_location": "L4", + "weight": 1.0, + "source": "packages_exporter_src_export_generator_test", + "target": "packages_exporter_src_export_generator", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/export-generator.test.ts", + "source_location": "L4", + "weight": 1.0, + "source": "packages_exporter_src_export_generator_test", + "target": "packages_exporter_src_export_generator_generateexport", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/export-generator.test.ts", + "source_location": "L4", + "weight": 1.0, + "source": "packages_exporter_src_export_generator_test", + "target": "packages_exporter_src_export_generator_generateexportastext", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/export-generator.test.ts", + "source_location": "L7", + "weight": 1.0, + "source": "packages_exporter_src_export_generator_test", + "target": "packages_exporter_src_export_generator_test_loader", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/export-generator.test.ts", + "source_location": "L5", + "weight": 1.0, + "source": "packages_exporter_src_export_generator_test", + "target": "packages_exporter_src_recipes", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/export-generator.test.ts", + "source_location": "L5", + "weight": 1.0, + "source": "packages_exporter_src_export_generator_test", + "target": "packages_exporter_src_recipes_recipes", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/export-generator.test.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_exporter_src_export_generator_test", + "target": "packages_registry_src_index", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/export-generator.test.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_exporter_src_export_generator_test", + "target": "packages_registry_src_index_catalogloader", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/export-generator.test.ts", + "source_location": "L2", + "weight": 1.0, + "source": "packages_exporter_src_export_generator_test", + "target": "packages_schemas_src_domain_exportrecipemetadataschema", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/export-generator.test.ts", + "source_location": "L2", + "weight": 1.0, + "source": "packages_exporter_src_export_generator_test", + "target": "packages_schemas_src_index", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/export-generator.ts", + "source_location": "L13", + "weight": 1.0, + "source": "packages_exporter_src_export_generator", + "target": "packages_exporter_src_export_generator_exporterror", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/export-generator.ts", + "source_location": "L24", + "weight": 1.0, + "source": "packages_exporter_src_export_generator", + "target": "packages_exporter_src_export_generator_generateexport", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/export-generator.ts", + "source_location": "L113", + "weight": 1.0, + "source": "packages_exporter_src_export_generator", + "target": "packages_exporter_src_export_generator_generateexportastext", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/export-generator.ts", + "source_location": "L119", + "weight": 1.0, + "source": "packages_exporter_src_export_generator", + "target": "packages_exporter_src_export_generator_generateexportlog", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/export-generator.ts", + "source_location": "L135", + "weight": 1.0, + "source": "packages_exporter_src_export_generator", + "target": "packages_exporter_src_export_generator_suggestnearestcombination", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/export-generator.ts", + "source_location": "L3", + "weight": 1.0, + "source": "packages_exporter_src_export_generator", + "target": "packages_exporter_src_recipe_matcher", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/export-generator.ts", + "source_location": "L3", + "weight": 1.0, + "source": "packages_exporter_src_export_generator", + "target": "packages_exporter_src_recipe_matcher_mergerecipetargets", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/export-generator.ts", + "source_location": "L3", + "weight": 1.0, + "source": "packages_exporter_src_export_generator", + "target": "packages_exporter_src_recipe_matcher_sortrecipesbycategory", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/export-generator.ts", + "source_location": "L2", + "weight": 1.0, + "source": "packages_exporter_src_export_generator", + "target": "packages_exporter_src_recipes", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/export-generator.ts", + "source_location": "L2", + "weight": 1.0, + "source": "packages_exporter_src_export_generator", + "target": "packages_exporter_src_recipes_getapplicablerecipes", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/export-generator.ts", + "source_location": "L4", + "weight": 1.0, + "source": "packages_exporter_src_export_generator", + "target": "packages_exporter_src_templates", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/export-generator.ts", + "source_location": "L4", + "weight": 1.0, + "source": "packages_exporter_src_export_generator", + "target": "packages_exporter_src_templates_generateadr", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/export-generator.ts", + "source_location": "L4", + "weight": 1.0, + "source": "packages_exporter_src_export_generator", + "target": "packages_exporter_src_templates_generateenvexample", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/export-generator.ts", + "source_location": "L4", + "weight": 1.0, + "source": "packages_exporter_src_export_generator", + "target": "packages_exporter_src_templates_generatepackagejson", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/export-generator.ts", + "source_location": "L4", + "weight": 1.0, + "source": "packages_exporter_src_export_generator", + "target": "packages_exporter_src_templates_generatereadme", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/export-generator.ts", + "source_location": "L4", + "weight": 1.0, + "source": "packages_exporter_src_export_generator", + "target": "packages_exporter_src_templates_generatesetupguide", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/export-generator.ts", + "source_location": "L4", + "weight": 1.0, + "source": "packages_exporter_src_export_generator", + "target": "packages_exporter_src_templates_gettemplatecontent", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/export-generator.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_exporter_src_export_generator", + "target": "packages_schemas_src_domain_diagnostic", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/export-generator.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_exporter_src_export_generator", + "target": "packages_schemas_src_domain_exportdata", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/export-generator.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_exporter_src_export_generator", + "target": "packages_schemas_src_domain_exportfile", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/export-generator.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_exporter_src_export_generator", + "target": "packages_schemas_src_domain_exportformat", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/export-generator.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_exporter_src_export_generator", + "target": "packages_schemas_src_domain_exportlog", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/export-generator.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_exporter_src_export_generator", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/export-generator.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_exporter_src_export_generator", + "target": "packages_schemas_src_index", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "export", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/index.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_exporter_src_index", + "target": "packages_exporter_src_export_generator", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/export-generator.ts", + "source_location": "L14", + "weight": 1.0, + "source": "packages_exporter_src_export_generator_exporterror", + "target": "packages_exporter_src_export_generator_exporterror_constructor", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/export-generator.ts", + "source_location": "L98", + "weight": 1.0, + "source": "packages_exporter_src_export_generator_generateexport", + "target": "packages_exporter_src_export_generator_generateexportlog", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/export-generator.ts", + "source_location": "L33", + "weight": 1.0, + "source": "packages_exporter_src_export_generator_generateexport", + "target": "packages_exporter_src_export_generator_suggestnearestcombination", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "packages/exporter/src/export-generator.ts", + "source_location": "L37", + "weight": 1.0, + "source": "packages_exporter_src_export_generator_generateexport", + "target": "packages_exporter_src_recipe_matcher_mergerecipetargets" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "packages/exporter/src/export-generator.ts", + "source_location": "L36", + "weight": 1.0, + "source": "packages_exporter_src_export_generator_generateexport", + "target": "packages_exporter_src_recipe_matcher_sortrecipesbycategory" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "packages/exporter/src/export-generator.ts", + "source_location": "L31", + "weight": 1.0, + "source": "packages_exporter_src_export_generator_generateexport", + "target": "packages_exporter_src_recipes_getapplicablerecipes" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "packages/exporter/src/export-generator.ts", + "source_location": "L96", + "weight": 1.0, + "source": "packages_exporter_src_export_generator_generateexport", + "target": "packages_exporter_src_templates_generateadr" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "packages/exporter/src/export-generator.ts", + "source_location": "L55", + "weight": 1.0, + "source": "packages_exporter_src_export_generator_generateexport", + "target": "packages_exporter_src_templates_generateenvexample" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "packages/exporter/src/export-generator.ts", + "source_location": "L42", + "weight": 1.0, + "source": "packages_exporter_src_export_generator_generateexport", + "target": "packages_exporter_src_templates_generatepackagejson" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "packages/exporter/src/export-generator.ts", + "source_location": "L74", + "weight": 1.0, + "source": "packages_exporter_src_export_generator_generateexport", + "target": "packages_exporter_src_templates_generatereadme" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "packages/exporter/src/export-generator.ts", + "source_location": "L88", + "weight": 1.0, + "source": "packages_exporter_src_export_generator_generateexport", + "target": "packages_exporter_src_templates_generatesetupguide" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "packages/exporter/src/export-generator.ts", + "source_location": "L63", + "weight": 1.0, + "source": "packages_exporter_src_export_generator_generateexport", + "target": "packages_exporter_src_templates_gettemplatecontent" + }, + { + "relation": "re_exports", + "context": "export", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/index.ts", + "source_location": "L2", + "weight": 1.0, + "source": "packages_exporter_src_index", + "target": "packages_exporter_src_recipe_matcher", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "export", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/index.ts", + "source_location": "L3", + "weight": 1.0, + "source": "packages_exporter_src_index", + "target": "packages_exporter_src_recipes", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "export", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/index.ts", + "source_location": "L4", + "weight": 1.0, + "source": "packages_exporter_src_index", + "target": "packages_exporter_src_templates", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/recipe-matcher.ts", + "source_location": "L3", + "weight": 1.0, + "source": "packages_exporter_src_recipe_matcher", + "target": "packages_exporter_src_recipe_matcher_category_order", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/recipe-matcher.ts", + "source_location": "L127", + "weight": 1.0, + "source": "packages_exporter_src_recipe_matcher", + "target": "packages_exporter_src_recipe_matcher_getrecipecategory", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/recipe-matcher.ts", + "source_location": "L123", + "weight": 1.0, + "source": "packages_exporter_src_recipe_matcher", + "target": "packages_exporter_src_recipe_matcher_mergedocslinks", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/recipe-matcher.ts", + "source_location": "L109", + "weight": 1.0, + "source": "packages_exporter_src_recipe_matcher", + "target": "packages_exporter_src_recipe_matcher_mergeenvtargets", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/recipe-matcher.ts", + "source_location": "L94", + "weight": 1.0, + "source": "packages_exporter_src_recipe_matcher", + "target": "packages_exporter_src_recipe_matcher_mergefiletargets", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/recipe-matcher.ts", + "source_location": "L56", + "weight": 1.0, + "source": "packages_exporter_src_recipe_matcher", + "target": "packages_exporter_src_recipe_matcher_mergepackagejsontargets", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/recipe-matcher.ts", + "source_location": "L119", + "weight": 1.0, + "source": "packages_exporter_src_recipe_matcher", + "target": "packages_exporter_src_recipe_matcher_mergepostinstallsteps", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/recipe-matcher.ts", + "source_location": "L24", + "weight": 1.0, + "source": "packages_exporter_src_recipe_matcher", + "target": "packages_exporter_src_recipe_matcher_mergerecipetargets", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/recipe-matcher.ts", + "source_location": "L16", + "weight": 1.0, + "source": "packages_exporter_src_recipe_matcher", + "target": "packages_exporter_src_recipe_matcher_sortrecipesbycategory", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/recipe-matcher.ts", + "source_location": "L132", + "weight": 1.0, + "source": "packages_exporter_src_recipe_matcher", + "target": "packages_exporter_src_recipe_matcher_unique", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/recipe-matcher.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_exporter_src_recipe_matcher", + "target": "packages_schemas_src_domain_categoryid", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/recipe-matcher.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_exporter_src_recipe_matcher", + "target": "packages_schemas_src_domain_exportrecipe", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/recipe-matcher.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_exporter_src_recipe_matcher", + "target": "packages_schemas_src_domain_filetarget", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/recipe-matcher.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_exporter_src_recipe_matcher", + "target": "packages_schemas_src_domain_recipetargets", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/recipe-matcher.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_exporter_src_recipe_matcher", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/recipe-matcher.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_exporter_src_recipe_matcher", + "target": "packages_schemas_src_index", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/recipe-matcher.ts", + "source_location": "L25", + "weight": 1.0, + "source": "packages_exporter_src_recipe_matcher_mergerecipetargets", + "target": "packages_exporter_src_recipe_matcher_sortrecipesbycategory", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/recipe-matcher.ts", + "source_location": "L30", + "weight": 1.0, + "source": "packages_exporter_src_recipe_matcher_mergerecipetargets", + "target": "packages_exporter_src_recipe_matcher_mergedocslinks", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/recipe-matcher.ts", + "source_location": "L28", + "weight": 1.0, + "source": "packages_exporter_src_recipe_matcher_mergerecipetargets", + "target": "packages_exporter_src_recipe_matcher_mergeenvtargets", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/recipe-matcher.ts", + "source_location": "L27", + "weight": 1.0, + "source": "packages_exporter_src_recipe_matcher_mergerecipetargets", + "target": "packages_exporter_src_recipe_matcher_mergefiletargets", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/recipe-matcher.ts", + "source_location": "L26", + "weight": 1.0, + "source": "packages_exporter_src_recipe_matcher_mergerecipetargets", + "target": "packages_exporter_src_recipe_matcher_mergepackagejsontargets", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/recipe-matcher.ts", + "source_location": "L29", + "weight": 1.0, + "source": "packages_exporter_src_recipe_matcher_mergerecipetargets", + "target": "packages_exporter_src_recipe_matcher_mergepostinstallsteps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/recipe-matcher.ts", + "source_location": "L120", + "weight": 1.0, + "source": "packages_exporter_src_recipe_matcher_mergepostinstallsteps", + "target": "packages_exporter_src_recipe_matcher_unique", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/recipe-matcher.ts", + "source_location": "L124", + "weight": 1.0, + "source": "packages_exporter_src_recipe_matcher_mergedocslinks", + "target": "packages_exporter_src_recipe_matcher_unique", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/recipes.ts", + "source_location": "L335", + "weight": 1.0, + "source": "packages_exporter_src_recipes", + "target": "packages_exporter_src_recipes_getapplicablerecipes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/recipes.ts", + "source_location": "L331", + "weight": 1.0, + "source": "packages_exporter_src_recipes", + "target": "packages_exporter_src_recipes_getrecipebyid", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/recipes.ts", + "source_location": "L339", + "weight": 1.0, + "source": "packages_exporter_src_recipes", + "target": "packages_exporter_src_recipes_hastool", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/recipes.ts", + "source_location": "L3", + "weight": 1.0, + "source": "packages_exporter_src_recipes", + "target": "packages_exporter_src_recipes_nextjsbaserecipe", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/recipes.ts", + "source_location": "L117", + "weight": 1.0, + "source": "packages_exporter_src_recipes", + "target": "packages_exporter_src_recipes_nextjsclerkrecipe", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/recipes.ts", + "source_location": "L84", + "weight": 1.0, + "source": "packages_exporter_src_recipes", + "target": "packages_exporter_src_recipes_nextjsdrizzlepostgresrecipe", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/recipes.ts", + "source_location": "L155", + "weight": 1.0, + "source": "packages_exporter_src_recipes", + "target": "packages_exporter_src_recipes_nextjsnextauthprismarecipe", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/recipes.ts", + "source_location": "L52", + "weight": 1.0, + "source": "packages_exporter_src_recipes", + "target": "packages_exporter_src_recipes_nextjsprismapostgresrecipe", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/recipes.ts", + "source_location": "L258", + "weight": 1.0, + "source": "packages_exporter_src_recipes", + "target": "packages_exporter_src_recipes_railwayrecipe", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/recipes.ts", + "source_location": "L317", + "weight": 1.0, + "source": "packages_exporter_src_recipes", + "target": "packages_exporter_src_recipes_recipes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/recipes.ts", + "source_location": "L272", + "weight": 1.0, + "source": "packages_exporter_src_recipes", + "target": "packages_exporter_src_recipes_resendrecipe", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/recipes.ts", + "source_location": "L292", + "weight": 1.0, + "source": "packages_exporter_src_recipes", + "target": "packages_exporter_src_recipes_s3storagerecipe", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/recipes.ts", + "source_location": "L184", + "weight": 1.0, + "source": "packages_exporter_src_recipes", + "target": "packages_exporter_src_recipes_stripeintegrationrecipe", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/recipes.ts", + "source_location": "L218", + "weight": 1.0, + "source": "packages_exporter_src_recipes", + "target": "packages_exporter_src_recipes_tailwindrecipe", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/recipes.ts", + "source_location": "L244", + "weight": 1.0, + "source": "packages_exporter_src_recipes", + "target": "packages_exporter_src_recipes_vercelrecipe", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/recipes.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_exporter_src_recipes", + "target": "packages_schemas_src_domain_exportrecipe", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/recipes.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_exporter_src_recipes", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/recipes.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_exporter_src_recipes", + "target": "packages_schemas_src_index", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/templates.ts", + "source_location": "L369", + "weight": 1.0, + "source": "packages_exporter_src_templates", + "target": "packages_exporter_src_templates_generateadr", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/templates.ts", + "source_location": "L301", + "weight": 1.0, + "source": "packages_exporter_src_templates", + "target": "packages_exporter_src_templates_generateenvexample", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/templates.ts", + "source_location": "L278", + "weight": 1.0, + "source": "packages_exporter_src_templates", + "target": "packages_exporter_src_templates_generatepackagejson", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/templates.ts", + "source_location": "L319", + "weight": 1.0, + "source": "packages_exporter_src_templates", + "target": "packages_exporter_src_templates_generatereadme", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/templates.ts", + "source_location": "L353", + "weight": 1.0, + "source": "packages_exporter_src_templates", + "target": "packages_exporter_src_templates_generatesetupguide", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/templates.ts", + "source_location": "L270", + "weight": 1.0, + "source": "packages_exporter_src_templates", + "target": "packages_exporter_src_templates_gettemplatecontent", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/templates.ts", + "source_location": "L3", + "weight": 1.0, + "source": "packages_exporter_src_templates", + "target": "packages_exporter_src_templates_templategenerators", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/templates.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_exporter_src_templates", + "target": "packages_schemas_src_domain_diagnostic", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/templates.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_exporter_src_templates", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/src/templates.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_exporter_src_templates", + "target": "packages_schemas_src_index", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/tsconfig.json", + "source_location": "L3", + "weight": 1.0, + "source": "packages_exporter_tsconfig", + "target": "packages_exporter_tsconfig_compileroptions", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/tsconfig.json", + "source_location": "L2", + "weight": 1.0, + "source": "packages_exporter_tsconfig", + "target": "packages_exporter_tsconfig_extends", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/tsconfig.json", + "source_location": "L7", + "weight": 1.0, + "source": "packages_exporter_tsconfig", + "target": "packages_exporter_tsconfig_include", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/tsconfig.json", + "source_location": "L4", + "weight": 1.0, + "source": "packages_exporter_tsconfig_compileroptions", + "target": "packages_exporter_tsconfig_compileroptions_outdir", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/exporter/tsconfig.json", + "source_location": "L5", + "weight": 1.0, + "source": "packages_exporter_tsconfig_compileroptions", + "target": "packages_exporter_tsconfig_compileroptions_rootdir", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/registry/package.json", + "source_location": "L14", + "weight": 1.0, + "source": "packages_registry_package", + "target": "packages_registry_package_dependencies", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/registry/package.json", + "source_location": "L19", + "weight": 1.0, + "source": "packages_registry_package", + "target": "packages_registry_package_devdependencies", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/registry/package.json", + "source_location": "L6", + "weight": 1.0, + "source": "packages_registry_package", + "target": "packages_registry_package_main", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/registry/package.json", + "source_location": "L2", + "weight": 1.0, + "source": "packages_registry_package", + "target": "packages_registry_package_name", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/registry/package.json", + "source_location": "L4", + "weight": 1.0, + "source": "packages_registry_package", + "target": "packages_registry_package_private", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/registry/package.json", + "source_location": "L8", + "weight": 1.0, + "source": "packages_registry_package", + "target": "packages_registry_package_scripts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/registry/package.json", + "source_location": "L5", + "weight": 1.0, + "source": "packages_registry_package", + "target": "packages_registry_package_type", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/registry/package.json", + "source_location": "L7", + "weight": 1.0, + "source": "packages_registry_package", + "target": "packages_registry_package_types", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/registry/package.json", + "source_location": "L3", + "weight": 1.0, + "source": "packages_registry_package", + "target": "packages_registry_package_version", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/registry/package.json", + "source_location": "L9", + "weight": 1.0, + "source": "packages_registry_package_scripts", + "target": "packages_registry_package_scripts_lint", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/registry/package.json", + "source_location": "L11", + "weight": 1.0, + "source": "packages_registry_package_scripts", + "target": "packages_registry_package_scripts_test", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/registry/package.json", + "source_location": "L10", + "weight": 1.0, + "source": "packages_registry_package_scripts", + "target": "packages_registry_package_scripts_type_check", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/registry/package.json", + "source_location": "L12", + "weight": 1.0, + "source": "packages_registry_package_scripts", + "target": "packages_registry_package_scripts_validate", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/registry/package.json", + "source_location": "L16", + "weight": 1.0, + "source": "packages_registry_package_dependencies", + "target": "packages_registry_package_dependencies_stackfast_schemas", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/registry/package.json", + "source_location": "L15", + "weight": 1.0, + "source": "packages_registry_package_dependencies", + "target": "packages_registry_package_dependencies_stackfast_shared", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/registry/package.json", + "source_location": "L17", + "weight": 1.0, + "source": "packages_registry_package_dependencies", + "target": "packages_registry_package_dependencies_zod", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/registry/package.json", + "source_location": "L20", + "weight": 1.0, + "source": "packages_registry_package_devdependencies", + "target": "packages_registry_package_devdependencies_tsx", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/registry/package.json", + "source_location": "L21", + "weight": 1.0, + "source": "packages_registry_package_devdependencies", + "target": "packages_registry_package_devdependencies_typescript", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/data/v1/manifest.json", + "source_location": "L9", + "weight": 1.0, + "source": "packages_registry_src_data_v1_manifest", + "target": "packages_registry_src_data_v1_manifest_etag", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/data/v1/manifest.json", + "source_location": "L4", + "weight": 1.0, + "source": "packages_registry_src_data_v1_manifest", + "target": "packages_registry_src_data_v1_manifest_files", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/data/v1/manifest.json", + "source_location": "L3", + "weight": 1.0, + "source": "packages_registry_src_data_v1_manifest", + "target": "packages_registry_src_data_v1_manifest_updatedat", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/data/v1/manifest.json", + "source_location": "L2", + "weight": 1.0, + "source": "packages_registry_src_data_v1_manifest", + "target": "packages_registry_src_data_v1_manifest_version", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L13", + "weight": 1.0, + "source": "packages_registry_src_index", + "target": "packages_registry_src_data_v1_manifest", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/data/v1/manifest.json", + "source_location": "L5", + "weight": 1.0, + "source": "packages_registry_src_data_v1_manifest_files", + "target": "packages_registry_src_data_v1_manifest_files_categories", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/data/v1/manifest.json", + "source_location": "L7", + "weight": 1.0, + "source": "packages_registry_src_data_v1_manifest_files", + "target": "packages_registry_src_data_v1_manifest_files_rules", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/data/v1/manifest.json", + "source_location": "L6", + "weight": 1.0, + "source": "packages_registry_src_data_v1_manifest_files", + "target": "packages_registry_src_data_v1_manifest_files_tools", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.test.ts", + "source_location": "L2", + "weight": 1.0, + "source": "packages_registry_src_index_test", + "target": "packages_registry_src_index", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.test.ts", + "source_location": "L2", + "weight": 1.0, + "source": "packages_registry_src_index_test", + "target": "packages_registry_src_index_catalogloader", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.test.ts", + "source_location": "L2", + "weight": 1.0, + "source": "packages_registry_src_index_test", + "target": "packages_registry_src_index_defaultcatalog", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.test.ts", + "source_location": "L2", + "weight": 1.0, + "source": "packages_registry_src_index_test", + "target": "packages_registry_src_index_validatedefaultcatalog", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L281", + "weight": 1.0, + "source": "packages_registry_src_index", + "target": "packages_registry_src_index_catalogloader", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L21", + "weight": 1.0, + "source": "packages_registry_src_index", + "target": "packages_registry_src_index_catalogvalidationerror", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L28", + "weight": 1.0, + "source": "packages_registry_src_index", + "target": "packages_registry_src_index_catalogvalidationresult", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L18", + "weight": 1.0, + "source": "packages_registry_src_index", + "target": "packages_registry_src_index_categoryarrayschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L206", + "weight": 1.0, + "source": "packages_registry_src_index", + "target": "packages_registry_src_index_collectduplicateids", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L280", + "weight": 1.0, + "source": "packages_registry_src_index", + "target": "packages_registry_src_index_defaultcatalog", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L220", + "weight": 1.0, + "source": "packages_registry_src_index", + "target": "packages_registry_src_index_enrichtoolmetadata", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L276", + "weight": 1.0, + "source": "packages_registry_src_index", + "target": "packages_registry_src_index_ishttpurl", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L268", + "weight": 1.0, + "source": "packages_registry_src_index", + "target": "packages_registry_src_index_isrecord", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L104", + "weight": 1.0, + "source": "packages_registry_src_index", + "target": "packages_registry_src_index_loaddefaultcatalog", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L19", + "weight": 1.0, + "source": "packages_registry_src_index", + "target": "packages_registry_src_index_rulearrayschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L17", + "weight": 1.0, + "source": "packages_registry_src_index", + "target": "packages_registry_src_index_toolarrayschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L272", + "weight": 1.0, + "source": "packages_registry_src_index", + "target": "packages_registry_src_index_uniquestrings", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L127", + "weight": 1.0, + "source": "packages_registry_src_index", + "target": "packages_registry_src_index_validatecatalog", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L123", + "weight": 1.0, + "source": "packages_registry_src_index", + "target": "packages_registry_src_index_validatedefaultcatalog", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_registry_src_index", + "target": "packages_schemas_src_domain_catalog", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_registry_src_index", + "target": "packages_schemas_src_domain_catalogmanifestschema", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_registry_src_index", + "target": "packages_schemas_src_domain_category", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_registry_src_index", + "target": "packages_schemas_src_domain_categoryschema", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_registry_src_index", + "target": "packages_schemas_src_domain_rule", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_registry_src_index", + "target": "packages_schemas_src_domain_ruleschema", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_registry_src_index", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_registry_src_index", + "target": "packages_schemas_src_domain_toolschema", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_registry_src_index", + "target": "packages_schemas_src_index", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/validate.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_registry_src_validate", + "target": "packages_registry_src_index", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/rules-engine.test.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_rules_engine_src_rules_engine_test", + "target": "packages_registry_src_index", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "packages/registry/src/index.ts", + "source_location": "L107", + "weight": 1.0, + "source": "packages_registry_src_index_loaddefaultcatalog", + "target": "packages_registry_src_index_toolarrayschema" + }, + { + "relation": "references", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "packages/registry/src/index.ts", + "source_location": "L106", + "weight": 1.0, + "source": "packages_registry_src_index_loaddefaultcatalog", + "target": "packages_registry_src_index_categoryarrayschema" + }, + { + "relation": "references", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "packages/registry/src/index.ts", + "source_location": "L108", + "weight": 1.0, + "source": "packages_registry_src_index_loaddefaultcatalog", + "target": "packages_registry_src_index_rulearrayschema" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L22", + "weight": 1.0, + "source": "packages_registry_src_index_catalogvalidationerror", + "target": "packages_registry_src_index_catalogvalidationerror_constructor", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L38", + "weight": 1.0, + "source": "packages_registry_src_index_catalogloader", + "target": "packages_registry_src_index_catalogloader_constructor", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L44", + "weight": 1.0, + "source": "packages_registry_src_index_catalogloader", + "target": "packages_registry_src_index_catalogloader_getcatalog", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L52", + "weight": 1.0, + "source": "packages_registry_src_index_catalogloader", + "target": "packages_registry_src_index_catalogloader_getcategories", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L72", + "weight": 1.0, + "source": "packages_registry_src_index_catalogloader", + "target": "packages_registry_src_index_catalogloader_getcategory", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L76", + "weight": 1.0, + "source": "packages_registry_src_index_catalogloader", + "target": "packages_registry_src_index_catalogloader_getrule", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L56", + "weight": 1.0, + "source": "packages_registry_src_index_catalogloader", + "target": "packages_registry_src_index_catalogloader_getrules", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L60", + "weight": 1.0, + "source": "packages_registry_src_index_catalogloader", + "target": "packages_registry_src_index_catalogloader_gettool", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L48", + "weight": 1.0, + "source": "packages_registry_src_index_catalogloader", + "target": "packages_registry_src_index_catalogloader_gettools", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L80", + "weight": 1.0, + "source": "packages_registry_src_index_catalogloader", + "target": "packages_registry_src_index_catalogloader_gettoolsbycategory", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L64", + "weight": 1.0, + "source": "packages_registry_src_index_catalogloader", + "target": "packages_registry_src_index_catalogloader_requiretool", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L84", + "weight": 1.0, + "source": "packages_registry_src_index_catalogloader", + "target": "packages_registry_src_index_catalogloader_searchtools", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "generic_arg", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L35", + "weight": 1.0, + "source": "packages_registry_src_index_catalogloader", + "target": "packages_schemas_src_domain_category", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "generic_arg", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L36", + "weight": 1.0, + "source": "packages_registry_src_index_catalogloader", + "target": "packages_schemas_src_domain_rule", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "generic_arg", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L34", + "weight": 1.0, + "source": "packages_registry_src_index_catalogloader", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/rules-engine.test.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_rules_engine_src_rules_engine_test", + "target": "packages_registry_src_index_catalogloader", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "parameter_type", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L38", + "weight": 1.0, + "source": "packages_registry_src_index_catalogloader_constructor", + "target": "packages_schemas_src_domain_catalog", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "return_type", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L44", + "weight": 1.0, + "source": "packages_registry_src_index_catalogloader_getcatalog", + "target": "packages_schemas_src_domain_catalog", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "return_type", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L48", + "weight": 1.0, + "source": "packages_registry_src_index_catalogloader_gettools", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "return_type", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L52", + "weight": 1.0, + "source": "packages_registry_src_index_catalogloader_getcategories", + "target": "packages_schemas_src_domain_category", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "return_type", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L56", + "weight": 1.0, + "source": "packages_registry_src_index_catalogloader_getrules", + "target": "packages_schemas_src_domain_rule", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "return_type", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L60", + "weight": 1.0, + "source": "packages_registry_src_index_catalogloader_gettool", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L65", + "weight": 1.0, + "source": "packages_registry_src_index_catalogloader_requiretool", + "target": "packages_registry_src_index_catalogloader_gettool", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "return_type", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L64", + "weight": 1.0, + "source": "packages_registry_src_index_catalogloader_requiretool", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "return_type", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L72", + "weight": 1.0, + "source": "packages_registry_src_index_catalogloader_getcategory", + "target": "packages_schemas_src_domain_category", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "return_type", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L76", + "weight": 1.0, + "source": "packages_registry_src_index_catalogloader_getrule", + "target": "packages_schemas_src_domain_rule", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "return_type", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L80", + "weight": 1.0, + "source": "packages_registry_src_index_catalogloader_gettoolsbycategory", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "return_type", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L84", + "weight": 1.0, + "source": "packages_registry_src_index_catalogloader_searchtools", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L107", + "weight": 1.0, + "source": "packages_registry_src_index_loaddefaultcatalog", + "target": "packages_registry_src_index_enrichtoolmetadata", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L119", + "weight": 1.0, + "source": "packages_registry_src_index_loaddefaultcatalog", + "target": "packages_registry_src_index_validatecatalog", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L124", + "weight": 1.0, + "source": "packages_registry_src_index_validatedefaultcatalog", + "target": "packages_registry_src_index_loaddefaultcatalog", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/validate.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_registry_src_validate", + "target": "packages_registry_src_index_validatedefaultcatalog", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "packages/registry/src/index.ts", + "source_location": "L130", + "weight": 1.0, + "source": "packages_registry_src_index_validatecatalog", + "target": "packages_registry_src_index_collectduplicateids", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/registry/tsconfig.json", + "source_location": "L3", + "weight": 1.0, + "source": "packages_registry_tsconfig", + "target": "packages_registry_tsconfig_compileroptions", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/registry/tsconfig.json", + "source_location": "L2", + "weight": 1.0, + "source": "packages_registry_tsconfig", + "target": "packages_registry_tsconfig_extends", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/registry/tsconfig.json", + "source_location": "L7", + "weight": 1.0, + "source": "packages_registry_tsconfig", + "target": "packages_registry_tsconfig_include", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/registry/tsconfig.json", + "source_location": "L4", + "weight": 1.0, + "source": "packages_registry_tsconfig_compileroptions", + "target": "packages_registry_tsconfig_compileroptions_outdir", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/registry/tsconfig.json", + "source_location": "L5", + "weight": 1.0, + "source": "packages_registry_tsconfig_compileroptions", + "target": "packages_registry_tsconfig_compileroptions_rootdir", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/package.json", + "source_location": "L13", + "weight": 1.0, + "source": "packages_rules_engine_package", + "target": "packages_rules_engine_package_dependencies", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/package.json", + "source_location": "L18", + "weight": 1.0, + "source": "packages_rules_engine_package", + "target": "packages_rules_engine_package_devdependencies", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/package.json", + "source_location": "L6", + "weight": 1.0, + "source": "packages_rules_engine_package", + "target": "packages_rules_engine_package_main", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/package.json", + "source_location": "L2", + "weight": 1.0, + "source": "packages_rules_engine_package", + "target": "packages_rules_engine_package_name", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/package.json", + "source_location": "L4", + "weight": 1.0, + "source": "packages_rules_engine_package", + "target": "packages_rules_engine_package_private", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/package.json", + "source_location": "L8", + "weight": 1.0, + "source": "packages_rules_engine_package", + "target": "packages_rules_engine_package_scripts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/package.json", + "source_location": "L5", + "weight": 1.0, + "source": "packages_rules_engine_package", + "target": "packages_rules_engine_package_type", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/package.json", + "source_location": "L7", + "weight": 1.0, + "source": "packages_rules_engine_package", + "target": "packages_rules_engine_package_types", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/package.json", + "source_location": "L3", + "weight": 1.0, + "source": "packages_rules_engine_package", + "target": "packages_rules_engine_package_version", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/package.json", + "source_location": "L9", + "weight": 1.0, + "source": "packages_rules_engine_package_scripts", + "target": "packages_rules_engine_package_scripts_lint", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/package.json", + "source_location": "L11", + "weight": 1.0, + "source": "packages_rules_engine_package_scripts", + "target": "packages_rules_engine_package_scripts_test", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/package.json", + "source_location": "L10", + "weight": 1.0, + "source": "packages_rules_engine_package_scripts", + "target": "packages_rules_engine_package_scripts_type_check", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/package.json", + "source_location": "L16", + "weight": 1.0, + "source": "packages_rules_engine_package_dependencies", + "target": "packages_rules_engine_package_dependencies_stackfast_registry", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/package.json", + "source_location": "L15", + "weight": 1.0, + "source": "packages_rules_engine_package_dependencies", + "target": "packages_rules_engine_package_dependencies_stackfast_schemas", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/package.json", + "source_location": "L14", + "weight": 1.0, + "source": "packages_rules_engine_package_dependencies", + "target": "packages_rules_engine_package_dependencies_stackfast_shared", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/package.json", + "source_location": "L19", + "weight": 1.0, + "source": "packages_rules_engine_package_devdependencies", + "target": "packages_rules_engine_package_devdependencies_typescript", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "export", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/index.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_rules_engine_src_index", + "target": "packages_rules_engine_src_rules_engine", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "export", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/index.ts", + "source_location": "L2", + "weight": 1.0, + "source": "packages_rules_engine_src_index", + "target": "packages_rules_engine_src_score_calculator", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/rules-engine.test.ts", + "source_location": "L3", + "weight": 1.0, + "source": "packages_rules_engine_src_rules_engine_test", + "target": "packages_rules_engine_src_rules_engine", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/rules-engine.test.ts", + "source_location": "L3", + "weight": 1.0, + "source": "packages_rules_engine_src_rules_engine_test", + "target": "packages_rules_engine_src_rules_engine_evaluaterulessync", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/rules-engine.test.ts", + "source_location": "L6", + "weight": 1.0, + "source": "packages_rules_engine_src_rules_engine_test", + "target": "packages_rules_engine_src_rules_engine_test_loader", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/rules-engine.test.ts", + "source_location": "L7", + "weight": 1.0, + "source": "packages_rules_engine_src_rules_engine_test", + "target": "packages_rules_engine_src_rules_engine_test_rules", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/rules-engine.test.ts", + "source_location": "L4", + "weight": 1.0, + "source": "packages_rules_engine_src_rules_engine_test", + "target": "packages_rules_engine_src_score_calculator", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/rules-engine.test.ts", + "source_location": "L4", + "weight": 1.0, + "source": "packages_rules_engine_src_rules_engine_test", + "target": "packages_rules_engine_src_score_calculator_calculatescore", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/rules-engine.test.ts", + "source_location": "L4", + "weight": 1.0, + "source": "packages_rules_engine_src_rules_engine_test", + "target": "packages_rules_engine_src_score_calculator_validatescorebreakdown", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/rules-engine.ts", + "source_location": "L132", + "weight": 1.0, + "source": "packages_rules_engine_src_rules_engine", + "target": "packages_rules_engine_src_rules_engine_evaluatecapabilitycompat", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/rules-engine.ts", + "source_location": "L151", + "weight": 1.0, + "source": "packages_rules_engine_src_rules_engine", + "target": "packages_rules_engine_src_rules_engine_evaluatecategorycoverage", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/rules-engine.ts", + "source_location": "L74", + "weight": 1.0, + "source": "packages_rules_engine_src_rules_engine", + "target": "packages_rules_engine_src_rules_engine_evaluatehardconflict", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/rules-engine.ts", + "source_location": "L53", + "weight": 1.0, + "source": "packages_rules_engine_src_rules_engine", + "target": "packages_rules_engine_src_rules_engine_evaluatemutualexclusivecategory", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/rules-engine.ts", + "source_location": "L93", + "weight": 1.0, + "source": "packages_rules_engine_src_rules_engine", + "target": "packages_rules_engine_src_rules_engine_evaluaterequirestool", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/rules-engine.ts", + "source_location": "L15", + "weight": 1.0, + "source": "packages_rules_engine_src_rules_engine", + "target": "packages_rules_engine_src_rules_engine_evaluaterulessync", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/rules-engine.ts", + "source_location": "L117", + "weight": 1.0, + "source": "packages_rules_engine_src_rules_engine", + "target": "packages_rules_engine_src_rules_engine_evaluatesynergy", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/rules-engine.ts", + "source_location": "L171", + "weight": 1.0, + "source": "packages_rules_engine_src_rules_engine", + "target": "packages_rules_engine_src_rules_engine_hastool", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/rules-engine.ts", + "source_location": "L175", + "weight": 1.0, + "source": "packages_rules_engine_src_rules_engine", + "target": "packages_rules_engine_src_rules_engine_now", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/rules-engine.ts", + "source_location": "L13", + "weight": 1.0, + "source": "packages_rules_engine_src_rules_engine", + "target": "packages_rules_engine_src_score_calculator", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/rules-engine.ts", + "source_location": "L13", + "weight": 1.0, + "source": "packages_rules_engine_src_rules_engine", + "target": "packages_rules_engine_src_score_calculator_applycapabilitycompatcap", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/rules-engine.ts", + "source_location": "L13", + "weight": 1.0, + "source": "packages_rules_engine_src_rules_engine", + "target": "packages_rules_engine_src_score_calculator_calculatescore", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/rules-engine.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_rules_engine_src_rules_engine", + "target": "packages_schemas_src_domain_capabilitycompatrule", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/rules-engine.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_rules_engine_src_rules_engine", + "target": "packages_schemas_src_domain_categorycoveragerule", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/rules-engine.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_rules_engine_src_rules_engine", + "target": "packages_schemas_src_domain_diagnostic", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/rules-engine.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_rules_engine_src_rules_engine", + "target": "packages_schemas_src_domain_evaluationresult", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/rules-engine.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_rules_engine_src_rules_engine", + "target": "packages_schemas_src_domain_hardconflictrule", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/rules-engine.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_rules_engine_src_rules_engine", + "target": "packages_schemas_src_domain_mutualexclusivecategoryrule", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/rules-engine.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_rules_engine_src_rules_engine", + "target": "packages_schemas_src_domain_requirestoolrule", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/rules-engine.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_rules_engine_src_rules_engine", + "target": "packages_schemas_src_domain_rule", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/rules-engine.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_rules_engine_src_rules_engine", + "target": "packages_schemas_src_domain_synergyrule", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/rules-engine.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_rules_engine_src_rules_engine", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/rules-engine.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_rules_engine_src_rules_engine", + "target": "packages_schemas_src_index", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/rules-engine.ts", + "source_location": "L34", + "weight": 1.0, + "source": "packages_rules_engine_src_rules_engine_evaluaterulessync", + "target": "packages_rules_engine_src_rules_engine_evaluatecapabilitycompat", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/rules-engine.ts", + "source_location": "L37", + "weight": 1.0, + "source": "packages_rules_engine_src_rules_engine_evaluaterulessync", + "target": "packages_rules_engine_src_rules_engine_evaluatecategorycoverage", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/rules-engine.ts", + "source_location": "L25", + "weight": 1.0, + "source": "packages_rules_engine_src_rules_engine_evaluaterulessync", + "target": "packages_rules_engine_src_rules_engine_evaluatehardconflict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/rules-engine.ts", + "source_location": "L22", + "weight": 1.0, + "source": "packages_rules_engine_src_rules_engine_evaluaterulessync", + "target": "packages_rules_engine_src_rules_engine_evaluatemutualexclusivecategory", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/rules-engine.ts", + "source_location": "L28", + "weight": 1.0, + "source": "packages_rules_engine_src_rules_engine_evaluaterulessync", + "target": "packages_rules_engine_src_rules_engine_evaluaterequirestool", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/rules-engine.ts", + "source_location": "L31", + "weight": 1.0, + "source": "packages_rules_engine_src_rules_engine_evaluaterulessync", + "target": "packages_rules_engine_src_rules_engine_evaluatesynergy", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/rules-engine.ts", + "source_location": "L16", + "weight": 1.0, + "source": "packages_rules_engine_src_rules_engine_evaluaterulessync", + "target": "packages_rules_engine_src_rules_engine_now", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "packages/rules-engine/src/rules-engine.ts", + "source_location": "L42", + "weight": 1.0, + "source": "packages_rules_engine_src_rules_engine_evaluaterulessync", + "target": "packages_rules_engine_src_score_calculator_applycapabilitycompatcap" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "packages/rules-engine/src/rules-engine.ts", + "source_location": "L43", + "weight": 1.0, + "source": "packages_rules_engine_src_rules_engine_evaluaterulessync", + "target": "packages_rules_engine_src_score_calculator_calculatescore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/rules-engine.ts", + "source_location": "L79", + "weight": 1.0, + "source": "packages_rules_engine_src_rules_engine_evaluatehardconflict", + "target": "packages_rules_engine_src_rules_engine_hastool", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/rules-engine.ts", + "source_location": "L98", + "weight": 1.0, + "source": "packages_rules_engine_src_rules_engine_evaluaterequirestool", + "target": "packages_rules_engine_src_rules_engine_hastool", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/rules-engine.ts", + "source_location": "L118", + "weight": 1.0, + "source": "packages_rules_engine_src_rules_engine_evaluatesynergy", + "target": "packages_rules_engine_src_rules_engine_hastool", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/rules-engine.ts", + "source_location": "L137", + "weight": 1.0, + "source": "packages_rules_engine_src_rules_engine_evaluatecapabilitycompat", + "target": "packages_rules_engine_src_rules_engine_hastool", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/score-calculator.ts", + "source_location": "L27", + "weight": 1.0, + "source": "packages_rules_engine_src_score_calculator", + "target": "packages_rules_engine_src_score_calculator_applycapabilitycompatcap", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/score-calculator.ts", + "source_location": "L3", + "weight": 1.0, + "source": "packages_rules_engine_src_score_calculator", + "target": "packages_rules_engine_src_score_calculator_calculatescore", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/score-calculator.ts", + "source_location": "L49", + "weight": 1.0, + "source": "packages_rules_engine_src_score_calculator", + "target": "packages_rules_engine_src_score_calculator_validatescorebreakdown", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/score-calculator.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_rules_engine_src_score_calculator", + "target": "packages_schemas_src_domain_diagnostic", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/score-calculator.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_rules_engine_src_score_calculator", + "target": "packages_schemas_src_domain_scorebreakdown", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/src/score-calculator.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_rules_engine_src_score_calculator", + "target": "packages_schemas_src_index", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/tsconfig.json", + "source_location": "L3", + "weight": 1.0, + "source": "packages_rules_engine_tsconfig", + "target": "packages_rules_engine_tsconfig_compileroptions", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/tsconfig.json", + "source_location": "L2", + "weight": 1.0, + "source": "packages_rules_engine_tsconfig", + "target": "packages_rules_engine_tsconfig_extends", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/tsconfig.json", + "source_location": "L7", + "weight": 1.0, + "source": "packages_rules_engine_tsconfig", + "target": "packages_rules_engine_tsconfig_include", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/tsconfig.json", + "source_location": "L4", + "weight": 1.0, + "source": "packages_rules_engine_tsconfig_compileroptions", + "target": "packages_rules_engine_tsconfig_compileroptions_outdir", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/rules-engine/tsconfig.json", + "source_location": "L5", + "weight": 1.0, + "source": "packages_rules_engine_tsconfig_compileroptions", + "target": "packages_rules_engine_tsconfig_compileroptions_rootdir", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/package.json", + "source_location": "L17", + "weight": 1.0, + "source": "packages_schemas_package", + "target": "packages_schemas_package_dependencies", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/package.json", + "source_location": "L22", + "weight": 1.0, + "source": "packages_schemas_package", + "target": "packages_schemas_package_devdependencies", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/package.json", + "source_location": "L8", + "weight": 1.0, + "source": "packages_schemas_package", + "target": "packages_schemas_package_exports", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/package.json", + "source_location": "L6", + "weight": 1.0, + "source": "packages_schemas_package", + "target": "packages_schemas_package_main", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/package.json", + "source_location": "L2", + "weight": 1.0, + "source": "packages_schemas_package", + "target": "packages_schemas_package_name", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/package.json", + "source_location": "L4", + "weight": 1.0, + "source": "packages_schemas_package", + "target": "packages_schemas_package_private", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/package.json", + "source_location": "L12", + "weight": 1.0, + "source": "packages_schemas_package", + "target": "packages_schemas_package_scripts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/package.json", + "source_location": "L5", + "weight": 1.0, + "source": "packages_schemas_package", + "target": "packages_schemas_package_type", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/package.json", + "source_location": "L7", + "weight": 1.0, + "source": "packages_schemas_package", + "target": "packages_schemas_package_types", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/package.json", + "source_location": "L3", + "weight": 1.0, + "source": "packages_schemas_package", + "target": "packages_schemas_package_version", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/package.json", + "source_location": "L10", + "weight": 1.0, + "source": "packages_schemas_package_exports", + "target": "packages_schemas_package_exports_db", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/package.json", + "source_location": "L13", + "weight": 1.0, + "source": "packages_schemas_package_scripts", + "target": "packages_schemas_package_scripts_build", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/package.json", + "source_location": "L15", + "weight": 1.0, + "source": "packages_schemas_package_scripts", + "target": "packages_schemas_package_scripts_lint", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/package.json", + "source_location": "L14", + "weight": 1.0, + "source": "packages_schemas_package_scripts", + "target": "packages_schemas_package_scripts_type_check", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/package.json", + "source_location": "L18", + "weight": 1.0, + "source": "packages_schemas_package_dependencies", + "target": "packages_schemas_package_dependencies_drizzle_orm", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/package.json", + "source_location": "L19", + "weight": 1.0, + "source": "packages_schemas_package_dependencies", + "target": "packages_schemas_package_dependencies_drizzle_zod", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/package.json", + "source_location": "L20", + "weight": 1.0, + "source": "packages_schemas_package_dependencies", + "target": "packages_schemas_package_dependencies_zod", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/package.json", + "source_location": "L23", + "weight": 1.0, + "source": "packages_schemas_package_devdependencies", + "target": "packages_schemas_package_devdependencies_types_node", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/package.json", + "source_location": "L24", + "weight": 1.0, + "source": "packages_schemas_package_devdependencies", + "target": "packages_schemas_package_devdependencies_typescript", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L41", + "weight": 1.0, + "source": "packages_schemas_src_db", + "target": "packages_schemas_src_db_account", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L107", + "weight": 1.0, + "source": "packages_schemas_src_db", + "target": "packages_schemas_src_db_compatibilities", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L191", + "weight": 1.0, + "source": "packages_schemas_src_db", + "target": "packages_schemas_src_db_compatibilitiesrelations", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L232", + "weight": 1.0, + "source": "packages_schemas_src_db", + "target": "packages_schemas_src_db_compatibilitymatrix", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L214", + "weight": 1.0, + "source": "packages_schemas_src_db", + "target": "packages_schemas_src_db_compatibilityrecord", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L222", + "weight": 1.0, + "source": "packages_schemas_src_db", + "target": "packages_schemas_src_db_insertcompatibility", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L206", + "weight": 1.0, + "source": "packages_schemas_src_db", + "target": "packages_schemas_src_db_insertcompatibilityschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L225", + "weight": 1.0, + "source": "packages_schemas_src_db", + "target": "packages_schemas_src_db_insertmigrationpath", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L209", + "weight": 1.0, + "source": "packages_schemas_src_db", + "target": "packages_schemas_src_db_insertmigrationpathschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L224", + "weight": 1.0, + "source": "packages_schemas_src_db", + "target": "packages_schemas_src_db_insertstackrule", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L208", + "weight": 1.0, + "source": "packages_schemas_src_db", + "target": "packages_schemas_src_db_insertstackruleschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L223", + "weight": 1.0, + "source": "packages_schemas_src_db", + "target": "packages_schemas_src_db_insertstacktemplate", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L207", + "weight": 1.0, + "source": "packages_schemas_src_db", + "target": "packages_schemas_src_db_insertstacktemplateschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L221", + "weight": 1.0, + "source": "packages_schemas_src_db", + "target": "packages_schemas_src_db_inserttool", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L220", + "weight": 1.0, + "source": "packages_schemas_src_db", + "target": "packages_schemas_src_db_inserttoolcategory", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L226", + "weight": 1.0, + "source": "packages_schemas_src_db", + "target": "packages_schemas_src_db_inserttoolcategoryjunction", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L210", + "weight": 1.0, + "source": "packages_schemas_src_db", + "target": "packages_schemas_src_db_inserttoolcategoryjunctionschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L204", + "weight": 1.0, + "source": "packages_schemas_src_db", + "target": "packages_schemas_src_db_inserttoolcategoryschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L205", + "weight": 1.0, + "source": "packages_schemas_src_db", + "target": "packages_schemas_src_db_inserttoolschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L217", + "weight": 1.0, + "source": "packages_schemas_src_db", + "target": "packages_schemas_src_db_migrationpathrecord", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L154", + "weight": 1.0, + "source": "packages_schemas_src_db", + "target": "packages_schemas_src_db_migrationpaths", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L24", + "weight": 1.0, + "source": "packages_schemas_src_db", + "target": "packages_schemas_src_db_session", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L216", + "weight": 1.0, + "source": "packages_schemas_src_db", + "target": "packages_schemas_src_db_stackrulerecord", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L143", + "weight": 1.0, + "source": "packages_schemas_src_db", + "target": "packages_schemas_src_db_stackrules", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L215", + "weight": 1.0, + "source": "packages_schemas_src_db", + "target": "packages_schemas_src_db_stacktemplaterecord", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L120", + "weight": 1.0, + "source": "packages_schemas_src_db", + "target": "packages_schemas_src_db_stacktemplates", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L80", + "weight": 1.0, + "source": "packages_schemas_src_db", + "target": "packages_schemas_src_db_toolcategories", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L165", + "weight": 1.0, + "source": "packages_schemas_src_db", + "target": "packages_schemas_src_db_toolcategoriesrelations", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L136", + "weight": 1.0, + "source": "packages_schemas_src_db", + "target": "packages_schemas_src_db_toolcategoryjunction", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L218", + "weight": 1.0, + "source": "packages_schemas_src_db", + "target": "packages_schemas_src_db_toolcategoryjunctionrecord", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L180", + "weight": 1.0, + "source": "packages_schemas_src_db", + "target": "packages_schemas_src_db_toolcategoryjunctionrelations", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L212", + "weight": 1.0, + "source": "packages_schemas_src_db", + "target": "packages_schemas_src_db_toolcategoryrecord", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L213", + "weight": 1.0, + "source": "packages_schemas_src_db", + "target": "packages_schemas_src_db_toolrecord", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L87", + "weight": 1.0, + "source": "packages_schemas_src_db", + "target": "packages_schemas_src_db_tools", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L170", + "weight": 1.0, + "source": "packages_schemas_src_db", + "target": "packages_schemas_src_db_toolsrelations", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L228", + "weight": 1.0, + "source": "packages_schemas_src_db", + "target": "packages_schemas_src_db_toolwithcategory", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L14", + "weight": 1.0, + "source": "packages_schemas_src_db", + "target": "packages_schemas_src_db_user", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/db.ts", + "source_location": "L63", + "weight": 1.0, + "source": "packages_schemas_src_db", + "target": "packages_schemas_src_db_verification", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "export", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/index.ts", + "source_location": "L1", + "weight": 1.0, + "source": "packages_schemas_src_index", + "target": "packages_schemas_src_db", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L321", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_appliedrecipe", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L315", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_appliedrecipeschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L103", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_baseruleschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L406", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_blueprintalternative", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L399", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_blueprintalternativeschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L458", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_blueprintcostestimate", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L452", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_blueprintcostestimateschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L397", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_blueprintrequest", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L379", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_blueprintrequestschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L419", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_blueprintresponse", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L408", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_blueprintresponseschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L167", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_capabilitycompatrule", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L139", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_capabilitycompatruleschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L35", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_cardinality", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L28", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_cardinalityschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L244", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_catalog", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L233", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_catalogmanifest", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L222", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_catalogmanifestschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L235", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_catalogschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L47", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_category", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L168", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_categorycoveragerule", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L147", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_categorycoverageruleschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L26", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_categoryid", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L3", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_categoryidschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L37", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_categoryschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L428", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_compatibilityresponse", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L421", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_compatibilityresponseschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L202", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_diagnostic", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L179", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_diagnosticcategory", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L173", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_diagnosticcategoryschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L188", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_diagnosticcta", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L181", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_diagnosticctaschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L171", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_diagnosticlevel", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L170", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_diagnosticlevelschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L190", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_diagnosticschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L488", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_enhancedalternative", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L479", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_enhancedalternativeschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L509", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_enhancedblueprintresponse", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L490", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_enhancedblueprintresponseschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L274", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_envtarget", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L269", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_envtargetschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L220", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_evaluationresult", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L213", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_evaluationresultschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L360", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_exportdata", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L353", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_exportdataschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L351", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_exportfile", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L346", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_exportfileschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L313", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_exportformat", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L312", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_exportformatschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L336", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_exportlog", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L330", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_exportlogschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L344", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_exportmetadata", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L338", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_exportmetadataschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L297", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_exportrecipe", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L305", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_exportrecipemetadataschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L267", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_filetarget", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L261", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_filetargetschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L164", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_hardconflictrule", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L115", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_hardconflictruleschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L471", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_implementationroadmap", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L467", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_implementationroadmapschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L247", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_mergestrategy", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L246", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_mergestrategyschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L437", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_migrationresponse", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L430", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_migrationresponseschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L163", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_mutualexclusivecategoryrule", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L109", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_mutualexclusivecategoryruleschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L257", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_packagejsontarget", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L249", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_packagejsontargetschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L50", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_pricingmodel", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L49", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_pricingmodelschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L282", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_readmeconfig", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L276", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_readmeconfigschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L293", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_recipetargets", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L284", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_recipetargetsschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L165", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_requirestoolrule", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L123", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_requirestoolruleschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L465", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_roadmapphase", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L460", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_roadmapphaseschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L162", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_rule", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L153", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_ruleschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L390", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_scaffoldrequest", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L374", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_scaffoldrequestschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L395", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_scaffoldresponse", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L392", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_scaffoldresponseschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L211", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_scorebreakdown", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L204", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_scorebreakdownschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L328", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_skippedrecipe", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L323", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_skippedrecipeschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L388", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_stackanalyzerequest", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L362", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_stackanalyzerequestschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L389", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_stackanalyzeresponse", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L366", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_stackanalyzeresponseschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L166", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_synergyrule", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L131", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_synergyruleschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L100", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_tool", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L450", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_toolcostestimate", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L443", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_toolcostestimateschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L101", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_toolid", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L59", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_toolpricing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L52", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_toolpricingschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L66", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_toolrequirements", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L61", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_toolrequirementsschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L76", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_toolschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L74", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_toolsupports", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L68", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_toolsupportsschema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L477", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_whynotexplanation", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/domain.ts", + "source_location": "L473", + "weight": 1.0, + "source": "packages_schemas_src_domain", + "target": "packages_schemas_src_domain_whynotexplanationschema", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "export", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/src/index.ts", + "source_location": "L2", + "weight": 1.0, + "source": "packages_schemas_src_index", + "target": "packages_schemas_src_domain", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/tsconfig.json", + "source_location": "L3", + "weight": 1.0, + "source": "packages_schemas_tsconfig", + "target": "packages_schemas_tsconfig_compileroptions", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/tsconfig.json", + "source_location": "L2", + "weight": 1.0, + "source": "packages_schemas_tsconfig", + "target": "packages_schemas_tsconfig_extends", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/tsconfig.json", + "source_location": "L7", + "weight": 1.0, + "source": "packages_schemas_tsconfig", + "target": "packages_schemas_tsconfig_include", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/tsconfig.json", + "source_location": "L4", + "weight": 1.0, + "source": "packages_schemas_tsconfig_compileroptions", + "target": "packages_schemas_tsconfig_compileroptions_outdir", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/schemas/tsconfig.json", + "source_location": "L5", + "weight": 1.0, + "source": "packages_schemas_tsconfig_compileroptions", + "target": "packages_schemas_tsconfig_compileroptions_rootdir", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/shared/package.json", + "source_location": "L13", + "weight": 1.0, + "source": "packages_shared_package", + "target": "packages_shared_package_devdependencies", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/shared/package.json", + "source_location": "L6", + "weight": 1.0, + "source": "packages_shared_package", + "target": "packages_shared_package_main", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/shared/package.json", + "source_location": "L2", + "weight": 1.0, + "source": "packages_shared_package", + "target": "packages_shared_package_name", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/shared/package.json", + "source_location": "L4", + "weight": 1.0, + "source": "packages_shared_package", + "target": "packages_shared_package_private", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/shared/package.json", + "source_location": "L8", + "weight": 1.0, + "source": "packages_shared_package", + "target": "packages_shared_package_scripts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/shared/package.json", + "source_location": "L5", + "weight": 1.0, + "source": "packages_shared_package", + "target": "packages_shared_package_type", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/shared/package.json", + "source_location": "L7", + "weight": 1.0, + "source": "packages_shared_package", + "target": "packages_shared_package_types", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/shared/package.json", + "source_location": "L3", + "weight": 1.0, + "source": "packages_shared_package", + "target": "packages_shared_package_version", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/shared/package.json", + "source_location": "L9", + "weight": 1.0, + "source": "packages_shared_package_scripts", + "target": "packages_shared_package_scripts_lint", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/shared/package.json", + "source_location": "L11", + "weight": 1.0, + "source": "packages_shared_package_scripts", + "target": "packages_shared_package_scripts_test", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/shared/package.json", + "source_location": "L10", + "weight": 1.0, + "source": "packages_shared_package_scripts", + "target": "packages_shared_package_scripts_type_check", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/shared/package.json", + "source_location": "L14", + "weight": 1.0, + "source": "packages_shared_package_devdependencies", + "target": "packages_shared_package_devdependencies_typescript", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/shared/tsconfig.json", + "source_location": "L3", + "weight": 1.0, + "source": "packages_shared_tsconfig", + "target": "packages_shared_tsconfig_compileroptions", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/shared/tsconfig.json", + "source_location": "L2", + "weight": 1.0, + "source": "packages_shared_tsconfig", + "target": "packages_shared_tsconfig_extends", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/shared/tsconfig.json", + "source_location": "L7", + "weight": 1.0, + "source": "packages_shared_tsconfig", + "target": "packages_shared_tsconfig_include", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/shared/tsconfig.json", + "source_location": "L4", + "weight": 1.0, + "source": "packages_shared_tsconfig_compileroptions", + "target": "packages_shared_tsconfig_compileroptions_outdir", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "packages/shared/tsconfig.json", + "source_location": "L5", + "weight": 1.0, + "source": "packages_shared_tsconfig_compileroptions", + "target": "packages_shared_tsconfig_compileroptions_rootdir", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "playwright.config.ts", + "source_location": "L4", + "weight": 1.0, + "source": "playwright_config", + "target": "playwright_config_apiport", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "playwright.config.ts", + "source_location": "L3", + "weight": 1.0, + "source": "playwright_config", + "target": "playwright_config_webport", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/migrate.ts", + "source_location": "L63", + "weight": 1.0, + "source": "scripts_deploy_migrate", + "target": "scripts_deploy_migrate_cliargs", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/migrate.ts", + "source_location": "L71", + "weight": 1.0, + "source": "scripts_deploy_migrate", + "target": "scripts_deploy_migrate_connectiontarget", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/migrate.ts", + "source_location": "L161", + "weight": 1.0, + "source": "scripts_deploy_migrate", + "target": "scripts_deploy_migrate_drizzlekitargs", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/migrate.ts", + "source_location": "L55", + "weight": 1.0, + "source": "scripts_deploy_migrate", + "target": "scripts_deploy_migrate_errorlog", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/migrate.ts", + "source_location": "L185", + "weight": 1.0, + "source": "scripts_deploy_migrate", + "target": "scripts_deploy_migrate_killtree", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/migrate.ts", + "source_location": "L51", + "weight": 1.0, + "source": "scripts_deploy_migrate", + "target": "scripts_deploy_migrate_log", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/migrate.ts", + "source_location": "L298", + "weight": 1.0, + "source": "scripts_deploy_migrate", + "target": "scripts_deploy_migrate_main", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/migrate.ts", + "source_location": "L67", + "weight": 1.0, + "source": "scripts_deploy_migrate", + "target": "scripts_deploy_migrate_parseargs", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/migrate.ts", + "source_location": "L102", + "weight": 1.0, + "source": "scripts_deploy_migrate", + "target": "scripts_deploy_migrate_probeonce", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/migrate.ts", + "source_location": "L49", + "weight": 1.0, + "source": "scripts_deploy_migrate", + "target": "scripts_deploy_migrate_repo_root", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/migrate.ts", + "source_location": "L80", + "weight": 1.0, + "source": "scripts_deploy_migrate", + "target": "scripts_deploy_migrate_resolvetarget", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/migrate.ts", + "source_location": "L201", + "weight": 1.0, + "source": "scripts_deploy_migrate", + "target": "scripts_deploy_migrate_runapply", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/migrate.ts", + "source_location": "L229", + "weight": 1.0, + "source": "scripts_deploy_migrate", + "target": "scripts_deploy_migrate_rundryrun", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/migrate.ts", + "source_location": "L59", + "weight": 1.0, + "source": "scripts_deploy_migrate", + "target": "scripts_deploy_migrate_sleep", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/migrate.ts", + "source_location": "L175", + "weight": 1.0, + "source": "scripts_deploy_migrate", + "target": "scripts_deploy_migrate_spawnpnpm", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/migrate.ts", + "source_location": "L126", + "weight": 1.0, + "source": "scripts_deploy_migrate", + "target": "scripts_deploy_migrate_waitforconnection", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/migrate.ts", + "source_location": "L319", + "weight": 1.0, + "source": "scripts_deploy_migrate_main", + "target": "scripts_deploy_migrate_log", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/migrate.ts", + "source_location": "L202", + "weight": 1.0, + "source": "scripts_deploy_migrate_runapply", + "target": "scripts_deploy_migrate_log", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/migrate.ts", + "source_location": "L230", + "weight": 1.0, + "source": "scripts_deploy_migrate_rundryrun", + "target": "scripts_deploy_migrate_log", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/migrate.ts", + "source_location": "L134", + "weight": 1.0, + "source": "scripts_deploy_migrate_waitforconnection", + "target": "scripts_deploy_migrate_log", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/migrate.ts", + "source_location": "L304", + "weight": 1.0, + "source": "scripts_deploy_migrate_main", + "target": "scripts_deploy_migrate_errorlog", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/migrate.ts", + "source_location": "L150", + "weight": 1.0, + "source": "scripts_deploy_migrate_waitforconnection", + "target": "scripts_deploy_migrate_sleep", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/migrate.ts", + "source_location": "L299", + "weight": 1.0, + "source": "scripts_deploy_migrate_main", + "target": "scripts_deploy_migrate_parseargs", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/migrate.ts", + "source_location": "L313", + "weight": 1.0, + "source": "scripts_deploy_migrate_main", + "target": "scripts_deploy_migrate_resolvetarget", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/migrate.ts", + "source_location": "L133", + "weight": 1.0, + "source": "scripts_deploy_migrate_waitforconnection", + "target": "scripts_deploy_migrate_probeonce", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/migrate.ts", + "source_location": "L323", + "weight": 1.0, + "source": "scripts_deploy_migrate_main", + "target": "scripts_deploy_migrate_waitforconnection", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/migrate.ts", + "source_location": "L329", + "weight": 1.0, + "source": "scripts_deploy_migrate_main", + "target": "scripts_deploy_migrate_runapply", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/migrate.ts", + "source_location": "L329", + "weight": 1.0, + "source": "scripts_deploy_migrate_main", + "target": "scripts_deploy_migrate_rundryrun", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L70", + "weight": 1.0, + "source": "scripts_deploy_smoke", + "target": "scripts_deploy_smoke_assertionresult", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L144", + "weight": 1.0, + "source": "scripts_deploy_smoke", + "target": "scripts_deploy_smoke_burst", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L228", + "weight": 1.0, + "source": "scripts_deploy_smoke", + "target": "scripts_deploy_smoke_checkadmin401", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L292", + "weight": 1.0, + "source": "scripts_deploy_smoke", + "target": "scripts_deploy_smoke_checkcorsevilorigin", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L254", + "weight": 1.0, + "source": "scripts_deploy_smoke", + "target": "scripts_deploy_smoke_checkcorssameorigin", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L164", + "weight": 1.0, + "source": "scripts_deploy_smoke", + "target": "scripts_deploy_smoke_checkgenerationburst", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L121", + "weight": 1.0, + "source": "scripts_deploy_smoke", + "target": "scripts_deploy_smoke_checkhealth", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L198", + "weight": 1.0, + "source": "scripts_deploy_smoke", + "target": "scripts_deploy_smoke_checkreadburst", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L65", + "weight": 1.0, + "source": "scripts_deploy_smoke", + "target": "scripts_deploy_smoke_cliargs", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L81", + "weight": 1.0, + "source": "scripts_deploy_smoke", + "target": "scripts_deploy_smoke_errorlog", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L77", + "weight": 1.0, + "source": "scripts_deploy_smoke", + "target": "scripts_deploy_smoke_log", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L333", + "weight": 1.0, + "source": "scripts_deploy_smoke", + "target": "scripts_deploy_smoke_main", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L85", + "weight": 1.0, + "source": "scripts_deploy_smoke", + "target": "scripts_deploy_smoke_parseargs", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L50", + "weight": 1.0, + "source": "scripts_deploy_smoke", + "target": "scripts_deploy_smoke_repo_root", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L105", + "weight": 1.0, + "source": "scripts_deploy_smoke", + "target": "scripts_deploy_smoke_timedfetch", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L325", + "weight": 1.0, + "source": "scripts_deploy_smoke", + "target": "scripts_deploy_smoke_writereport", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L338", + "weight": 1.0, + "source": "scripts_deploy_smoke_main", + "target": "scripts_deploy_smoke_log", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L382", + "weight": 1.0, + "source": "scripts_deploy_smoke_main", + "target": "scripts_deploy_smoke_errorlog", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L334", + "weight": 1.0, + "source": "scripts_deploy_smoke_main", + "target": "scripts_deploy_smoke_parseargs", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L231", + "weight": 1.0, + "source": "scripts_deploy_smoke_checkadmin401", + "target": "scripts_deploy_smoke_timedfetch", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L295", + "weight": 1.0, + "source": "scripts_deploy_smoke_checkcorsevilorigin", + "target": "scripts_deploy_smoke_timedfetch", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L257", + "weight": 1.0, + "source": "scripts_deploy_smoke_checkcorssameorigin", + "target": "scripts_deploy_smoke_timedfetch", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L124", + "weight": 1.0, + "source": "scripts_deploy_smoke_checkhealth", + "target": "scripts_deploy_smoke_timedfetch", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L343", + "weight": 1.0, + "source": "scripts_deploy_smoke_main", + "target": "scripts_deploy_smoke_checkhealth", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L167", + "weight": 1.0, + "source": "scripts_deploy_smoke_checkgenerationburst", + "target": "scripts_deploy_smoke_burst", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L201", + "weight": 1.0, + "source": "scripts_deploy_smoke_checkreadburst", + "target": "scripts_deploy_smoke_burst", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L350", + "weight": 1.0, + "source": "scripts_deploy_smoke_main", + "target": "scripts_deploy_smoke_checkgenerationburst", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L351", + "weight": 1.0, + "source": "scripts_deploy_smoke_main", + "target": "scripts_deploy_smoke_checkreadburst", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L352", + "weight": 1.0, + "source": "scripts_deploy_smoke_main", + "target": "scripts_deploy_smoke_checkadmin401", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L353", + "weight": 1.0, + "source": "scripts_deploy_smoke_main", + "target": "scripts_deploy_smoke_checkcorssameorigin", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L354", + "weight": 1.0, + "source": "scripts_deploy_smoke_main", + "target": "scripts_deploy_smoke_checkcorsevilorigin", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/deploy/smoke.ts", + "source_location": "L379", + "weight": 1.0, + "source": "scripts_deploy_smoke_main", + "target": "scripts_deploy_smoke_writereport", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/deploy-admin-401.spec.ts", + "source_location": "L30", + "weight": 1.0, + "source": "tests_e2e_deploy_admin_401_spec", + "target": "tests_e2e_deploy_admin_401_spec_admin_paths", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/deploy-admin-401.spec.ts", + "source_location": "L25", + "weight": 1.0, + "source": "tests_e2e_deploy_admin_401_spec", + "target": "tests_e2e_deploy_admin_401_spec_api_origin", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/deploy-cross-origin-auth.spec.ts", + "source_location": "L36", + "weight": 1.0, + "source": "tests_e2e_deploy_cross_origin_auth_spec", + "target": "tests_e2e_deploy_cross_origin_auth_spec_api_origin", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/deploy-health.spec.ts", + "source_location": "L23", + "weight": 1.0, + "source": "tests_e2e_deploy_health_spec", + "target": "tests_e2e_deploy_health_spec_api_origin", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/deploy-rate-limit.spec.ts", + "source_location": "L33", + "weight": 1.0, + "source": "tests_e2e_deploy_rate_limit_spec", + "target": "tests_e2e_deploy_rate_limit_spec_freshclientip", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/deploy-rate-limit.spec.ts", + "source_location": "L38", + "weight": 1.0, + "source": "tests_e2e_deploy_rate_limit_spec", + "target": "tests_e2e_deploy_rate_limit_spec_laststatusofburst", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.base.json", + "source_location": "L2", + "weight": 1.0, + "source": "tsconfig_base", + "target": "tsconfig_base_compileroptions", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.base.json", + "source_location": "L7", + "weight": 1.0, + "source": "tsconfig_base_compileroptions", + "target": "tsconfig_base_compileroptions_esmoduleinterop", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.base.json", + "source_location": "L9", + "weight": 1.0, + "source": "tsconfig_base_compileroptions", + "target": "tsconfig_base_compileroptions_forceconsistentcasinginfilenames", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.base.json", + "source_location": "L11", + "weight": 1.0, + "source": "tsconfig_base_compileroptions", + "target": "tsconfig_base_compileroptions_isolatedmodules", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.base.json", + "source_location": "L4", + "weight": 1.0, + "source": "tsconfig_base_compileroptions", + "target": "tsconfig_base_compileroptions_module", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.base.json", + "source_location": "L5", + "weight": 1.0, + "source": "tsconfig_base_compileroptions", + "target": "tsconfig_base_compileroptions_moduleresolution", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.base.json", + "source_location": "L10", + "weight": 1.0, + "source": "tsconfig_base_compileroptions", + "target": "tsconfig_base_compileroptions_resolvejsonmodule", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.base.json", + "source_location": "L8", + "weight": 1.0, + "source": "tsconfig_base_compileroptions", + "target": "tsconfig_base_compileroptions_skiplibcheck", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.base.json", + "source_location": "L6", + "weight": 1.0, + "source": "tsconfig_base_compileroptions", + "target": "tsconfig_base_compileroptions_strict", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.base.json", + "source_location": "L3", + "weight": 1.0, + "source": "tsconfig_base_compileroptions", + "target": "tsconfig_base_compileroptions_target", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "Agents.md", + "source_location": null, + "weight": 1.0, + "source": "agents_agent_workflow_specification", + "target": "agents_orchestrator" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "Agents.md", + "source_location": null, + "weight": 1.0, + "source": "agents_orchestrator", + "target": "agents_handoff_protocol" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "Agents.md", + "source_location": null, + "weight": 1.0, + "source": "agents_orchestrator", + "target": "agents_phase_gate_criteria" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "Agents.md", + "source_location": null, + "weight": 1.0, + "source": "agents_cleanup_agent", + "target": "roadmap_phase_0_cleanup" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "Agents.md", + "source_location": null, + "weight": 1.0, + "source": "agents_architect_agent", + "target": "agents_package_dependency_graph" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "Agents.md", + "source_location": null, + "weight": 1.0, + "source": "agents_architect_agent", + "target": "roadmap_phase_1_monorepo_scaffold" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "Agents.md", + "source_location": null, + "weight": 1.0, + "source": "agents_engine_agent", + "target": "readme_packages_registry" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "Agents.md", + "source_location": null, + "weight": 1.0, + "source": "agents_engine_agent", + "target": "readme_packages_rules_engine" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "Agents.md", + "source_location": null, + "weight": 1.0, + "source": "agents_engine_agent", + "target": "readme_packages_schemas" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "Agents.md", + "source_location": null, + "weight": 1.0, + "source": "agents_engine_agent", + "target": "roadmap_phase_2_core_engine" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "Agents.md", + "source_location": null, + "weight": 1.0, + "source": "agents_api_agent", + "target": "readme_api_surface" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "Agents.md", + "source_location": null, + "weight": 1.0, + "source": "agents_api_agent", + "target": "roadmap_phase_3_api_surface" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "Agents.md", + "source_location": null, + "weight": 1.0, + "source": "agents_ui_agent", + "target": "readme_packages_exporter" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "Agents.md", + "source_location": null, + "weight": 1.0, + "source": "agents_ui_agent", + "target": "roadmap_phase_4_ui_rebuild" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "Agents.md", + "source_location": null, + "weight": 1.0, + "source": "agents_qa_agent", + "target": "roadmap_phase_7_quality_gate" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "Agents.md", + "source_location": null, + "weight": 1.0, + "source": "agents_qa_agent", + "target": "roadmap_phase_8_deployment_operations" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "Agents.md", + "source_location": null, + "weight": 1.0, + "source": "agents_qa_agent", + "target": "roadmap_phase_9_mvp_ship" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "pnpm-workspace.yaml", + "source_location": null, + "weight": 1.0, + "source": "pnpm_workspace_pnpm_workspaces", + "target": "pnpm_workspace_apps_workspace" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "pnpm-workspace.yaml", + "source_location": null, + "weight": 1.0, + "source": "pnpm_workspace_pnpm_workspaces", + "target": "pnpm_workspace_packages_workspace" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "ROADMAP.md", + "source_location": null, + "weight": 1.0, + "source": "roadmap_phase_1_monorepo_scaffold", + "target": "pnpm_workspace_pnpm_workspaces" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "Stackfast2026 implementation plan.md", + "source_location": null, + "weight": 1.0, + "source": "stackfast2026_implementation_plan_target_architecture", + "target": "pnpm_workspace_pnpm_workspaces" + }, + { + "relation": "references", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "pnpm-workspace.yaml", + "source_location": null, + "weight": 1.0, + "source": "pnpm_workspace_apps_workspace", + "target": "readme_apps_api" + }, + { + "relation": "references", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "pnpm-workspace.yaml", + "source_location": null, + "weight": 1.0, + "source": "pnpm_workspace_apps_workspace", + "target": "readme_apps_web" + }, + { + "relation": "references", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "pnpm-workspace.yaml", + "source_location": null, + "weight": 1.0, + "source": "pnpm_workspace_packages_workspace", + "target": "readme_packages_registry" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "readme.md", + "source_location": null, + "weight": 1.0, + "source": "readme_stackfast_2026", + "target": "readme_api_surface" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "readme.md", + "source_location": null, + "weight": 1.0, + "source": "readme_stackfast_2026", + "target": "readme_monorepo_architecture" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "readme.md", + "source_location": null, + "weight": 1.0, + "source": "readme_stackfast_2026", + "target": "readme_quality_gate" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "readme.md", + "source_location": null, + "weight": 1.0, + "source": "readme_monorepo_architecture", + "target": "readme_apps_api" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "readme.md", + "source_location": null, + "weight": 1.0, + "source": "readme_monorepo_architecture", + "target": "readme_apps_web" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "readme.md", + "source_location": null, + "weight": 1.0, + "source": "readme_monorepo_architecture", + "target": "readme_packages_ai" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "readme.md", + "source_location": null, + "weight": 1.0, + "source": "readme_monorepo_architecture", + "target": "readme_packages_exporter" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "readme.md", + "source_location": null, + "weight": 1.0, + "source": "readme_monorepo_architecture", + "target": "readme_packages_registry" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "readme.md", + "source_location": null, + "weight": 1.0, + "source": "readme_monorepo_architecture", + "target": "readme_packages_rules_engine" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "readme.md", + "source_location": null, + "weight": 1.0, + "source": "readme_monorepo_architecture", + "target": "readme_packages_schemas" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "readme.md", + "source_location": null, + "weight": 1.0, + "source": "readme_monorepo_architecture", + "target": "readme_packages_shared" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "SALVAGE_MANIFEST.md", + "source_location": null, + "weight": 1.0, + "source": "salvage_manifest_root_app_salvage", + "target": "readme_apps_api" + }, + { + "relation": "implements", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "apps/web/index.html", + "source_location": null, + "weight": 1.0, + "source": "apps_web_index_stackfast_web_entry", + "target": "readme_apps_web" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "SALVAGE_MANIFEST.md", + "source_location": null, + "weight": 1.0, + "source": "salvage_manifest_file_mapping", + "target": "readme_apps_web" + }, + { + "relation": "conceptually_related_to", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "docs/decisions/002-ai-provider-strategy.md", + "source_location": null, + "weight": 1.0, + "source": "docs_decisions_002_ai_provider_strategy_ai_provider_strategy", + "target": "readme_packages_ai" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "ROADMAP.md", + "source_location": null, + "weight": 1.0, + "source": "roadmap_phase_2_core_engine", + "target": "readme_packages_exporter" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "SALVAGE_MANIFEST.md", + "source_location": null, + "weight": 1.0, + "source": "salvage_manifest_file_mapping", + "target": "readme_packages_exporter" + }, + { + "relation": "conceptually_related_to", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "Stackfast2026.md", + "source_location": null, + "weight": 1.0, + "source": "stackfast2026_recipe_based_scaffolding", + "target": "readme_packages_exporter" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "ROADMAP.md", + "source_location": null, + "weight": 1.0, + "source": "roadmap_phase_2_core_engine", + "target": "readme_packages_registry" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "SALVAGE_MANIFEST.md", + "source_location": null, + "weight": 1.0, + "source": "salvage_manifest_file_mapping", + "target": "readme_packages_registry" + }, + { + "relation": "conceptually_related_to", + "confidence": "INFERRED", + "confidence_score": 0.75, + "source_file": "docs/backlog/INTEGRATION_PLAN.md", + "source_location": null, + "weight": 1.0, + "source": "docs_backlog_integration_plan_compatibility_aware_search", + "target": "readme_packages_rules_engine" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "ROADMAP.md", + "source_location": null, + "weight": 1.0, + "source": "roadmap_phase_2_core_engine", + "target": "readme_packages_rules_engine" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "SALVAGE_MANIFEST.md", + "source_location": null, + "weight": 1.0, + "source": "salvage_manifest_file_mapping", + "target": "readme_packages_rules_engine" + }, + { + "relation": "conceptually_related_to", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "Stackfast2026.md", + "source_location": null, + "weight": 1.0, + "source": "stackfast2026_compatibility_and_migration_graph", + "target": "readme_packages_rules_engine" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "SALVAGE_MANIFEST.md", + "source_location": null, + "weight": 1.0, + "source": "salvage_manifest_file_mapping", + "target": "readme_packages_schemas" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "Stackfast2026 implementation plan.md", + "source_location": null, + "weight": 1.0, + "source": "stackfast2026_implementation_plan_tech_stack", + "target": "readme_packages_schemas" + }, + { + "relation": "semantically_similar_to", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "docs/backlog/INTEGRATION_PLAN.md", + "source_location": null, + "weight": 1.0, + "source": "docs_backlog_integration_plan_unified_endpoints", + "target": "readme_api_surface" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "ROADMAP.md", + "source_location": null, + "weight": 1.0, + "source": "roadmap_phase_3_api_surface", + "target": "readme_api_surface" + }, + { + "relation": "semantically_similar_to", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "Stackfast2026 implementation plan.md", + "source_location": null, + "weight": 1.0, + "source": "stackfast2026_implementation_plan_canonical_api", + "target": "readme_api_surface" + }, + { + "relation": "implements", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": ".github/workflows/ci.yml", + "source_location": null, + "weight": 1.0, + "source": "github_workflows_ci_ci_pipeline", + "target": "readme_quality_gate" + }, + { + "relation": "semantically_similar_to", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "Stackfast2026 implementation plan.md", + "source_location": null, + "weight": 1.0, + "source": "stackfast2026_implementation_plan_verification_plan", + "target": "readme_quality_gate" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/decisions/003-deployment-architecture.md", + "source_location": null, + "weight": 1.0, + "source": "docs_decisions_003_deployment_architecture_split_railway_services", + "target": "readme_production_deployment" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".kiro/specs/phase-8-deployment/tasks.md", + "source_location": null, + "weight": 1.0, + "source": "kiro_specs_phase_8_deployment_tasks_batch_e_env_readme", + "target": "readme_production_deployment" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "readme.md", + "source_location": null, + "weight": 1.0, + "source": "readme_production_deployment", + "target": "docs_decisions_001_authentication_strategy_authentication_strategy" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "readme.md", + "source_location": null, + "weight": 1.0, + "source": "readme_production_deployment", + "target": "docs_decisions_002_ai_provider_strategy_ai_provider_strategy" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "readme.md", + "source_location": null, + "weight": 1.0, + "source": "readme_production_deployment", + "target": "docs_decisions_003_deployment_architecture_deployment_architecture" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "readme.md", + "source_location": null, + "weight": 1.0, + "source": "readme_production_deployment", + "target": "readme_cross_origin_production_auth" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "readme.md", + "source_location": null, + "weight": 1.0, + "source": "readme_production_deployment", + "target": "readme_production_env_vars" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "readme.md", + "source_location": null, + "weight": 1.0, + "source": "readme_production_deployment", + "target": "readme_stackfast_api_service" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "readme.md", + "source_location": null, + "weight": 1.0, + "source": "readme_production_deployment", + "target": "readme_stackfast_web_service" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "readme.md", + "source_location": null, + "weight": 1.0, + "source": "readme_production_deployment", + "target": "scripts_deploy_rollback_rollback_runbook" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/backlog/INTEGRATION_PLAN.md", + "source_location": null, + "weight": 1.0, + "source": "docs_backlog_integration_plan_historical_integration_plan", + "target": "roadmap_product_vision" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "ROADMAP.md", + "source_location": null, + "weight": 1.0, + "source": "roadmap_product_vision", + "target": "roadmap_success_metrics" + }, + { + "relation": "semantically_similar_to", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "ROADMAP.md", + "source_location": null, + "weight": 1.0, + "source": "roadmap_product_vision", + "target": "stackfast2026_explainable_stack_intelligence_platform" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "ROADMAP.md", + "source_location": null, + "weight": 1.0, + "source": "roadmap_phase_0_cleanup", + "target": "salvage_manifest_salvage_manifest" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "ROADMAP.md", + "source_location": null, + "weight": 1.0, + "source": "roadmap_phase_5_blueprint_ai", + "target": "docs_decisions_002_ai_provider_strategy_ai_provider_strategy" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "ROADMAP.md", + "source_location": null, + "weight": 1.0, + "source": "roadmap_phase_7_quality_gate", + "target": "github_workflows_ci_ci_pipeline" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".kiro/specs/phase-8-deployment/tasks.md", + "source_location": null, + "weight": 1.0, + "source": "kiro_specs_phase_8_deployment_tasks_batch_i_post_deploy_cleanup", + "target": "roadmap_phase_8_deployment_operations" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "ROADMAP.md", + "source_location": null, + "weight": 1.0, + "source": "roadmap_phase_8_deployment_operations", + "target": "docs_decisions_003_deployment_architecture_deployment_architecture" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "SALVAGE_MANIFEST.md", + "source_location": null, + "weight": 1.0, + "source": "salvage_manifest_salvage_manifest", + "target": "salvage_manifest_file_mapping" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "SALVAGE_MANIFEST.md", + "source_location": null, + "weight": 1.0, + "source": "salvage_manifest_salvage_manifest", + "target": "salvage_manifest_root_app_salvage" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "SALVAGE_MANIFEST.md", + "source_location": null, + "weight": 1.0, + "source": "salvage_manifest_salvage_manifest", + "target": "salvage_manifest_stackfastpro_primary_base" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "SALVAGE_MANIFEST.md", + "source_location": null, + "weight": 1.0, + "source": "salvage_manifest_salvage_manifest", + "target": "salvage_manifest_webailyzer_deferred" + }, + { + "relation": "semantically_similar_to", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "Stackfast2026.md", + "source_location": null, + "weight": 1.0, + "source": "stackfast2026_stackfastpro_candidate", + "target": "salvage_manifest_stackfastpro_primary_base" + }, + { + "relation": "semantically_similar_to", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "Stackfast2026.md", + "source_location": null, + "weight": 1.0, + "source": "stackfast2026_root_app_candidate", + "target": "salvage_manifest_root_app_salvage" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "SALVAGE_MANIFEST.md", + "source_location": null, + "weight": 1.0, + "source": "salvage_manifest_webailyzer_deferred", + "target": "docs_deferred_webailyzer_webailyzer_deferred" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "SALVAGE_MANIFEST.md", + "source_location": null, + "weight": 1.0, + "source": "salvage_manifest_post_extraction_cleanup", + "target": "docs_deferred_webailyzer_orphaned_submodule_gitlink" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "Stackfast2026 implementation plan.md", + "source_location": null, + "weight": 1.0, + "source": "stackfast2026_implementation_plan_rebuild_plan", + "target": "stackfast2026_codebase_revival_audit" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "Stackfast2026 implementation plan.md", + "source_location": null, + "weight": 1.0, + "source": "stackfast2026_implementation_plan_rebuild_plan", + "target": "stackfast2026_implementation_plan_target_architecture" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "Stackfast2026 implementation plan.md", + "source_location": null, + "weight": 1.0, + "source": "stackfast2026_implementation_plan_reset_dont_rescue", + "target": "stackfast2026_implementation_plan_rebuild_plan" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "Stackfast2026 implementation plan.md", + "source_location": null, + "weight": 1.0, + "source": "stackfast2026_implementation_plan_tech_stack", + "target": "agents_skills_neon_postgres_skill_neon_serverless_postgres" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "Stackfast2026 implementation plan.md", + "source_location": null, + "weight": 1.0, + "source": "stackfast2026_implementation_plan_tech_stack", + "target": "docs_decisions_001_authentication_strategy_better_auth" + }, + { + "relation": "semantically_similar_to", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "Stackfast2026 implementation plan.md", + "source_location": null, + "weight": 1.0, + "source": "stackfast2026_implementation_plan_canonical_api", + "target": "docs_backlog_integration_plan_unified_endpoints" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "Stackfast2026 implementation plan.md", + "source_location": null, + "weight": 1.0, + "source": "stackfast2026_implementation_plan_blueprint_output_shape", + "target": "docs_decisions_002_ai_provider_strategy_zod_validation" + }, + { + "relation": "rationale_for", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "Stackfast2026 implementation plan.md", + "source_location": null, + "weight": 1.0, + "source": "stackfast2026_implementation_plan_admin_only_mutations", + "target": "stackfast2026_public_mutation_routes_risk" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "Stackfast2026.md", + "source_location": null, + "weight": 1.0, + "source": "stackfast2026_codebase_revival_audit", + "target": "stackfast2026_explainable_stack_intelligence_platform" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "Stackfast2026.md", + "source_location": null, + "weight": 1.0, + "source": "stackfast2026_codebase_revival_audit", + "target": "stackfast2026_public_mutation_routes_risk" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "Stackfast2026.md", + "source_location": null, + "weight": 1.0, + "source": "stackfast2026_codebase_revival_audit", + "target": "stackfast2026_root_app_candidate" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "Stackfast2026.md", + "source_location": null, + "weight": 1.0, + "source": "stackfast2026_codebase_revival_audit", + "target": "stackfast2026_stackfast_101_candidate" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "Stackfast2026.md", + "source_location": null, + "weight": 1.0, + "source": "stackfast2026_codebase_revival_audit", + "target": "stackfast2026_stackfastpro_candidate" + }, + { + "relation": "semantically_similar_to", + "confidence": "INFERRED", + "confidence_score": 0.75, + "source_file": "docs/deferred/webailyzer.md", + "source_location": null, + "weight": 1.0, + "source": "docs_deferred_webailyzer_ssrf_hardening", + "target": "stackfast2026_public_mutation_routes_risk" + }, + { + "relation": "rationale_for", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "Stackfast2026.md", + "source_location": null, + "weight": 1.0, + "source": "stackfast2026_public_mutation_routes_risk", + "target": "docs_decisions_001_authentication_strategy_admin_api_key" + }, + { + "relation": "semantically_similar_to", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "Stackfast2026.md", + "source_location": null, + "weight": 1.0, + "source": "stackfast2026_compatibility_and_migration_graph", + "target": "docs_backlog_integration_plan_migration_paths" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".agents/skills/neon-postgres/SKILL.md", + "source_location": null, + "weight": 1.0, + "source": "agents_skills_neon_postgres_skill_neon_serverless_postgres", + "target": "agents_skills_neon_postgres_skill_branching" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".agents/skills/neon-postgres/SKILL.md", + "source_location": null, + "weight": 1.0, + "source": "agents_skills_neon_postgres_skill_neon_serverless_postgres", + "target": "agents_skills_neon_postgres_skill_connection_pooling" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".agents/skills/neon-postgres/SKILL.md", + "source_location": null, + "weight": 1.0, + "source": "agents_skills_neon_postgres_skill_neon_serverless_postgres", + "target": "agents_skills_neon_postgres_skill_docs_source_of_truth" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".agents/skills/neon-postgres/SKILL.md", + "source_location": null, + "weight": 1.0, + "source": "agents_skills_neon_postgres_skill_neon_serverless_postgres", + "target": "agents_skills_neon_postgres_skill_neon_auth" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".agents/skills/neon-postgres/SKILL.md", + "source_location": null, + "weight": 1.0, + "source": "agents_skills_neon_postgres_skill_neon_serverless_postgres", + "target": "agents_skills_neon_postgres_skill_scale_to_zero" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".agents/skills/neon-postgres/SKILL.md", + "source_location": null, + "weight": 1.0, + "source": "agents_skills_neon_postgres_skill_neon_serverless_postgres", + "target": "agents_skills_neon_postgres_skill_serverless_driver" + }, + { + "relation": "semantically_similar_to", + "confidence": "INFERRED", + "confidence_score": 0.75, + "source_file": ".agents/skills/neon-postgres/SKILL.md", + "source_location": null, + "weight": 1.0, + "source": "agents_skills_neon_postgres_skill_branching", + "target": "docs_decisions_001_authentication_strategy_branch_aware_auth" + }, + { + "relation": "conceptually_related_to", + "confidence": "INFERRED", + "confidence_score": 0.75, + "source_file": ".agents/skills/neon-postgres/SKILL.md", + "source_location": null, + "weight": 1.0, + "source": "agents_skills_neon_postgres_skill_connection_pooling", + "target": "docs_decisions_003_deployment_architecture_neon_postgres" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".github/workflows/ci.yml", + "source_location": null, + "weight": 1.0, + "source": "github_workflows_ci_ci_pipeline", + "target": "github_workflows_ci_validate_job" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".github/workflows/ci.yml", + "source_location": null, + "weight": 1.0, + "source": "github_workflows_ci_validate_job", + "target": "github_workflows_ci_playwright_e2e_step" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".github/workflows/ci.yml", + "source_location": null, + "weight": 1.0, + "source": "github_workflows_ci_validate_job", + "target": "github_workflows_ci_quality_steps" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".github/workflows/ci.yml", + "source_location": null, + "weight": 1.0, + "source": "github_workflows_ci_validate_job", + "target": "github_workflows_ci_registry_validation_step" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".kiro/specs/phase-8-deployment/design.md", + "source_location": null, + "weight": 1.0, + "source": "kiro_specs_phase_8_deployment_design_phase_8_design", + "target": "docs_decisions_003_deployment_architecture_deployment_architecture" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".kiro/specs/phase-8-deployment/design.md", + "source_location": null, + "weight": 1.0, + "source": "kiro_specs_phase_8_deployment_design_phase_8_design", + "target": "kiro_specs_phase_8_deployment_requirements_phase_8_requirements" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".kiro/specs/phase-8-deployment/tasks.md", + "source_location": null, + "weight": 1.0, + "source": "kiro_specs_phase_8_deployment_tasks_phase_8_implementation_plan", + "target": "kiro_specs_phase_8_deployment_design_phase_8_design" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".kiro/specs/phase-8-deployment/design.md", + "source_location": null, + "weight": 1.0, + "source": "kiro_specs_phase_8_deployment_design_rate_limit_module", + "target": "kiro_specs_phase_8_deployment_design_rate_limit_backend_interface" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".kiro/specs/phase-8-deployment/design.md", + "source_location": null, + "weight": 1.0, + "source": "kiro_specs_phase_8_deployment_design_rate_limit_module", + "target": "kiro_specs_phase_8_deployment_requirements_upstash_rate_limiter" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".kiro/specs/phase-8-deployment/tasks.md", + "source_location": null, + "weight": 1.0, + "source": "kiro_specs_phase_8_deployment_tasks_batch_a_rate_limiter", + "target": "kiro_specs_phase_8_deployment_design_rate_limit_module" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".kiro/specs/phase-8-deployment/design.md", + "source_location": null, + "weight": 1.0, + "source": "kiro_specs_phase_8_deployment_design_memory_backend", + "target": "kiro_specs_phase_8_deployment_design_rate_limit_backend_interface" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".kiro/specs/phase-8-deployment/design.md", + "source_location": null, + "weight": 1.0, + "source": "kiro_specs_phase_8_deployment_design_upstash_backend", + "target": "kiro_specs_phase_8_deployment_design_rate_limit_backend_interface" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".kiro/specs/phase-8-deployment/design.md", + "source_location": null, + "weight": 1.0, + "source": "kiro_specs_phase_8_deployment_design_fail_open_wrapper", + "target": "kiro_specs_phase_8_deployment_design_upstash_backend" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".kiro/specs/phase-8-deployment/design.md", + "source_location": null, + "weight": 1.0, + "source": "kiro_specs_phase_8_deployment_design_rate_limiter_migration_plan", + "target": "kiro_specs_phase_8_deployment_design_upstash_backend" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".kiro/specs/phase-8-deployment/design.md", + "source_location": null, + "weight": 1.0, + "source": "kiro_specs_phase_8_deployment_design_rate_limiter_migration_plan", + "target": "kiro_specs_phase_8_deployment_design_memory_backend" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".kiro/specs/phase-8-deployment/design.md", + "source_location": null, + "weight": 1.0, + "source": "kiro_specs_phase_8_deployment_design_property_based_tests", + "target": "kiro_specs_phase_8_deployment_design_fail_open_wrapper" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".kiro/specs/phase-8-deployment/design.md", + "source_location": null, + "weight": 1.0, + "source": "kiro_specs_phase_8_deployment_design_property_based_tests", + "target": "kiro_specs_phase_8_deployment_design_sentry_observability" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".kiro/specs/phase-8-deployment/design.md", + "source_location": null, + "weight": 1.0, + "source": "kiro_specs_phase_8_deployment_design_sentry_observability", + "target": "kiro_specs_phase_8_deployment_requirements_sentry_error_tracking" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".kiro/specs/phase-8-deployment/design.md", + "source_location": null, + "weight": 1.0, + "source": "kiro_specs_phase_8_deployment_design_auth_fail_closed_guard", + "target": "kiro_specs_phase_8_deployment_requirements_auth_fails_closed" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".kiro/specs/phase-8-deployment/design.md", + "source_location": null, + "weight": 1.0, + "source": "kiro_specs_phase_8_deployment_design_railway_service_topology", + "target": "kiro_specs_phase_8_deployment_requirements_split_railway_services" + }, + { + "relation": "semantically_similar_to", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": ".kiro/specs/phase-8-deployment/design.md", + "source_location": null, + "weight": 1.0, + "source": "kiro_specs_phase_8_deployment_design_cross_origin_cookie_flow", + "target": "docs_decisions_003_deployment_architecture_cookie_cors_strategy" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".kiro/specs/phase-8-deployment/design.md", + "source_location": null, + "weight": 1.0, + "source": "kiro_specs_phase_8_deployment_design_cross_origin_cookie_flow", + "target": "kiro_specs_phase_8_deployment_requirements_better_auth_github_oauth" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".kiro/specs/phase-8-deployment/design.md", + "source_location": null, + "weight": 1.0, + "source": "kiro_specs_phase_8_deployment_design_cross_origin_cookie_flow", + "target": "kiro_specs_phase_8_deployment_requirements_cors_policy" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".kiro/specs/phase-8-deployment/design.md", + "source_location": null, + "weight": 1.0, + "source": "kiro_specs_phase_8_deployment_design_migration_one_shot", + "target": "kiro_specs_phase_8_deployment_requirements_neon_production_branch" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".kiro/specs/phase-8-deployment/design.md", + "source_location": null, + "weight": 1.0, + "source": "kiro_specs_phase_8_deployment_design_deploy_smoke_script", + "target": "kiro_specs_phase_8_deployment_requirements_admin_api_key_enforcement" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".kiro/specs/phase-8-deployment/design.md", + "source_location": null, + "weight": 1.0, + "source": "kiro_specs_phase_8_deployment_design_deploy_smoke_script", + "target": "kiro_specs_phase_8_deployment_requirements_cors_policy" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".kiro/specs/phase-8-deployment/design.md", + "source_location": null, + "weight": 1.0, + "source": "kiro_specs_phase_8_deployment_design_deploy_smoke_script", + "target": "kiro_specs_phase_8_deployment_requirements_production_health_check" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".kiro/specs/phase-8-deployment/tasks.md", + "source_location": null, + "weight": 1.0, + "source": "kiro_specs_phase_8_deployment_tasks_batch_d_railway_scripts", + "target": "kiro_specs_phase_8_deployment_design_deploy_smoke_script" + }, + { + "relation": "semantically_similar_to", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "docs/decisions/003-deployment-architecture.md", + "source_location": null, + "weight": 1.0, + "source": "docs_decisions_003_deployment_architecture_upstash_rate_limiting", + "target": "kiro_specs_phase_8_deployment_design_rate_limiter_migration_plan" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".kiro/specs/phase-8-deployment/design.md", + "source_location": null, + "weight": 1.0, + "source": "kiro_specs_phase_8_deployment_design_failure_modes_matrix", + "target": "docs_decisions_002_ai_provider_strategy_fallback_explainer" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".kiro/specs/phase-8-deployment/requirements.md", + "source_location": null, + "weight": 1.0, + "source": "kiro_specs_phase_8_deployment_requirements_phase_8_requirements", + "target": "docs_decisions_001_authentication_strategy_authentication_strategy" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".kiro/specs/phase-8-deployment/requirements.md", + "source_location": null, + "weight": 1.0, + "source": "kiro_specs_phase_8_deployment_requirements_phase_8_requirements", + "target": "docs_decisions_002_ai_provider_strategy_ai_provider_strategy" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".kiro/specs/phase-8-deployment/requirements.md", + "source_location": null, + "weight": 1.0, + "source": "kiro_specs_phase_8_deployment_requirements_phase_8_requirements", + "target": "docs_decisions_003_deployment_architecture_deployment_architecture" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".kiro/specs/phase-8-deployment/tasks.md", + "source_location": null, + "weight": 1.0, + "source": "kiro_specs_phase_8_deployment_tasks_phase_8_implementation_plan", + "target": "kiro_specs_phase_8_deployment_requirements_phase_8_requirements" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".kiro/specs/phase-8-deployment/requirements.md", + "source_location": null, + "weight": 1.0, + "source": "kiro_specs_phase_8_deployment_requirements_better_auth_github_oauth", + "target": "docs_decisions_001_authentication_strategy_better_auth" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".kiro/specs/phase-8-deployment/requirements.md", + "source_location": null, + "weight": 1.0, + "source": "kiro_specs_phase_8_deployment_requirements_better_auth_github_oauth", + "target": "docs_decisions_001_authentication_strategy_github_oauth" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".kiro/specs/phase-8-deployment/requirements.md", + "source_location": null, + "weight": 1.0, + "source": "kiro_specs_phase_8_deployment_requirements_upstash_rate_limiter", + "target": "docs_decisions_003_deployment_architecture_upstash_rate_limiting" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".kiro/specs/phase-8-deployment/tasks.md", + "source_location": null, + "weight": 1.0, + "source": "kiro_specs_phase_8_deployment_tasks_batch_a_rate_limiter", + "target": "kiro_specs_phase_8_deployment_requirements_upstash_rate_limiter" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".kiro/specs/phase-8-deployment/tasks.md", + "source_location": null, + "weight": 1.0, + "source": "kiro_specs_phase_8_deployment_tasks_batch_b_sentry", + "target": "kiro_specs_phase_8_deployment_requirements_sentry_error_tracking" + }, + { + "relation": "conceptually_related_to", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "docs/decisions/001-authentication-strategy.md", + "source_location": null, + "weight": 1.0, + "source": "docs_decisions_001_authentication_strategy_admin_api_key", + "target": "kiro_specs_phase_8_deployment_requirements_admin_api_key_enforcement" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".kiro/specs/phase-8-deployment/tasks.md", + "source_location": null, + "weight": 1.0, + "source": "kiro_specs_phase_8_deployment_tasks_batch_c_auth_deploy_tests", + "target": "kiro_specs_phase_8_deployment_requirements_cors_policy" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".kiro/specs/phase-8-deployment/tasks.md", + "source_location": null, + "weight": 1.0, + "source": "kiro_specs_phase_8_deployment_tasks_batch_c_auth_deploy_tests", + "target": "kiro_specs_phase_8_deployment_requirements_auth_fails_closed" + }, + { + "relation": "references", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": ".kiro/specs/phase-8-deployment/requirements.md", + "source_location": null, + "weight": 1.0, + "source": "kiro_specs_phase_8_deployment_requirements_rollback_procedure", + "target": "scripts_deploy_rollback_rollback_runbook" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".kiro/specs/phase-8-deployment/tasks.md", + "source_location": null, + "weight": 1.0, + "source": "kiro_specs_phase_8_deployment_tasks_batch_f_external_provisioning", + "target": "kiro_specs_phase_8_deployment_requirements_staging_isolation" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".kiro/specs/phase-8-deployment/tasks.md", + "source_location": null, + "weight": 1.0, + "source": "kiro_specs_phase_8_deployment_tasks_dependency_graph", + "target": "kiro_specs_phase_8_deployment_tasks_phase_8_implementation_plan" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".kiro/specs/phase-8-deployment/tasks.md", + "source_location": null, + "weight": 1.0, + "source": "kiro_specs_phase_8_deployment_tasks_batch_d_railway_scripts", + "target": "scripts_deploy_rollback_rollback_runbook" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".kiro/specs/phase-8-deployment/tasks.md", + "source_location": null, + "weight": 1.0, + "source": "kiro_specs_phase_8_deployment_tasks_batch_g_staging_cutover", + "target": "kiro_specs_phase_8_deployment_tasks_batch_h_production_cutover" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/index.html", + "source_location": null, + "weight": 1.0, + "source": "apps_web_index_stackfast_web_entry", + "target": "apps_web_index_security_meta_headers" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/index.html", + "source_location": null, + "weight": 1.0, + "source": "apps_web_index_stackfast_web_entry", + "target": "apps_web_index_seo_metadata" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/index.html", + "source_location": null, + "weight": 1.0, + "source": "apps_web_index_security_meta_headers", + "target": "apps_web_index_content_security_policy" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/backlog/INTEGRATION_PLAN.md", + "source_location": null, + "weight": 1.0, + "source": "docs_backlog_integration_plan_historical_integration_plan", + "target": "docs_backlog_integration_plan_database_strategy" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/backlog/INTEGRATION_PLAN.md", + "source_location": null, + "weight": 1.0, + "source": "docs_backlog_integration_plan_historical_integration_plan", + "target": "docs_backlog_integration_plan_tool_profile_unification" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/backlog/INTEGRATION_PLAN.md", + "source_location": null, + "weight": 1.0, + "source": "docs_backlog_integration_plan_historical_integration_plan", + "target": "docs_backlog_integration_plan_unified_endpoints" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/backlog/INTEGRATION_PLAN.md", + "source_location": null, + "weight": 1.0, + "source": "docs_backlog_integration_plan_historical_integration_plan", + "target": "docs_backlog_integration_plan_worker_enrichment_pipeline" + }, + { + "relation": "semantically_similar_to", + "confidence": "INFERRED", + "confidence_score": 0.75, + "source_file": "docs/backlog/INTEGRATION_PLAN.md", + "source_location": null, + "weight": 1.0, + "source": "docs_backlog_integration_plan_worker_enrichment_pipeline", + "target": "docs_deferred_webailyzer_webailyzer_deferred" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/decisions/001-authentication-strategy.md", + "source_location": null, + "weight": 1.0, + "source": "docs_decisions_001_authentication_strategy_authentication_strategy", + "target": "docs_decisions_001_authentication_strategy_admin_api_key" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/decisions/001-authentication-strategy.md", + "source_location": null, + "weight": 1.0, + "source": "docs_decisions_001_authentication_strategy_authentication_strategy", + "target": "docs_decisions_001_authentication_strategy_better_auth" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/decisions/001-authentication-strategy.md", + "source_location": null, + "weight": 1.0, + "source": "docs_decisions_001_authentication_strategy_authentication_strategy", + "target": "docs_decisions_001_authentication_strategy_github_oauth" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/decisions/001-authentication-strategy.md", + "source_location": null, + "weight": 1.0, + "source": "docs_decisions_001_authentication_strategy_authentication_strategy", + "target": "docs_decisions_001_authentication_strategy_stack_auth_neon_auth" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/decisions/001-authentication-strategy.md", + "source_location": null, + "weight": 1.0, + "source": "docs_decisions_001_authentication_strategy_auth_data_ownership", + "target": "docs_decisions_001_authentication_strategy_better_auth" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/decisions/001-authentication-strategy.md", + "source_location": null, + "weight": 1.0, + "source": "docs_decisions_001_authentication_strategy_branch_aware_auth", + "target": "docs_decisions_001_authentication_strategy_better_auth" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/decisions/002-ai-provider-strategy.md", + "source_location": null, + "weight": 1.0, + "source": "docs_decisions_002_ai_provider_strategy_ai_provider_strategy", + "target": "docs_decisions_002_ai_provider_strategy_blueprint_explainer" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/decisions/002-ai-provider-strategy.md", + "source_location": null, + "weight": 1.0, + "source": "docs_decisions_002_ai_provider_strategy_ai_provider_strategy", + "target": "docs_decisions_002_ai_provider_strategy_zod_validation" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/decisions/002-ai-provider-strategy.md", + "source_location": null, + "weight": 1.0, + "source": "docs_decisions_002_ai_provider_strategy_azure_openai_provider", + "target": "docs_decisions_002_ai_provider_strategy_ai_provider_strategy" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/decisions/002-ai-provider-strategy.md", + "source_location": null, + "weight": 1.0, + "source": "docs_decisions_002_ai_provider_strategy_gemini_provider", + "target": "docs_decisions_002_ai_provider_strategy_ai_provider_strategy" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/decisions/002-ai-provider-strategy.md", + "source_location": null, + "weight": 1.0, + "source": "docs_decisions_002_ai_provider_strategy_blueprint_explainer", + "target": "docs_decisions_002_ai_provider_strategy_azure_openai_provider" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/decisions/002-ai-provider-strategy.md", + "source_location": null, + "weight": 1.0, + "source": "docs_decisions_002_ai_provider_strategy_blueprint_explainer", + "target": "docs_decisions_002_ai_provider_strategy_gemini_provider" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/decisions/002-ai-provider-strategy.md", + "source_location": null, + "weight": 1.0, + "source": "docs_decisions_002_ai_provider_strategy_blueprint_explainer", + "target": "docs_decisions_002_ai_provider_strategy_heuristic_provider" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/decisions/002-ai-provider-strategy.md", + "source_location": null, + "weight": 1.0, + "source": "docs_decisions_002_ai_provider_strategy_fallback_explainer", + "target": "docs_decisions_002_ai_provider_strategy_heuristic_provider" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/decisions/003-deployment-architecture.md", + "source_location": null, + "weight": 1.0, + "source": "docs_decisions_003_deployment_architecture_deployment_architecture", + "target": "docs_decisions_003_deployment_architecture_cookie_cors_strategy" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/decisions/003-deployment-architecture.md", + "source_location": null, + "weight": 1.0, + "source": "docs_decisions_003_deployment_architecture_deployment_architecture", + "target": "docs_decisions_003_deployment_architecture_neon_postgres" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/decisions/003-deployment-architecture.md", + "source_location": null, + "weight": 1.0, + "source": "docs_decisions_003_deployment_architecture_deployment_architecture", + "target": "docs_decisions_003_deployment_architecture_rollback_strategy" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/decisions/003-deployment-architecture.md", + "source_location": null, + "weight": 1.0, + "source": "docs_decisions_003_deployment_architecture_deployment_architecture", + "target": "docs_decisions_003_deployment_architecture_secrets_config" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/decisions/003-deployment-architecture.md", + "source_location": null, + "weight": 1.0, + "source": "docs_decisions_003_deployment_architecture_deployment_architecture", + "target": "docs_decisions_003_deployment_architecture_sentry_feature_flag" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/decisions/003-deployment-architecture.md", + "source_location": null, + "weight": 1.0, + "source": "docs_decisions_003_deployment_architecture_deployment_architecture", + "target": "docs_decisions_003_deployment_architecture_split_railway_services" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/decisions/003-deployment-architecture.md", + "source_location": null, + "weight": 1.0, + "source": "docs_decisions_003_deployment_architecture_deployment_architecture", + "target": "docs_decisions_003_deployment_architecture_upstash_rate_limiting" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/deploy/rollback.md", + "source_location": null, + "weight": 1.0, + "source": "scripts_deploy_rollback_rollback_runbook", + "target": "docs_decisions_003_deployment_architecture_deployment_architecture" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/decisions/003-deployment-architecture.md", + "source_location": null, + "weight": 1.0, + "source": "docs_decisions_003_deployment_architecture_rollback_strategy", + "target": "scripts_deploy_rollback_rollback_runbook" + }, + { + "relation": "semantically_similar_to", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "scripts/deploy/rollback.md", + "source_location": null, + "weight": 1.0, + "source": "scripts_deploy_rollback_two_deploy_schema_rule", + "target": "docs_decisions_003_deployment_architecture_rollback_strategy" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/deferred/webailyzer.md", + "source_location": null, + "weight": 1.0, + "source": "docs_deferred_webailyzer_webailyzer_deferred", + "target": "docs_deferred_webailyzer_ssrf_hardening" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/deferred/webailyzer.md", + "source_location": null, + "weight": 1.0, + "source": "docs_deferred_webailyzer_webailyzer_deferred", + "target": "docs_deferred_webailyzer_orphaned_submodule_gitlink" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/deferred/webailyzer.md", + "source_location": null, + "weight": 1.0, + "source": "docs_deferred_webailyzer_webailyzer_deferred", + "target": "docs_deferred_webailyzer_pre_integration_checklist" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/deferred/webailyzer.md", + "source_location": null, + "weight": 1.0, + "source": "docs_deferred_webailyzer_internal_only_service", + "target": "docs_deferred_webailyzer_pre_integration_checklist" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/deploy/rollback.md", + "source_location": null, + "weight": 1.0, + "source": "scripts_deploy_rollback_rollback_runbook", + "target": "scripts_deploy_rollback_stackfast_api_rollback" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/deploy/rollback.md", + "source_location": null, + "weight": 1.0, + "source": "scripts_deploy_rollback_rollback_runbook", + "target": "scripts_deploy_rollback_stackfast_web_rollback" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/deploy/rollback.md", + "source_location": null, + "weight": 1.0, + "source": "scripts_deploy_rollback_stackfast_api_rollback", + "target": "scripts_deploy_rollback_schema_compatibility_gate" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/deploy/rollback.md", + "source_location": null, + "weight": 1.0, + "source": "scripts_deploy_rollback_stackfast_api_rollback", + "target": "scripts_deploy_rollback_smoke_test_verification" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/deploy/rollback.md", + "source_location": null, + "weight": 1.0, + "source": "scripts_deploy_rollback_schema_compatibility_gate", + "target": "scripts_deploy_rollback_manual_forward_migration_intervention" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/deploy/rollback.md", + "source_location": null, + "weight": 1.0, + "source": "scripts_deploy_rollback_schema_compatibility_gate", + "target": "scripts_deploy_rollback_two_deploy_schema_rule" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/public/vite.svg", + "source_location": null, + "weight": 1.0, + "source": "apps_web_public_vite_vite_logo", + "target": "apps_web_public_vite_blue_purple_gradient" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/public/vite.svg", + "source_location": null, + "weight": 1.0, + "source": "apps_web_public_vite_vite_logo", + "target": "apps_web_public_vite_iconify_logo_asset" + }, + { + "relation": "conceptually_related_to", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "apps/web/public/vite.svg", + "source_location": null, + "weight": 1.0, + "source": "apps_web_public_vite_vite_logo", + "target": "apps_web_public_vite_yellow_lightning_bolt" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "apps/web/public/vite.svg", + "source_location": null, + "weight": 1.0, + "source": "apps_web_public_vite_yellow_lightning_bolt", + "target": "apps_web_public_vite_yellow_orange_gradient" + } + ], + "hyperedges": [ + { + "id": "agents_rebuild_execution_model", + "label": "Rebuild Execution Model", + "nodes": [ + "agents_orchestrator", + "agents_cleanup_agent", + "agents_architect_agent", + "agents_engine_agent", + "agents_api_agent", + "agents_ui_agent", + "agents_qa_agent" + ], + "relation": "form", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "Agents.md" + }, + { + "id": "phase_8_operational_architecture", + "label": "Phase 8 Operational Architecture", + "nodes": [ + "kiro_specs_phase_8_deployment_design_railway_service_topology", + "kiro_specs_phase_8_deployment_design_cross_origin_cookie_flow", + "kiro_specs_phase_8_deployment_design_rate_limit_module", + "kiro_specs_phase_8_deployment_design_sentry_observability", + "kiro_specs_phase_8_deployment_design_migration_one_shot", + "kiro_specs_phase_8_deployment_design_deploy_smoke_script" + ], + "relation": "form", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": ".kiro/specs/phase-8-deployment/design.md" + }, + { + "id": "ai_explanation_fallback_chain", + "label": "AI Explanation Fallback Chain", + "nodes": [ + "docs_decisions_002_ai_provider_strategy_azure_openai_provider", + "docs_decisions_002_ai_provider_strategy_gemini_provider", + "docs_decisions_002_ai_provider_strategy_heuristic_provider", + "docs_decisions_002_ai_provider_strategy_fallback_explainer", + "docs_decisions_002_ai_provider_strategy_zod_validation" + ], + "relation": "form", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/decisions/002-ai-provider-strategy.md" + }, + { + "id": "public_vite_vite_logo_composition", + "label": "Vite Logo Composition", + "nodes": [ + "apps_web_public_vite_vite_logo", + "apps_web_public_vite_blue_purple_gradient", + "apps_web_public_vite_yellow_orange_gradient", + "apps_web_public_vite_yellow_lightning_bolt" + ], + "relation": "form", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "apps/web/public/vite.svg" + } + ], + "built_at_commit": "78a8b38e2769a524f34e96b3438bd7828c430629" +} \ No newline at end of file diff --git a/graphify-out/manifest.json b/graphify-out/manifest.json new file mode 100644 index 0000000..65c38cd --- /dev/null +++ b/graphify-out/manifest.json @@ -0,0 +1,1057 @@ +{ + ".gemini/settings.json": { + "mtime": 1778452122.1098485, + "ast_hash": "493fd19124e5edfd16fd2c5f98a80c34", + "semantic_hash": "493fd19124e5edfd16fd2c5f98a80c34" + }, + "apps/api/drizzle.config.ts": { + "mtime": 1782076376.260707, + "ast_hash": "fabbf032be0c3da87a5251eb170d6332", + "semantic_hash": "fabbf032be0c3da87a5251eb170d6332" + }, + "apps/api/package.json": { + "mtime": 1782076364.2254188, + "ast_hash": "76908da42b13833729469b58b1d429e6", + "semantic_hash": "76908da42b13833729469b58b1d429e6" + }, + "apps/api/src/app.pbt.test.ts": { + "mtime": 1782073670.792588, + "ast_hash": "40be6e8b1d2196319fdf45643df29fce", + "semantic_hash": "40be6e8b1d2196319fdf45643df29fce" + }, + "apps/api/src/app.sentry.test.ts": { + "mtime": 1782071794.9374049, + "ast_hash": "12b5eb257665b98d79ad5ec2b05be6ec", + "semantic_hash": "12b5eb257665b98d79ad5ec2b05be6ec" + }, + "apps/api/src/app.test.ts": { + "mtime": 1782073701.9153006, + "ast_hash": "6e0deeedcc65cef2dc4f828c99631af7", + "semantic_hash": "6e0deeedcc65cef2dc4f828c99631af7" + }, + "apps/api/src/app.ts": { + "mtime": 1782071627.4534848, + "ast_hash": "c6acc1d49621fde7da47d35d4cc2ea3b", + "semantic_hash": "c6acc1d49621fde7da47d35d4cc2ea3b" + }, + "apps/api/src/db/client.ts": { + "mtime": 1778452122.1432333, + "ast_hash": "3ac3dd24752a161bde109556e3ce7d8f", + "semantic_hash": "3ac3dd24752a161bde109556e3ce7d8f" + }, + "apps/api/src/db/seed.ts": { + "mtime": 1778547181.4297936, + "ast_hash": "c6dda7f6b150c590e6ab60aab2145484", + "semantic_hash": "c6dda7f6b150c590e6ab60aab2145484" + }, + "apps/api/src/index.ts": { + "mtime": 1782071610.9950356, + "ast_hash": "dc068dd21e5a8dc23b31595cf743fa54", + "semantic_hash": "dc068dd21e5a8dc23b31595cf743fa54" + }, + "apps/api/src/middleware/auth.test.ts": { + "mtime": 1782074106.0760152, + "ast_hash": "5d4d33811975b8d6aea1129e6c2c47b8", + "semantic_hash": "5d4d33811975b8d6aea1129e6c2c47b8" + }, + "apps/api/src/middleware/auth.ts": { + "mtime": 1782074072.4363894, + "ast_hash": "2ce413052b269003c2ceb9d552a1dcfe", + "semantic_hash": "2ce413052b269003c2ceb9d552a1dcfe" + }, + "apps/api/src/observability/sentry.pbt.test.ts": { + "mtime": 1782068912.0288498, + "ast_hash": "962558bc6bca9ca0bf1a7b50dad5629b", + "semantic_hash": "962558bc6bca9ca0bf1a7b50dad5629b" + }, + "apps/api/src/observability/sentry.test.ts": { + "mtime": 1782068516.8213286, + "ast_hash": "4ca06fe39368d8cb36927fbc9f8dae27", + "semantic_hash": "4ca06fe39368d8cb36927fbc9f8dae27" + }, + "apps/api/src/observability/sentry.ts": { + "mtime": 1782068715.1733735, + "ast_hash": "ee592c9a711c7aab7cf28c69c61d354f", + "semantic_hash": "ee592c9a711c7aab7cf28c69c61d354f" + }, + "apps/api/src/openapi.ts": { + "mtime": 1778547181.4313152, + "ast_hash": "fb88d126e98eda777ba86e2452eff3ac", + "semantic_hash": "fb88d126e98eda777ba86e2452eff3ac" + }, + "apps/api/src/rate-limit/buckets.test.ts": { + "mtime": 1778620750.8886118, + "ast_hash": "d313fd10030e75167f902c182bc2cb6f", + "semantic_hash": "d313fd10030e75167f902c182bc2cb6f" + }, + "apps/api/src/rate-limit/buckets.ts": { + "mtime": 1778620750.8896315, + "ast_hash": "8aeada762f0c4ee2f2ac68e20ab2b559", + "semantic_hash": "8aeada762f0c4ee2f2ac68e20ab2b559" + }, + "apps/api/src/rate-limit/client-id.test.ts": { + "mtime": 1778620750.8906226, + "ast_hash": "c898b5d531361cf4bd3f766f1d0218aa", + "semantic_hash": "c898b5d531361cf4bd3f766f1d0218aa" + }, + "apps/api/src/rate-limit/client-id.ts": { + "mtime": 1778620750.8916328, + "ast_hash": "69d4806a3dd6822cb6588853d4444fb3", + "semantic_hash": "69d4806a3dd6822cb6588853d4444fb3" + }, + "apps/api/src/rate-limit/fail-open.test.ts": { + "mtime": 1778620750.8916328, + "ast_hash": "1e4f85f816fb617e5884532c6121dfbc", + "semantic_hash": "1e4f85f816fb617e5884532c6121dfbc" + }, + "apps/api/src/rate-limit/fail-open.ts": { + "mtime": 1778620750.8926296, + "ast_hash": "26ad87b213bb26374f81ccd55f3cee89", + "semantic_hash": "26ad87b213bb26374f81ccd55f3cee89" + }, + "apps/api/src/rate-limit/index.ts": { + "mtime": 1778620750.8926296, + "ast_hash": "0b01977aa6417e28bf4e35dd3bc15fb9", + "semantic_hash": "0b01977aa6417e28bf4e35dd3bc15fb9" + }, + "apps/api/src/rate-limit/memory.test.ts": { + "mtime": 1778620750.8936284, + "ast_hash": "f5647adcd27665c3876278b2400e1159", + "semantic_hash": "f5647adcd27665c3876278b2400e1159" + }, + "apps/api/src/rate-limit/memory.ts": { + "mtime": 1778620750.8946285, + "ast_hash": "1116b7312538c71313ae931b67d06866", + "semantic_hash": "1116b7312538c71313ae931b67d06866" + }, + "apps/api/src/rate-limit/rate-limit.pbt.test.ts": { + "mtime": 1778620750.8946285, + "ast_hash": "428be022ab8227ed6294632f7617855a", + "semantic_hash": "428be022ab8227ed6294632f7617855a" + }, + "apps/api/src/rate-limit/types.ts": { + "mtime": 1778620750.8956265, + "ast_hash": "25525860c4e1d923f73d741b75596686", + "semantic_hash": "25525860c4e1d923f73d741b75596686" + }, + "apps/api/src/rate-limit/upstash.test.ts": { + "mtime": 1778620750.8956265, + "ast_hash": "3cfc3f381f2af5e7be9c63dbb43d635d", + "semantic_hash": "3cfc3f381f2af5e7be9c63dbb43d635d" + }, + "apps/api/src/rate-limit/upstash.ts": { + "mtime": 1778620750.8966277, + "ast_hash": "9aa077ab4be90c5e30aa1d3c6c8d1ef8", + "semantic_hash": "9aa077ab4be90c5e30aa1d3c6c8d1ef8" + }, + "apps/api/src/test-setup.ts": { + "mtime": 1778547181.4313152, + "ast_hash": "896fd9f0b7998325d084fa3be66f7f64", + "semantic_hash": "896fd9f0b7998325d084fa3be66f7f64" + }, + "apps/api/tsconfig.json": { + "mtime": 1778547181.4313152, + "ast_hash": "b71819362a3d5260080113ff2585b7c6", + "semantic_hash": "b71819362a3d5260080113ff2585b7c6" + }, + "apps/api/vitest.config.ts": { + "mtime": 1778547181.4328246, + "ast_hash": "8f5163e64ccd9d6098a50e947ee17df8", + "semantic_hash": "8f5163e64ccd9d6098a50e947ee17df8" + }, + "apps/web/components.json": { + "mtime": 1778452122.1482582, + "ast_hash": "952a78f0f5546614e85f2cde19e3b4b5", + "semantic_hash": "952a78f0f5546614e85f2cde19e3b4b5" + }, + "apps/web/package.json": { + "mtime": 1782072071.7762003, + "ast_hash": "ade7499bd94caf92b67606b37046f8e8", + "semantic_hash": "ade7499bd94caf92b67606b37046f8e8" + }, + "apps/web/postcss.config.js": { + "mtime": 1778452122.1502826, + "ast_hash": "33fad9c02cb0ec6d6030369ef6347d57", + "semantic_hash": "33fad9c02cb0ec6d6030369ef6347d57" + }, + "apps/web/public/catalog/v1/categories.json": { + "mtime": 1778452122.1527705, + "ast_hash": "bd8ce244788eaf0ecf16fbb4be114c5d", + "semantic_hash": "bd8ce244788eaf0ecf16fbb4be114c5d" + }, + "apps/web/public/catalog/v1/manifest.json": { + "mtime": 1778452122.1534288, + "ast_hash": "bf6411345345fb9eba1e7d407f5731d6", + "semantic_hash": "bf6411345345fb9eba1e7d407f5731d6" + }, + "apps/web/public/catalog/v1/rules.json": { + "mtime": 1778452122.1544435, + "ast_hash": "cd1eaba8152b39fc5c9c32a5e6ba2c8b", + "semantic_hash": "cd1eaba8152b39fc5c9c32a5e6ba2c8b" + }, + "apps/web/public/catalog/v1/tools.json": { + "mtime": 1778452122.1564755, + "ast_hash": "23977c00e5138e6509b7b8d0ea6e610f", + "semantic_hash": "23977c00e5138e6509b7b8d0ea6e610f" + }, + "apps/web/src/App.tsx": { + "mtime": 1778452122.1574554, + "ast_hash": "b1b3e6220fc8ba1589254e41dfe3c96a", + "semantic_hash": "b1b3e6220fc8ba1589254e41dfe3c96a" + }, + "apps/web/src/components/AlternativesComparison.tsx": { + "mtime": 1778452122.1594553, + "ast_hash": "5d7e0388d1d3a7f40b765c17fb5554b6", + "semantic_hash": "5d7e0388d1d3a7f40b765c17fb5554b6" + }, + "apps/web/src/components/ArchitecturePreview.tsx": { + "mtime": 1778452122.1594553, + "ast_hash": "22c730a14c58afaaa5735d194b04f16d", + "semantic_hash": "22c730a14c58afaaa5735d194b04f16d" + }, + "apps/web/src/components/AuthStatus.tsx": { + "mtime": 1778452122.1604557, + "ast_hash": "3ad79c13e619614ba28e0423cc4ecadf", + "semantic_hash": "3ad79c13e619614ba28e0423cc4ecadf" + }, + "apps/web/src/components/BlueprintOutputCard.tsx": { + "mtime": 1778452122.161455, + "ast_hash": "2725bf21800f47ff9997bcb9d1d3c9c4", + "semantic_hash": "2725bf21800f47ff9997bcb9d1d3c9c4" + }, + "apps/web/src/components/CategorySection.tsx": { + "mtime": 1778452122.1629689, + "ast_hash": "12cab51c5c691b2245548f081ced92de", + "semantic_hash": "12cab51c5c691b2245548f081ced92de" + }, + "apps/web/src/components/CompatibilityHeatmap.tsx": { + "mtime": 1778603392.7287872, + "ast_hash": "32f50c415d7b9a8093b00c676a32b86b", + "semantic_hash": "32f50c415d7b9a8093b00c676a32b86b" + }, + "apps/web/src/components/CompatibilityScore.tsx": { + "mtime": 1778452122.164491, + "ast_hash": "e73e67178f3751606b6f349632569e9d", + "semantic_hash": "e73e67178f3751606b6f349632569e9d" + }, + "apps/web/src/components/CostEstimator.tsx": { + "mtime": 1778452122.1652246, + "ast_hash": "6ba13f561a99a831f481967e717653a4", + "semantic_hash": "6ba13f561a99a831f481967e717653a4" + }, + "apps/web/src/components/DiagnosticList.tsx": { + "mtime": 1778452122.1662364, + "ast_hash": "71ae3df21c569b7363b3b82a56f0153b", + "semantic_hash": "71ae3df21c569b7363b3b82a56f0153b" + }, + "apps/web/src/components/ErrorBoundary.tsx": { + "mtime": 1778452122.1692593, + "ast_hash": "68b0bbc223ed6532a18706967b7ca8a9", + "semantic_hash": "68b0bbc223ed6532a18706967b7ca8a9" + }, + "apps/web/src/components/ExportDialog.tsx": { + "mtime": 1778603392.7363346, + "ast_hash": "5241f787efec6edfae5d441b1a9ea08a", + "semantic_hash": "5241f787efec6edfae5d441b1a9ea08a" + }, + "apps/web/src/components/ImplementationRoadmap.tsx": { + "mtime": 1778452122.1712353, + "ast_hash": "cc7f7fddf0363d949ec57d8f9c96364d", + "semantic_hash": "cc7f7fddf0363d949ec57d8f9c96364d" + }, + "apps/web/src/components/Layout.tsx": { + "mtime": 1778452122.1733027, + "ast_hash": "a87ca7c54f3dcc9f30fa2fe99f5e5948", + "semantic_hash": "a87ca7c54f3dcc9f30fa2fe99f5e5948" + }, + "apps/web/src/components/SmartSuggestion.tsx": { + "mtime": 1778452122.1733027, + "ast_hash": "df5f55adc73afc1b5523ba38b7de706d", + "semantic_hash": "df5f55adc73afc1b5523ba38b7de706d" + }, + "apps/web/src/components/StackBuilder.tsx": { + "mtime": 1778452122.1773324, + "ast_hash": "095d352cfa14543e582a0953f9e96fe4", + "semantic_hash": "095d352cfa14543e582a0953f9e96fe4" + }, + "apps/web/src/components/ToolSelector.tsx": { + "mtime": 1778452122.1783314, + "ast_hash": "8f0f55d558dcad2628c1206129206c78", + "semantic_hash": "8f0f55d558dcad2628c1206129206c78" + }, + "apps/web/src/components/index.ts": { + "mtime": 1778452122.1793323, + "ast_hash": "2241430be50f6dffc06ce06fd98ab9c2", + "semantic_hash": "2241430be50f6dffc06ce06fd98ab9c2" + }, + "apps/web/src/components/ui/badge.tsx": { + "mtime": 1778452122.180332, + "ast_hash": "2ba8b44541085f725b216267f9feb892", + "semantic_hash": "2ba8b44541085f725b216267f9feb892" + }, + "apps/web/src/components/ui/button.tsx": { + "mtime": 1778452122.1813312, + "ast_hash": "e8bc724f4bb656910b909c9b6cbc3625", + "semantic_hash": "e8bc724f4bb656910b909c9b6cbc3625" + }, + "apps/web/src/components/ui/card.tsx": { + "mtime": 1778452122.1813312, + "ast_hash": "b6df38eb58a41ec0235a0024dec73e8e", + "semantic_hash": "b6df38eb58a41ec0235a0024dec73e8e" + }, + "apps/web/src/components/ui/collapsible.tsx": { + "mtime": 1778452122.1813312, + "ast_hash": "cb66adfc183b69da16a00c9e5ddf1fb2", + "semantic_hash": "cb66adfc183b69da16a00c9e5ddf1fb2" + }, + "apps/web/src/components/ui/dialog.tsx": { + "mtime": 1778452122.1828434, + "ast_hash": "083138d512770ceefadbe92472286fd6", + "semantic_hash": "083138d512770ceefadbe92472286fd6" + }, + "apps/web/src/components/ui/toast.tsx": { + "mtime": 1778452122.1833992, + "ast_hash": "dbe9a151d339d621290dd6b42406e5fe", + "semantic_hash": "dbe9a151d339d621290dd6b42406e5fe" + }, + "apps/web/src/components/ui/toaster.tsx": { + "mtime": 1778452122.1833992, + "ast_hash": "daf7b04904d77303dd96a17236e24fbb", + "semantic_hash": "daf7b04904d77303dd96a17236e24fbb" + }, + "apps/web/src/components/ui/tooltip.tsx": { + "mtime": 1778452122.1847522, + "ast_hash": "fb015eb9ef04ab1957a104e1d691978d", + "semantic_hash": "fb015eb9ef04ab1957a104e1d691978d" + }, + "apps/web/src/context/EvaluationContext.tsx": { + "mtime": 1778452122.188422, + "ast_hash": "3a6c01586bb105662a6e60712ab07ae7", + "semantic_hash": "3a6c01586bb105662a6e60712ab07ae7" + }, + "apps/web/src/context/ExportContext.tsx": { + "mtime": 1778452122.189423, + "ast_hash": "c21fab8bc7afa582d8b2fdbf4f92a7cf", + "semantic_hash": "c21fab8bc7afa582d8b2fdbf4f92a7cf" + }, + "apps/web/src/context/SelectionsContext.tsx": { + "mtime": 1778452122.1904242, + "ast_hash": "6f5badf5a0ecb4f67546d508073456bc", + "semantic_hash": "6f5badf5a0ecb4f67546d508073456bc" + }, + "apps/web/src/context/SuggestionsContext.tsx": { + "mtime": 1778452122.1904242, + "ast_hash": "be4300aaed085fd5896ce44dd0ad7061", + "semantic_hash": "be4300aaed085fd5896ce44dd0ad7061" + }, + "apps/web/src/context/index.ts": { + "mtime": 1778452122.191424, + "ast_hash": "023718ce1796a59f2323d4ffc5dedd4c", + "semantic_hash": "023718ce1796a59f2323d4ffc5dedd4c" + }, + "apps/web/src/data/recipes/index.ts": { + "mtime": 1778452122.1929362, + "ast_hash": "4ec167433320a7c86155437df2a6b7dc", + "semantic_hash": "4ec167433320a7c86155437df2a6b7dc" + }, + "apps/web/src/data/recipes/nextjs-base.ts": { + "mtime": 1778452122.1929362, + "ast_hash": "be994c2273286e55e10aa16b9774202c", + "semantic_hash": "be994c2273286e55e10aa16b9774202c" + }, + "apps/web/src/data/recipes/nextjs-clerk.ts": { + "mtime": 1778452122.193951, + "ast_hash": "c228bb876a37c8513e7193b0b66ff3cb", + "semantic_hash": "c228bb876a37c8513e7193b0b66ff3cb" + }, + "apps/web/src/data/recipes/nextjs-prisma-postgres.ts": { + "mtime": 1778452122.1949646, + "ast_hash": "50302f2acaf9428d53109b3579802ff7", + "semantic_hash": "50302f2acaf9428d53109b3579802ff7" + }, + "apps/web/src/data/recipes/stripe-integration.ts": { + "mtime": 1778452122.1949646, + "ast_hash": "9fd389062cf8088a36435130f10d1993", + "semantic_hash": "9fd389062cf8088a36435130f10d1993" + }, + "apps/web/src/data/suggestions.ts": { + "mtime": 1778452122.1959646, + "ast_hash": "5f13029c996945ac36718fffce46b133", + "semantic_hash": "5f13029c996945ac36718fffce46b133" + }, + "apps/web/src/engine/evaluate-with-fallback.ts": { + "mtime": 1778452122.1969702, + "ast_hash": "8cd295c015c0a39673e43a6457fc7978", + "semantic_hash": "8cd295c015c0a39673e43a6457fc7978" + }, + "apps/web/src/engine/index.ts": { + "mtime": 1778452122.1979666, + "ast_hash": "9d46693b8631fa0d4278ddbcaa3d5143", + "semantic_hash": "9d46693b8631fa0d4278ddbcaa3d5143" + }, + "apps/web/src/engine/rules-engine.ts": { + "mtime": 1778452122.1989632, + "ast_hash": "affb24c1c8cbf3aa16825872879d4fd9", + "semantic_hash": "affb24c1c8cbf3aa16825872879d4fd9" + }, + "apps/web/src/engine/rules-engine.worker.ts": { + "mtime": 1778452122.199965, + "ast_hash": "9683fc436034c2722916f0002cde95ac", + "semantic_hash": "9683fc436034c2722916f0002cde95ac" + }, + "apps/web/src/engine/score-calculator.ts": { + "mtime": 1778452122.2024977, + "ast_hash": "25091517c55cb04cf3613282fbd61187", + "semantic_hash": "25091517c55cb04cf3613282fbd61187" + }, + "apps/web/src/engine/worker-wrapper.ts": { + "mtime": 1778452122.203125, + "ast_hash": "a0c81fe0f796e0ab576724032514e36e", + "semantic_hash": "a0c81fe0f796e0ab576724032514e36e" + }, + "apps/web/src/hooks/index.ts": { + "mtime": 1778452122.2049963, + "ast_hash": "e9138f241e3f9843ebed02f31308e810", + "semantic_hash": "e9138f241e3f9843ebed02f31308e810" + }, + "apps/web/src/hooks/use-toast.ts": { + "mtime": 1778452122.2049963, + "ast_hash": "6c37e356a8630d68cbdd3c34f6efa78c", + "semantic_hash": "6c37e356a8630d68cbdd3c34f6efa78c" + }, + "apps/web/src/hooks/useApi.ts": { + "mtime": 1778603392.7402117, + "ast_hash": "dea95d9ab3263981423094b411e8d375", + "semantic_hash": "dea95d9ab3263981423094b411e8d375" + }, + "apps/web/src/hooks/useExport.ts": { + "mtime": 1778452122.2061543, + "ast_hash": "99ac7993a62410800587ca2b484af85c", + "semantic_hash": "99ac7993a62410800587ca2b484af85c" + }, + "apps/web/src/hooks/useRulesEngine.ts": { + "mtime": 1778452122.207157, + "ast_hash": "f9a03aeed6227843b0740c4fc36d1937", + "semantic_hash": "f9a03aeed6227843b0740c4fc36d1937" + }, + "apps/web/src/hooks/useStackSelection.ts": { + "mtime": 1778452122.208158, + "ast_hash": "92beabaa04318c0024d5ebfbf6328541", + "semantic_hash": "92beabaa04318c0024d5ebfbf6328541" + }, + "apps/web/src/hooks/useSuggestions.ts": { + "mtime": 1778452122.208158, + "ast_hash": "6a7ef24c99fdaef5517396328e1c5291", + "semantic_hash": "6a7ef24c99fdaef5517396328e1c5291" + }, + "apps/web/src/index.ts": { + "mtime": 1778452122.2096744, + "ast_hash": "e34477c1de3eab518ed0936de5e20ac2", + "semantic_hash": "e34477c1de3eab518ed0936de5e20ac2" + }, + "apps/web/src/lib/api-client.ts": { + "mtime": 1778452122.2116907, + "ast_hash": "60bd47ea0f0236fba22e10be2264c5f3", + "semantic_hash": "60bd47ea0f0236fba22e10be2264c5f3" + }, + "apps/web/src/lib/archive-generator.ts": { + "mtime": 1778452122.2116907, + "ast_hash": "81af52ca44d98d1322bd9ee2f57ac128", + "semantic_hash": "81af52ca44d98d1322bd9ee2f57ac128" + }, + "apps/web/src/lib/auth-client.ts": { + "mtime": 1778452122.2126951, + "ast_hash": "4439923018772aaad8517381412749ae", + "semantic_hash": "4439923018772aaad8517381412749ae" + }, + "apps/web/src/lib/catalog-loader.ts": { + "mtime": 1778452122.213204, + "ast_hash": "80e59e50541fb7e2e3ce4475f46b77cd", + "semantic_hash": "80e59e50541fb7e2e3ce4475f46b77cd" + }, + "apps/web/src/lib/export-generator.ts": { + "mtime": 1778452122.214216, + "ast_hash": "abb9c42e4c97e82169f79793b2a90ee2", + "semantic_hash": "abb9c42e4c97e82169f79793b2a90ee2" + }, + "apps/web/src/lib/export-log-generator.ts": { + "mtime": 1778452122.214584, + "ast_hash": "9c69886e364bd14a6f1c5afcb090483c", + "semantic_hash": "9c69886e364bd14a6f1c5afcb090483c" + }, + "apps/web/src/lib/recipe-matcher.ts": { + "mtime": 1778452122.2152467, + "ast_hash": "fc4635c42d43ba002506b5b92114f3ac", + "semantic_hash": "fc4635c42d43ba002506b5b92114f3ac" + }, + "apps/web/src/lib/sentry.test.ts": { + "mtime": 1782072050.6216917, + "ast_hash": "41fbad61c17e09fd9e871dbda8608f07", + "semantic_hash": "41fbad61c17e09fd9e871dbda8608f07" + }, + "apps/web/src/lib/sentry.ts": { + "mtime": 1782072199.7259817, + "ast_hash": "dc4c5019f604d568e4d74748f8dfdc62", + "semantic_hash": "dc4c5019f604d568e4d74748f8dfdc62" + }, + "apps/web/src/lib/utils.ts": { + "mtime": 1778452122.216236, + "ast_hash": "1345b06558a3daa7b3695c17139f9b3a", + "semantic_hash": "1345b06558a3daa7b3695c17139f9b3a" + }, + "apps/web/src/main.tsx": { + "mtime": 1782072666.080889, + "ast_hash": "dde7018933bf337283adc8831ca5c5ba", + "semantic_hash": "dde7018933bf337283adc8831ca5c5ba" + }, + "apps/web/src/pages/BlueprintBuilder.tsx": { + "mtime": 1778603392.7463768, + "ast_hash": "125beb42d23a991c1ecf8e6b989ba6a8", + "semantic_hash": "125beb42d23a991c1ecf8e6b989ba6a8" + }, + "apps/web/src/pages/CompatibilityView.tsx": { + "mtime": 1778603392.7521918, + "ast_hash": "0b65804547a022bfd34e8d2f4875659f", + "semantic_hash": "0b65804547a022bfd34e8d2f4875659f" + }, + "apps/web/src/pages/MigrationExplorer.tsx": { + "mtime": 1778452122.2192256, + "ast_hash": "a7eae93ca6bfa51e545c9ea3452cf2d3", + "semantic_hash": "a7eae93ca6bfa51e545c9ea3452cf2d3" + }, + "apps/web/src/pages/StackBuilderPage.tsx": { + "mtime": 1778603392.759856, + "ast_hash": "eac63797ebd48bf759c9bceedebeea17", + "semantic_hash": "eac63797ebd48bf759c9bceedebeea17" + }, + "apps/web/src/pages/ToolCatalog.tsx": { + "mtime": 1778452122.2212248, + "ast_hash": "37e56e15fd80454b9691ee157434429a", + "semantic_hash": "37e56e15fd80454b9691ee157434429a" + }, + "apps/web/src/templates/config-files/clerk-middleware.ts": { + "mtime": 1778452122.2227333, + "ast_hash": "855900bf3101a49d2fb835b5cce5bc8d", + "semantic_hash": "855900bf3101a49d2fb835b5cce5bc8d" + }, + "apps/web/src/templates/config-files/clerk-signin-page.ts": { + "mtime": 1778452122.223286, + "ast_hash": "d4e21a90bf254fc1e0496f760ca763b2", + "semantic_hash": "d4e21a90bf254fc1e0496f760ca763b2" + }, + "apps/web/src/templates/config-files/clerk-signup-page.ts": { + "mtime": 1778452122.223286, + "ast_hash": "c6321e617a9ba7169e3d7294184836d2", + "semantic_hash": "c6321e617a9ba7169e3d7294184836d2" + }, + "apps/web/src/templates/config-files/eslint-nextjs.ts": { + "mtime": 1778452122.2242963, + "ast_hash": "3528892813270e3144fcc185ee1d89ed", + "semantic_hash": "3528892813270e3144fcc185ee1d89ed" + }, + "apps/web/src/templates/config-files/index.ts": { + "mtime": 1778452122.2242963, + "ast_hash": "915de3b283d82a2abdb96604e4cc1389", + "semantic_hash": "915de3b283d82a2abdb96604e4cc1389" + }, + "apps/web/src/templates/config-files/next-config.ts": { + "mtime": 1778452122.225306, + "ast_hash": "9fc4341550222c260abf11888b8ae9c9", + "semantic_hash": "9fc4341550222c260abf11888b8ae9c9" + }, + "apps/web/src/templates/config-files/nextjs-home-page.ts": { + "mtime": 1778452122.225306, + "ast_hash": "39d08e47c9d3dd644d954489cdb34fe7", + "semantic_hash": "39d08e47c9d3dd644d954489cdb34fe7" + }, + "apps/web/src/templates/config-files/nextjs-root-layout.ts": { + "mtime": 1778452122.225306, + "ast_hash": "e00fe6d2426811d0fa24f1d072482ac1", + "semantic_hash": "e00fe6d2426811d0fa24f1d072482ac1" + }, + "apps/web/src/templates/config-files/prisma-client.ts": { + "mtime": 1778452122.2263055, + "ast_hash": "1ce710a4c5d43a94befcb42974503fc6", + "semantic_hash": "1ce710a4c5d43a94befcb42974503fc6" + }, + "apps/web/src/templates/config-files/prisma-schema-postgres.ts": { + "mtime": 1778452122.2263055, + "ast_hash": "791d428dedb2ec3e6aa423bd22a3fd31", + "semantic_hash": "791d428dedb2ec3e6aa423bd22a3fd31" + }, + "apps/web/src/templates/config-files/stripe-client.ts": { + "mtime": 1778452122.2273054, + "ast_hash": "e6689889c0c73dfd3f2741e47f90bfd9", + "semantic_hash": "e6689889c0c73dfd3f2741e47f90bfd9" + }, + "apps/web/src/templates/config-files/stripe-webhook.ts": { + "mtime": 1778452122.2283056, + "ast_hash": "bf38f39936bae065bf0152a7a84d8aa1", + "semantic_hash": "bf38f39936bae065bf0152a7a84d8aa1" + }, + "apps/web/src/templates/config-files/tsconfig-nextjs.ts": { + "mtime": 1778452122.2283056, + "ast_hash": "958213257d66e7b741afc8054bc3b617", + "semantic_hash": "958213257d66e7b741afc8054bc3b617" + }, + "apps/web/src/templates/env-example.ts": { + "mtime": 1778452122.229306, + "ast_hash": "87bbf6bb437c3c968b70ca8743ffd5e1", + "semantic_hash": "87bbf6bb437c3c968b70ca8743ffd5e1" + }, + "apps/web/src/templates/package-json.ts": { + "mtime": 1778452122.229306, + "ast_hash": "652946cba4966ee348f87299c2f26b2f", + "semantic_hash": "652946cba4966ee348f87299c2f26b2f" + }, + "apps/web/src/templates/readme.ts": { + "mtime": 1778452122.230306, + "ast_hash": "2ffb1a0766783fa4880db8ed02ffda3e", + "semantic_hash": "2ffb1a0766783fa4880db8ed02ffda3e" + }, + "apps/web/src/test/setup.ts": { + "mtime": 1778452122.2313066, + "ast_hash": "39529208dfc584ff87969cf460d5f8e5", + "semantic_hash": "39529208dfc584ff87969cf460d5f8e5" + }, + "apps/web/src/types/catalog.ts": { + "mtime": 1778452122.233382, + "ast_hash": "10cd9f3849c6b4d3064e85ba6ffc61ea", + "semantic_hash": "10cd9f3849c6b4d3064e85ba6ffc61ea" + }, + "apps/web/src/types/category.ts": { + "mtime": 1778452122.23512, + "ast_hash": "212758f2d5dbb6df29ebd6c201cfa196", + "semantic_hash": "212758f2d5dbb6df29ebd6c201cfa196" + }, + "apps/web/src/types/diagnostic.ts": { + "mtime": 1778452122.2364106, + "ast_hash": "1c416a4889270f3f9bc363fb089ade90", + "semantic_hash": "1c416a4889270f3f9bc363fb089ade90" + }, + "apps/web/src/types/export.ts": { + "mtime": 1778452122.2364106, + "ast_hash": "9f06de06f537932c79fa30672f96ad1f", + "semantic_hash": "9f06de06f537932c79fa30672f96ad1f" + }, + "apps/web/src/types/index.ts": { + "mtime": 1778452122.2374096, + "ast_hash": "51351cfc3cf1aa6604c735df4f14e4ee", + "semantic_hash": "51351cfc3cf1aa6604c735df4f14e4ee" + }, + "apps/web/src/types/recipe.ts": { + "mtime": 1778452122.2384112, + "ast_hash": "092909379d1ef3b0902136d9697d5c17", + "semantic_hash": "092909379d1ef3b0902136d9697d5c17" + }, + "apps/web/src/types/rule.ts": { + "mtime": 1778452122.2404108, + "ast_hash": "4ce0f7e8a0380d2e546cc971e30795ba", + "semantic_hash": "4ce0f7e8a0380d2e546cc971e30795ba" + }, + "apps/web/src/types/suggestion.ts": { + "mtime": 1778452122.242948, + "ast_hash": "e17b689d81d0bc91b8047abf16b705e7", + "semantic_hash": "e17b689d81d0bc91b8047abf16b705e7" + }, + "apps/web/src/types/tool.ts": { + "mtime": 1778452122.2442997, + "ast_hash": "9f9cb0b4b1ae90a5647c8e41ebffabd7", + "semantic_hash": "9f9cb0b4b1ae90a5647c8e41ebffabd7" + }, + "apps/web/src/types/worker.ts": { + "mtime": 1778452122.2449758, + "ast_hash": "bebdb18b687dc5d097072c808501f3c8", + "semantic_hash": "bebdb18b687dc5d097072c808501f3c8" + }, + "apps/web/tailwind.config.js": { + "mtime": 1778452122.245841, + "ast_hash": "189c4554bcabc5376b5c50e5d3300b21", + "semantic_hash": "189c4554bcabc5376b5c50e5d3300b21" + }, + "apps/web/tsconfig.json": { + "mtime": 1778547181.433834, + "ast_hash": "c89613548059153c774488e0e9fd341c", + "semantic_hash": "c89613548059153c774488e0e9fd341c" + }, + "apps/web/vite.config.ts": { + "mtime": 1782072710.1280577, + "ast_hash": "bd57d94a18c628a19e22074eeaf61d32", + "semantic_hash": "bd57d94a18c628a19e22074eeaf61d32" + }, + "eslint.config.mjs": { + "mtime": 1778547181.4368489, + "ast_hash": "e9fd8b8e84d356a9d44ab682de50449c", + "semantic_hash": "e9fd8b8e84d356a9d44ab682de50449c" + }, + "package.json": { + "mtime": 1782076529.05061, + "ast_hash": "f678ee2bed0baba79e2ea77b22c7911d", + "semantic_hash": "f678ee2bed0baba79e2ea77b22c7911d" + }, + "packages/ai/package.json": { + "mtime": 1778547181.4378417, + "ast_hash": "bf2bee094d5045c7cba02bb831b47314", + "semantic_hash": "bf2bee094d5045c7cba02bb831b47314" + }, + "packages/ai/src/cost-estimator.ts": { + "mtime": 1778452122.4889438, + "ast_hash": "28596667a106653f11e7d0df347ab03f", + "semantic_hash": "28596667a106653f11e7d0df347ab03f" + }, + "packages/ai/src/index.test.ts": { + "mtime": 1778547181.4388437, + "ast_hash": "43f612a7a54fd9502ef56ddcb6076157", + "semantic_hash": "43f612a7a54fd9502ef56ddcb6076157" + }, + "packages/ai/src/index.ts": { + "mtime": 1778547181.4398456, + "ast_hash": "12bbedf5800c6832aecf04e261ef11e2", + "semantic_hash": "12bbedf5800c6832aecf04e261ef11e2" + }, + "packages/ai/src/prompts.ts": { + "mtime": 1778452122.4899435, + "ast_hash": "e800dd1d536f3e60d3f4e4cb0bb13c19", + "semantic_hash": "e800dd1d536f3e60d3f4e4cb0bb13c19" + }, + "packages/ai/src/providers/azure-openai.ts": { + "mtime": 1778547181.4398456, + "ast_hash": "79619fae6d374d2d0e141bf31bb725d7", + "semantic_hash": "79619fae6d374d2d0e141bf31bb725d7" + }, + "packages/ai/src/providers/gemini.ts": { + "mtime": 1778547181.440842, + "ast_hash": "93a36e4529c545de6c69122c4a7c184c", + "semantic_hash": "93a36e4529c545de6c69122c4a7c184c" + }, + "packages/ai/src/schemas.ts": { + "mtime": 1778452122.490944, + "ast_hash": "d5e0be6c157bc819bfa7a0fd899c0fb1", + "semantic_hash": "d5e0be6c157bc819bfa7a0fd899c0fb1" + }, + "packages/ai/src/types.ts": { + "mtime": 1778547181.440842, + "ast_hash": "653200851d2a3ded81036f3a54e6de29", + "semantic_hash": "653200851d2a3ded81036f3a54e6de29" + }, + "packages/ai/tsconfig.json": { + "mtime": 1778452122.4924507, + "ast_hash": "b71819362a3d5260080113ff2585b7c6", + "semantic_hash": "b71819362a3d5260080113ff2585b7c6" + }, + "packages/exporter/package.json": { + "mtime": 1778547181.4423523, + "ast_hash": "786fd3a4a4a15493876784786240c53d", + "semantic_hash": "786fd3a4a4a15493876784786240c53d" + }, + "packages/exporter/src/export-generator.test.ts": { + "mtime": 1778452122.49434, + "ast_hash": "169cb8d9addca60b89c594699b0c0400", + "semantic_hash": "169cb8d9addca60b89c594699b0c0400" + }, + "packages/exporter/src/export-generator.ts": { + "mtime": 1778452122.4948487, + "ast_hash": "22a182311fc660d2e73236903e846d1f", + "semantic_hash": "22a182311fc660d2e73236903e846d1f" + }, + "packages/exporter/src/index.ts": { + "mtime": 1778452122.4948487, + "ast_hash": "5d1965c3fd927a8437b90563ffcc3631", + "semantic_hash": "5d1965c3fd927a8437b90563ffcc3631" + }, + "packages/exporter/src/recipe-matcher.ts": { + "mtime": 1778452122.4962718, + "ast_hash": "5ef9992a94b81db7679f13a0721c4b45", + "semantic_hash": "5ef9992a94b81db7679f13a0721c4b45" + }, + "packages/exporter/src/recipes.ts": { + "mtime": 1778452122.4971068, + "ast_hash": "c3d67b839a665e2578b71952e4993150", + "semantic_hash": "c3d67b839a665e2578b71952e4993150" + }, + "packages/exporter/src/templates.ts": { + "mtime": 1778452122.4977984, + "ast_hash": "03684fed4eb88216e22eeacb0d22394a", + "semantic_hash": "03684fed4eb88216e22eeacb0d22394a" + }, + "packages/exporter/tsconfig.json": { + "mtime": 1778452122.4983072, + "ast_hash": "b71819362a3d5260080113ff2585b7c6", + "semantic_hash": "b71819362a3d5260080113ff2585b7c6" + }, + "packages/registry/package.json": { + "mtime": 1778547181.4423523, + "ast_hash": "1916b32fd2d6b1c9ff8d00f62097a8c0", + "semantic_hash": "1916b32fd2d6b1c9ff8d00f62097a8c0" + }, + "packages/registry/src/data/v1/categories.json": { + "mtime": 1778452122.5061111, + "ast_hash": "bd8ce244788eaf0ecf16fbb4be114c5d", + "semantic_hash": "bd8ce244788eaf0ecf16fbb4be114c5d" + }, + "packages/registry/src/data/v1/manifest.json": { + "mtime": 1778452122.5071392, + "ast_hash": "bf6411345345fb9eba1e7d407f5731d6", + "semantic_hash": "bf6411345345fb9eba1e7d407f5731d6" + }, + "packages/registry/src/data/v1/rules.json": { + "mtime": 1778452122.508657, + "ast_hash": "cd1eaba8152b39fc5c9c32a5e6ba2c8b", + "semantic_hash": "cd1eaba8152b39fc5c9c32a5e6ba2c8b" + }, + "packages/registry/src/data/v1/tools.json": { + "mtime": 1778452122.5113194, + "ast_hash": "23977c00e5138e6509b7b8d0ea6e610f", + "semantic_hash": "23977c00e5138e6509b7b8d0ea6e610f" + }, + "packages/registry/src/index.test.ts": { + "mtime": 1778452122.5166311, + "ast_hash": "46d7e06309f220f870c023f6cf0b2ffe", + "semantic_hash": "46d7e06309f220f870c023f6cf0b2ffe" + }, + "packages/registry/src/index.ts": { + "mtime": 1778452122.5166311, + "ast_hash": "a96fff97e008d6c66214791356d899a2", + "semantic_hash": "a96fff97e008d6c66214791356d899a2" + }, + "packages/registry/src/validate.ts": { + "mtime": 1778452122.5176308, + "ast_hash": "eff533b433c75c77985ae7ec6b2ca963", + "semantic_hash": "eff533b433c75c77985ae7ec6b2ca963" + }, + "packages/registry/tsconfig.json": { + "mtime": 1778452122.5183198, + "ast_hash": "b71819362a3d5260080113ff2585b7c6", + "semantic_hash": "b71819362a3d5260080113ff2585b7c6" + }, + "packages/rules-engine/package.json": { + "mtime": 1778547181.443872, + "ast_hash": "bc10e784578c04fe00f42e6554dc56ba", + "semantic_hash": "bc10e784578c04fe00f42e6554dc56ba" + }, + "packages/rules-engine/src/index.ts": { + "mtime": 1778452122.519332, + "ast_hash": "0205d9fb97e9f8adbd78f00d9ed6d29c", + "semantic_hash": "0205d9fb97e9f8adbd78f00d9ed6d29c" + }, + "packages/rules-engine/src/rules-engine.test.ts": { + "mtime": 1778452122.520331, + "ast_hash": "10344ace2b4ef3c514eee76733fab84e", + "semantic_hash": "10344ace2b4ef3c514eee76733fab84e" + }, + "packages/rules-engine/src/rules-engine.ts": { + "mtime": 1778452122.5213363, + "ast_hash": "59be0c4e9a372943f43a5c4d0ca1ee7d", + "semantic_hash": "59be0c4e9a372943f43a5c4d0ca1ee7d" + }, + "packages/rules-engine/src/score-calculator.ts": { + "mtime": 1778452122.5223317, + "ast_hash": "b6885eb25b5728ec54b2829cfa31f335", + "semantic_hash": "b6885eb25b5728ec54b2829cfa31f335" + }, + "packages/rules-engine/tsconfig.json": { + "mtime": 1778452122.522841, + "ast_hash": "b71819362a3d5260080113ff2585b7c6", + "semantic_hash": "b71819362a3d5260080113ff2585b7c6" + }, + "packages/schemas/package.json": { + "mtime": 1778547181.443872, + "ast_hash": "8463af834b8a67f128cc077355837cab", + "semantic_hash": "8463af834b8a67f128cc077355837cab" + }, + "packages/schemas/src/db.ts": { + "mtime": 1778547181.4448793, + "ast_hash": "5ea463b8673b634a48c7dde29803e90a", + "semantic_hash": "5ea463b8673b634a48c7dde29803e90a" + }, + "packages/schemas/src/domain.ts": { + "mtime": 1778452122.5263803, + "ast_hash": "43d6710114815629e627590342430131", + "semantic_hash": "43d6710114815629e627590342430131" + }, + "packages/schemas/src/index.ts": { + "mtime": 1778452122.5273728, + "ast_hash": "0118346904d01b13d0853b5ec11625ff", + "semantic_hash": "0118346904d01b13d0853b5ec11625ff" + }, + "packages/schemas/tsconfig.json": { + "mtime": 1778452122.5273728, + "ast_hash": "b71819362a3d5260080113ff2585b7c6", + "semantic_hash": "b71819362a3d5260080113ff2585b7c6" + }, + "packages/shared/package.json": { + "mtime": 1778547181.4448793, + "ast_hash": "df709a493285e7b0e6b33b606b251f98", + "semantic_hash": "df709a493285e7b0e6b33b606b251f98" + }, + "packages/shared/src/index.ts": { + "mtime": 1778452122.5296035, + "ast_hash": "b07d68aab4d334e856dec40b94fc7b32", + "semantic_hash": "b07d68aab4d334e856dec40b94fc7b32" + }, + "packages/shared/tsconfig.json": { + "mtime": 1778452122.5296035, + "ast_hash": "b71819362a3d5260080113ff2585b7c6", + "semantic_hash": "b71819362a3d5260080113ff2585b7c6" + }, + "playwright.config.ts": { + "mtime": 1778547181.4458828, + "ast_hash": "5cc5da7d5b6681673afb9cdb7a8f81f8", + "semantic_hash": "5cc5da7d5b6681673afb9cdb7a8f81f8" + }, + "scripts/deploy/migrate.ts": { + "mtime": 1782076429.6025796, + "ast_hash": "eeb4f1321e63e7214d3e2396b5b6361a", + "semantic_hash": "eeb4f1321e63e7214d3e2396b5b6361a" + }, + "scripts/deploy/smoke.ts": { + "mtime": 1782076863.5809817, + "ast_hash": "36d028da8bd2328f2b04ec98773293e2", + "semantic_hash": "36d028da8bd2328f2b04ec98773293e2" + }, + "skills-lock.json": { + "mtime": 1778452122.5649538, + "ast_hash": "f721cefb1c2d98e06aeb983d447ef0ba", + "semantic_hash": "f721cefb1c2d98e06aeb983d447ef0ba" + }, + "tests/e2e/deploy-admin-401.spec.ts": { + "mtime": 1782074444.9882312, + "ast_hash": "d872b9f19aded5dd7843d5ae2e3ee1af", + "semantic_hash": "d872b9f19aded5dd7843d5ae2e3ee1af" + }, + "tests/e2e/deploy-cross-origin-auth.spec.ts": { + "mtime": 1782074488.3166897, + "ast_hash": "dfbc97e08fd67475c3e67eba07b19861", + "semantic_hash": "dfbc97e08fd67475c3e67eba07b19861" + }, + "tests/e2e/deploy-health.spec.ts": { + "mtime": 1782074425.6929615, + "ast_hash": "b9773a996304e6a0fba5b1bb7a61c2ac", + "semantic_hash": "b9773a996304e6a0fba5b1bb7a61c2ac" + }, + "tests/e2e/deploy-rate-limit.spec.ts": { + "mtime": 1782074464.4423735, + "ast_hash": "4ff59837d48207bb7f830bc2f870f9a6", + "semantic_hash": "4ff59837d48207bb7f830bc2f870f9a6" + }, + "tests/e2e/mvp-flows.spec.ts": { + "mtime": 1778603392.7644064, + "ast_hash": "e09f331306082b00f40a16dcaa04d679", + "semantic_hash": "e09f331306082b00f40a16dcaa04d679" + }, + "tsconfig.base.json": { + "mtime": 1778452122.569968, + "ast_hash": "bb070e30066c9e5cc0ebb8bfd90e54fa", + "semantic_hash": "bb070e30066c9e5cc0ebb8bfd90e54fa" + }, + "vitest.package.config.ts": { + "mtime": 1778452122.5709667, + "ast_hash": "284b0307f5b28ffd13f452e267f450ef", + "semantic_hash": "284b0307f5b28ffd13f452e267f450ef" + }, + "vitest.workspace.ts": { + "mtime": 1778452122.5741796, + "ast_hash": "59a4d3690ac3fa7c3e514e4bb2cb959b", + "semantic_hash": "59a4d3690ac3fa7c3e514e4bb2cb959b" + }, + ".agents/skills/neon-postgres/SKILL.md": { + "mtime": 1778452122.1063354, + "ast_hash": "d99c42e9c657e51a96e8971e241002c8", + "semantic_hash": "d99c42e9c657e51a96e8971e241002c8" + }, + ".github/workflows/ci.yml": { + "mtime": 1778547181.4242146, + "ast_hash": "42c625aa64e1d32d8c5991b4283db8b4", + "semantic_hash": "42c625aa64e1d32d8c5991b4283db8b4" + }, + ".kiro/specs/phase-8-deployment/design.md": { + "mtime": 1778614087.8386548, + "ast_hash": "8a1144dd2c226ae8f4d97c5d61783269", + "semantic_hash": "8a1144dd2c226ae8f4d97c5d61783269" + }, + ".kiro/specs/phase-8-deployment/requirements.md": { + "mtime": 1778614087.8410144, + "ast_hash": "53152cf1ec1532038bde7eff93e48835", + "semantic_hash": "53152cf1ec1532038bde7eff93e48835" + }, + ".kiro/specs/phase-8-deployment/tasks.md": { + "mtime": 1782077384.581974, + "ast_hash": "34844da88da1d8fb2cc76bc96f7d0ef4", + "semantic_hash": "34844da88da1d8fb2cc76bc96f7d0ef4" + }, + "Agents.md": { + "mtime": 1778452122.1184762, + "ast_hash": "50523c70e514a0ba40feac8058ba3bd1", + "semantic_hash": "50523c70e514a0ba40feac8058ba3bd1" + }, + "ROADMAP.md": { + "mtime": 1778604588.4276476, + "ast_hash": "44a34ad998a7a2952614981aadc982c5", + "semantic_hash": "44a34ad998a7a2952614981aadc982c5" + }, + "SALVAGE_MANIFEST.md": { + "mtime": 1778547181.426212, + "ast_hash": "dc79d40bc5b67e18992a57abffb75336", + "semantic_hash": "dc79d40bc5b67e18992a57abffb75336" + }, + "Stackfast2026 implementation plan.md": { + "mtime": 1778452122.1270134, + "ast_hash": "df4057d1451a802ac1d27c09925f35d1", + "semantic_hash": "df4057d1451a802ac1d27c09925f35d1" + }, + "Stackfast2026.md": { + "mtime": 1778452122.1310112, + "ast_hash": "c37618799b43180795632b4b19c489c9", + "semantic_hash": "c37618799b43180795632b4b19c489c9" + }, + "apps/web/index.html": { + "mtime": 1778547181.4328246, + "ast_hash": "a1805efb3e668ba24fc598e1615136ef", + "semantic_hash": "a1805efb3e668ba24fc598e1615136ef" + }, + "docs/backlog/INTEGRATION_PLAN.md": { + "mtime": 1778547181.4348478, + "ast_hash": "6409b034e357a093c9cc081d59322346", + "semantic_hash": "6409b034e357a093c9cc081d59322346" + }, + "docs/decisions/001-authentication-strategy.md": { + "mtime": 1778547181.4358463, + "ast_hash": "7df8c17e20bf4bcf30987be5d746d18a", + "semantic_hash": "7df8c17e20bf4bcf30987be5d746d18a" + }, + "docs/decisions/002-ai-provider-strategy.md": { + "mtime": 1778547181.4358463, + "ast_hash": "0a2a0663ff1c9ebeead5ad40affdb566", + "semantic_hash": "0a2a0663ff1c9ebeead5ad40affdb566" + }, + "docs/decisions/003-deployment-architecture.md": { + "mtime": 1778604588.4307952, + "ast_hash": "6fc4e4f138134033f13bc81f0dba298f", + "semantic_hash": "6fc4e4f138134033f13bc81f0dba298f" + }, + "docs/deferred/webailyzer.md": { + "mtime": 1778547181.4368489, + "ast_hash": "bd5a1c32eb4ad96c1a1ca51e42e5ac53", + "semantic_hash": "bd5a1c32eb4ad96c1a1ca51e42e5ac53" + }, + "pnpm-workspace.yaml": { + "mtime": 1778452122.5372486, + "ast_hash": "d5be812a006874b28b001939398d22e8", + "semantic_hash": "d5be812a006874b28b001939398d22e8" + }, + "readme.md": { + "mtime": 1782077351.5162246, + "ast_hash": "96895a3489ac70aecd7db3cec9f0b9cd", + "semantic_hash": "96895a3489ac70aecd7db3cec9f0b9cd" + }, + "scripts/deploy/rollback.md": { + "mtime": 1782077110.0208533, + "ast_hash": "af2cd7dad555b28e0debb5f784f22c71", + "semantic_hash": "af2cd7dad555b28e0debb5f784f22c71" + }, + "apps/web/public/vite.svg": { + "mtime": 1778452122.1564755, + "ast_hash": "8e3a10e157f75ada21ab742c022d5430", + "semantic_hash": "8e3a10e157f75ada21ab742c022d5430" + } +} \ No newline at end of file diff --git a/graphify-out/queries/q01-use-toast.txt b/graphify-out/queries/q01-use-toast.txt new file mode 100644 index 0000000..0023017 --- /dev/null +++ b/graphify-out/queries/q01-use-toast.txt @@ -0,0 +1,87 @@ +Traversal: BFS depth=2 | Start: ['useToast()', 'dependencies', 'dependencies'] | 116 nodes found + +NODE index.ts [src=apps/web/src/types/index.ts loc=L1 community=8] +NODE Tool [src=apps/web/src/types/tool.ts loc=L45 community=14] +NODE StackBuilder.tsx [src=apps/web/src/components/StackBuilder.tsx loc=L1 community=35] +NODE index.ts [src=apps/web/src/context/index.ts loc=L1 community=36] +NODE index.ts [src=apps/web/src/components/index.ts loc=L1 community=45] +NODE StackBuilderPage.tsx [src=apps/web/src/pages/StackBuilderPage.tsx loc=L1 community=26] +NODE catalog-loader.ts [src=apps/web/src/lib/catalog-loader.ts loc=L1 community=39] +NODE dependencies [src=apps/web/package.json loc=L14 community=7] +NODE Diagnostic [src=apps/web/src/types/diagnostic.ts loc=L31 community=36] +NODE CompatibilityScore.tsx [src=apps/web/src/components/CompatibilityScore.tsx loc=L1 community=17] +NODE use-toast.ts [src=apps/web/src/hooks/use-toast.ts loc=L1 community=15] +NODE DiagnosticList.tsx [src=apps/web/src/components/DiagnosticList.tsx loc=L1 community=17] +NODE useRulesEngine.ts [src=apps/web/src/hooks/useRulesEngine.ts loc=L1 community=36] +NODE SmartSuggestion.tsx [src=apps/web/src/components/SmartSuggestion.tsx loc=L1 community=35] +NODE dependencies [src=apps/api/package.json loc=L15 community=10] +NODE suggestion.ts [src=apps/web/src/types/suggestion.ts loc=L1 community=16] +NODE CategorySection.tsx [src=apps/web/src/components/CategorySection.tsx loc=L1 community=45] +NODE button.tsx [src=apps/web/src/components/ui/button.tsx loc=L1 community=26] +NODE toast.tsx [src=apps/web/src/components/ui/toast.tsx loc=L1 community=15] +NODE Rule [src=apps/web/src/types/rule.ts loc=L86 community=51] +NODE Suggestion [src=apps/web/src/types/suggestion.ts loc=L19 community=20] +NODE useStackSelection.ts [src=apps/web/src/hooks/useStackSelection.ts loc=L1 community=35] +NODE card.tsx [src=apps/web/src/components/ui/card.tsx loc=L1 community=17] +NODE badge.tsx [src=apps/web/src/components/ui/badge.tsx loc=L1 community=18] +NODE devDependencies [src=apps/web/package.json loc=L38 community=7] +NODE Category [src=apps/web/src/types/category.ts loc=L37 community=51] +NODE toaster.tsx [src=apps/web/src/components/ui/toaster.tsx loc=L1 community=15] +NODE Button [src=apps/web/src/components/ui/button.tsx loc=L41 community=26] +NODE Badge() [src=apps/web/src/components/ui/badge.tsx loc=L30 community=18] +NODE scripts [src=apps/api/package.json loc=L6 community=10] +NODE useToast() [src=apps/web/src/hooks/use-toast.ts loc=L172 community=35] +NODE package.json [src=apps/api/package.json loc=L1 community=10] +NODE CompatibilityScore() [src=apps/web/src/components/CompatibilityScore.tsx loc=L31 community=17] +NODE StackBuilder() [src=apps/web/src/components/StackBuilder.tsx loc=L38 community=35] +NODE scripts [src=apps/web/package.json loc=L6 community=7] +NODE package.json [src=apps/web/package.json loc=L1 community=7] +NODE devDependencies [src=apps/api/package.json loc=L32 community=10] +NODE useSuggestionsContext() [src=apps/web/src/context/SuggestionsContext.tsx loc=L88 community=20] +NODE SmartSuggestion() [src=apps/web/src/components/SmartSuggestion.tsx loc=L25 community=35] +NODE useRulesEngine() [src=apps/web/src/hooks/useRulesEngine.ts loc=L79 community=35] +NODE useStackSelection() [src=apps/web/src/hooks/useStackSelection.ts loc=L43 community=35] +NODE StackBuilderProps [src=apps/web/src/components/StackBuilder.tsx loc=L18 community=51] +NODE Card [src=apps/web/src/components/ui/card.tsx loc=L5 community=17] +NODE CardContent [src=apps/web/src/components/ui/card.tsx loc=L59 community=17] +NODE DiagnosticList() [src=apps/web/src/components/DiagnosticList.tsx loc=L21 community=17] +NODE Toast [src=apps/web/src/hooks/use-toast.ts loc=L141 community=15] +NODE clearCatalogCache() [src=apps/web/src/lib/catalog-loader.ts loc=L201 community=26] +NODE CategorySection() [src=apps/web/src/components/CategorySection.tsx loc=L29 community=45] +NODE dispatch() [src=apps/web/src/hooks/use-toast.ts loc=L134 community=15] +NODE reducer() [src=apps/web/src/hooks/use-toast.ts loc=L75 community=15] +NODE SmartSuggestionProps [src=apps/web/src/components/SmartSuggestion.tsx loc=L8 community=35] +NODE Toaster() [src=apps/web/src/components/ui/toaster.tsx loc=L11 community=35] +NODE ScoreBreakdown [src=apps/web/src/components/CompatibilityScore.tsx loc=L9 community=35] +NODE getPriorityLabel() [src=apps/web/src/components/SmartSuggestion.tsx loc=L166 community=35] +NODE addToRemoveQueue() [src=apps/web/src/hooks/use-toast.ts loc=L59 community=15] +NODE genId() [src=apps/web/src/hooks/use-toast.ts loc=L30 community=15] +NODE ToastProps [src=apps/web/src/components/ui/toast.tsx loc=L113 community=15] +NODE ToastViewport [src=apps/web/src/components/ui/toast.tsx loc=L10 community=15] +NODE ToastActionElement [src=apps/web/src/components/ui/toast.tsx loc=L115 community=15] +NODE ToastClose [src=apps/web/src/components/ui/toast.tsx loc=L71 community=15] +NODE react [src=apps/web/package.json loc=L32 community=7] +NODE ToastTitle [src=apps/web/src/components/ui/toast.tsx loc=L89 community=15] +NODE ToastDescription [src=apps/web/src/components/ui/toast.tsx loc=L101 community=15] +NODE getPriorityVariant() [src=apps/web/src/components/SmartSuggestion.tsx loc=L152 community=35] +NODE Toast [src=apps/web/src/components/ui/toast.tsx loc=L41 community=15] +NODE @radix-ui/react-collapsible [src=apps/web/package.json loc=L15 community=7] +NODE better-auth [src=apps/api/package.json loc=L27 community=10] +NODE jszip [src=apps/web/package.json loc=L30 community=7] +NODE @stackfast/registry [src=apps/web/package.json loc=L22 community=7] +NODE react-dom [src=apps/web/package.json loc=L33 community=7] +NODE wouter [src=apps/web/package.json loc=L35 community=7] +NODE class-variance-authority [src=apps/web/package.json loc=L28 community=7] +NODE @stackfast/ai [src=apps/api/package.json loc=L19 community=10] +NODE listeners [src=apps/web/src/hooks/use-toast.ts loc=L130 community=15] +NODE name [src=apps/web/package.json loc=L2 community=7] +NODE Action [src=apps/web/src/hooks/use-toast.ts loc=L35 community=15] +NODE private [src=apps/web/package.json loc=L4 community=7] +NODE tailwind-merge [src=apps/web/package.json loc=L34 community=7] +NODE private [src=apps/api/package.json loc=L4 community=10] +NODE @stackfast/schemas [src=apps/api/package.json loc=L23 community=10] +NODE State [src=apps/web/src/hooks/use-toast.ts loc=L53 community=15] +NODE @radix-ui/react-tooltip [src=apps/web/package.json loc=L19 community=7] +NODE toastTimeouts [src=apps/web/src/hooks/use-toast.ts loc=L57 community=15] +NODE @radix-ui/react-dialog [src=apps/web/package.json loc=L16 community=7] +... (truncated ΓÇö 32 more nodes cut by ~2200-token budget. Narrow with context_filter=['call'] or use get_node for a specific symbol) diff --git a/graphify-out/queries/q02-react-bridge.txt b/graphify-out/queries/q02-react-bridge.txt new file mode 100644 index 0000000..03eb004 --- /dev/null +++ b/graphify-out/queries/q02-react-bridge.txt @@ -0,0 +1,103 @@ +Traversal: BFS depth=2 | Start: ['react', 'dependencies', 'dependencies'] | 61 nodes found + +NODE StackBuilder.tsx [src=apps/web/src/components/StackBuilder.tsx loc=L1 community=35] +NODE dependencies [src=apps/web/package.json loc=L14 community=7] +NODE use-toast.ts [src=apps/web/src/hooks/use-toast.ts loc=L1 community=15] +NODE SmartSuggestion.tsx [src=apps/web/src/components/SmartSuggestion.tsx loc=L1 community=35] +NODE dependencies [src=apps/api/package.json loc=L15 community=10] +NODE devDependencies [src=apps/web/package.json loc=L38 community=7] +NODE toaster.tsx [src=apps/web/src/components/ui/toaster.tsx loc=L1 community=15] +NODE scripts [src=apps/api/package.json loc=L6 community=10] +NODE useToast() [src=apps/web/src/hooks/use-toast.ts loc=L172 community=35] +NODE package.json [src=apps/api/package.json loc=L1 community=10] +NODE scripts [src=apps/web/package.json loc=L6 community=7] +NODE StackBuilder() [src=apps/web/src/components/StackBuilder.tsx loc=L38 community=35] +NODE package.json [src=apps/web/package.json loc=L1 community=7] +NODE devDependencies [src=apps/api/package.json loc=L32 community=10] +NODE SmartSuggestion() [src=apps/web/src/components/SmartSuggestion.tsx loc=L25 community=35] +NODE Toaster() [src=apps/web/src/components/ui/toaster.tsx loc=L11 community=35] +NODE react [src=apps/web/package.json loc=L32 community=7] +NODE @upstash/ratelimit [src=apps/api/package.json loc=L25 community=10] +NODE zod [src=apps/api/package.json loc=L30 community=10] +NODE jszip [src=apps/web/package.json loc=L30 community=7] +NODE lucide-react [src=apps/web/package.json loc=L31 community=7] +NODE @stackfast/rules-engine [src=apps/api/package.json loc=L22 community=10] +NODE @stackfast/ai [src=apps/api/package.json loc=L19 community=10] +NODE @stackfast/schemas [src=apps/web/package.json loc=L24 community=7] +NODE @stackfast/rules-engine [src=apps/web/package.json loc=L23 community=7] +NODE version [src=apps/web/package.json loc=L3 community=7] +NODE @upstash/redis [src=apps/api/package.json loc=L26 community=10] +NODE drizzle-orm [src=apps/api/package.json loc=L28 community=10] +NODE tailwind-merge [src=apps/web/package.json loc=L34 community=7] +NODE @stackfast/shared [src=apps/api/package.json loc=L24 community=10] +NODE hono [src=apps/api/package.json loc=L29 community=10] +NODE @radix-ui/react-tooltip [src=apps/web/package.json loc=L19 community=7] +NODE name [src=apps/api/package.json loc=L2 community=10] +NODE private [src=apps/api/package.json loc=L4 community=10] +NODE @stackfast/schemas [src=apps/api/package.json loc=L23 community=10] +NODE clsx [src=apps/web/package.json loc=L29 community=7] +NODE @stackfast/registry [src=apps/web/package.json loc=L22 community=7] +NODE @stackfast/exporter [src=apps/api/package.json loc=L20 community=10] +NODE @radix-ui/react-slot [src=apps/web/package.json loc=L17 community=7] +NODE react-dom [src=apps/web/package.json loc=L33 community=7] +NODE wouter [src=apps/web/package.json loc=L35 community=7] +NODE zod [src=apps/web/package.json loc=L36 community=7] +NODE class-variance-authority [src=apps/web/package.json loc=L28 community=7] +NODE @radix-ui/react-collapsible [src=apps/web/package.json loc=L15 community=7] +NODE type [src=apps/api/package.json loc=L5 community=10] +NODE version [src=apps/api/package.json loc=L3 community=10] +NODE @radix-ui/react-toast [src=apps/web/package.json loc=L18 community=7] +NODE better-auth [src=apps/web/package.json loc=L27 community=7] +NODE @stackfast/registry [src=apps/api/package.json loc=L21 community=10] +NODE @sentry/react [src=apps/web/package.json loc=L20 community=7] +NODE @stackfast/shared [src=apps/web/package.json loc=L25 community=7] +NODE @tanstack/react-query [src=apps/web/package.json loc=L26 community=7] +NODE @hono/node-server [src=apps/api/package.json loc=L16 community=10] +NODE @neondatabase/serverless [src=apps/api/package.json loc=L17 community=10] +NODE better-auth [src=apps/api/package.json loc=L27 community=10] +NODE @sentry/vite-plugin [src=apps/web/package.json loc=L21 community=7] +NODE @radix-ui/react-dialog [src=apps/web/package.json loc=L16 community=7] +NODE private [src=apps/web/package.json loc=L4 community=7] +NODE type [src=apps/web/package.json loc=L5 community=7] +NODE name [src=apps/web/package.json loc=L2 community=7] +NODE @sentry/node [src=apps/api/package.json loc=L18 community=10] +EDGE dependencies --contains [EXTRACTED]--> package.json +EDGE dependencies --contains [EXTRACTED]--> better-auth +EDGE dependencies --contains [EXTRACTED]--> drizzle-orm +EDGE dependencies --contains [EXTRACTED]--> hono +EDGE dependencies --contains [EXTRACTED]--> @hono/node-server +EDGE dependencies --contains [EXTRACTED]--> @neondatabase/serverless +EDGE dependencies --contains [EXTRACTED]--> @sentry/node +EDGE dependencies --contains [EXTRACTED]--> @stackfast/ai +EDGE dependencies --contains [EXTRACTED]--> @stackfast/exporter +EDGE dependencies --contains [EXTRACTED]--> @stackfast/registry +EDGE dependencies --contains [EXTRACTED]--> @stackfast/rules-engine +EDGE dependencies --contains [EXTRACTED]--> @stackfast/schemas +EDGE dependencies --contains [EXTRACTED]--> @stackfast/shared +EDGE dependencies --contains [EXTRACTED]--> @upstash/ratelimit +EDGE dependencies --contains [EXTRACTED]--> @upstash/redis +EDGE dependencies --contains [EXTRACTED]--> zod +EDGE react --references [EXTRACTED context=call]--> useToast() +EDGE dependencies --contains [EXTRACTED]--> package.json +EDGE dependencies --contains [EXTRACTED]--> better-auth +EDGE dependencies --contains [EXTRACTED]--> class-variance-authority +EDGE dependencies --contains [EXTRACTED]--> clsx +EDGE dependencies --contains [EXTRACTED]--> jszip +EDGE dependencies --contains [EXTRACTED]--> lucide-react +EDGE dependencies --contains [EXTRACTED]--> @radix-ui/react-collapsible +EDGE dependencies --contains [EXTRACTED]--> @radix-ui/react-dialog +EDGE dependencies --contains [EXTRACTED]--> @radix-ui/react-slot +EDGE dependencies --contains [EXTRACTED]--> @radix-ui/react-toast +EDGE dependencies --contains [EXTRACTED]--> @radix-ui/react-tooltip +EDGE dependencies --contains [EXTRACTED]--> react-dom +EDGE dependencies --contains [EXTRACTED]--> @sentry/react +EDGE dependencies --contains [EXTRACTED]--> @sentry/vite-plugin +EDGE dependencies --contains [EXTRACTED]--> @stackfast/registry +EDGE dependencies --contains [EXTRACTED]--> @stackfast/rules-engine +EDGE dependencies --contains [EXTRACTED]--> @stackfast/schemas +EDGE dependencies --contains [EXTRACTED]--> @stackfast/shared +EDGE dependencies --contains [EXTRACTED]--> tailwind-merge +EDGE dependencies --contains [EXTRACTED]--> @tanstack/react-query +EDGE dependencies --contains [EXTRACTED]--> wouter +EDGE dependencies --contains [EXTRACTED]--> zod +... (truncated ΓÇö 0 more nodes cut by ~2200-token budget. Narrow with context_filter=['call'] or use get_node for a specific symbol) diff --git a/graphify-out/queries/q03-package-metadata.txt b/graphify-out/queries/q03-package-metadata.txt new file mode 100644 index 0000000..420d039 --- /dev/null +++ b/graphify-out/queries/q03-package-metadata.txt @@ -0,0 +1,47 @@ +Traversal: BFS depth=2 | Start: ['private', 'private', 'private'] | 24 nodes found + +NODE dependencies [src=apps/web/package.json loc=L14 community=7] +NODE dependencies [src=apps/api/package.json loc=L15 community=10] +NODE devDependencies [src=package.json loc=L20 community=11] +NODE scripts [src=package.json loc=L8 community=11] +NODE devDependencies [src=apps/web/package.json loc=L38 community=7] +NODE scripts [src=apps/api/package.json loc=L6 community=10] +NODE package.json [src=apps/api/package.json loc=L1 community=10] +NODE package.json [src=package.json loc=L1 community=11] +NODE package.json [src=apps/web/package.json loc=L1 community=7] +NODE scripts [src=apps/web/package.json loc=L6 community=7] +NODE devDependencies [src=apps/api/package.json loc=L32 community=10] +NODE engines [src=package.json loc=L4 community=11] +NODE dependencies [src=package.json loc=L34 community=11] +NODE type [src=apps/web/package.json loc=L5 community=7] +NODE name [src=apps/web/package.json loc=L2 community=7] +NODE name [src=apps/api/package.json loc=L2 community=10] +NODE version [src=apps/web/package.json loc=L3 community=7] +NODE private [src=apps/api/package.json loc=L4 community=10] +NODE private [src=apps/web/package.json loc=L4 community=7] +NODE version [src=apps/api/package.json loc=L3 community=10] +NODE private [src=package.json loc=L3 community=11] +NODE type [src=apps/api/package.json loc=L5 community=10] +NODE packageManager [src=package.json loc=L7 community=11] +NODE name [src=package.json loc=L2 community=11] +EDGE private --contains [EXTRACTED]--> package.json +EDGE private --contains [EXTRACTED]--> package.json +EDGE private --contains [EXTRACTED]--> package.json +EDGE package.json --contains [EXTRACTED]--> dependencies +EDGE package.json --contains [EXTRACTED]--> devDependencies +EDGE package.json --contains [EXTRACTED]--> engines +EDGE package.json --contains [EXTRACTED]--> name +EDGE package.json --contains [EXTRACTED]--> packageManager +EDGE package.json --contains [EXTRACTED]--> scripts +EDGE package.json --contains [EXTRACTED]--> dependencies +EDGE package.json --contains [EXTRACTED]--> devDependencies +EDGE package.json --contains [EXTRACTED]--> name +EDGE package.json --contains [EXTRACTED]--> scripts +EDGE package.json --contains [EXTRACTED]--> type +EDGE package.json --contains [EXTRACTED]--> version +EDGE package.json --contains [EXTRACTED]--> dependencies +EDGE package.json --contains [EXTRACTED]--> devDependencies +EDGE package.json --contains [EXTRACTED]--> name +EDGE package.json --contains [EXTRACTED]--> scripts +EDGE package.json --contains [EXTRACTED]--> type +EDGE package.json --contains [EXTRACTED]--> version diff --git a/graphify-out/queries/q04-web-visualization-split.txt b/graphify-out/queries/q04-web-visualization-split.txt new file mode 100644 index 0000000..7a7aff2 --- /dev/null +++ b/graphify-out/queries/q04-web-visualization-split.txt @@ -0,0 +1,3 @@ +Traversal: BFS depth=2 | Start: ['components'] | Context: import (heuristic) | 1 nodes found + +NODE components [src=apps/web/components.json loc=L14 community=28] diff --git a/graphify-out/queries/q05-domain-schemas-split.txt b/graphify-out/queries/q05-domain-schemas-split.txt new file mode 100644 index 0000000..92d7a76 --- /dev/null +++ b/graphify-out/queries/q05-domain-schemas-split.txt @@ -0,0 +1,69 @@ +Traversal: BFS depth=2 | Start: ['domain.ts', 'Split Web and API Railway Services', 'schemas.ts'] | Context: import (heuristic) | 25 nodes found + +NODE index.ts [src=packages/schemas/src/index.ts loc=L1 community=0] +NODE azure-openai.ts [src=packages/ai/src/providers/azure-openai.ts loc=L1 community=0] +NODE gemini.ts [src=packages/ai/src/providers/gemini.ts loc=L1 community=0] +NODE Tool [src=packages/schemas/src/domain.ts loc=L100 community=0] +NODE index.ts [src=packages/ai/src/index.ts loc=L1 community=0] +NODE Diagnostic [src=packages/schemas/src/domain.ts loc=L202 community=0] +NODE prompts.ts [src=packages/ai/src/prompts.ts loc=L1 community=0] +NODE ImplementationRoadmap [src=packages/schemas/src/domain.ts loc=L471 community=0] +NODE WhyNotExplanation [src=packages/schemas/src/domain.ts loc=L477 community=0] +NODE AiTradeoffResponseSchema [src=packages/ai/src/schemas.ts loc=L32 community=0] +NODE schemas.ts [src=packages/ai/src/schemas.ts loc=L1 community=0] +NODE BlueprintExplainer [src=packages/ai/src/index.ts loc=L45 community=0] +NODE buildRoadmapPrompt() [src=packages/ai/src/prompts.ts loc=L93 community=0] +NODE RoadmapResult [src=packages/ai/src/index.ts loc=L30 community=0] +NODE AiExplanationResponseSchema [src=packages/ai/src/schemas.ts loc=L11 community=0] +NODE TradeoffResult [src=packages/ai/src/index.ts loc=L20 community=0] +NODE AiWhyNotResponseSchema [src=packages/ai/src/schemas.ts loc=L50 community=0] +NODE buildWhyNotPrompt() [src=packages/ai/src/prompts.ts loc=L75 community=0] +NODE ExplanationResult [src=packages/ai/src/index.ts loc=L9 community=0] +NODE buildExplanationPrompt() [src=packages/ai/src/prompts.ts loc=L35 community=0] +NODE buildTradeoffPrompt() [src=packages/ai/src/prompts.ts loc=L51 community=0] +NODE AiRoadmapResponseSchema [src=packages/ai/src/schemas.ts loc=L63 community=0] +NODE WhyNotResult [src=packages/ai/src/index.ts loc=L25 community=0] +NODE Split Web and API Railway Services [src=docs/decisions/003-deployment-architecture.md loc=None community=37] +NODE domain.ts [src=packages/schemas/src/domain.ts loc=L1 community=1] +EDGE schemas.ts --imports_from [EXTRACTED context=import]--> azure-openai.ts +EDGE schemas.ts --imports_from [EXTRACTED context=import]--> gemini.ts +EDGE azure-openai.ts --imports_from [EXTRACTED context=import]--> index.ts +EDGE azure-openai.ts --imports [EXTRACTED context=import]--> ExplanationResult +EDGE azure-openai.ts --imports [EXTRACTED context=import]--> TradeoffResult +EDGE azure-openai.ts --imports [EXTRACTED context=import]--> WhyNotResult +EDGE azure-openai.ts --imports [EXTRACTED context=import]--> RoadmapResult +EDGE azure-openai.ts --imports [EXTRACTED context=import]--> BlueprintExplainer +EDGE azure-openai.ts --imports_from [EXTRACTED context=import]--> prompts.ts +EDGE azure-openai.ts --imports [EXTRACTED context=import]--> buildExplanationPrompt() +EDGE azure-openai.ts --imports [EXTRACTED context=import]--> buildTradeoffPrompt() +EDGE azure-openai.ts --imports [EXTRACTED context=import]--> buildWhyNotPrompt() +EDGE azure-openai.ts --imports [EXTRACTED context=import]--> buildRoadmapPrompt() +EDGE azure-openai.ts --imports [EXTRACTED context=import]--> AiExplanationResponseSchema +EDGE azure-openai.ts --imports [EXTRACTED context=import]--> AiRoadmapResponseSchema +EDGE azure-openai.ts --imports [EXTRACTED context=import]--> AiTradeoffResponseSchema +EDGE azure-openai.ts --imports [EXTRACTED context=import]--> AiWhyNotResponseSchema +EDGE azure-openai.ts --imports [EXTRACTED context=import]--> Diagnostic +EDGE azure-openai.ts --imports [EXTRACTED context=import]--> ImplementationRoadmap +EDGE azure-openai.ts --imports [EXTRACTED context=import]--> Tool +EDGE azure-openai.ts --imports [EXTRACTED context=import]--> WhyNotExplanation +EDGE azure-openai.ts --imports_from [EXTRACTED context=import]--> index.ts +EDGE gemini.ts --imports_from [EXTRACTED context=import]--> index.ts +EDGE gemini.ts --imports [EXTRACTED context=import]--> ExplanationResult +EDGE gemini.ts --imports [EXTRACTED context=import]--> TradeoffResult +EDGE gemini.ts --imports [EXTRACTED context=import]--> WhyNotResult +EDGE gemini.ts --imports [EXTRACTED context=import]--> RoadmapResult +EDGE gemini.ts --imports [EXTRACTED context=import]--> BlueprintExplainer +EDGE gemini.ts --imports_from [EXTRACTED context=import]--> prompts.ts +EDGE gemini.ts --imports [EXTRACTED context=import]--> buildExplanationPrompt() +EDGE gemini.ts --imports [EXTRACTED context=import]--> buildTradeoffPrompt() +EDGE gemini.ts --imports [EXTRACTED context=import]--> buildWhyNotPrompt() +EDGE gemini.ts --imports [EXTRACTED context=import]--> buildRoadmapPrompt() +EDGE gemini.ts --imports [EXTRACTED context=import]--> AiExplanationResponseSchema +EDGE gemini.ts --imports [EXTRACTED context=import]--> AiRoadmapResponseSchema +EDGE gemini.ts --imports [EXTRACTED context=import]--> AiTradeoffResponseSchema +EDGE gemini.ts --imports [EXTRACTED context=import]--> AiWhyNotResponseSchema +EDGE gemini.ts --imports [EXTRACTED context=import]--> Diagnostic +EDGE gemini.ts --imports [EXTRACTED context=import]--> ImplementationRoadmap +EDGE gemini.ts --imports [EXTRACTED context=import]--> Tool +EDGE gemini.ts --imports [EXTRACTED context=import]--> WhyNotExplanation +EDGE gemini.ts --imports_from [EXTRACTED context=import]--> index.ts diff --git a/graphify-out/queries/q06-api-contract-tests-split.txt b/graphify-out/queries/q06-api-contract-tests-split.txt new file mode 100644 index 0000000..e8c2018 --- /dev/null +++ b/graphify-out/queries/q06-api-contract-tests-split.txt @@ -0,0 +1,5 @@ +Traversal: BFS depth=2 | Start: ['Split Web and API Railway Services', 'API_ORIGIN', 'API_ORIGIN'] | Context: import (heuristic) | 3 nodes found + +NODE API_ORIGIN [src=tests/e2e/deploy-admin-401.spec.ts loc=L25 community=73] +NODE Split Web and API Railway Services [src=docs/decisions/003-deployment-architecture.md loc=None community=37] +NODE API_ORIGIN [src=tests/e2e/deploy-cross-origin-auth.spec.ts loc=L36 community=80] diff --git a/graphify-out/queries/q07-web-app-shell-split.txt b/graphify-out/queries/q07-web-app-shell-split.txt new file mode 100644 index 0000000..6ec6d32 --- /dev/null +++ b/graphify-out/queries/q07-web-app-shell-split.txt @@ -0,0 +1,58 @@ +Traversal: BFS depth=2 | Start: ['App()', 'app'] | Context: import (heuristic) | 23 nodes found + +NODE app.ts [src=apps/api/src/app.ts loc=L1 community=5] +NODE index.ts [src=apps/api/src/rate-limit/index.ts loc=L1 community=2] +NODE App.tsx [src=apps/web/src/App.tsx loc=L1 community=3] +NODE buckets.ts [src=apps/api/src/rate-limit/buckets.ts loc=L1 community=2] +NODE BUCKETS [src=apps/api/src/rate-limit/buckets.ts loc=L22 community=2] +NODE app.test.ts [src=apps/api/src/app.test.ts loc=L1 community=2] +NODE app.pbt.test.ts [src=apps/api/src/app.pbt.test.ts loc=L1 community=2] +NODE types.ts [src=apps/api/src/rate-limit/types.ts loc=L1 community=2] +NODE RateLimitBackend [src=apps/api/src/rate-limit/types.ts loc=L47 community=2] +NODE RateLimitDecision [src=apps/api/src/rate-limit/types.ts loc=L22 community=2] +NODE RateLimitCheckArgs [src=apps/api/src/rate-limit/types.ts loc=L34 community=2] +NODE sentry.ts [src=apps/api/src/observability/sentry.ts loc=L1 community=5] +NODE app.sentry.test.ts [src=apps/api/src/app.sentry.test.ts loc=L1 community=5] +NODE main.tsx [src=apps/web/src/main.tsx loc=L1 community=3] +NODE app [src=apps/api/src/app.ts loc=L79 community=5] +NODE initSentry() [src=apps/api/src/observability/sentry.ts loc=L45 community=5] +NODE __resetSentryForTests() [src=apps/api/src/observability/sentry.ts loc=L175 community=5] +NODE index.ts [src=apps/api/src/index.ts loc=L1 community=5] +NODE client.ts [src=apps/api/src/db/client.ts loc=L1 community=70] +NODE sentry.ts [src=apps/web/src/lib/sentry.ts loc=L1 community=3] +NODE __resetBackendForTests() [src=apps/api/src/rate-limit/index.ts loc=L85 community=2] +NODE initSentry() [src=apps/web/src/lib/sentry.ts loc=L45 community=3] +NODE App() [src=apps/web/src/App.tsx loc=L19 community=3] +EDGE app --imports [EXTRACTED context=import]--> app.pbt.test.ts +EDGE app --imports [EXTRACTED context=import]--> app.sentry.test.ts +EDGE app --imports [EXTRACTED context=import]--> app.test.ts +EDGE app --imports [EXTRACTED context=import]--> index.ts +EDGE App() --imports [EXTRACTED context=import]--> main.tsx +EDGE index.ts --imports_from [EXTRACTED context=import]--> sentry.ts +EDGE index.ts --imports [EXTRACTED context=import]--> initSentry() +EDGE app.sentry.test.ts --imports_from [EXTRACTED context=import]--> app.ts +EDGE app.sentry.test.ts --imports_from [EXTRACTED context=import]--> sentry.ts +EDGE app.sentry.test.ts --imports [EXTRACTED context=import]--> initSentry() +EDGE app.sentry.test.ts --imports [EXTRACTED context=import]--> __resetSentryForTests() +EDGE app.test.ts --imports_from [EXTRACTED context=import]--> app.ts +EDGE app.test.ts --imports_from [EXTRACTED context=import]--> buckets.ts +EDGE app.test.ts --imports [EXTRACTED context=import]--> BUCKETS +EDGE app.test.ts --imports_from [EXTRACTED context=import]--> index.ts +EDGE app.test.ts --imports [EXTRACTED context=import]--> __resetBackendForTests() +EDGE app.test.ts --imports_from [EXTRACTED context=import]--> types.ts +EDGE app.test.ts --imports [EXTRACTED context=import]--> RateLimitBackend +EDGE app.test.ts --imports [EXTRACTED context=import]--> RateLimitCheckArgs +EDGE app.test.ts --imports [EXTRACTED context=import]--> RateLimitDecision +EDGE app.pbt.test.ts --imports_from [EXTRACTED context=import]--> app.ts +EDGE app.pbt.test.ts --imports_from [EXTRACTED context=import]--> buckets.ts +EDGE app.pbt.test.ts --imports [EXTRACTED context=import]--> BUCKETS +EDGE app.pbt.test.ts --imports_from [EXTRACTED context=import]--> index.ts +EDGE app.pbt.test.ts --imports [EXTRACTED context=import]--> __resetBackendForTests() +EDGE app.pbt.test.ts --imports_from [EXTRACTED context=import]--> types.ts +EDGE app.pbt.test.ts --imports [EXTRACTED context=import]--> RateLimitBackend +EDGE app.pbt.test.ts --imports [EXTRACTED context=import]--> RateLimitCheckArgs +EDGE app.pbt.test.ts --imports [EXTRACTED context=import]--> RateLimitDecision +EDGE main.tsx --imports_from [EXTRACTED context=import]--> client.ts +EDGE main.tsx --imports_from [EXTRACTED context=import]--> App.tsx +EDGE main.tsx --imports_from [EXTRACTED context=import]--> sentry.ts +EDGE main.tsx --imports [EXTRACTED context=import]--> initSentry() diff --git a/package.json b/package.json index 6ad1b53..a39442c 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "dotenv-cli": "^11.0.0", "eslint": "^9.17.0", "prettier": "^3.4.2", + "tsx": "^4.19.2", "typescript": "^5.6.3", "typescript-eslint": "^8.19.1", "vite": "^5.4.11", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 532e6a6..5918263 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,7 +10,7 @@ importers: dependencies: '@better-auth/infra': specifier: ^0.2.7 - version: 0.2.7(4dlgsdvqqthuy6qz7v6sgg3pm4) + version: 0.2.7(jjtwi5szho4jztv4wi5e36vrtm) devDependencies: '@eslint/js': specifier: ^9.17.0 @@ -33,6 +33,9 @@ importers: prettier: specifier: ^3.4.2 version: 3.8.3 + tsx: + specifier: ^4.19.2 + version: 4.21.0 typescript: specifier: ^5.6.3 version: 5.9.3 @@ -44,7 +47,7 @@ importers: version: 5.4.21(@types/node@25.6.2) vitest: specifier: ^2.1.8 - version: 2.1.9(@types/node@25.6.2) + version: 2.1.9(@types/node@25.6.2)(happy-dom@15.11.7) apps/api: dependencies: @@ -54,6 +57,9 @@ importers: '@neondatabase/serverless': specifier: ^0.10.4 version: 0.10.4 + '@sentry/node': + specifier: ^10.53.1 + version: 10.53.1 '@stackfast/ai': specifier: workspace:* version: link:../../packages/ai @@ -80,10 +86,10 @@ importers: version: 1.38.0 better-auth: specifier: ^1.1.13 - version: 1.6.10(@opentelemetry/api@1.9.0)(drizzle-orm@0.45.2(@neondatabase/serverless@0.10.4)(@opentelemetry/api@1.9.0)(@types/pg@8.11.6)(@upstash/redis@1.38.0)(kysely@0.28.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vitest@2.1.9(@types/node@22.19.18)) + version: 1.6.10(@opentelemetry/api@1.9.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@neondatabase/serverless@0.10.4)(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(@upstash/redis@1.38.0)(kysely@0.28.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vitest@2.1.9(@types/node@22.19.18)(happy-dom@15.11.7)) drizzle-orm: specifier: ^0.45.2 - version: 0.45.2(@neondatabase/serverless@0.10.4)(@opentelemetry/api@1.9.0)(@types/pg@8.11.6)(@upstash/redis@1.38.0)(kysely@0.28.17) + version: 0.45.2(@neondatabase/serverless@0.10.4)(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(@upstash/redis@1.38.0)(kysely@0.28.17) hono: specifier: ^4.6.1 version: 4.12.18 @@ -94,6 +100,9 @@ importers: '@types/node': specifier: ^22.10.2 version: 22.19.18 + drizzle-kit: + specifier: ^0.31.4 + version: 0.31.10 fast-check: specifier: ^4.8.0 version: 4.8.0 @@ -121,6 +130,12 @@ importers: '@radix-ui/react-tooltip': specifier: ^1.2.8 version: 1.2.8(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@sentry/react': + specifier: ^10.53.1 + version: 10.59.0(react@18.3.1) + '@sentry/vite-plugin': + specifier: ^4.0.0 + version: 4.9.1 '@stackfast/registry': specifier: workspace:* version: link:../../packages/registry @@ -138,7 +153,7 @@ importers: version: 5.100.9(react@18.3.1) better-auth: specifier: ^1.1.13 - version: 1.6.10(@opentelemetry/api@1.9.0)(drizzle-orm@0.45.2(@neondatabase/serverless@0.10.4)(@opentelemetry/api@1.9.0)(@types/pg@8.11.6)(@upstash/redis@1.38.0)(kysely@0.28.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vitest@2.1.9(@types/node@25.6.2)) + version: 1.6.10(@opentelemetry/api@1.9.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@neondatabase/serverless@0.10.4)(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(@upstash/redis@1.38.0)(kysely@0.28.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vitest@2.1.9(@types/node@25.6.2)(happy-dom@15.11.7)) class-variance-authority: specifier: ^0.7.0 version: 0.7.1 @@ -179,6 +194,9 @@ importers: autoprefixer: specifier: ^10.4.20 version: 10.5.0(postcss@8.5.14) + happy-dom: + specifier: ^15.11.0 + version: 15.11.7 postcss: specifier: ^8.4.47 version: 8.5.14 @@ -278,10 +296,10 @@ importers: dependencies: drizzle-orm: specifier: ^0.45.2 - version: 0.45.2(@neondatabase/serverless@0.10.4)(@opentelemetry/api@1.9.0)(@types/pg@8.11.6)(@upstash/redis@1.38.0)(kysely@0.28.17) + version: 0.45.2(@neondatabase/serverless@0.10.4)(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(@upstash/redis@1.38.0)(kysely@0.28.17) drizzle-zod: specifier: ^0.5.1 - version: 0.5.1(drizzle-orm@0.45.2(@neondatabase/serverless@0.10.4)(@opentelemetry/api@1.9.0)(@types/pg@8.11.6)(@upstash/redis@1.38.0)(kysely@0.28.17))(zod@3.25.76) + version: 0.5.1(drizzle-orm@0.45.2(@neondatabase/serverless@0.10.4)(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(@upstash/redis@1.38.0)(kysely@0.28.17))(zod@3.25.76) zod: specifier: ^3.23.0 version: 3.25.76 @@ -538,294 +556,593 @@ packages: '@better-fetch/fetch@1.1.21': resolution: {integrity: sha512-/ImESw0sskqlVR94jB+5+Pxjf+xBwDZF/N5+y2/q4EqD7IARUTSpPfIo8uf39SYpCxyOCtbyYpUrZ3F/k0zT4A==} + '@drizzle-team/brocli@0.10.2': + resolution: {integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==} + + '@esbuild-kit/core-utils@3.3.2': + resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==} + deprecated: 'Merged into tsx: https://tsx.is' + + '@esbuild-kit/esm-loader@2.6.5': + resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==} + deprecated: 'Merged into tsx: https://tsx.is' + '@esbuild/aix-ppc64@0.21.5': resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} engines: {node: '>=12'} cpu: [ppc64] os: [aix] + '@esbuild/aix-ppc64@0.25.12': + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/aix-ppc64@0.27.7': resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] + '@esbuild/android-arm64@0.18.20': + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm64@0.21.5': resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} engines: {node: '>=12'} cpu: [arm64] os: [android] + '@esbuild/android-arm64@0.25.12': + resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm64@0.27.7': resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==} engines: {node: '>=18'} cpu: [arm64] os: [android] + '@esbuild/android-arm@0.18.20': + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + '@esbuild/android-arm@0.21.5': resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} engines: {node: '>=12'} cpu: [arm] os: [android] + '@esbuild/android-arm@0.25.12': + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-arm@0.27.7': resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==} engines: {node: '>=18'} cpu: [arm] os: [android] + '@esbuild/android-x64@0.18.20': + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + '@esbuild/android-x64@0.21.5': resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} engines: {node: '>=12'} cpu: [x64] os: [android] + '@esbuild/android-x64@0.25.12': + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/android-x64@0.27.7': resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==} engines: {node: '>=18'} cpu: [x64] os: [android] + '@esbuild/darwin-arm64@0.18.20': + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-arm64@0.21.5': resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] + '@esbuild/darwin-arm64@0.25.12': + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-arm64@0.27.7': resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] + '@esbuild/darwin-x64@0.18.20': + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + '@esbuild/darwin-x64@0.21.5': resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} engines: {node: '>=12'} cpu: [x64] os: [darwin] + '@esbuild/darwin-x64@0.25.12': + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/darwin-x64@0.27.7': resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] + '@esbuild/freebsd-arm64@0.18.20': + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-arm64@0.21.5': resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-arm64@0.25.12': + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-arm64@0.27.7': resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-x64@0.18.20': + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + '@esbuild/freebsd-x64@0.21.5': resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] + '@esbuild/freebsd-x64@0.25.12': + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/freebsd-x64@0.27.7': resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] + '@esbuild/linux-arm64@0.18.20': + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm64@0.21.5': resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} engines: {node: '>=12'} cpu: [arm64] os: [linux] + '@esbuild/linux-arm64@0.25.12': + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm64@0.27.7': resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==} engines: {node: '>=18'} cpu: [arm64] os: [linux] + '@esbuild/linux-arm@0.18.20': + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + '@esbuild/linux-arm@0.21.5': resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} engines: {node: '>=12'} cpu: [arm] os: [linux] + '@esbuild/linux-arm@0.25.12': + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-arm@0.27.7': resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==} engines: {node: '>=18'} cpu: [arm] os: [linux] + '@esbuild/linux-ia32@0.18.20': + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-ia32@0.21.5': resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} engines: {node: '>=12'} cpu: [ia32] os: [linux] + '@esbuild/linux-ia32@0.25.12': + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-ia32@0.27.7': resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==} engines: {node: '>=18'} cpu: [ia32] os: [linux] + '@esbuild/linux-loong64@0.18.20': + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-loong64@0.21.5': resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} engines: {node: '>=12'} cpu: [loong64] os: [linux] + '@esbuild/linux-loong64@0.25.12': + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-loong64@0.27.7': resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==} engines: {node: '>=18'} cpu: [loong64] os: [linux] + '@esbuild/linux-mips64el@0.18.20': + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-mips64el@0.21.5': resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] + '@esbuild/linux-mips64el@0.25.12': + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-mips64el@0.27.7': resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] + '@esbuild/linux-ppc64@0.18.20': + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-ppc64@0.21.5': resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] + '@esbuild/linux-ppc64@0.25.12': + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-ppc64@0.27.7': resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] + '@esbuild/linux-riscv64@0.18.20': + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-riscv64@0.21.5': resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] + '@esbuild/linux-riscv64@0.25.12': + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-riscv64@0.27.7': resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] + '@esbuild/linux-s390x@0.18.20': + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-s390x@0.21.5': resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} engines: {node: '>=12'} cpu: [s390x] os: [linux] + '@esbuild/linux-s390x@0.25.12': + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-s390x@0.27.7': resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==} engines: {node: '>=18'} cpu: [s390x] os: [linux] + '@esbuild/linux-x64@0.18.20': + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + '@esbuild/linux-x64@0.21.5': resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} engines: {node: '>=12'} cpu: [x64] os: [linux] + '@esbuild/linux-x64@0.25.12': + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + '@esbuild/linux-x64@0.27.7': resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==} engines: {node: '>=18'} cpu: [x64] os: [linux] + '@esbuild/netbsd-arm64@0.25.12': + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + '@esbuild/netbsd-arm64@0.27.7': resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] + '@esbuild/netbsd-x64@0.18.20': + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + '@esbuild/netbsd-x64@0.21.5': resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] + '@esbuild/netbsd-x64@0.25.12': + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + '@esbuild/netbsd-x64@0.27.7': resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] + '@esbuild/openbsd-arm64@0.25.12': + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-arm64@0.27.7': resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] + '@esbuild/openbsd-x64@0.18.20': + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + '@esbuild/openbsd-x64@0.21.5': resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] + '@esbuild/openbsd-x64@0.25.12': + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + '@esbuild/openbsd-x64@0.27.7': resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] + '@esbuild/openharmony-arm64@0.25.12': + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + '@esbuild/openharmony-arm64@0.27.7': resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] + '@esbuild/sunos-x64@0.18.20': + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + '@esbuild/sunos-x64@0.21.5': resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} engines: {node: '>=12'} cpu: [x64] os: [sunos] + '@esbuild/sunos-x64@0.25.12': + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/sunos-x64@0.27.7': resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==} engines: {node: '>=18'} cpu: [x64] os: [sunos] + '@esbuild/win32-arm64@0.18.20': + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-arm64@0.21.5': resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} engines: {node: '>=12'} cpu: [arm64] os: [win32] + '@esbuild/win32-arm64@0.25.12': + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-arm64@0.27.7': resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==} engines: {node: '>=18'} cpu: [arm64] os: [win32] + '@esbuild/win32-ia32@0.18.20': + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-ia32@0.21.5': resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} engines: {node: '>=12'} cpu: [ia32] os: [win32] + '@esbuild/win32-ia32@0.25.12': + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-ia32@0.27.7': resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==} engines: {node: '>=18'} cpu: [ia32] os: [win32] + '@esbuild/win32-x64@0.18.20': + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + '@esbuild/win32-x64@0.21.5': resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} engines: {node: '>=12'} cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.25.12': + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@esbuild/win32-x64@0.27.7': resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==} engines: {node: '>=18'} @@ -870,6 +1187,11 @@ packages: resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@fastify/otel@0.18.0': + resolution: {integrity: sha512-3TASCATfw+ctICSb4ymrv7iCm0qJ0N9CarB+CZ7zIJ7KqNbwI5JjyDL1/sxoC0ccTO1Zyd1iQ+oqncPg5FJXaA==} + peerDependencies: + '@opentelemetry/api': ^1.9.0 + '@floating-ui/core@1.7.5': resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==} @@ -911,6 +1233,10 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -953,19 +1279,200 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@opentelemetry/api-logs@0.207.0': + resolution: {integrity: sha512-lAb0jQRVyleQQGiuuvCOTDVspc14nx6XJjP4FspJ1sNARo3Regq4ZZbrc3rN4b1TYSuUCvgH+UXUPug4SLOqEQ==} + engines: {node: '>=8.0.0'} + + '@opentelemetry/api-logs@0.212.0': + resolution: {integrity: sha512-TEEVrLbNROUkYY51sBJGk7lO/OLjuepch8+hmpM6ffMJQ2z/KVCjdHuCFX6fJj8OkJP2zckPjrJzQtXU3IAsFg==} + engines: {node: '>=8.0.0'} + + '@opentelemetry/api-logs@0.214.0': + resolution: {integrity: sha512-40lSJeqYO8Uz2Yj7u94/SJWE/wONa7rmMKjI1ZcIjgf3MHNHv1OZUCrCETGuaRF62d5pQD1wKIW+L4lmSMTzZA==} + engines: {node: '>=8.0.0'} + '@opentelemetry/api@1.9.0': resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} engines: {node: '>=8.0.0'} + '@opentelemetry/api@1.9.1': + resolution: {integrity: sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q==} + engines: {node: '>=8.0.0'} + + '@opentelemetry/core@2.6.1': + resolution: {integrity: sha512-8xHSGWpJP9wBxgBpnqGL0R3PbdWQndL1Qp50qrg71+B28zK5OQmUgcDKLJgzyAAV38t4tOyLMGDD60LneR5W8g==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/core@2.7.1': + resolution: {integrity: sha512-QAqIj32AtK6+pEVNG7EOVxHdE06RP+FM5qpiEJ4RtDcFIqKUZHYhl7/7UY5efhwmwNAg7j8QbJVBLxMerc0+gw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/instrumentation-amqplib@0.61.0': + resolution: {integrity: sha512-mCKoyTGfRNisge4br0NpOFSy2Z1NnEW8hbCJdUDdJFHrPqVzc4IIBPA/vX0U+LUcQqrQvJX+HMIU0dbDRe0i0Q==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-connect@0.57.0': + resolution: {integrity: sha512-FMEBChnI4FLN5TE9DHwfH7QpNir1JzXno1uz/TAucVdLCyrG0jTrKIcNHt/i30A0M2AunNBCkcd8Ei26dIPKdg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-dataloader@0.31.0': + resolution: {integrity: sha512-f654tZFQXS5YeLDNb9KySrwtg7SnqZN119FauD7acBoTzuLduaiGTNz88ixcVSOOMGZ+EjJu/RFtx5klObC95g==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-fs@0.33.0': + resolution: {integrity: sha512-sCZWXGalQ01wr3tAhSR9ucqFJ0phidpAle6/17HVjD6gN8FLmZMK/8sKxdXYHy3PbnlV1P4zeiSVFNKpbFMNLA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-generic-pool@0.57.0': + resolution: {integrity: sha512-orhmlaK+ZIW9hKU+nHTbXrCSXZcH83AescTqmpamHRobRmYSQwRbD0a1odc0yAzuzOtxYiHiXAnpnIpaSSY7Ow==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-graphql@0.62.0': + resolution: {integrity: sha512-3YNuLVPUxafXkH1jBAbGsKNsP3XVzcFDhCDCE3OqBwCwShlqQbLMRMFh1T/d5jaVZiGVmSsfof+ICKD2iOV8xg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-hapi@0.60.0': + resolution: {integrity: sha512-aNljZKYrEa7obLAxd1bCEDxF7kzCLGXTuTJZ8lMR9rIVEjmuKBXN1gfqpm/OB//Zc2zP4iIve1jBp7sr3mQV6w==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-http@0.214.0': + resolution: {integrity: sha512-FlkDhZDRjDJDcO2LcSCtjRpkal1NJ8y0fBqBhTvfAR3JSYY2jAIj1kSS5IjmEBt4c3aWv+u/lqLuoCDrrKCSKg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-kafkajs@0.23.0': + resolution: {integrity: sha512-4K+nVo+zI+aDz0Z85SObwbdixIbzS9moIuKJaYsdlzcHYnKOPtB7ya8r8Ezivy/GVIBHiKJVq4tv+BEkgOMLaQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-knex@0.58.0': + resolution: {integrity: sha512-Hc/o8fSsaWxZ8r1Yw4rNDLwTpUopTf4X32y4W6UhlHmW8Wizz8wfhgOKIelSeqFVTKBBPIDUOsQWuIMxBmu8Bw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-koa@0.62.0': + resolution: {integrity: sha512-uVip0VuGUQXZ+vFxkKxAUNq8qNl+VFlyHDh/U6IQ8COOEDfbEchdaHnpFrMYF3psZRUuoSIgb7xOeXj00RdwDA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.9.0 + + '@opentelemetry/instrumentation-lru-memoizer@0.58.0': + resolution: {integrity: sha512-6grM3TdMyHzlGY1cUA+mwoPueB1F3dYKgKtZIH6jOFXqfHAByyLTc+6PFjGM9tKh52CFBJaDwodNlL/Td39z7Q==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-mongodb@0.67.0': + resolution: {integrity: sha512-1WJp5N1lYfHq2IhECOTewFs5Tf2NfUOwQRqs/rZdXKTezArMlucxgzAaqcgp3A3YREXopXTpXHsxZTGHjNhMdQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-mongoose@0.60.0': + resolution: {integrity: sha512-8BahAZpKsOoc+lrZGb7Ofn4g3z8qtp5IxDfvAVpKXsEheQN7ONMH5djT5ihy6yf8yyeQJGS0gXFfpEAEeEHqQg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-mysql2@0.60.0': + resolution: {integrity: sha512-m/5d3bxQALllCzezYDk/6vajh0tj5OijMMvOZGr+qN1NMXm1dzMNwyJ0gNZW7Fo3YFRyj/jJMxIw+W7d525dlw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-mysql@0.60.0': + resolution: {integrity: sha512-08pO8GFPEIz2zquKDGteBZDNmwketdgH8hTe9rVYgW9kCJXq1Psj3wPQGx+VaX4ZJKCfPeoLMYup9+cxHvZyVQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-pg@0.66.0': + resolution: {integrity: sha512-KxfLGXBb7k2ueaPJfq2GXBDXBly8P+SpR/4Mj410hhNgmQF3sCqwXvUBQxZQkDAmsdBAoenM+yV1LhtsMRamcA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-tedious@0.33.0': + resolution: {integrity: sha512-Q6WQwAD01MMTub31GlejoiFACYNw26J426wyjvU7by7fDIr2nZXNW4vhTGs7i7F0TnXBO3xN688g1tdUgYwJ5w==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation@0.207.0': + resolution: {integrity: sha512-y6eeli9+TLKnznrR8AZlQMSJT7wILpXH+6EYq5Vf/4Ao+huI7EedxQHwRgVUOMLFbe7VFDvHJrX9/f4lcwnJsA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation@0.212.0': + resolution: {integrity: sha512-IyXmpNnifNouMOe0I/gX7ENfv2ZCNdYTF0FpCsoBcpbIHzk81Ww9rQTYTnvghszCg7qGrIhNvWC8dhEifgX9Jg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation@0.214.0': + resolution: {integrity: sha512-MHqEX5Dk59cqVah5LiARMACku7jXSVk9iVDWOea4x3cr7VfdByeDCURK6o1lntT1JS/Tsovw01UJrBhN3/uC5w==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/resources@2.7.1': + resolution: {integrity: sha512-DeT6KKolmC4e/dRQvMQ/RwlnzhaqeiFOXY5ngoOPJ07GgVVKxZOg9EcrNZb5aTzUn+iCrJldAgOfQm1O/QfPAQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/sdk-trace-base@2.7.1': + resolution: {integrity: sha512-NAYIlsF8MPUsKqJMiDQJTMPOmlbawC1Iz/omMLygZ1C9am8fTKYjTaI+OZM+WTY3t3Glo0wnOg/6/pac6RGPPw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + '@opentelemetry/semantic-conventions@1.40.0': resolution: {integrity: sha512-cifvXDhcqMwwTlTK04GBNeIe7yyo28Mfby85QXFe1Yk8nmi36Ab/5UQwptOx84SsoGNRg+EVSjwzfSZMy6pmlw==} engines: {node: '>=14'} + '@opentelemetry/sql-common@0.41.2': + resolution: {integrity: sha512-4mhWm3Z8z+i508zQJ7r6Xi7y4mmoJpdvH0fZPFRkWrdp5fq7hhZ2HhYokEOLkfqSMgPR4Z9EyB3DBkbKGOqZiQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.1.0 + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + '@playwright/test@1.59.1': resolution: {integrity: sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==} engines: {node: '>=18'} hasBin: true + '@prisma/instrumentation@7.6.0': + resolution: {integrity: sha512-ZPW2gRiwpPzEfgeZgaekhqXrbW+Y2RJKHVqUmlhZhKzRNCcvR6DykzylDrynpArKKRQtLxoZy36fK7U0p3pdgQ==} + peerDependencies: + '@opentelemetry/api': ^1.8 + '@radix-ui/primitive@1.1.3': resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} @@ -1386,6 +1893,141 @@ packages: cpu: [x64] os: [win32] + '@sentry/babel-plugin-component-annotate@4.9.1': + resolution: {integrity: sha512-0gEoi2Lb54MFYPOmdTfxlNKxI7kCOvNV7gP8lxMXJ7nCazF5OqOOZIVshfWjDLrc0QrSV6XdVvwPV9GDn4wBMg==} + engines: {node: '>= 14'} + + '@sentry/browser-utils@10.59.0': + resolution: {integrity: sha512-DpJIrNi0Hsj/YONTZ8km1wv7ue2NzrTmFKJ3lRW8Q2nS/mrMeP3LCvjreLtKheTouB4go58NxM68AEFbXk4rPg==} + engines: {node: '>=18'} + + '@sentry/browser@10.59.0': + resolution: {integrity: sha512-d0o0oc78KNWCZ6yq9gREf9BPXWza/Wj9W+nCm0CvPD5k2IbouD/eJsm2Mb+d53YfEm12L+SePfgOx01KbbVx4A==} + engines: {node: '>=18'} + + '@sentry/bundler-plugin-core@4.9.1': + resolution: {integrity: sha512-moii+w7N8k8WdvkX7qCDY9iRBlhgHlhTHTUQwF2FNMhBHuqlNpVcSJJqJMjFUQcjYMBDrZgxhfKV18bt5ixwlQ==} + engines: {node: '>= 14'} + + '@sentry/cli-darwin@2.58.6': + resolution: {integrity: sha512-udAVvcyfNa0R+95GvPz/+43/N3TC0TYKdkQ7D7jhPSzbcMc7l2fxRNN5yB3UpCA5fWFnW4toeaqwDBhb/Wh3LA==} + engines: {node: '>=10'} + os: [darwin] + + '@sentry/cli-linux-arm64@2.58.6': + resolution: {integrity: sha512-q8mEcNNmeXMy5i+jWT30TVpH7LcP4HD21CD5XRSPAd/a912HF6EpK0ybf/1USO14WOhoXbAGi9txwaWabSe33g==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux, freebsd, android] + + '@sentry/cli-linux-arm@2.58.6': + resolution: {integrity: sha512-pD0LAt5PcUzAinBwvDqc66x9+2CabHEv486yP0gRjWO7SakbaxmfVq/EXd8VLq/Tzi39LAu422UYK1lpW3MILw==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux, freebsd, android] + + '@sentry/cli-linux-i686@2.58.6': + resolution: {integrity: sha512-q8vNJi1eOV/4vxAFWBsEwLHoSYapaZHIf4j76KJGJXFKTkEbsjCOOsKbwUIBTQQhRgV4DFWh3ryfsPS/que4Kg==} + engines: {node: '>=10'} + cpu: [x86, ia32] + os: [linux, freebsd, android] + + '@sentry/cli-linux-x64@2.58.6': + resolution: {integrity: sha512-DZu956Mhi3ZRjTBe1WdbGV46ldVbA8d2rgp/fh51GsI25zjBHah4wZnPTSzpc+YqxU6pJpg579B/r3jrIK530Q==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux, freebsd, android] + + '@sentry/cli-win32-arm64@2.58.6': + resolution: {integrity: sha512-nj0Ff/kmAB73EPDhR8B4O9r+NUHK5GkPCkGWC+kXVemqAJWL5jcJ5KdxG0l/S0z6RoEoltID8/43/B+TaMlT7A==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] + + '@sentry/cli-win32-i686@2.58.6': + resolution: {integrity: sha512-WNZiDzPbgsEMQWq4avsQ391v/xWKJDIWWWo9GYl+N/w5qcYKkoDW7wQG7T9FasI6ENn68phChTOAPXXxbfAdOg==} + engines: {node: '>=10'} + cpu: [x86, ia32] + os: [win32] + + '@sentry/cli-win32-x64@2.58.6': + resolution: {integrity: sha512-R35WJ17oF4D2eqI1DR2sQQqr0fjRTt5xoP16WrTu91XM2lndRMFsnjh+/GttbxapLCBNlrjzia99MJ0PZHZpgA==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + + '@sentry/cli@2.58.6': + resolution: {integrity: sha512-baBcNPLLfUi9WuL+Tpri9BFaAdvugZIKelC5X0tt0Zdy+K0K+PCVSrnNmwMWU/HyaF/SEv6b6UHnXIdqanBlcg==} + engines: {node: '>= 10'} + hasBin: true + + '@sentry/core@10.53.1': + resolution: {integrity: sha512-XG4ezlkyuAPjBC5+9kXC94rXXuqYTw9NRhfaDHssbTFaGnqBR8vQX2UUgZfY7ucbeelRDGfBu1sywoU+mB04uA==} + engines: {node: '>=18'} + + '@sentry/core@10.59.0': + resolution: {integrity: sha512-QeG7XZL5j6CkToYCE7OwCerb/r742Tjj9p1BBohBKcypYTPRuqfD+A3FeUj7pk5CGO6Vj1/gOAmdbuuNbR51dQ==} + engines: {node: '>=18'} + + '@sentry/feedback@10.59.0': + resolution: {integrity: sha512-Sa/06LlG/mYR4z8/JlxOwvkcOHJnaMW6JyTMKNsgEoR1SHZULIpirjUuHIp4P+7R1mqX/KGTj8I7SQ3adA0TxQ==} + engines: {node: '>=18'} + + '@sentry/node-core@10.53.1': + resolution: {integrity: sha512-iH7SMcM/7jPbN+t7+7ussQOiIqI4BMOGt4VYWlV71/z7k0pY+YPaSvlfVkNXfISiDzFAKv0ecCY3BmsLMu1xDQ==} + engines: {node: '>=18'} + peerDependencies: + '@opentelemetry/api': ^1.9.0 + '@opentelemetry/core': ^1.30.1 || ^2.1.0 + '@opentelemetry/exporter-trace-otlp-http': '>=0.57.0 <1' + '@opentelemetry/instrumentation': '>=0.57.1 <1' + '@opentelemetry/sdk-trace-base': ^1.30.1 || ^2.1.0 + '@opentelemetry/semantic-conventions': ^1.39.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@opentelemetry/core': + optional: true + '@opentelemetry/exporter-trace-otlp-http': + optional: true + '@opentelemetry/instrumentation': + optional: true + '@opentelemetry/sdk-trace-base': + optional: true + '@opentelemetry/semantic-conventions': + optional: true + + '@sentry/node@10.53.1': + resolution: {integrity: sha512-rxHVil0tJAmz+keFcZCj1LaUdgdkK66E/l0gqh2p1209PNCGoD3lnClFr6vusy1aF3zF8O9JPtuMEJzXOKhs+w==} + engines: {node: '>=18'} + + '@sentry/opentelemetry@10.53.1': + resolution: {integrity: sha512-Zok6UXla0mFOjd1YnVb1TZtQNOry9v93fXUqx8jmDaygwWM2BwvP8rBQabLz0/OZXo8+35oge+Vmw+QY5aesnA==} + engines: {node: '>=18'} + peerDependencies: + '@opentelemetry/api': ^1.9.0 + '@opentelemetry/core': ^1.30.1 || ^2.1.0 + '@opentelemetry/sdk-trace-base': ^1.30.1 || ^2.1.0 + '@opentelemetry/semantic-conventions': ^1.39.0 + + '@sentry/react@10.59.0': + resolution: {integrity: sha512-B3MmXooGLnTu0gyL8hxElCu1+WVEXjIGoDPvGqn5qMHZNSmB2oPTAt1/UutuxAc6EWu2UKIHnyPowNeY2MPH3g==} + engines: {node: '>=18'} + peerDependencies: + react: ^16.14.0 || 17.x || 18.x || 19.x + + '@sentry/replay-canvas@10.59.0': + resolution: {integrity: sha512-bJkqvxQiat27P7+hUYC/m545Ct/uVxZCjh+PeCFdRcuHnZZ92e6Z7XPLf0LqAR6tR1U7wDUa4V5ugrMIEz+vpQ==} + engines: {node: '>=18'} + + '@sentry/replay@10.59.0': + resolution: {integrity: sha512-fpHL25JErsSfTyusuyZ3Q5JmRZeWYWynJO3PNiQH6A/58EqaCp8U5y8LCJ+CSPaeuBMka3S3Qn6U4eXcvkDMRA==} + engines: {node: '>=18'} + + '@sentry/vite-plugin@4.9.1': + resolution: {integrity: sha512-Tlyg2cyFYp/icX58GWvfpvZr9NLdLs2/xyFVyS8pQ0faZWmoXic3FMzoXYHV1gsdMbL1Yy5WQvGJy8j1rS8LGA==} + engines: {node: '>= 14'} + '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} @@ -1409,6 +2051,9 @@ packages: '@types/babel__traverse@7.28.0': resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} @@ -1418,6 +2063,9 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/mysql@2.15.27': + resolution: {integrity: sha512-YfWiV16IY0OeBfBCk8+hXKmdTKrKlwKN1MNKAPBu5JYxLwBEZl7QzeEpGnlZb3VMGJrrGmB84gXiH+ofs/TezA==} + '@types/node@20.19.40': resolution: {integrity: sha512-xxx6M2IpSTnnKcR0cMvIiohkiCx20/oRPtWGbenFygKCGl3zqUzdNjQ/1V4solq1LU+dgv0nQzeGOuqkqZGg0Q==} @@ -1427,9 +2075,15 @@ packages: '@types/node@25.6.2': resolution: {integrity: sha512-sokuT28dxf9JT5Kady1fsXOvI4HVpjZa95NKT5y9PNTIrs2AsobR4GFAA90ZG8M+nxVRLysCXsVj6eGC7Vbrlw==} + '@types/pg-pool@2.0.7': + resolution: {integrity: sha512-U4CwmGVQcbEuqpyju8/ptOKg6gEC+Tqsvj2xS9o1g71bUh8twxnC6ZL5rZKCsGN0iyH0CwgUyc9VR5owNQF9Ng==} + '@types/pg@8.11.6': resolution: {integrity: sha512-/2WmmBXHLsfRqzfHW7BNZ8SbYzE8OSk7i3WjFYvfgRHj7S1xj+16Je5fUKv3lVdVzk/zn9TXOqf+avFCFIE0yQ==} + '@types/pg@8.15.6': + resolution: {integrity: sha512-NoaMtzhxOrubeL/7UZuNTrejB4MPAJ0RpxZqXQf2qXuVlTPuG6Y8p4u9dKRaue4yjmC7ZhzVO2/Yyyn25znrPQ==} + '@types/prop-types@15.7.15': resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==} @@ -1441,6 +2095,9 @@ packages: '@types/react@18.3.28': resolution: {integrity: sha512-z9VXpC7MWrhfWipitjNdgCauoMLRdIILQsAEV+ZesIzBq/oUlxk0m3ApZuMFCXdnS4U7KrI+l3WRUEGQ8K1QKw==} + '@types/tedious@4.0.14': + resolution: {integrity: sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==} + '@typescript-eslint/eslint-plugin@8.59.2': resolution: {integrity: sha512-j/bwmkBvHUtPNxzuWe5z6BEk3q54YRyGlBXkSsmfoih7zNrBvl5A9A98anlp/7JbyZcWIJ8KXo/3Tq/DjFLtuQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1559,6 +2216,11 @@ packages: resolution: {integrity: sha512-KRYzxepc14G/CEpEGc3Yn+JKaAeT63smlDr+vjB8jRfgTBBI9wRj/nkQEO+ucV8p8I9bfKLWp37uHgFrbntPvw==} engines: {node: '>=10.0.0'} + acorn-import-attributes@1.9.5: + resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} + peerDependencies: + acorn: ^8 + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -1569,6 +2231,10 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + ai@6.0.177: resolution: {integrity: sha512-1xQtbeWwNcLyyM86ixZhkKvT+WRXc1lvarIKqPVtsyn8F9NDikwUMBqYu+aQKDgMht50SMXh4qboYuU8MeHZZA==} engines: {node: '>=18'} @@ -1582,10 +2248,18 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + engines: {node: '>=12'} + ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + engines: {node: '>=12'} + any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} @@ -1706,6 +2380,9 @@ packages: brace-expansion@1.1.14: resolution: {integrity: sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==} + brace-expansion@2.1.1: + resolution: {integrity: sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==} + brace-expansion@5.0.6: resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==} engines: {node: 18 || 20 || >=22} @@ -1719,6 +2396,9 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} @@ -1754,6 +2434,9 @@ packages: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} + cjs-module-lexer@2.2.0: + resolution: {integrity: sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==} + class-variance-authority@0.7.1: resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} @@ -1846,6 +2529,10 @@ packages: resolution: {integrity: sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==} engines: {node: '>=12'} + drizzle-kit@0.31.10: + resolution: {integrity: sha512-7OZcmQUrdGI+DUNNsKBn1aW8qSoKuTH7d0mYgSP8bAzdFzKoovxEFnoGQp2dVs82EOJeYycqRtciopszwUf8bw==} + hasBin: true + drizzle-orm@0.45.2: resolution: {integrity: sha512-kY0BSaTNYWnoDMVoyY8uxmyHjpJW1geOmBMdSSicKo9CIIWkSxMIj2rkeSR51b8KAPB7m+qysjuHme5nKP+E5Q==} peerDependencies: @@ -1944,12 +2631,22 @@ packages: drizzle-orm: '>=0.23.13' zod: '*' + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + electron-to-chromium@1.5.353: resolution: {integrity: sha512-kOrWphBi8TOZyiJZqsgqIle0lw+tzmnQK83pV9dZUd01Nm2POECSyFQMAuarzZdYqQW7FH9RaYOuaRo3h+bQ3w==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + es-errors@1.3.0: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} @@ -1957,11 +2654,21 @@ packages: es-module-lexer@1.7.0: resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + esbuild@0.18.20: + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} + engines: {node: '>=12'} + hasBin: true + esbuild@0.21.5: resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} engines: {node: '>=12'} hasBin: true + esbuild@0.25.12: + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} + engines: {node: '>=18'} + hasBin: true + esbuild@0.27.7: resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==} engines: {node: '>=18'} @@ -2090,6 +2797,13 @@ packages: flatted@3.4.2: resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} + foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} + engines: {node: '>=14'} + + forwarded-parse@2.1.2: + resolution: {integrity: sha512-alTFZZQDKMporBH77856pXgzhEzaUVmLCDk+egLgIgHst3Tpndzz8MnKe+GzRJRfvVdn69HhpW7cmXzvtLvJAw==} + fraction.js@5.3.4: resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==} @@ -2129,10 +2843,19 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} + glob@10.5.0: + resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me + hasBin: true + globals@14.0.0: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} + happy-dom@15.11.7: + resolution: {integrity: sha512-KyrFvnl+J9US63TEzwoiJOQzZBJY7KgBushJA8X61DMbNsH+2ONkDuLDnCnwUiPTF42tLoEmrPyoqbenVA5zrg==} + engines: {node: '>=18.0.0'} + has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} @@ -2145,6 +2868,10 @@ packages: resolution: {integrity: sha512-RWzP96k/yv0PQfyXnWjs6zot20TqfpfsNXhOnev8d1InAxubW93L11/oNUc3tQqn2G0bSdAOBpX+2uDFHV7kdQ==} engines: {node: '>=16.9.0'} + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -2160,6 +2887,13 @@ packages: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} + import-in-the-middle@2.0.6: + resolution: {integrity: sha512-3vZV3jX0XRFW3EJDTwzWoZa+RH1b8eTTx6YOCjglrLyPuepwoBti1k3L2dKwdCUrnVEfc5CuRuGstaC/uQJJaw==} + + import-in-the-middle@3.0.1: + resolution: {integrity: sha512-pYkiyXVL2Mf3pozdlDGV6NAObxQx13Ae8knZk1UJRJ6uRW/ZRmTGHlQYtrsSl7ubuE5F8CD1z+s1n4RHNuTtuA==} + engines: {node: '>=18'} + imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -2197,6 +2931,9 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + jiti@1.21.7: resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} hasBin: true @@ -2274,6 +3011,9 @@ packages: loupe@3.2.1: resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -2285,6 +3025,10 @@ packages: magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + magic-string@0.30.8: + resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==} + engines: {node: '>=12'} + merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} @@ -2300,12 +3044,23 @@ packages: minimatch@3.1.5: resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} + minimatch@9.0.9: + resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} + engines: {node: '>=16 || 14 >=14.17'} + minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + minipass@7.1.3: + resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} + engines: {node: '>=16 || 14 >=14.17'} + mitt@3.0.1: resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + module-details-from-path@1.0.4: + resolution: {integrity: sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==} + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -2324,6 +3079,15 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + node-forge@1.4.0: resolution: {integrity: sha512-LarFH0+6VfriEhqMMcLX2F7SwSXeWwnEAJEsYm5QKWchiVYVvJyV9v7UDvUv+w5HO23ZpQTXDv/GxdDdMyOuoQ==} engines: {node: '>= 6.13.0'} @@ -2361,6 +3125,9 @@ packages: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + pako@1.0.11: resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} @@ -2383,6 +3150,10 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} @@ -2401,6 +3172,10 @@ packages: pg-protocol@1.13.0: resolution: {integrity: sha512-zzdvXfS6v89r6v7OcFCHfHlyG/wvry1ALxZo4LqgUoy7W9xhBDMaqOuMiF3qEV45VqsN6rdlcehHrfDtlCPc8w==} + pg-types@2.2.0: + resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} + engines: {node: '>=4'} + pg-types@4.1.0: resolution: {integrity: sha512-o2XFanIMy/3+mThw69O8d4n1E5zsLhdO+OPqswezu7Z5ekP4hYDqlDjlmOpYMbzY2Br0ufCwJLdDIXeNVwcWFg==} engines: {node: '>=10'} @@ -2481,18 +3256,34 @@ packages: resolution: {integrity: sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==} engines: {node: ^10 || ^12 || >=14} + postgres-array@2.0.0: + resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} + engines: {node: '>=4'} + postgres-array@3.0.4: resolution: {integrity: sha512-nAUSGfSDGOaOAEGwqsRY27GPOea7CNipJPOA7lPbdEpx5Kg3qzdP0AaWC5MlhTWV9s4hFX39nomVZ+C4tnGOJQ==} engines: {node: '>=12'} + postgres-bytea@1.0.1: + resolution: {integrity: sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ==} + engines: {node: '>=0.10.0'} + postgres-bytea@3.0.0: resolution: {integrity: sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw==} engines: {node: '>= 6'} + postgres-date@1.0.7: + resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==} + engines: {node: '>=0.10.0'} + postgres-date@2.1.0: resolution: {integrity: sha512-K7Juri8gtgXVcDfZttFKVmhglp7epKb1K4pgrkLxehjqkrgPhfG6OO8LHLkfaqkbpjNRnra018XwAr1yQFWGcA==} engines: {node: '>=12'} + postgres-interval@1.2.0: + resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} + engines: {node: '>=0.10.0'} + postgres-interval@3.0.0: resolution: {integrity: sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw==} engines: {node: '>=12'} @@ -2512,6 +3303,13 @@ packages: process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + progress@2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -2583,6 +3381,10 @@ packages: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} + require-in-the-middle@8.0.1: + resolution: {integrity: sha512-QT7FVMXfWOYFbeRBF6nu+I6tr2Tf3u0q8RIEjNob/heKY/nh7drD/k7eeMFmSQgnTtCzLDcCu/XEnpW2wk4xCQ==} + engines: {node: '>=9.3.0 || >=8.10.0 <9.0.0'} + resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -2655,10 +3457,21 @@ packages: siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} @@ -2669,6 +3482,10 @@ packages: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} @@ -2676,6 +3493,10 @@ packages: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} + strip-ansi@7.2.0: + resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} + engines: {node: '>=12'} + strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -2753,6 +3574,9 @@ packages: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + tree-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true @@ -2799,6 +3623,9 @@ packages: undici-types@7.19.2: resolution: {integrity: sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==} + unplugin@1.0.1: + resolution: {integrity: sha512-aqrHaVBWW1JVKBHmGo33T5TxeL0qWzfvjWokObHA9bYmN7eNDkwOxmLjhioHl9878qDFMAaT51XNroRyuz7WxA==} + update-browserslist-db@1.2.3: resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} hasBin: true @@ -2902,6 +3729,27 @@ packages: jsdom: optional: true + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + webidl-conversions@7.0.0: + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} + engines: {node: '>=12'} + + webpack-sources@3.5.0: + resolution: {integrity: sha512-HPuy+uuoTCaaoEoI1LQ3JN9+vrPBvEesnnX1jADHy728cHSMlq4wUc4afYqahq2B1mhQVZxCXOkNTnXltr+2vQ==} + engines: {node: '>=10.13.0'} + + webpack-virtual-modules@0.5.0: + resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==} + + whatwg-mimetype@3.0.0: + resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} + engines: {node: '>=12'} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -2925,6 +3773,10 @@ packages: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + xml-crypto@6.1.2: resolution: {integrity: sha512-leBOVQdVi8FvPJrMYoum7Ici9qyxfE4kVi+AkpUoYCSXaQF4IlBm1cneTK9oAxR61LpYxTx7lNcsnBIeRpGW2w==} engines: {node: '>=16'} @@ -2947,6 +3799,10 @@ packages: resolution: {integrity: sha512-NNXnzrkDrAzalLhIUc01jO2mOzXGXh1JwPgkihcLLzw98c0WgYDmmjSh1Kl3wzaxSVWMuA+fe0WTWOBDWCBmNA==} engines: {node: '>=0.6.0'} + xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -3131,7 +3987,7 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 - '@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0)': + '@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0)': dependencies: '@better-auth/utils': 0.4.0 '@better-fetch/fetch': 1.1.21 @@ -3143,54 +3999,54 @@ snapshots: nanostores: 1.3.0 zod: 4.4.3 optionalDependencies: - '@opentelemetry/api': 1.9.0 + '@opentelemetry/api': 1.9.1 - '@better-auth/drizzle-adapter@1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(drizzle-orm@0.45.2(@neondatabase/serverless@0.10.4)(@opentelemetry/api@1.9.0)(@types/pg@8.11.6)(@upstash/redis@1.38.0)(kysely@0.28.17))': + '@better-auth/drizzle-adapter@1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(drizzle-orm@0.45.2(@neondatabase/serverless@0.10.4)(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(@upstash/redis@1.38.0)(kysely@0.28.17))': dependencies: - '@better-auth/core': 1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) + '@better-auth/core': 1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) '@better-auth/utils': 0.4.0 optionalDependencies: - drizzle-orm: 0.45.2(@neondatabase/serverless@0.10.4)(@opentelemetry/api@1.9.0)(@types/pg@8.11.6)(@upstash/redis@1.38.0)(kysely@0.28.17) + drizzle-orm: 0.45.2(@neondatabase/serverless@0.10.4)(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(@upstash/redis@1.38.0)(kysely@0.28.17) - '@better-auth/infra@0.2.7(4dlgsdvqqthuy6qz7v6sgg3pm4)': + '@better-auth/infra@0.2.7(jjtwi5szho4jztv4wi5e36vrtm)': dependencies: - '@better-auth/core': 1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) - '@better-auth/sso': 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(better-auth@1.6.10(@opentelemetry/api@1.9.0)(drizzle-orm@0.45.2(@neondatabase/serverless@0.10.4)(@opentelemetry/api@1.9.0)(@types/pg@8.11.6)(@upstash/redis@1.38.0)(kysely@0.28.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vitest@2.1.9(@types/node@25.6.2)))(better-call@1.3.5(zod@4.4.3)) + '@better-auth/core': 1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) + '@better-auth/sso': 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(better-auth@1.6.10(@opentelemetry/api@1.9.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@neondatabase/serverless@0.10.4)(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(@upstash/redis@1.38.0)(kysely@0.28.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vitest@2.1.9(@types/node@25.6.2)(happy-dom@15.11.7)))(better-call@1.3.5(zod@4.4.3)) '@better-fetch/fetch': 1.1.21 - better-auth: 1.6.10(@opentelemetry/api@1.9.0)(drizzle-orm@0.45.2(@neondatabase/serverless@0.10.4)(@opentelemetry/api@1.9.0)(@types/pg@8.11.6)(@upstash/redis@1.38.0)(kysely@0.28.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vitest@2.1.9(@types/node@25.6.2)) + better-auth: 1.6.10(@opentelemetry/api@1.9.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@neondatabase/serverless@0.10.4)(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(@upstash/redis@1.38.0)(kysely@0.28.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vitest@2.1.9(@types/node@25.6.2)(happy-dom@15.11.7)) better-call: 1.3.5(zod@4.4.3) jose: 6.2.3 libphonenumber-js: 1.13.1 zod: 4.4.3 - '@better-auth/kysely-adapter@1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(kysely@0.28.17)': + '@better-auth/kysely-adapter@1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(kysely@0.28.17)': dependencies: - '@better-auth/core': 1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) + '@better-auth/core': 1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) '@better-auth/utils': 0.4.0 optionalDependencies: kysely: 0.28.17 - '@better-auth/memory-adapter@1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)': + '@better-auth/memory-adapter@1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)': dependencies: - '@better-auth/core': 1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) + '@better-auth/core': 1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) '@better-auth/utils': 0.4.0 - '@better-auth/mongo-adapter@1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)': + '@better-auth/mongo-adapter@1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)': dependencies: - '@better-auth/core': 1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) + '@better-auth/core': 1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) '@better-auth/utils': 0.4.0 - '@better-auth/prisma-adapter@1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)': + '@better-auth/prisma-adapter@1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)': dependencies: - '@better-auth/core': 1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) + '@better-auth/core': 1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) '@better-auth/utils': 0.4.0 - '@better-auth/sso@1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(better-auth@1.6.10(@opentelemetry/api@1.9.0)(drizzle-orm@0.45.2(@neondatabase/serverless@0.10.4)(@opentelemetry/api@1.9.0)(@types/pg@8.11.6)(@upstash/redis@1.38.0)(kysely@0.28.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vitest@2.1.9(@types/node@25.6.2)))(better-call@1.3.5(zod@4.4.3))': + '@better-auth/sso@1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(better-auth@1.6.10(@opentelemetry/api@1.9.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@neondatabase/serverless@0.10.4)(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(@upstash/redis@1.38.0)(kysely@0.28.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vitest@2.1.9(@types/node@25.6.2)(happy-dom@15.11.7)))(better-call@1.3.5(zod@4.4.3))': dependencies: - '@better-auth/core': 1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) + '@better-auth/core': 1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) '@better-auth/utils': 0.4.0 '@better-fetch/fetch': 1.1.21 - better-auth: 1.6.10(@opentelemetry/api@1.9.0)(drizzle-orm@0.45.2(@neondatabase/serverless@0.10.4)(@opentelemetry/api@1.9.0)(@types/pg@8.11.6)(@upstash/redis@1.38.0)(kysely@0.28.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vitest@2.1.9(@types/node@25.6.2)) + better-auth: 1.6.10(@opentelemetry/api@1.9.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@neondatabase/serverless@0.10.4)(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(@upstash/redis@1.38.0)(kysely@0.28.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vitest@2.1.9(@types/node@25.6.2)(happy-dom@15.11.7)) better-call: 1.3.5(zod@4.4.3) fast-xml-parser: 5.7.3 jose: 6.2.3 @@ -3198,9 +4054,9 @@ snapshots: tldts: 6.1.86 zod: 4.4.3 - '@better-auth/telemetry@1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)': + '@better-auth/telemetry@1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)': dependencies: - '@better-auth/core': 1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) + '@better-auth/core': 1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) '@better-auth/utils': 0.4.0 '@better-fetch/fetch': 1.1.21 @@ -3210,150 +4066,306 @@ snapshots: '@better-fetch/fetch@1.1.21': {} + '@drizzle-team/brocli@0.10.2': {} + + '@esbuild-kit/core-utils@3.3.2': + dependencies: + esbuild: 0.18.20 + source-map-support: 0.5.21 + + '@esbuild-kit/esm-loader@2.6.5': + dependencies: + '@esbuild-kit/core-utils': 3.3.2 + get-tsconfig: 4.14.0 + '@esbuild/aix-ppc64@0.21.5': optional: true + '@esbuild/aix-ppc64@0.25.12': + optional: true + '@esbuild/aix-ppc64@0.27.7': optional: true + '@esbuild/android-arm64@0.18.20': + optional: true + '@esbuild/android-arm64@0.21.5': optional: true + '@esbuild/android-arm64@0.25.12': + optional: true + '@esbuild/android-arm64@0.27.7': optional: true + '@esbuild/android-arm@0.18.20': + optional: true + '@esbuild/android-arm@0.21.5': optional: true + '@esbuild/android-arm@0.25.12': + optional: true + '@esbuild/android-arm@0.27.7': optional: true + '@esbuild/android-x64@0.18.20': + optional: true + '@esbuild/android-x64@0.21.5': optional: true + '@esbuild/android-x64@0.25.12': + optional: true + '@esbuild/android-x64@0.27.7': optional: true + '@esbuild/darwin-arm64@0.18.20': + optional: true + '@esbuild/darwin-arm64@0.21.5': optional: true + '@esbuild/darwin-arm64@0.25.12': + optional: true + '@esbuild/darwin-arm64@0.27.7': optional: true + '@esbuild/darwin-x64@0.18.20': + optional: true + '@esbuild/darwin-x64@0.21.5': optional: true + '@esbuild/darwin-x64@0.25.12': + optional: true + '@esbuild/darwin-x64@0.27.7': optional: true + '@esbuild/freebsd-arm64@0.18.20': + optional: true + '@esbuild/freebsd-arm64@0.21.5': optional: true + '@esbuild/freebsd-arm64@0.25.12': + optional: true + '@esbuild/freebsd-arm64@0.27.7': optional: true + '@esbuild/freebsd-x64@0.18.20': + optional: true + '@esbuild/freebsd-x64@0.21.5': optional: true + '@esbuild/freebsd-x64@0.25.12': + optional: true + '@esbuild/freebsd-x64@0.27.7': optional: true + '@esbuild/linux-arm64@0.18.20': + optional: true + '@esbuild/linux-arm64@0.21.5': optional: true + '@esbuild/linux-arm64@0.25.12': + optional: true + '@esbuild/linux-arm64@0.27.7': optional: true + '@esbuild/linux-arm@0.18.20': + optional: true + '@esbuild/linux-arm@0.21.5': optional: true + '@esbuild/linux-arm@0.25.12': + optional: true + '@esbuild/linux-arm@0.27.7': optional: true + '@esbuild/linux-ia32@0.18.20': + optional: true + '@esbuild/linux-ia32@0.21.5': optional: true + '@esbuild/linux-ia32@0.25.12': + optional: true + '@esbuild/linux-ia32@0.27.7': optional: true + '@esbuild/linux-loong64@0.18.20': + optional: true + '@esbuild/linux-loong64@0.21.5': optional: true + '@esbuild/linux-loong64@0.25.12': + optional: true + '@esbuild/linux-loong64@0.27.7': optional: true + '@esbuild/linux-mips64el@0.18.20': + optional: true + '@esbuild/linux-mips64el@0.21.5': optional: true + '@esbuild/linux-mips64el@0.25.12': + optional: true + '@esbuild/linux-mips64el@0.27.7': optional: true + '@esbuild/linux-ppc64@0.18.20': + optional: true + '@esbuild/linux-ppc64@0.21.5': optional: true + '@esbuild/linux-ppc64@0.25.12': + optional: true + '@esbuild/linux-ppc64@0.27.7': optional: true + '@esbuild/linux-riscv64@0.18.20': + optional: true + '@esbuild/linux-riscv64@0.21.5': optional: true + '@esbuild/linux-riscv64@0.25.12': + optional: true + '@esbuild/linux-riscv64@0.27.7': optional: true + '@esbuild/linux-s390x@0.18.20': + optional: true + '@esbuild/linux-s390x@0.21.5': optional: true + '@esbuild/linux-s390x@0.25.12': + optional: true + '@esbuild/linux-s390x@0.27.7': optional: true + '@esbuild/linux-x64@0.18.20': + optional: true + '@esbuild/linux-x64@0.21.5': optional: true + '@esbuild/linux-x64@0.25.12': + optional: true + '@esbuild/linux-x64@0.27.7': optional: true + '@esbuild/netbsd-arm64@0.25.12': + optional: true + '@esbuild/netbsd-arm64@0.27.7': optional: true + '@esbuild/netbsd-x64@0.18.20': + optional: true + '@esbuild/netbsd-x64@0.21.5': optional: true + '@esbuild/netbsd-x64@0.25.12': + optional: true + '@esbuild/netbsd-x64@0.27.7': optional: true + '@esbuild/openbsd-arm64@0.25.12': + optional: true + '@esbuild/openbsd-arm64@0.27.7': optional: true + '@esbuild/openbsd-x64@0.18.20': + optional: true + '@esbuild/openbsd-x64@0.21.5': optional: true + '@esbuild/openbsd-x64@0.25.12': + optional: true + '@esbuild/openbsd-x64@0.27.7': optional: true + '@esbuild/openharmony-arm64@0.25.12': + optional: true + '@esbuild/openharmony-arm64@0.27.7': optional: true + '@esbuild/sunos-x64@0.18.20': + optional: true + '@esbuild/sunos-x64@0.21.5': optional: true + '@esbuild/sunos-x64@0.25.12': + optional: true + '@esbuild/sunos-x64@0.27.7': optional: true + '@esbuild/win32-arm64@0.18.20': + optional: true + '@esbuild/win32-arm64@0.21.5': optional: true + '@esbuild/win32-arm64@0.25.12': + optional: true + '@esbuild/win32-arm64@0.27.7': optional: true + '@esbuild/win32-ia32@0.18.20': + optional: true + '@esbuild/win32-ia32@0.21.5': optional: true + '@esbuild/win32-ia32@0.25.12': + optional: true + '@esbuild/win32-ia32@0.27.7': optional: true + '@esbuild/win32-x64@0.18.20': + optional: true + '@esbuild/win32-x64@0.21.5': optional: true + '@esbuild/win32-x64@0.25.12': + optional: true + '@esbuild/win32-x64@0.27.7': optional: true @@ -3403,6 +4415,16 @@ snapshots: '@eslint/core': 0.17.0 levn: 0.4.1 + '@fastify/otel@0.18.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.7.1(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.212.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.40.0 + minimatch: 10.2.5 + transitivePeerDependencies: + - supports-color + '@floating-ui/core@1.7.5': dependencies: '@floating-ui/utils': 0.2.11 @@ -3428,67 +4450,310 @@ snapshots: dependencies: '@humanfs/types': 0.15.0 - '@humanfs/node@0.16.8': + '@humanfs/node@0.16.8': + dependencies: + '@humanfs/core': 0.19.2 + '@humanfs/types': 0.15.0 + '@humanwhocodes/retry': 0.4.3 + + '@humanfs/types@0.15.0': {} + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.4.3': {} + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.2.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@neondatabase/serverless@0.10.4': + dependencies: + '@types/pg': 8.11.6 + + '@noble/ciphers@2.2.0': {} + + '@noble/hashes@2.2.0': {} + + '@nodable/entities@2.1.0': {} + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.20.1 + + '@opentelemetry/api-logs@0.207.0': + dependencies: + '@opentelemetry/api': 1.9.1 + + '@opentelemetry/api-logs@0.212.0': + dependencies: + '@opentelemetry/api': 1.9.1 + + '@opentelemetry/api-logs@0.214.0': + dependencies: + '@opentelemetry/api': 1.9.1 + + '@opentelemetry/api@1.9.0': {} + + '@opentelemetry/api@1.9.1': {} + + '@opentelemetry/core@2.6.1(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/semantic-conventions': 1.40.0 + + '@opentelemetry/core@2.7.1(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/semantic-conventions': 1.40.0 + + '@opentelemetry/instrumentation-amqplib@0.61.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.7.1(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.40.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-connect@0.57.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.7.1(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.40.0 + '@types/connect': 3.4.38 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-dataloader@0.31.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-fs@0.33.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.7.1(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-generic-pool@0.57.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-graphql@0.62.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-hapi@0.60.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.7.1(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.40.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-http@0.214.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.6.1(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.40.0 + forwarded-parse: 2.1.2 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-kafkajs@0.23.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.40.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-knex@0.58.0(@opentelemetry/api@1.9.1)': dependencies: - '@humanfs/core': 0.19.2 - '@humanfs/types': 0.15.0 - '@humanwhocodes/retry': 0.4.3 + '@opentelemetry/api': 1.9.1 + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.40.0 + transitivePeerDependencies: + - supports-color - '@humanfs/types@0.15.0': {} + '@opentelemetry/instrumentation-koa@0.62.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.7.1(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.40.0 + transitivePeerDependencies: + - supports-color - '@humanwhocodes/module-importer@1.0.1': {} + '@opentelemetry/instrumentation-lru-memoizer@0.58.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) + transitivePeerDependencies: + - supports-color - '@humanwhocodes/retry@0.4.3': {} + '@opentelemetry/instrumentation-mongodb@0.67.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.40.0 + transitivePeerDependencies: + - supports-color - '@jridgewell/gen-mapping@0.3.13': + '@opentelemetry/instrumentation-mongoose@0.60.0(@opentelemetry/api@1.9.1)': dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - '@jridgewell/trace-mapping': 0.3.31 + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.7.1(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.40.0 + transitivePeerDependencies: + - supports-color - '@jridgewell/remapping@2.3.5': + '@opentelemetry/instrumentation-mysql2@0.60.0(@opentelemetry/api@1.9.1)': dependencies: - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 + '@opentelemetry/api': 1.9.1 + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.40.0 + '@opentelemetry/sql-common': 0.41.2(@opentelemetry/api@1.9.1) + transitivePeerDependencies: + - supports-color - '@jridgewell/resolve-uri@3.1.2': {} + '@opentelemetry/instrumentation-mysql@0.60.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.40.0 + '@types/mysql': 2.15.27 + transitivePeerDependencies: + - supports-color - '@jridgewell/sourcemap-codec@1.5.5': {} + '@opentelemetry/instrumentation-pg@0.66.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.7.1(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.40.0 + '@opentelemetry/sql-common': 0.41.2(@opentelemetry/api@1.9.1) + '@types/pg': 8.15.6 + '@types/pg-pool': 2.0.7 + transitivePeerDependencies: + - supports-color - '@jridgewell/trace-mapping@0.3.31': + '@opentelemetry/instrumentation-tedious@0.33.0(@opentelemetry/api@1.9.1)': dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.5 + '@opentelemetry/api': 1.9.1 + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.40.0 + '@types/tedious': 4.0.14 + transitivePeerDependencies: + - supports-color - '@neondatabase/serverless@0.10.4': + '@opentelemetry/instrumentation@0.207.0(@opentelemetry/api@1.9.1)': dependencies: - '@types/pg': 8.11.6 + '@opentelemetry/api': 1.9.1 + '@opentelemetry/api-logs': 0.207.0 + import-in-the-middle: 2.0.6 + require-in-the-middle: 8.0.1 + transitivePeerDependencies: + - supports-color - '@noble/ciphers@2.2.0': {} + '@opentelemetry/instrumentation@0.212.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/api-logs': 0.212.0 + import-in-the-middle: 2.0.6 + require-in-the-middle: 8.0.1 + transitivePeerDependencies: + - supports-color - '@noble/hashes@2.2.0': {} + '@opentelemetry/instrumentation@0.214.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/api-logs': 0.214.0 + import-in-the-middle: 3.0.1 + require-in-the-middle: 8.0.1 + transitivePeerDependencies: + - supports-color - '@nodable/entities@2.1.0': {} + '@opentelemetry/resources@2.7.1(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.7.1(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.40.0 - '@nodelib/fs.scandir@2.1.5': + '@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1)': dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.7.1(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.7.1(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.40.0 - '@nodelib/fs.stat@2.0.5': {} + '@opentelemetry/semantic-conventions@1.40.0': {} - '@nodelib/fs.walk@1.2.8': + '@opentelemetry/sql-common@0.41.2(@opentelemetry/api@1.9.1)': dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.20.1 - - '@opentelemetry/api@1.9.0': {} + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.7.1(@opentelemetry/api@1.9.1) - '@opentelemetry/semantic-conventions@1.40.0': {} + '@pkgjs/parseargs@0.11.0': + optional: true '@playwright/test@1.59.1': dependencies: playwright: 1.59.1 + '@prisma/instrumentation@7.6.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/instrumentation': 0.207.0(@opentelemetry/api@1.9.1) + transitivePeerDependencies: + - supports-color + '@radix-ui/primitive@1.1.3': {} '@radix-ui/react-arrow@1.1.7(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': @@ -3836,6 +5101,165 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.60.3': optional: true + '@sentry/babel-plugin-component-annotate@4.9.1': {} + + '@sentry/browser-utils@10.59.0': + dependencies: + '@sentry/core': 10.59.0 + + '@sentry/browser@10.59.0': + dependencies: + '@sentry/browser-utils': 10.59.0 + '@sentry/core': 10.59.0 + '@sentry/feedback': 10.59.0 + '@sentry/replay': 10.59.0 + '@sentry/replay-canvas': 10.59.0 + + '@sentry/bundler-plugin-core@4.9.1': + dependencies: + '@babel/core': 7.29.0 + '@sentry/babel-plugin-component-annotate': 4.9.1 + '@sentry/cli': 2.58.6 + dotenv: 16.6.1 + find-up: 5.0.0 + glob: 10.5.0 + magic-string: 0.30.8 + unplugin: 1.0.1 + transitivePeerDependencies: + - encoding + - supports-color + + '@sentry/cli-darwin@2.58.6': + optional: true + + '@sentry/cli-linux-arm64@2.58.6': + optional: true + + '@sentry/cli-linux-arm@2.58.6': + optional: true + + '@sentry/cli-linux-i686@2.58.6': + optional: true + + '@sentry/cli-linux-x64@2.58.6': + optional: true + + '@sentry/cli-win32-arm64@2.58.6': + optional: true + + '@sentry/cli-win32-i686@2.58.6': + optional: true + + '@sentry/cli-win32-x64@2.58.6': + optional: true + + '@sentry/cli@2.58.6': + dependencies: + https-proxy-agent: 5.0.1 + node-fetch: 2.7.0 + progress: 2.0.3 + proxy-from-env: 1.1.0 + which: 2.0.2 + optionalDependencies: + '@sentry/cli-darwin': 2.58.6 + '@sentry/cli-linux-arm': 2.58.6 + '@sentry/cli-linux-arm64': 2.58.6 + '@sentry/cli-linux-i686': 2.58.6 + '@sentry/cli-linux-x64': 2.58.6 + '@sentry/cli-win32-arm64': 2.58.6 + '@sentry/cli-win32-i686': 2.58.6 + '@sentry/cli-win32-x64': 2.58.6 + transitivePeerDependencies: + - encoding + - supports-color + + '@sentry/core@10.53.1': {} + + '@sentry/core@10.59.0': {} + + '@sentry/feedback@10.59.0': + dependencies: + '@sentry/core': 10.59.0 + + '@sentry/node-core@10.53.1(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.214.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.40.0)': + dependencies: + '@sentry/core': 10.53.1 + '@sentry/opentelemetry': 10.53.1(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.40.0) + import-in-the-middle: 3.0.1 + optionalDependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.7.1(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 2.7.1(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.40.0 + + '@sentry/node@10.53.1': + dependencies: + '@fastify/otel': 0.18.0(@opentelemetry/api@1.9.1) + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.7.1(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation-amqplib': 0.61.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation-connect': 0.57.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation-dataloader': 0.31.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation-fs': 0.33.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation-generic-pool': 0.57.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation-graphql': 0.62.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation-hapi': 0.60.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation-http': 0.214.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation-kafkajs': 0.23.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation-knex': 0.58.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation-koa': 0.62.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation-lru-memoizer': 0.58.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation-mongodb': 0.67.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation-mongoose': 0.60.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation-mysql': 0.60.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation-mysql2': 0.60.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation-pg': 0.66.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation-tedious': 0.33.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 2.7.1(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.40.0 + '@prisma/instrumentation': 7.6.0(@opentelemetry/api@1.9.1) + '@sentry/core': 10.53.1 + '@sentry/node-core': 10.53.1(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.214.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.40.0) + '@sentry/opentelemetry': 10.53.1(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.40.0) + import-in-the-middle: 3.0.1 + transitivePeerDependencies: + - '@opentelemetry/exporter-trace-otlp-http' + - supports-color + + '@sentry/opentelemetry@10.53.1(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.40.0)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.7.1(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 2.7.1(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.40.0 + '@sentry/core': 10.53.1 + + '@sentry/react@10.59.0(react@18.3.1)': + dependencies: + '@sentry/browser': 10.59.0 + '@sentry/core': 10.59.0 + react: 18.3.1 + + '@sentry/replay-canvas@10.59.0': + dependencies: + '@sentry/core': 10.59.0 + '@sentry/replay': 10.59.0 + + '@sentry/replay@10.59.0': + dependencies: + '@sentry/browser-utils': 10.59.0 + '@sentry/core': 10.59.0 + + '@sentry/vite-plugin@4.9.1': + dependencies: + '@sentry/bundler-plugin-core': 4.9.1 + unplugin: 1.0.1 + transitivePeerDependencies: + - encoding + - supports-color + '@standard-schema/spec@1.1.0': {} '@tanstack/query-core@5.100.9': {} @@ -3866,12 +5290,20 @@ snapshots: dependencies: '@babel/types': 7.29.0 + '@types/connect@3.4.38': + dependencies: + '@types/node': 25.6.2 + '@types/estree@1.0.8': {} '@types/estree@1.0.9': {} '@types/json-schema@7.0.15': {} + '@types/mysql@2.15.27': + dependencies: + '@types/node': 25.6.2 + '@types/node@20.19.40': dependencies: undici-types: 6.21.0 @@ -3884,12 +5316,22 @@ snapshots: dependencies: undici-types: 7.19.2 + '@types/pg-pool@2.0.7': + dependencies: + '@types/pg': 8.15.6 + '@types/pg@8.11.6': dependencies: '@types/node': 22.19.18 pg-protocol: 1.13.0 pg-types: 4.1.0 + '@types/pg@8.15.6': + dependencies: + '@types/node': 25.6.2 + pg-protocol: 1.13.0 + pg-types: 2.2.0 + '@types/prop-types@15.7.15': {} '@types/react-dom@18.3.7(@types/react@18.3.28)': @@ -3901,6 +5343,10 @@ snapshots: '@types/prop-types': 15.7.15 csstype: 3.2.3 + '@types/tedious@4.0.14': + dependencies: + '@types/node': 25.6.2 + '@typescript-eslint/eslint-plugin@8.59.2(@typescript-eslint/parser@8.59.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 @@ -4063,12 +5509,22 @@ snapshots: '@xmldom/xmldom@0.8.13': {} + acorn-import-attributes@1.9.5(acorn@8.16.0): + dependencies: + acorn: 8.16.0 + acorn-jsx@5.3.2(acorn@8.16.0): dependencies: acorn: 8.16.0 acorn@8.16.0: {} + agent-base@6.0.2: + dependencies: + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + ai@6.0.177(zod@3.25.76): dependencies: '@ai-sdk/gateway': 3.0.112(zod@3.25.76) @@ -4086,10 +5542,14 @@ snapshots: ansi-regex@5.0.1: {} + ansi-regex@6.2.2: {} + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 + ansi-styles@6.2.3: {} + any-promise@1.3.0: {} anymatch@3.1.3: @@ -4126,15 +5586,15 @@ snapshots: baseline-browser-mapping@2.10.29: {} - better-auth@1.6.10(@opentelemetry/api@1.9.0)(drizzle-orm@0.45.2(@neondatabase/serverless@0.10.4)(@opentelemetry/api@1.9.0)(@types/pg@8.11.6)(@upstash/redis@1.38.0)(kysely@0.28.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vitest@2.1.9(@types/node@22.19.18)): + better-auth@1.6.10(@opentelemetry/api@1.9.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@neondatabase/serverless@0.10.4)(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(@upstash/redis@1.38.0)(kysely@0.28.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vitest@2.1.9(@types/node@22.19.18)(happy-dom@15.11.7)): dependencies: - '@better-auth/core': 1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) - '@better-auth/drizzle-adapter': 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(drizzle-orm@0.45.2(@neondatabase/serverless@0.10.4)(@opentelemetry/api@1.9.0)(@types/pg@8.11.6)(@upstash/redis@1.38.0)(kysely@0.28.17)) - '@better-auth/kysely-adapter': 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(kysely@0.28.17) - '@better-auth/memory-adapter': 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0) - '@better-auth/mongo-adapter': 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0) - '@better-auth/prisma-adapter': 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0) - '@better-auth/telemetry': 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21) + '@better-auth/core': 1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) + '@better-auth/drizzle-adapter': 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(drizzle-orm@0.45.2(@neondatabase/serverless@0.10.4)(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(@upstash/redis@1.38.0)(kysely@0.28.17)) + '@better-auth/kysely-adapter': 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(kysely@0.28.17) + '@better-auth/memory-adapter': 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0) + '@better-auth/mongo-adapter': 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0) + '@better-auth/prisma-adapter': 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0) + '@better-auth/telemetry': 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21) '@better-auth/utils': 0.4.0 '@better-fetch/fetch': 1.1.21 '@noble/ciphers': 2.2.0 @@ -4146,23 +5606,24 @@ snapshots: nanostores: 1.3.0 zod: 4.4.3 optionalDependencies: - drizzle-orm: 0.45.2(@neondatabase/serverless@0.10.4)(@opentelemetry/api@1.9.0)(@types/pg@8.11.6)(@upstash/redis@1.38.0)(kysely@0.28.17) + drizzle-kit: 0.31.10 + drizzle-orm: 0.45.2(@neondatabase/serverless@0.10.4)(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(@upstash/redis@1.38.0)(kysely@0.28.17) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - vitest: 2.1.9(@types/node@22.19.18) + vitest: 2.1.9(@types/node@22.19.18)(happy-dom@15.11.7) transitivePeerDependencies: - '@cloudflare/workers-types' - '@opentelemetry/api' - better-auth@1.6.10(@opentelemetry/api@1.9.0)(drizzle-orm@0.45.2(@neondatabase/serverless@0.10.4)(@opentelemetry/api@1.9.0)(@types/pg@8.11.6)(@upstash/redis@1.38.0)(kysely@0.28.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vitest@2.1.9(@types/node@25.6.2)): + better-auth@1.6.10(@opentelemetry/api@1.9.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@neondatabase/serverless@0.10.4)(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(@upstash/redis@1.38.0)(kysely@0.28.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vitest@2.1.9(@types/node@25.6.2)(happy-dom@15.11.7)): dependencies: - '@better-auth/core': 1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) - '@better-auth/drizzle-adapter': 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(drizzle-orm@0.45.2(@neondatabase/serverless@0.10.4)(@opentelemetry/api@1.9.0)(@types/pg@8.11.6)(@upstash/redis@1.38.0)(kysely@0.28.17)) - '@better-auth/kysely-adapter': 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(kysely@0.28.17) - '@better-auth/memory-adapter': 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0) - '@better-auth/mongo-adapter': 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0) - '@better-auth/prisma-adapter': 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0) - '@better-auth/telemetry': 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21) + '@better-auth/core': 1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) + '@better-auth/drizzle-adapter': 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(drizzle-orm@0.45.2(@neondatabase/serverless@0.10.4)(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(@upstash/redis@1.38.0)(kysely@0.28.17)) + '@better-auth/kysely-adapter': 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(kysely@0.28.17) + '@better-auth/memory-adapter': 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0) + '@better-auth/mongo-adapter': 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0) + '@better-auth/prisma-adapter': 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0) + '@better-auth/telemetry': 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21) '@better-auth/utils': 0.4.0 '@better-fetch/fetch': 1.1.21 '@noble/ciphers': 2.2.0 @@ -4174,10 +5635,11 @@ snapshots: nanostores: 1.3.0 zod: 4.4.3 optionalDependencies: - drizzle-orm: 0.45.2(@neondatabase/serverless@0.10.4)(@opentelemetry/api@1.9.0)(@types/pg@8.11.6)(@upstash/redis@1.38.0)(kysely@0.28.17) + drizzle-kit: 0.31.10 + drizzle-orm: 0.45.2(@neondatabase/serverless@0.10.4)(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(@upstash/redis@1.38.0)(kysely@0.28.17) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - vitest: 2.1.9(@types/node@25.6.2) + vitest: 2.1.9(@types/node@25.6.2)(happy-dom@15.11.7) transitivePeerDependencies: - '@cloudflare/workers-types' - '@opentelemetry/api' @@ -4207,6 +5669,10 @@ snapshots: balanced-match: 1.0.2 concat-map: 0.0.1 + brace-expansion@2.1.1: + dependencies: + balanced-match: 1.0.2 + brace-expansion@5.0.6: dependencies: balanced-match: 4.0.4 @@ -4223,6 +5689,8 @@ snapshots: node-releases: 2.0.38 update-browserslist-db: 1.2.3(browserslist@4.28.2) + buffer-from@1.1.2: {} + cac@6.7.14: {} callsites@3.1.0: {} @@ -4260,6 +5728,8 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + cjs-module-lexer@2.2.0: {} + class-variance-authority@0.7.1: dependencies: clsx: 2.1.1 @@ -4336,27 +5806,65 @@ snapshots: dotenv@17.4.2: {} - drizzle-orm@0.45.2(@neondatabase/serverless@0.10.4)(@opentelemetry/api@1.9.0)(@types/pg@8.11.6)(@upstash/redis@1.38.0)(kysely@0.28.17): + drizzle-kit@0.31.10: + dependencies: + '@drizzle-team/brocli': 0.10.2 + '@esbuild-kit/esm-loader': 2.6.5 + esbuild: 0.25.12 + tsx: 4.21.0 + + drizzle-orm@0.45.2(@neondatabase/serverless@0.10.4)(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(@upstash/redis@1.38.0)(kysely@0.28.17): optionalDependencies: '@neondatabase/serverless': 0.10.4 - '@opentelemetry/api': 1.9.0 - '@types/pg': 8.11.6 + '@opentelemetry/api': 1.9.1 + '@types/pg': 8.15.6 '@upstash/redis': 1.38.0 kysely: 0.28.17 - drizzle-zod@0.5.1(drizzle-orm@0.45.2(@neondatabase/serverless@0.10.4)(@opentelemetry/api@1.9.0)(@types/pg@8.11.6)(@upstash/redis@1.38.0)(kysely@0.28.17))(zod@3.25.76): + drizzle-zod@0.5.1(drizzle-orm@0.45.2(@neondatabase/serverless@0.10.4)(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(@upstash/redis@1.38.0)(kysely@0.28.17))(zod@3.25.76): dependencies: - drizzle-orm: 0.45.2(@neondatabase/serverless@0.10.4)(@opentelemetry/api@1.9.0)(@types/pg@8.11.6)(@upstash/redis@1.38.0)(kysely@0.28.17) + drizzle-orm: 0.45.2(@neondatabase/serverless@0.10.4)(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(@upstash/redis@1.38.0)(kysely@0.28.17) zod: 3.25.76 + eastasianwidth@0.2.0: {} + electron-to-chromium@1.5.353: {} emoji-regex@8.0.0: {} + emoji-regex@9.2.2: {} + + entities@4.5.0: {} + es-errors@1.3.0: {} es-module-lexer@1.7.0: {} + esbuild@0.18.20: + optionalDependencies: + '@esbuild/android-arm': 0.18.20 + '@esbuild/android-arm64': 0.18.20 + '@esbuild/android-x64': 0.18.20 + '@esbuild/darwin-arm64': 0.18.20 + '@esbuild/darwin-x64': 0.18.20 + '@esbuild/freebsd-arm64': 0.18.20 + '@esbuild/freebsd-x64': 0.18.20 + '@esbuild/linux-arm': 0.18.20 + '@esbuild/linux-arm64': 0.18.20 + '@esbuild/linux-ia32': 0.18.20 + '@esbuild/linux-loong64': 0.18.20 + '@esbuild/linux-mips64el': 0.18.20 + '@esbuild/linux-ppc64': 0.18.20 + '@esbuild/linux-riscv64': 0.18.20 + '@esbuild/linux-s390x': 0.18.20 + '@esbuild/linux-x64': 0.18.20 + '@esbuild/netbsd-x64': 0.18.20 + '@esbuild/openbsd-x64': 0.18.20 + '@esbuild/sunos-x64': 0.18.20 + '@esbuild/win32-arm64': 0.18.20 + '@esbuild/win32-ia32': 0.18.20 + '@esbuild/win32-x64': 0.18.20 + esbuild@0.21.5: optionalDependencies: '@esbuild/aix-ppc64': 0.21.5 @@ -4383,6 +5891,35 @@ snapshots: '@esbuild/win32-ia32': 0.21.5 '@esbuild/win32-x64': 0.21.5 + esbuild@0.25.12: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.12 + '@esbuild/android-arm': 0.25.12 + '@esbuild/android-arm64': 0.25.12 + '@esbuild/android-x64': 0.25.12 + '@esbuild/darwin-arm64': 0.25.12 + '@esbuild/darwin-x64': 0.25.12 + '@esbuild/freebsd-arm64': 0.25.12 + '@esbuild/freebsd-x64': 0.25.12 + '@esbuild/linux-arm': 0.25.12 + '@esbuild/linux-arm64': 0.25.12 + '@esbuild/linux-ia32': 0.25.12 + '@esbuild/linux-loong64': 0.25.12 + '@esbuild/linux-mips64el': 0.25.12 + '@esbuild/linux-ppc64': 0.25.12 + '@esbuild/linux-riscv64': 0.25.12 + '@esbuild/linux-s390x': 0.25.12 + '@esbuild/linux-x64': 0.25.12 + '@esbuild/netbsd-arm64': 0.25.12 + '@esbuild/netbsd-x64': 0.25.12 + '@esbuild/openbsd-arm64': 0.25.12 + '@esbuild/openbsd-x64': 0.25.12 + '@esbuild/openharmony-arm64': 0.25.12 + '@esbuild/sunos-x64': 0.25.12 + '@esbuild/win32-arm64': 0.25.12 + '@esbuild/win32-ia32': 0.25.12 + '@esbuild/win32-x64': 0.25.12 + esbuild@0.27.7: optionalDependencies: '@esbuild/aix-ppc64': 0.27.7 @@ -4554,6 +6091,13 @@ snapshots: flatted@3.4.2: {} + foreground-child@3.3.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + forwarded-parse@2.1.2: {} + fraction.js@5.3.4: {} fsevents@2.3.2: @@ -4582,8 +6126,23 @@ snapshots: dependencies: is-glob: 4.0.3 + glob@10.5.0: + dependencies: + foreground-child: 3.3.1 + jackspeak: 3.4.3 + minimatch: 9.0.9 + minipass: 7.1.3 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + globals@14.0.0: {} + happy-dom@15.11.7: + dependencies: + entities: 4.5.0 + webidl-conversions: 7.0.0 + whatwg-mimetype: 3.0.0 + has-flag@4.0.0: {} hasown@2.0.3: @@ -4592,6 +6151,13 @@ snapshots: hono@4.12.18: {} + https-proxy-agent@5.0.1: + dependencies: + agent-base: 6.0.2 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + ignore@5.3.2: {} ignore@7.0.5: {} @@ -4603,6 +6169,20 @@ snapshots: parent-module: 1.0.1 resolve-from: 4.0.0 + import-in-the-middle@2.0.6: + dependencies: + acorn: 8.16.0 + acorn-import-attributes: 1.9.5(acorn@8.16.0) + cjs-module-lexer: 2.2.0 + module-details-from-path: 1.0.4 + + import-in-the-middle@3.0.1: + dependencies: + acorn: 8.16.0 + acorn-import-attributes: 1.9.5(acorn@8.16.0) + cjs-module-lexer: 2.2.0 + module-details-from-path: 1.0.4 + imurmurhash@0.1.4: {} inherits@2.0.4: {} @@ -4629,6 +6209,12 @@ snapshots: isexe@2.0.0: {} + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + jiti@1.21.7: {} jose@6.2.3: {} @@ -4691,6 +6277,8 @@ snapshots: loupe@3.2.1: {} + lru-cache@10.4.3: {} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -4703,6 +6291,10 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 + magic-string@0.30.8: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + merge2@1.4.1: {} micromatch@4.0.8: @@ -4718,10 +6310,18 @@ snapshots: dependencies: brace-expansion: 1.1.14 + minimatch@9.0.9: + dependencies: + brace-expansion: 2.1.1 + minimist@1.2.8: {} + minipass@7.1.3: {} + mitt@3.0.1: {} + module-details-from-path@1.0.4: {} + ms@2.1.3: {} mz@2.7.0: @@ -4736,6 +6336,10 @@ snapshots: natural-compare@1.4.0: {} + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + node-forge@1.4.0: {} node-releases@2.0.38: {} @@ -4769,6 +6373,8 @@ snapshots: dependencies: p-limit: 3.1.0 + package-json-from-dist@1.0.1: {} + pako@1.0.11: {} parent-module@1.0.1: @@ -4783,6 +6389,11 @@ snapshots: path-parse@1.0.7: {} + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.3 + pathe@1.1.2: {} pathval@2.0.1: {} @@ -4793,6 +6404,14 @@ snapshots: pg-protocol@1.13.0: {} + pg-types@2.2.0: + dependencies: + pg-int8: 1.0.1 + postgres-array: 2.0.0 + postgres-bytea: 1.0.1 + postgres-date: 1.0.7 + postgres-interval: 1.2.0 + pg-types@4.1.0: dependencies: pg-int8: 1.0.1 @@ -4859,14 +6478,24 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + postgres-array@2.0.0: {} + postgres-array@3.0.4: {} + postgres-bytea@1.0.1: {} + postgres-bytea@3.0.0: dependencies: obuf: 1.1.2 + postgres-date@1.0.7: {} + postgres-date@2.1.0: {} + postgres-interval@1.2.0: + dependencies: + xtend: 4.0.2 + postgres-interval@3.0.0: {} postgres-range@1.1.4: {} @@ -4877,6 +6506,10 @@ snapshots: process-nextick-args@2.0.1: {} + progress@2.0.3: {} + + proxy-from-env@1.1.0: {} + punycode@2.3.1: {} pure-rand@8.4.0: {} @@ -4944,6 +6577,13 @@ snapshots: require-directory@2.1.1: {} + require-in-the-middle@8.0.1: + dependencies: + debug: 4.4.3 + module-details-from-path: 1.0.4 + transitivePeerDependencies: + - supports-color + resolve-from@4.0.0: {} resolve-pkg-maps@1.0.0: {} @@ -5038,8 +6678,17 @@ snapshots: siginfo@2.0.0: {} + signal-exit@4.1.0: {} + source-map-js@1.2.1: {} + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + stackback@0.0.2: {} std-env@3.10.0: {} @@ -5050,6 +6699,12 @@ snapshots: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.2.0 + string_decoder@1.1.1: dependencies: safe-buffer: 5.1.2 @@ -5058,6 +6713,10 @@ snapshots: dependencies: ansi-regex: 5.0.1 + strip-ansi@7.2.0: + dependencies: + ansi-regex: 6.2.2 + strip-json-comments@3.1.1: {} strnum@2.3.0: {} @@ -5149,6 +6808,8 @@ snapshots: dependencies: is-number: 7.0.0 + tr46@0.0.3: {} + tree-kill@1.2.2: {} ts-api-utils@2.5.0(typescript@5.9.3): @@ -5189,6 +6850,13 @@ snapshots: undici-types@7.19.2: {} + unplugin@1.0.1: + dependencies: + acorn: 8.16.0 + chokidar: 3.6.0 + webpack-sources: 3.5.0 + webpack-virtual-modules: 0.5.0 + update-browserslist-db@1.2.3(browserslist@4.28.2): dependencies: browserslist: 4.28.2 @@ -5278,7 +6946,7 @@ snapshots: '@types/node': 25.6.2 fsevents: 2.3.3 - vitest@2.1.9(@types/node@22.19.18): + vitest@2.1.9(@types/node@22.19.18)(happy-dom@15.11.7): dependencies: '@vitest/expect': 2.1.9 '@vitest/mocker': 2.1.9(vite@5.4.21(@types/node@25.6.2)) @@ -5302,6 +6970,7 @@ snapshots: why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 22.19.18 + happy-dom: 15.11.7 transitivePeerDependencies: - less - lightningcss @@ -5314,7 +6983,7 @@ snapshots: - terser optional: true - vitest@2.1.9(@types/node@25.6.2): + vitest@2.1.9(@types/node@25.6.2)(happy-dom@15.11.7): dependencies: '@vitest/expect': 2.1.9 '@vitest/mocker': 2.1.9(vite@5.4.21(@types/node@25.6.2)) @@ -5338,6 +7007,7 @@ snapshots: why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 25.6.2 + happy-dom: 15.11.7 transitivePeerDependencies: - less - lightningcss @@ -5349,6 +7019,21 @@ snapshots: - supports-color - terser + webidl-conversions@3.0.1: {} + + webidl-conversions@7.0.0: {} + + webpack-sources@3.5.0: {} + + webpack-virtual-modules@0.5.0: {} + + whatwg-mimetype@3.0.0: {} + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + which@2.0.2: dependencies: isexe: 2.0.0 @@ -5373,6 +7058,12 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.3 + string-width: 5.1.2 + strip-ansi: 7.2.0 + xml-crypto@6.1.2: dependencies: '@xmldom/is-dom-node': 1.0.1 @@ -5389,6 +7080,8 @@ snapshots: xpath@0.0.33: {} + xtend@4.0.2: {} + y18n@5.0.8: {} yallist@3.1.1: {} diff --git a/readme.md b/readme.md index cb7cba1..91ab3f6 100644 --- a/readme.md +++ b/readme.md @@ -9,7 +9,7 @@ Stackfast 2026 is a pnpm TypeScript monorepo for building, validating, and expor - API contract tests cover the public MVP API surface. - Registry validation passes for the expanded catalog. - Playwright E2E tests cover the primary MVP flows. -- Deployment work is still pending. +- Deployment tooling and docs are ready; production cutover is operator-driven — see [Production deployment](#production-deployment). ## Architecture @@ -139,16 +139,150 @@ pnpm test:e2e Playwright uses isolated local ports by default and builds the web app with `VITE_API_URL` pointing at the test API. -## Deployment Notes +## Production deployment + +Stackfast runs in production as **two independent Railway services in one Railway +project**, both deployed via the Railway CLI: + +- `stackfast-api` — Node 20 Hono process, served at `https://api.stackfast.app`. +- `stackfast-web` — static Vite bundle (`apps/web/dist`), served at `https://stackfast.app`. + +The two services build, redeploy, and roll back independently. The architecture +itself is decided in [ADR 003 — Deployment architecture for MVP](docs/decisions/003-deployment-architecture.md); +this section is the operator runbook for executing it. Auth and AI provider +choices are decided in [ADR 001 — Authentication strategy](docs/decisions/001-authentication-strategy.md) +and [ADR 002 — AI provider strategy](docs/decisions/002-ai-provider-strategy.md). + +In production the web service calls `https://api.stackfast.app` **directly — there +is no proxy**. The local Vite `/api/*` proxy only exists in dev. This is enforced +at build time by `VITE_API_URL` and `VITE_AUTH_URL` pointing at the absolute API +origin, which is what makes the cross-origin `SameSite=None; Domain=.stackfast.app` +session cookie take effect (see ADR 003 § 4). + +### Production environment variables + +Set every variable below on the relevant Railway service before the first deploy. +API variables go on `stackfast-api`; the `VITE_*` variables are read by +`stackfast-web` **at build time**. Secrets live only in Railway, never in git. + +| Variable | Service | Production value | Required | Provisioned by | +| --- | --- | --- | --- | --- | +| `PORT` | api | injected by Railway | yes | Railway | +| `NODE_ENV` | api | `production` | yes | Operator | +| `CORS_ORIGIN` | api | `https://stackfast.app` | yes | Operator | +| `DATABASE_URL` | api | Neon production branch pooled connection string | yes | Neon | +| `BETTER_AUTH_SECRET` | api | 32-byte random (distinct per environment) | yes | Operator | +| `BETTER_AUTH_URL` | api | `https://api.stackfast.app` | yes | Operator | +| `ALLOW_AUTH_BYPASS` | api | `false` (auth fails closed in prod) | yes | Operator | +| `GITHUB_CLIENT_ID` | api | Production GitHub OAuth app client id | yes | GitHub | +| `GITHUB_CLIENT_SECRET` | api | Production GitHub OAuth app secret | yes | GitHub | +| `ADMIN_API_KEY` | api | 32-byte random, distinct from `BETTER_AUTH_SECRET` | yes | Operator | +| `AI_PROVIDER` | api | `azure-openai` | yes | Operator | +| `AZURE_OPENAI_RESOURCE_NAME` | api | Azure Foundry resource subdomain | when provider = `azure-openai` | Azure Foundry | +| `AZURE_OPENAI_API_KEY` | api | Azure OpenAI API key | when provider = `azure-openai` | Azure Foundry | +| `AZURE_OPENAI_DEPLOYMENT` | api | Azure deployment name (e.g. `gpt-4.1`) | when provider = `azure-openai` | Azure Foundry | +| `GEMINI_API_KEY` | api | Gemini key so fallback works if Azure degrades | optional | Google | +| `UPSTASH_REDIS_REST_URL` | api | Upstash production database REST URL | required when `RATE_LIMIT_BACKEND=upstash` | Upstash | +| `UPSTASH_REDIS_REST_TOKEN` | api | Upstash production database REST token | required when `RATE_LIMIT_BACKEND=upstash` | Upstash | +| `RATE_LIMIT_BACKEND` | api | `upstash` | optional (defaults to `memory`) | Operator | +| `SENTRY_DSN` | api | prod DSN, or unset to disable | optional | Sentry | +| `SENTRY_AUTH_TOKEN` | api/web | org-scoped token for source-map upload | required for source maps | Sentry | +| `SENTRY_ORG` | api/web | Sentry org slug | required for source maps | Sentry | +| `SENTRY_PROJECT_API` | api | Sentry API project slug | required for source maps | Sentry | +| `SENTRY_PROJECT_WEB` | web | Sentry web project slug | required for source maps | Sentry | +| `RAILWAY_GIT_COMMIT_SHA` | api/web | injected by Railway (Sentry release tag) | optional | Railway | +| `VITE_API_URL` | web | `https://api.stackfast.app/api/v1` | yes | Operator (build) | +| `VITE_AUTH_URL` | web | `https://api.stackfast.app` | yes | Operator (build) | +| `VITE_SENTRY_DSN` | web | prod DSN, or unset to disable | optional | Sentry | +| `VITE_APP_RELEASE` | web | Railway commit SHA (Sentry release tag) | optional | Operator (build) | + +`BETTER_AUTH_SECRET`, `ADMIN_API_KEY`, and the Upstash credentials must be distinct +from every other environment. All variables are also documented inline in +[`.env.example`](.env.example). + +### Deploying with the Railway CLI + +From a fresh clone, with the Railway CLI installed: -Phase 8 deployment is still pending. Before production deployment: +```sh +# 1. Authenticate (browser SSO round trip). +railway login + +# 2. Link the repo to the existing Railway project. +railway link + +# 3. Select the target environment. +railway environment production # or: railway environment staging + +# 4. Set every variable from the table above (repeat per key / per service). +railway variables set CORS_ORIGIN=https://stackfast.app --service stackfast-api +railway variables set VITE_API_URL=https://api.stackfast.app/api/v1 --service stackfast-web +# ...set the rest of the variables for each service... + +# 5. Build and deploy the API. Wait for the /health check to go green. +railway up --service stackfast-api + +# 6. Apply pending Drizzle migrations (one-shot, see below). +railway run --service stackfast-api -- pnpm exec tsx scripts/deploy/migrate.ts + +# 7. Build and deploy the web bundle. +railway up --service stackfast-web + +# 8. Attach the custom domains (or use the Railway dashboard). +railway domain add stackfast.app --service stackfast-web +railway domain add api.stackfast.app --service stackfast-api + +# 9. Run the post-deploy smoke test. +pnpm exec tsx scripts/deploy/smoke.ts --base https://api.stackfast.app --web https://stackfast.app +``` + +Staging follows the exact same sequence with `railway environment staging` and the +staging hostnames. Because the services are independent, re-running +`railway up --service stackfast-web` leaves the API serving traffic without a +restart, and vice versa. + +### Applying database migrations + +Drizzle migrations run as a **one-shot Railway command against the Neon production +branch**, separate from the API start script. They are forward-only in production. + +```sh +railway run --service stackfast-api -- pnpm exec tsx scripts/deploy/migrate.ts +``` + +`scripts/deploy/migrate.ts` waits up to 30 seconds for the database to accept +connections, applies additive (forward-only) DDL, and exits non-zero on any +failure. Pass `--dry-run` to print the pending DDL without applying it. Column +drops and renames must ship across two sequential deploys so the previous API +build stays schema-compatible (see [ADR 003](docs/decisions/003-deployment-architecture.md) § 2, § 7 +and the rollback runbook). + +### Rollback procedure + +Each service rolls back to its immediately previous successful build via the +Railway CLI, independently of the other. The full operator runbook — including the +schema-compatibility gate for API rollbacks — is in +[`scripts/deploy/rollback.md`](scripts/deploy/rollback.md). + +```sh +# Roll back the web service (always safe — static bundle, no data layer). +railway rollback --service stackfast-web --environment production + +# Roll back the API service (clear the schema-compatibility gate first). +railway rollback --service stackfast-api --environment production +``` + +Migrations are **not** re-run on rollback. Because every schema change obeys the +two-deploy rule, a one-deploy API rollback always lands on a build that is +compatible with the current Neon schema. If a rollback target's schema expectation +conflicts with the live schema, stop and perform a manual forward-migration +intervention first — see [`scripts/deploy/rollback.md`](scripts/deploy/rollback.md). + +### Architecture decision records -- Replace in-memory rate limiting with a distributed backend such as Redis/Upstash. -- Provision Neon Postgres and configure `DATABASE_URL`. -- Configure Better Auth and GitHub OAuth callback URLs. -- Set production `CORS_ORIGIN`, `BETTER_AUTH_URL`, `VITE_API_URL`, and `VITE_AUTH_URL`. -- Configure `ADMIN_API_KEY` and AI provider secrets. -- Add error tracking such as Sentry. +- [ADR 001 — Authentication strategy](docs/decisions/001-authentication-strategy.md) +- [ADR 002 — AI provider strategy](docs/decisions/002-ai-provider-strategy.md) +- [ADR 003 — Deployment architecture for MVP](docs/decisions/003-deployment-architecture.md) ## Roadmap diff --git a/scripts/deploy/migrate.ts b/scripts/deploy/migrate.ts new file mode 100644 index 0000000..0884daa --- /dev/null +++ b/scripts/deploy/migrate.ts @@ -0,0 +1,339 @@ +#!/usr/bin/env tsx +/** + * scripts/deploy/migrate.ts — one-shot Drizzle migration runner (Phase 8). + * + * Wraps `drizzle-kit push` so Drizzle migrations run as a one-shot deploy step, + * separate from the API start script (R2.4). It is invoked in production as: + * + * railway run --service stackfast-api -- pnpm exec tsx scripts/deploy/migrate.ts + * + * Behaviour: + * 1. Validates DATABASE_URL is set; exits non-zero with a clear message if not. + * 2. Waits for the database to accept connections, retrying transient + * connection failures for up to ~30 seconds before erroring (R2.3). The + * probe is a dependency-free TCP connect to the Postgres host:port so the + * script resolves cleanly whether it is launched from the repo root or the + * API service image. + * 3. Runs `drizzle-kit push` against the schema (config: apps/api/drizzle.config.ts). + * - Default (apply) mode applies pending DDL. Migrations are forward-only in + * production (R2.5): destructive column drops/renames are NOT auto-applied + * here — those ship across two sequential deploys (R2.6) and are driven + * manually by the operator. + * - `--dry-run` prints the pending DDL (or "no changes") WITHOUT applying it. + * drizzle-kit `push` has no native `--dry-run` flag, so dry-run runs + * `push --strict`: strict mode pauses for explicit approval before + * executing any statement, and this runner never approves — it captures + * the printed DDL and aborts the child at the approval prompt, guaranteeing + * nothing is written to the database. + * + * Exit codes: 0 on success / "no changes"; non-zero on any failure (missing + * DATABASE_URL, connection deadline exceeded, or drizzle-kit error). + */ +import { spawn, type ChildProcess } from "node:child_process"; +import net from "node:net"; +import process from "node:process"; +import { fileURLToPath } from "node:url"; +import path from "node:path"; + +// ── Tunables ─────────────────────────────────────────────────────────────── +const RETRY_DEADLINE_MS = 30_000; // R2.3: retry transient failures for up to 30s. +const PROBE_TIMEOUT_MS = 5_000; // per-attempt TCP connect timeout. +const INITIAL_BACKOFF_MS = 1_000; +const MAX_BACKOFF_MS = 5_000; +const DEFAULT_PG_PORT = 5432; +const DRY_RUN_IDLE_MS = 3_000; // once drizzle-kit goes quiet at the approval prompt, abort. +const DRY_RUN_HARD_MS = 60_000; // absolute cap for a dry-run. +const APPLY_HARD_MS = 5 * 60_000; // absolute cap for an apply so a stuck prompt cannot hang forever. + +const IS_WINDOWS = process.platform === "win32"; +const REPO_ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..", ".."); + +function log(message: string): void { + console.log(`[migrate] ${message}`); +} + +function errorLog(message: string): void { + console.error(`[migrate] ${message}`); +} + +function sleep(ms: number): Promise { + return new Promise((resolve) => setTimeout(resolve, ms)); +} + +interface CliArgs { + dryRun: boolean; +} + +function parseArgs(argv: string[]): CliArgs { + return { dryRun: argv.includes("--dry-run") }; +} + +interface ConnectionTarget { + host: string; + port: number; +} + +/** + * Parse the host and port out of a Postgres connection string. Node's WHATWG + * URL parser handles the `postgresql://` / `postgres://` schemes fine. + */ +function resolveTarget(databaseUrl: string): ConnectionTarget { + let parsed: URL; + try { + parsed = new URL(databaseUrl); + } catch { + throw new Error("DATABASE_URL is not a valid connection URL"); + } + const host = parsed.hostname; + if (!host) { + throw new Error("DATABASE_URL has no host component"); + } + const port = parsed.port ? Number(parsed.port) : DEFAULT_PG_PORT; + if (!Number.isInteger(port) || port <= 0 || port > 65_535) { + throw new Error(`DATABASE_URL has an invalid port: ${parsed.port}`); + } + return { host, port }; +} + +/** + * Attempt a single TCP connection to the database host. Resolves on connect, + * rejects on any error or timeout. + */ +function probeOnce(target: ConnectionTarget, timeoutMs: number): Promise { + return new Promise((resolve, reject) => { + const socket = net.createConnection({ host: target.host, port: target.port }); + let settled = false; + const finish = (err?: Error): void => { + if (settled) return; + settled = true; + socket.destroy(); + if (err) reject(err); + else resolve(); + }; + socket.setTimeout(timeoutMs); + socket.once("connect", () => finish()); + socket.once("timeout", () => finish(new Error(`connection timed out after ${timeoutMs}ms`))); + socket.once("error", (err: Error) => finish(err)); + }); +} + +/** + * Retry the TCP probe with exponential backoff until the database is reachable + * or the 30s deadline is exceeded (R2.3). Any connection failure (DNS, refused, + * reset, timeout, unreachable host) is treated as transient and retried until + * the deadline. + */ +async function waitForConnection(target: ConnectionTarget): Promise { + const deadline = Date.now() + RETRY_DEADLINE_MS; + let backoff = INITIAL_BACKOFF_MS; + let attempt = 0; + for (;;) { + attempt += 1; + try { + await probeOnce(target, PROBE_TIMEOUT_MS); + log(`database reachable at ${target.host}:${target.port} (attempt ${attempt})`); + return; + } catch (err) { + const remaining = deadline - Date.now(); + const reason = err instanceof Error ? ((err as NodeJS.ErrnoException).code ?? err.message) : String(err); + if (remaining <= 0) { + throw new Error( + `could not connect to ${target.host}:${target.port} within ${RETRY_DEADLINE_MS / 1000}s ` + + `(${attempt} attempts; last error: ${reason})`, + ); + } + const wait = Math.min(backoff, remaining); + log( + `attempt ${attempt} failed (${reason}); retrying in ${wait}ms ` + + `(~${Math.ceil(remaining / 1000)}s left before giving up)`, + ); + await sleep(wait); + backoff = Math.min(backoff * 2, MAX_BACKOFF_MS); + } + } +} + +/** + * Base argument list for invoking drizzle-kit scoped to the API package, so its + * binary and `drizzle.config.ts` resolve regardless of the cwd this script was + * launched from. `pnpm --filter exec` runs with cwd set to the package dir. + */ +function drizzleKitArgs(extra: string[]): string[] { + return [ + "--filter", + "@stackfast/api", + "exec", + "drizzle-kit", + "push", + "--config", + "drizzle.config.ts", + "--verbose", + ...extra, + ]; +} + +function spawnPnpm(args: string[], stdio: "inherit" | "pipe"): ChildProcess { + return spawn("pnpm", args, { + cwd: REPO_ROOT, + env: process.env, + shell: IS_WINDOWS, // pnpm is a .cmd shim on Windows. + stdio: stdio === "inherit" ? "inherit" : ["ignore", "pipe", "pipe"], + }); +} + +/** Best-effort kill of the child process tree (drizzle-kit spawns sub-processes). */ +function killTree(child: ChildProcess): void { + if (child.pid == null) { + child.kill("SIGKILL"); + return; + } + if (IS_WINDOWS) { + spawn("taskkill", ["/pid", String(child.pid), "/T", "/F"], { stdio: "ignore" }); + } else { + child.kill("SIGKILL"); + } +} + +/** + * Apply pending migrations. Additive (forward-only) changes apply without a + * prompt. The hard timeout is a safety net so the one-shot can never hang. + */ +function runApply(): Promise { + log("applying pending migrations via `drizzle-kit push`..."); + return new Promise((resolve) => { + const child = spawnPnpm(drizzleKitArgs([]), "inherit"); + const hardTimer = setTimeout(() => { + errorLog(`drizzle-kit push exceeded ${APPLY_HARD_MS / 1000}s; aborting`); + killTree(child); + }, APPLY_HARD_MS); + child.on("error", (err) => { + clearTimeout(hardTimer); + errorLog(`failed to launch drizzle-kit: ${err.message}`); + resolve(1); + }); + child.on("close", (code, signal) => { + clearTimeout(hardTimer); + if (signal) { + resolve(1); + return; + } + resolve(code ?? 1); + }); + }); +} + +/** + * Dry-run: print pending DDL without applying it. Runs `push --strict` and + * aborts at the approval prompt so nothing is ever written. + */ +function runDryRun(): Promise { + log("dry-run: computing pending DDL (nothing will be applied)..."); + return new Promise((resolve) => { + const child = spawnPnpm(drizzleKitArgs(["--strict"]), "pipe"); + let buffered = ""; + let abortedAtPrompt = false; + let idleTimer: NodeJS.Timeout | undefined; + + const armIdle = (): void => { + if (idleTimer) clearTimeout(idleTimer); + idleTimer = setTimeout(() => { + // drizzle-kit has printed the diff and is now blocked waiting for + // approval. We never approve — abort so nothing is applied. + abortedAtPrompt = true; + log("dry-run: reached approval prompt; aborting without applying"); + killTree(child); + }, DRY_RUN_IDLE_MS); + }; + + const hardTimer = setTimeout(() => { + abortedAtPrompt = true; + killTree(child); + }, DRY_RUN_HARD_MS); + + const onData = (chunk: Buffer): void => { + const text = chunk.toString(); + buffered += text; + process.stdout.write(text); + armIdle(); + }; + child.stdout?.on("data", onData); + child.stderr?.on("data", onData); + + child.on("error", (err) => { + if (idleTimer) clearTimeout(idleTimer); + clearTimeout(hardTimer); + errorLog(`failed to launch drizzle-kit: ${err.message}`); + resolve(1); + }); + + child.on("close", (code, signal) => { + if (idleTimer) clearTimeout(idleTimer); + clearTimeout(hardTimer); + + if (abortedAtPrompt) { + // We intentionally killed it at the prompt: the pending DDL was printed + // above. This is a successful dry-run. + log("dry-run complete: pending DDL shown above; no changes applied."); + resolve(0); + return; + } + + // drizzle-kit exited on its own before any prompt. + if (code === 0) { + if (/no changes/i.test(buffered)) { + log("dry-run complete: no changes."); + } else { + log("dry-run complete: no changes applied."); + } + resolve(0); + return; + } + + errorLog(`drizzle-kit exited with code ${code ?? "null"}${signal ? ` (signal ${signal})` : ""}`); + resolve(code ?? 1); + }); + }); +} + +async function main(): Promise { + const { dryRun } = parseArgs(process.argv.slice(2)); + + // R2.4 / clear failure: DATABASE_URL must be set. + const databaseUrl = process.env.DATABASE_URL?.trim(); + if (!databaseUrl) { + errorLog( + "DATABASE_URL is not set. Set it to the Neon pooled connection string " + + "for the target environment before running migrations.", + ); + return 1; + } + + let target: ConnectionTarget; + try { + target = resolveTarget(databaseUrl); + } catch (err) { + errorLog(err instanceof Error ? err.message : String(err)); + return 1; + } + + log(`mode: ${dryRun ? "dry-run" : "apply"}`); + log(`waiting for database at ${target.host}:${target.port} (up to ${RETRY_DEADLINE_MS / 1000}s)...`); + + try { + await waitForConnection(target); + } catch (err) { + errorLog(err instanceof Error ? err.message : String(err)); + return 1; + } + + return dryRun ? runDryRun() : runApply(); +} + +main() + .then((code) => { + process.exit(code); + }) + .catch((err: unknown) => { + errorLog(`unexpected error: ${err instanceof Error ? err.stack ?? err.message : String(err)}`); + process.exit(1); + }); diff --git a/scripts/deploy/rollback.md b/scripts/deploy/rollback.md new file mode 100644 index 0000000..5f957bf --- /dev/null +++ b/scripts/deploy/rollback.md @@ -0,0 +1,219 @@ +# Rollback runbook — Phase 8 (`stackfast-api` + `stackfast-web`) + +> Operator runbook for reverting a bad Railway deploy, one service at a time. +> Decision of record: [ADR 003 — Deployment architecture for MVP][adr003], § "Rollback strategy". +> Requirements covered: R2.6, R2.7, R12.1, R12.2, R12.3, R12.4, R12.5, R12.6, R12.7. + +[adr003]: ../../docs/decisions/003-deployment-architecture.md + +Stackfast runs as two independent Railway services in one project: +`stackfast-api` (Node 20 Hono process) and `stackfast-web` (static bundle). +They are deployed, redeployed, and rolled back **independently** — a rollback of +one service never requires touching the other (R12.6, R12.7). Pick the section +for the service you need to revert. + +--- + +## When to use this runbook + +Use it when a deploy is live but bad: the API is crashing or serving wrong +responses, the web bundle is broken, or a smoke run +(`scripts/deploy/smoke.ts`) failed after a cutover. A rollback serves the +**immediately previous successful build** instead of the current one. It does +not change code or Git history — it only changes which build Railway serves. + +Before rolling back the **API**, read § "Schema compatibility gate" below. Web +rollbacks have no data-layer implications and can be run immediately. + +--- + +## Confirm the rollback command for your CLI version + +The canonical command this project documents is: + +```bash +railway rollback --service +``` + +Railway's CLI surface has shifted across versions, so **confirm the command +your installed CLI exposes before a real incident**: + +```bash +railway --version +railway --help # look for `rollback` / `redeploy` / `deployment` +``` + +Depending on the CLI version, one of the following paths is available. All three +revert the running service to a prior build; use whichever your CLI supports: + +1. **Direct rollback (preferred, per ADR 003):** + ```bash + railway rollback --service + ``` +2. **List + dashboard rollback** — list the recent deployments to identify the + last `SUCCESS` build, then confirm the rollback from the Railway dashboard + (open the service → Deployments → ⋯ on the target deployment → **Rollback**): + ```bash + railway deployment list --service + # note the most recent deployment whose status is SUCCESS, then roll back from the dashboard + ``` +3. **Redeploy a known-good build** — when the previous build is still the most + recent successful one and no new bad code was pushed over it: + ```bash + railway redeploy --service + ``` + +Always pass `--environment ` (`production` or `staging`) explicitly if your +shell is not already linked to the target environment, so you never roll back the +wrong environment. + +--- + +## Step 1 — Roll back the Web Service `stackfast-web` (R12.1, R12.6) + +The web service is a static bundle (`apps/web/dist`). A rollback has **no +data-layer implications** and is always safe — there is no schema gate. + +1. Confirm you are targeting the right environment: + ```bash + railway status + ``` +2. (Optional) Identify the previous successful build: + ```bash + railway deployment list --service stackfast-web --environment production + ``` +3. Roll the web service back to the immediately previous successful build: + ```bash + railway rollback --service stackfast-web --environment production + ``` +4. Verify the SPA loads: + ```bash + curl -I https://stackfast.app + ``` + Expect `HTTP/2 200`. Spot-check the app in a browser. + +This step does **not** touch `stackfast-api` — the API keeps serving traffic +without a restart (R12.6). + +--- + +## Step 2 — Roll back the API Service `stackfast-api` (R12.2, R12.7) + +> **Do not run this step until you have cleared the schema compatibility gate +> below.** An API rollback is only safe when the rolled-back build's schema +> expectations match the current Neon Production Branch. + +1. Confirm the environment: + ```bash + railway status + ``` +2. Identify the immediately previous successful build: + ```bash + railway deployment list --service stackfast-api --environment production + ``` +3. Roll the API back to the immediately previous successful build: + ```bash + railway rollback --service stackfast-api --environment production + ``` +4. Verify health (R5): + ```bash + curl https://api.stackfast.app/health + ``` + Expect `200` with body `OK` within ~15s of the container marking ready. +5. Run the post-deploy smoke test to confirm the rolled-back build is healthy: + ```bash + pnpm exec tsx scripts/deploy/smoke.ts --base https://api.stackfast.app --web https://stackfast.app + ``` + +This step does **not** touch `stackfast-web` — the web service keeps serving +traffic without a restart (R12.7). + +> **Migrations are not re-run on rollback.** Drizzle migrations are forward-only +> in production (ADR 003 § 2, § 7). Rolling the API back does **not** roll the +> database back. Schema compatibility is what makes a one-deploy rollback safe — +> see the gate below. + +--- + +## Schema compatibility gate (API rollbacks only) + +### Single-deploy rollback is safe by design (R12.3) + +When the API is rolled back by **exactly one deploy**, the Neon Production Branch +schema remains compatible with the rolled-back build (R12.3). This holds **only +because** every schema change obeys the two-deploy rule below. A one-generation +rollback always lands on a build that was designed to read the current schema. + +### The two-deploy schema rule (R2.6, R2.7) + +This is a **process rule** the operator enforces by hand — Phase 8 ships no +tooling to enforce it automatically (that is a v1.x candidate). + +- **Column drops and renames ship across two sequential deploys (R2.6).** + - **Deploy 1 (expand):** add the new column. The API writes the new column + and **keeps reading both** the old and new columns. The old column is left + in place. After this deploy, the *previous* build is still schema-compatible, + so a one-deploy rollback is safe. + - **Deploy 2 (contract):** remove the old column. Only ship this once Deploy 1 + is confirmed healthy and you no longer need to roll back past it. + - A rename is modelled as add-new + backfill + drop-old across the same two + deploys — never as an in-place rename. + +- **Additive-only migrations may ship in a single deploy (R2.7).** A migration + that only **adds** new columns, new tables, or new indexes — and makes no + change that breaks the current API build — does not need the two-deploy split. + Ship it in one deploy. The previous build simply ignores the additions, so a + one-deploy rollback stays safe. + +### Decision: is this rollback safe to run automatically? + +Before running an API rollback, answer: **does the rollback target's schema +expectation conflict with the current Neon Production Branch schema?** + +- **No conflict** → proceed with Step 2. +- **Conflict** (the target build expects a column/table that a later migration + has already dropped or renamed) → **STOP. Do not run the automatic rollback + (R12.4).** Perform a manual forward-migration intervention first: + 1. Block the automatic rollback — do not run `railway rollback` yet. + 2. Write and apply a **new forward migration** that restores the schema shape + the target build expects (e.g. re-add the dropped column and backfill it). + Never re-run old/destructive DDL — migrations are forward-only. + ```bash + railway run --service stackfast-api --environment production -- pnpm exec tsx scripts/deploy/migrate.ts + ``` + 3. Confirm the Neon branch now satisfies the target build's expectations. + 4. Retry the rollback from Step 2. + +### Rollbacks spanning more than one deploy (R12.5) + +A rollback that spans **more than one deploy generation** MAY be executed, but +schema compatibility is **not guaranteed** and manual reconciliation may be +required. Treat any multi-generation rollback as a conflict case: + +1. Inspect every migration applied between the current build and the rollback + target. +2. If any of them dropped or renamed a column the target build reads, follow the + manual forward-migration intervention above before rolling back. +3. Proceed at your discretion once the schema is reconciled, and re-run the smoke + test to confirm. + +--- + +## Post-rollback checklist + +- [ ] `curl -I https://stackfast.app` returns `200` (web rolled back) and/or + `curl https://api.stackfast.app/health` returns `200` / `OK` (API rolled back). +- [ ] `scripts/deploy/smoke.ts` passes against the rolled-back origins (API rollbacks). +- [ ] The other service is still serving traffic untouched (R12.6 / R12.7). +- [ ] The deploy log records which service was rolled back, the target build id, + and — for API rollbacks — the schema-compatibility decision. +- [ ] If a schema conflict forced a manual forward migration, the new migration + is committed and noted in the deploy log. + +--- + +## Related + +- [ADR 003 — Deployment architecture for MVP][adr003] § "Rollback strategy", § 2 (Database), § 7. +- `scripts/deploy/migrate.ts` — one-shot forward-only migration runner (R2.3–R2.5). +- `scripts/deploy/smoke.ts` — post-deploy verification (R5.4, R6.1–R6.3, R8.3, R10.2, R10.3). diff --git a/scripts/deploy/smoke.ts b/scripts/deploy/smoke.ts new file mode 100644 index 0000000..47da666 --- /dev/null +++ b/scripts/deploy/smoke.ts @@ -0,0 +1,407 @@ +#!/usr/bin/env tsx +/** + * scripts/deploy/smoke.ts — post-deploy smoke test (Phase 8, task D4). + * + * A standalone, dependency-free smoke test the operator runs after every + * deploy to prove the API is wired correctly end-to-end. It uses only the + * Node 20+ global `fetch` — no Playwright, no test runner — so it runs + * anywhere Node 20 runs, including a Railway one-shot. + * + * Run it as: + * + * pnpm exec tsx scripts/deploy/smoke.ts --base --web + * + * Defaults: --base http://localhost:3000, --web http://localhost:5173 + * (the local `pnpm dev` topology — API on :3000, web on :5173). + * + * The six assertions (design § Testing strategy "Deploy smoke"): + * 1. R5.4 — GET ${base}/health records status + body (expects 200 / "OK"). + * 2. R6.1 — 31 POST ${base}/api/v1/blueprints from a fixed IP; the 31st is 429 + * (generation bucket = 30 / 60s). + * 3. R6.3 — 101 GET ${base}/api/v1/tools/search from a fixed IP; the 101st is 429 + * (read bucket = 100 / 60s). + * 4. R8.3 — POST ${base}/admin/compatibility/recompute with a wrong key is 401. + * 5. R10.2 — OPTIONS ${base}/api/v1/tools/search with Origin: ${web} returns an + * exact-match Access-Control-Allow-Origin == web origin. + * 6. R10.3 — OPTIONS ${base}/api/v1/tools/search with Origin: https://evil.example + * returns an absent or non-matching ACAO (never `*`, never the evil origin). + * + * Behaviour: + * - Each assertion is captured with a name, the requirement id, a pass/fail + * flag, and a detail object (status codes, headers) so the JSON report is + * useful on its own. + * - The rate-limit bursts each use a distinct, fixed `x-forwarded-for` value + * so the generation and read buckets are isolated from each other and from + * repeat runs against a fresh process. Generation requests POST an empty + * `{}` body: the limiter runs before validation/auth in app.ts, so each + * request still consumes a generation token while failing fast (400) on the + * other side — exactly what we want to drive the bucket to its limit. + * - Prints a one-line JSON summary to stdout for the operator's runbook. + * - Writes a timestamped report to test-results/deploy-smoke-.json + * (creating the directory if missing). + * - Exits 0 when every assertion passes, non-zero otherwise. A run against a + * stopped API exits non-zero with the health assertion marked failed. + */ +import { mkdirSync, writeFileSync } from "node:fs"; +import path from "node:path"; +import process from "node:process"; +import { fileURLToPath } from "node:url"; + +const REPO_ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..", ".."); + +// ── Tunables ─────────────────────────────────────────────────────────────── +const GENERATION_LIMIT = 30; // requests / 60s (R6.1 / R4.2) +const READ_LIMIT = 100; // requests / 60s (R6.3 / R4.3) +const REQUEST_TIMEOUT_MS = 10_000; // per-request timeout so a hung server can't stall the run. + +// Distinct fixed client IPs (TEST-NET-3, RFC 5737) so each burst lands in its +// own `{bucket}:{clientId}` key and the buckets stay isolated. +const GENERATION_CLIENT_IP = "203.0.113.31"; +const READ_CLIENT_IP = "203.0.113.101"; + +const WRONG_ADMIN_KEY = "smoke-test-wrong-admin-key"; +const EVIL_ORIGIN = "https://evil.example"; + +interface CliArgs { + base: string; + web: string; +} + +interface AssertionResult { + name: string; + requirement: string; + pass: boolean; + detail: Record; +} + +function log(message: string): void { + console.log(`[smoke] ${message}`); +} + +function errorLog(message: string): void { + console.error(`[smoke] ${message}`); +} + +function parseArgs(argv: string[]): CliArgs { + let base = "http://localhost:3000"; + let web = "http://localhost:5173"; + for (let i = 0; i < argv.length; i += 1) { + const arg = argv[i]; + if (arg === "--base") { + base = argv[++i] ?? base; + } else if (arg.startsWith("--base=")) { + base = arg.slice("--base=".length); + } else if (arg === "--web") { + web = argv[++i] ?? web; + } else if (arg.startsWith("--web=")) { + web = arg.slice("--web=".length); + } + } + // Strip any trailing slash so `${base}/health` never double-slashes. + return { base: base.replace(/\/+$/, ""), web: web.replace(/\/+$/, "") }; +} + +/** A `fetch` with a per-request timeout. Rejects on network error or timeout. */ +async function timedFetch(url: string, init: RequestInit = {}): Promise { + const controller = new AbortController(); + const timer = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS); + try { + return await fetch(url, { ...init, signal: controller.signal }); + } finally { + clearTimeout(timer); + } +} + +/** + * Assertion 1 (R5.4): GET /health. Records the status and body. Passes on a + * 200 with body "OK". A connection failure (API stopped) is caught and the + * assertion is marked failed — this is the failure-path signal the runbook + * relies on. + */ +async function checkHealth(base: string): Promise { + const url = `${base}/health`; + try { + const res = await timedFetch(url, { method: "GET" }); + const body = (await res.text()).trim(); + const pass = res.status === 200 && body === "OK"; + return { + name: "health", + requirement: "R5.4", + pass, + detail: { url, status: res.status, body }, + }; + } catch (err) { + return { + name: "health", + requirement: "R5.4", + pass: false, + detail: { url, error: err instanceof Error ? err.message : String(err) }, + }; + } +} + +/** Issue `count` sequential requests, returning the status of each (or 0 on error). */ +async function burst( + count: number, + makeRequest: (index: number) => Promise, +): Promise<{ statuses: number[]; error?: string }> { + const statuses: number[] = []; + for (let i = 0; i < count; i += 1) { + try { + const res = await makeRequest(i); + statuses.push(res.status); + } catch (err) { + return { statuses, error: err instanceof Error ? err.message : String(err) }; + } + } + return { statuses }; +} + +/** + * Assertion 2 (R6.1): 31 generation requests from a fixed IP; the 31st must be + * 429. The limiter runs before validation/auth, so the empty `{}` body is fine. + */ +async function checkGenerationBurst(base: string): Promise { + const url = `${base}/api/v1/blueprints`; + const total = GENERATION_LIMIT + 1; // 31 + const { statuses, error } = await burst(total, () => + timedFetch(url, { + method: "POST", + headers: { + "content-type": "application/json", + "x-forwarded-for": GENERATION_CLIENT_IP, + }, + body: "{}", + }), + ); + const lastStatus = statuses[statuses.length - 1]; + const pass = statuses.length === total && lastStatus === 429; + return { + name: "generation-rate-limit", + requirement: "R6.1/R6.2", + pass, + detail: { + url, + clientIp: GENERATION_CLIENT_IP, + requestsSent: statuses.length, + expectedLimit: GENERATION_LIMIT, + finalStatus: lastStatus, + count429: statuses.filter((s) => s === 429).length, + ...(error ? { error } : {}), + }, + }; +} + +/** + * Assertion 3 (R6.3): 101 read requests from a fixed IP; the 101st must be 429. + */ +async function checkReadBurst(base: string): Promise { + const url = `${base}/api/v1/tools/search`; + const total = READ_LIMIT + 1; // 101 + const { statuses, error } = await burst(total, () => + timedFetch(url, { + method: "GET", + headers: { "x-forwarded-for": READ_CLIENT_IP }, + }), + ); + const lastStatus = statuses[statuses.length - 1]; + const pass = statuses.length === total && lastStatus === 429; + return { + name: "read-rate-limit", + requirement: "R6.3", + pass, + detail: { + url, + clientIp: READ_CLIENT_IP, + requestsSent: statuses.length, + expectedLimit: READ_LIMIT, + finalStatus: lastStatus, + count429: statuses.filter((s) => s === 429).length, + ...(error ? { error } : {}), + }, + }; +} + +/** + * Assertion 4 (R8.3): admin route with a wrong key must be 401. + */ +async function checkAdmin401(base: string): Promise { + const url = `${base}/admin/compatibility/recompute`; + try { + const res = await timedFetch(url, { + method: "POST", + headers: { "X-Admin-API-Key": WRONG_ADMIN_KEY }, + }); + return { + name: "admin-401", + requirement: "R8.3", + pass: res.status === 401, + detail: { url, status: res.status, sentKey: "wrong" }, + }; + } catch (err) { + return { + name: "admin-401", + requirement: "R8.3", + pass: false, + detail: { url, error: err instanceof Error ? err.message : String(err) }, + }; + } +} + +/** + * Assertion 5 (R10.2): a same-origin preflight returns an exact-match ACAO. + */ +async function checkCorsSameOrigin(base: string, web: string): Promise { + const url = `${base}/api/v1/tools/search`; + try { + const res = await timedFetch(url, { + method: "OPTIONS", + headers: { + Origin: web, + "Access-Control-Request-Method": "GET", + }, + }); + const acao = res.headers.get("access-control-allow-origin"); + const acac = res.headers.get("access-control-allow-credentials"); + return { + name: "cors-same-origin-acao", + requirement: "R10.2", + pass: acao === web, + detail: { + url, + requestOrigin: web, + accessControlAllowOrigin: acao, + accessControlAllowCredentials: acac, + status: res.status, + }, + }; + } catch (err) { + return { + name: "cors-same-origin-acao", + requirement: "R10.2", + pass: false, + detail: { url, error: err instanceof Error ? err.message : String(err) }, + }; + } +} + +/** + * Assertion 6 (R10.3): an evil-origin preflight must never echo `*` and never + * echo the evil origin. An absent or non-matching ACAO passes. + */ +async function checkCorsEvilOrigin(base: string): Promise { + const url = `${base}/api/v1/tools/search`; + try { + const res = await timedFetch(url, { + method: "OPTIONS", + headers: { + Origin: EVIL_ORIGIN, + "Access-Control-Request-Method": "GET", + }, + }); + const acao = res.headers.get("access-control-allow-origin"); + const pass = acao === null || (acao !== "*" && acao !== EVIL_ORIGIN); + return { + name: "cors-evil-origin-acao", + requirement: "R10.3", + pass, + detail: { + url, + requestOrigin: EVIL_ORIGIN, + accessControlAllowOrigin: acao, + status: res.status, + }, + }; + } catch (err) { + return { + name: "cors-evil-origin-acao", + requirement: "R10.3", + pass: false, + detail: { url, error: err instanceof Error ? err.message : String(err) }, + }; + } +} + +function writeReport(report: Record, timestamp: string): string { + const dir = path.join(REPO_ROOT, "test-results"); + mkdirSync(dir, { recursive: true }); + const file = path.join(dir, `deploy-smoke-${timestamp}.json`); + writeFileSync(file, `${JSON.stringify(report, null, 2)}\n`, "utf8"); + return file; +} + +async function main(): Promise { + const { base, web } = parseArgs(process.argv.slice(2)); + const startedAt = new Date(); + const timestamp = startedAt.toISOString().replace(/[:.]/g, "-"); + + log(`base=${base} web=${web}`); + + // Health runs first. If the API is down, the remaining assertions will also + // fail (their fetches reject), but each one captures its own error so the + // report stays useful. + const health = await checkHealth(base); + log(`health: ${health.pass ? "PASS" : "FAIL"} (status=${String(health.detail.status ?? "n/a")})`); + + const assertions: AssertionResult[] = [health]; + + // The rate-limit bursts mutate server-side bucket state, so run them in + // sequence. The remaining stateless checks run after. + assertions.push(await checkGenerationBurst(base)); + assertions.push(await checkReadBurst(base)); + assertions.push(await checkAdmin401(base)); + assertions.push(await checkCorsSameOrigin(base, web)); + assertions.push(await checkCorsEvilOrigin(base)); + + for (const a of assertions.slice(1)) { + log(`${a.name} (${a.requirement}): ${a.pass ? "PASS" : "FAIL"}`); + } + + const passed = assertions.filter((a) => a.pass).length; + const total = assertions.length; + const ok = passed === total; + const finishedAt = new Date(); + + const report = { + ok, + passed, + total, + base, + web, + startedAt: startedAt.toISOString(), + finishedAt: finishedAt.toISOString(), + durationMs: finishedAt.getTime() - startedAt.getTime(), + assertions, + }; + + let reportPath: string | undefined; + try { + reportPath = writeReport(report, timestamp); + log(`report written to ${reportPath}`); + } catch (err) { + errorLog(`failed to write report: ${err instanceof Error ? err.message : String(err)}`); + } + + // One-line JSON summary for the runbook. + const summary = { + ok, + passed, + total, + base, + web, + failed: assertions.filter((a) => !a.pass).map((a) => `${a.name}(${a.requirement})`), + reportPath, + }; + console.log(JSON.stringify(summary)); + + return ok ? 0 : 1; +} + +main() + .then((code) => { + process.exit(code); + }) + .catch((err: unknown) => { + errorLog(`unexpected error: ${err instanceof Error ? (err.stack ?? err.message) : String(err)}`); + process.exit(1); + }); diff --git a/tests/e2e/deploy-admin-401.spec.ts b/tests/e2e/deploy-admin-401.spec.ts new file mode 100644 index 0000000..7a10a48 --- /dev/null +++ b/tests/e2e/deploy-admin-401.spec.ts @@ -0,0 +1,87 @@ +import { expect, test } from "@playwright/test"; + +/** + * Deploy E2E — admin/internal key gating (Phase 8 C4). + * + * Validates: + * - R8.1 — requests to `/admin/*` and `/internal/*` with no auth header are + * rejected with HTTP 401 before any downstream middleware or handler runs. + * - R8.3 — a wrong `X-Admin-API-Key` and a wrong `Authorization: Bearer` + * token are both rejected with 401. + * + * The 401 variants are the security-critical path and run unconditionally. + * + * The matching-key 202 case requires the test runner to know the server's + * `ADMIN_API_KEY`. Under a bare `pnpm test:e2e` the runner process does not + * load `.env` (only the API webServer does, via `dotenv -e ../../.env`), so + * the key is unavailable to the runner and the matching-key assertion is + * skipped here — that path is already covered by the API contract suite + * (`apps/api/src/app.test.ts`: "accepts /internal/enrich-tool with valid API + * key" and "protects admin routes"). When the key IS provided to the runner + * (e.g. `dotenv -e .env -- pnpm test:e2e`, or the staging run in G5), the 202 + * assertions execute. + */ + +const API_ORIGIN = (process.env.E2E_API_URL ?? "http://127.0.0.1:3100/api/v1").replace(/\/api\/v1\/?$/, ""); + +// Both protected prefixes. `/admin/compatibility/recompute` takes no body; +// `/internal/enrich-tool` validates a body, but the admin gate runs first so +// the 401 variants never reach body parsing. +const ADMIN_PATHS = [ + "/admin/compatibility/recompute", + "/internal/enrich-tool", +] as const; + +const WRONG_KEY = "definitely-not-the-admin-key"; + +test.describe("deploy: admin/internal 401 enforcement (R8.1, R8.3)", () => { + for (const path of ADMIN_PATHS) { + test(`POST ${path} returns 401 with no auth header`, async ({ request }) => { + const response = await request.post(`${API_ORIGIN}${path}`, { + headers: { "Content-Type": "application/json" }, + // Body is irrelevant: the admin gate (R8.1) rejects before parsing. + data: {}, + }); + expect(response.status()).toBe(401); + }); + + test(`POST ${path} returns 401 with a wrong X-Admin-API-Key`, async ({ request }) => { + const response = await request.post(`${API_ORIGIN}${path}`, { + headers: { "Content-Type": "application/json", "X-Admin-API-Key": WRONG_KEY }, + data: {}, + }); + expect(response.status()).toBe(401); + }); + + test(`POST ${path} returns 401 with a wrong Bearer token`, async ({ request }) => { + const response = await request.post(`${API_ORIGIN}${path}`, { + headers: { "Content-Type": "application/json", Authorization: `Bearer ${WRONG_KEY}` }, + data: {}, + }); + expect(response.status()).toBe(401); + }); + } + + test("matching admin key authorizes (202) via X-Admin-API-Key and Bearer", async ({ request }) => { + const adminKey = process.env.ADMIN_API_KEY; + test.skip( + !adminKey, + "ADMIN_API_KEY is not available to the Playwright runner; the matching-key 202 path is covered by apps/api/src/app.test.ts. Provide the key (e.g. `dotenv -e .env -- pnpm test:e2e`) to exercise it here.", + ); + + // X-Admin-API-Key header on the no-body admin route. + const viaHeader = await request.post(`${API_ORIGIN}/admin/compatibility/recompute`, { + headers: { "Content-Type": "application/json", "X-Admin-API-Key": adminKey! }, + data: {}, + }); + expect(viaHeader.status()).toBe(202); + + // Authorization: Bearer on the body-validated internal route. A real + // tool id is required so the handler reaches its 202 (not a 404/400). + const viaBearer = await request.post(`${API_ORIGIN}/internal/enrich-tool`, { + headers: { "Content-Type": "application/json", Authorization: `Bearer ${adminKey!}` }, + data: { toolId: "nextjs" }, + }); + expect(viaBearer.status()).toBe(202); + }); +}); diff --git a/tests/e2e/deploy-cross-origin-auth.spec.ts b/tests/e2e/deploy-cross-origin-auth.spec.ts new file mode 100644 index 0000000..fac8a85 --- /dev/null +++ b/tests/e2e/deploy-cross-origin-auth.spec.ts @@ -0,0 +1,85 @@ +import { expect, test } from "@playwright/test"; + +/** + * Deploy E2E — cross-origin auth round trip (Phase 8 C4). + * + * Validates the cross-origin credentialed-request path behind R3.8 ("a valid + * session for subsequent cross-origin requests from the SPA origin with + * `credentials: 'include'`"). + * + * Environment caveat (local vs. staging): + * The production assertion — that the Better Auth session cookie is set with + * `Domain=.stackfast.app` and is therefore readable on BOTH `stackfast.app` + * and `api.stackfast.app` — only holds in production, where + * `crossSubDomainCookies` is enabled (see `buildAuthOptions` in + * `apps/api/src/middleware/auth.ts`, gated on `isProduction`). Locally the + * web (`127.0.0.1:4173`) and API (`127.0.0.1:3100`) are distinct origins + * with no shared parent domain and `ALLOW_AUTH_BYPASS=true`, and there is no + * real database or GitHub, so a real session cookie is never minted. + * + * This spec therefore stubs the GitHub OAuth round trip (`page.route( + * "**\/github.com\/**", ...)`) so no live call escapes, and asserts what IS + * verifiable in dev mode: + * 1. The cross-origin, credentialed preflight + request from the SPA origin + * to the API succeeds (CORS is locked to the web origin with + * `credentials: true`). + * 2. A protected, `requireSession()`-wrapped route is reachable cross-origin + * with `credentials: 'include'` and does NOT return 401 (the dev bypass + * stands in for a real session — proving the request is admitted, not + * rejected for missing auth). + * 3. `page.context().cookies()` is inspectable. + * The strict "cookie present on both origins" assertion is exercised against + * the real cross-subdomain deployment in G5 (staging). + */ + +const API_BASE = process.env.E2E_API_URL ?? "http://127.0.0.1:3100/api/v1"; +const API_ORIGIN = API_BASE.replace(/\/api\/v1\/?$/, ""); + +test.describe("deploy: cross-origin auth (R3.8)", () => { + test("credentialed cross-origin requests from the SPA origin are admitted", async ({ page }) => { + // Stub the GitHub OAuth round trip so the test never depends on github.com. + // Any navigation/request to GitHub is short-circuited with a benign body. + await page.route("**/github.com/**", (route) => + route.fulfill({ status: 200, contentType: "text/html", body: "stubbed github" }), + ); + + // Land on the SPA so subsequent `fetch` calls originate from the web origin + // (this is what makes the API requests genuinely cross-origin). + await page.goto("/"); + + // (1) Public, credentialed cross-origin GET. CORS_ORIGIN is set to the web + // origin and credentials are enabled, so this must succeed end-to-end. + const searchStatus = await page.evaluate(async (apiBase) => { + const res = await fetch(`${apiBase}/tools/search?q=next`, { credentials: "include" }); + return res.status; + }, API_BASE); + expect(searchStatus).toBe(200); + + // (2) Protected route reachable cross-origin with credentials. An empty body + // makes the handler return 400 (schema validation) once auth is cleared — + // the point is that it is NOT 401, i.e. the request was admitted as if a + // valid session were present (R3.8). In production this admission comes from + // the cross-subdomain session cookie; in dev it comes from the bypass. + const protectedStatus = await page.evaluate(async (apiBase) => { + const res = await fetch(`${apiBase}/blueprints`, { + method: "POST", + credentials: "include", + headers: { "Content-Type": "application/json" }, + body: "{}", + }); + return res.status; + }, API_BASE); + expect(protectedStatus).not.toBe(401); + + // (3) The cookie jar is inspectable on the SPA origin. Locally it may be + // empty (no real OAuth completion / no cross-subdomain cookie); the strict + // both-origins assertion runs against staging in G5. We assert the jar is + // accessible and, if any session cookie did land, that it is HttpOnly. + const cookies = await page.context().cookies([API_ORIGIN, page.url()]); + expect(Array.isArray(cookies)).toBe(true); + const sessionCookie = cookies.find((c) => c.name.includes("session")); + if (sessionCookie) { + expect(sessionCookie.httpOnly).toBe(true); + } + }); +}); diff --git a/tests/e2e/deploy-health.spec.ts b/tests/e2e/deploy-health.spec.ts new file mode 100644 index 0000000..32cba82 --- /dev/null +++ b/tests/e2e/deploy-health.spec.ts @@ -0,0 +1,41 @@ +import { expect, test } from "@playwright/test"; + +/** + * Deploy E2E — health check (Phase 8 C4). + * + * Validates: + * - R5.1 — `GET /health` returns HTTP 200 with body `OK`. + * - R5.3 — `/health` is reachable without authentication headers / cookies. + * + * These assertions hit the API origin directly (no web UI), so they use the + * `request` fixture rather than driving a page. The `request` fixture is a + * standalone APIRequestContext that carries no browser cookies, which is + * exactly what R5.3 ("accessible without authentication headers") requires: + * an unauthenticated, cookie-less client must still get 200 OK. + * + * Locally these run against `pnpm dev` (the Playwright-managed API webServer); + * in G5 the same spec runs against the staging origin. + */ + +// `playwright.config.ts` exposes the API base as `E2E_API_URL` including the +// `/api/v1` suffix. `/health` lives at the API root, so strip the suffix to +// derive the origin. Default mirrors the config's API port (3100). +const API_ORIGIN = (process.env.E2E_API_URL ?? "http://127.0.0.1:3100/api/v1").replace(/\/api\/v1\/?$/, ""); + +test.describe("deploy: health check (R5.1, R5.3)", () => { + test("GET /health returns 200 with body OK and requires no auth", async ({ request }) => { + const response = await request.get(`${API_ORIGIN}/health`); + + // R5.1 — exact status + body contract the Railway healthcheck depends on. + expect(response.status()).toBe(200); + const body = await response.text(); + expect(body).toBe("OK"); + + // R5.3 — the request above sent no Authorization header and no session + // cookie (the `request` fixture has an empty cookie jar), so a 200 here + // proves the route is open. Belt-and-suspenders: the response must not + // challenge for credentials. + expect(response.status()).not.toBe(401); + expect(response.headers()["www-authenticate"]).toBeUndefined(); + }); +}); diff --git a/tests/e2e/deploy-rate-limit.spec.ts b/tests/e2e/deploy-rate-limit.spec.ts new file mode 100644 index 0000000..76c1f61 --- /dev/null +++ b/tests/e2e/deploy-rate-limit.spec.ts @@ -0,0 +1,90 @@ +import { expect, test, type APIRequestContext } from "@playwright/test"; + +/** + * Deploy E2E — rate-limit smoke (Phase 8 C4). + * + * Validates: + * - R6.1 / R6.2 — the 31st `POST /api/v1/blueprints` from one client within + * 60s returns HTTP 429 with a `Retry-After` header (generation bucket = + * 30 requests / 60s). + * - R6.3 — the 101st `GET /api/v1/tools/search` from one client within 60s + * returns HTTP 429 (read bucket = 100 requests / 60s). + * + * Runs against the in-memory backend wired by `pnpm dev` (the API webServer + * leaves `RATE_LIMIT_BACKEND` at its `memory` default). The Upstash path is + * exercised by the post-deploy smoke script, not here. + * + * Client identity is the `x-forwarded-for` header (R4.4). Each test mints a + * fresh random IP so the buckets start empty even when the API server is + * reused across Playwright retries, and so the two tests never share a bucket. + * + * The generation bucket trips before auth: in `app.ts` the rate-limit + * middleware is registered ahead of `requireSession()`, so every POST consumes + * a token regardless of its body or auth outcome. The requests below send an + * empty body on purpose — once a request clears the limiter it hits the + * handler's schema validation and returns 400 immediately, which keeps the + * burst fast (no AI generation) while still exercising the limiter exactly as + * a real client would. + */ + +const API_BASE = process.env.E2E_API_URL ?? "http://127.0.0.1:3100/api/v1"; + +/** A unique documentation/private-range IP per test run to isolate buckets. */ +function freshClientIp(): string { + const octet = () => Math.floor(Math.random() * 254) + 1; + return `10.${octet()}.${octet()}.${octet()}`; +} + +async function lastStatusOfBurst( + request: APIRequestContext, + count: number, + fire: (i: number) => Promise<{ status: number; retryAfter: string | undefined }>, +): Promise<{ statuses: number[]; retryAfters: (string | undefined)[] }> { + const statuses: number[] = []; + const retryAfters: (string | undefined)[] = []; + for (let i = 0; i < count; i++) { + const { status, retryAfter } = await fire(i); + statuses.push(status); + retryAfters.push(retryAfter); + } + return { statuses, retryAfters }; +} + +test.describe("deploy: rate limiting (R6.1, R6.2, R6.3)", () => { + test("31st generation POST returns 429 with Retry-After", async ({ request }) => { + test.setTimeout(60_000); + const clientIp = freshClientIp(); + + const { statuses, retryAfters } = await lastStatusOfBurst(request, 31, async () => { + const response = await request.post(`${API_BASE}/blueprints`, { + headers: { "Content-Type": "application/json", "x-forwarded-for": clientIp }, + data: {}, + }); + return { status: response.status(), retryAfter: response.headers()["retry-after"] }; + }); + + // The first request must clear the limiter (sanity: the limit is not 0). + expect(statuses[0]).not.toBe(429); + // R6.1 / R6.2 — the 31st request (index 30) is the first to exceed the + // 30/60s generation bucket. + expect(statuses[30]).toBe(429); + expect(retryAfters[30]).toBeDefined(); + }); + + test("101st read GET returns 429", async ({ request }) => { + test.setTimeout(60_000); + const clientIp = freshClientIp(); + + const { statuses } = await lastStatusOfBurst(request, 101, async () => { + const response = await request.get(`${API_BASE}/tools/search?q=next`, { + headers: { "x-forwarded-for": clientIp }, + }); + return { status: response.status(), retryAfter: response.headers()["retry-after"] }; + }); + + // The first 100 reads are allowed; the 101st (index 100) trips the + // 100/60s read bucket. R6.3. + expect(statuses[0]).not.toBe(429); + expect(statuses[100]).toBe(429); + }); +});