diff --git a/.agents/skills/adding-inbox-sources/SKILL.md b/.agents/skills/adding-inbox-sources/SKILL.md index ffb0f8ce49cf..f6226a7a24ed 100644 --- a/.agents/skills/adding-inbox-sources/SKILL.md +++ b/.agents/skills/adding-inbox-sources/SKILL.md @@ -108,7 +108,7 @@ source-list-relevant is a place you must add the new product. The canonical list ### Type gates (every source) -1. `packages/shared/src/inbox-types.ts` — add `"jira"` to the `SourceProduct` union. +1. `packages/agent/packages/agent-contracts/src/inbox-types.ts` — add `"jira"` to the `SourceProduct` union. 2. `packages/api-client/src/posthog-client.ts` — add to `SignalSourceConfig.source_product` union; add a new `source_type` value only if the record type isn't already `issue`/`ticket`. ### Live UI path (every source) @@ -145,7 +145,7 @@ service, symbol, or router — do not clone `linear.ts`/`linear-integration.rout ### Verify -- `pnpm --filter @posthog/shared build` after touching `inbox-types.ts` (it's a published type). +- `pnpm --filter @posthog/shared... build` after touching `inbox-types.ts` (it's a published type). - `pnpm typecheck` (whole repo — the unions are consumed across packages). - `biome lint packages/core packages/ui` — zero `noRestrictedImports`, imports ordered. diff --git a/.agents/skills/posthog-desktop/SKILL.md b/.agents/skills/posthog-desktop/SKILL.md index 80c450e2c50c..53976ec465c7 100644 --- a/.agents/skills/posthog-desktop/SKILL.md +++ b/.agents/skills/posthog-desktop/SKILL.md @@ -42,6 +42,10 @@ Step outside only when one of these is true: `.dockerignore`, `.oxlintrc.json`, `.oxfmtrc.json`, `.config/.markdownlint-cli2.jsonc`, `.github/workflows/ci-{frontend,storybook,backend}.yml` (+ `.depot/workflows/ci-backend.yml`). Touch these only to keep an exclusion correct; say so when you do. +4. **The agent runtime changes.** `@posthog/agent`, `agent-contracts`, `enricher`, `git` and + `harness` live in a sibling workspace at `packages/agent/` (same toolchain, own lockfile), + because cloud sandboxes boot the agent without the desktop app. Work there, then run + `pnpm build:agent` from `products/desktop/` so desktop's turbo cache sees the change. Anything else outside the tree: stop and ask. diff --git a/.agents/skills/running-ci-preflight/SKILL.md b/.agents/skills/running-ci-preflight/SKILL.md index 74dcdd635bfd..97787a9479a8 100644 --- a/.agents/skills/running-ci-preflight/SKILL.md +++ b/.agents/skills/running-ci-preflight/SKILL.md @@ -35,7 +35,7 @@ hogli ci:preflight --fix - **`type-check` is a nudge, not a run.** Only a repo-wide mypy run matches CI (mypy follows imports, so a changed-file subset misses reverse-dependency breakage), and that costs minutes cold — too much to tax every push with. So preflight names the command instead of running it: judge whether your change is type-risky and run it yourself. CI blocks on the same command, so a type error you skip here comes back as a full re-run. - **`complexity` warns only.** Cyclomatic complexity above 10 in a changed file shows as `⚠ warning` and never blocks; CI annotates the same warning and posts it to the CI report comment. Simplify the function when you next touch it rather than gaming the number. - **Staleness is risk-based.** It fires when merging master _now_ would actually break something — textual merge conflicts (computed via `git merge-tree`, working tree untouched), migrations added on both sides, generated-file inputs changed on both sides, or CI workflows changed on master — plus a behind/age backstop, aggressive by default (5 commits / 2 days; env-tunable via `HOGLI_PREFLIGHT_STALE_COMMITS`/`HOGLI_PREFLIGHT_STALE_DAYS`) so we over-warn to start and tune down from telemetry. Merge master in when it fires. Advisory only, never auto-merged. -- **`· skipped (needs …)`** is expected on a bare checkout or sandbox. `needs stack`/`needs clickhouse` want a running dev stack (`hogli start`), `needs node` wants `pnpm install`, `needs desktop-node` wants `pnpm --dir products/desktop install` (the nested desktop workspace is excluded from the root install and has its own lockfile), and `needs python-env` wants `uv sync`, so the synced project environment is the `python` on PATH. Satisfy what you can, or let CI cover the rest. No hooks in your environment (no `node_modules`)? Run the loop yourself before pushing. +- **`· skipped (needs …)`** is expected on a bare checkout or sandbox. `needs stack`/`needs clickhouse` want a running dev stack (`hogli start`), `needs node` wants `pnpm install`, `needs desktop-node` wants `pnpm --dir products/desktop install` and `needs agent-node` wants `pnpm --dir packages/agent install` (both nested workspaces are excluded from the root install and have their own lockfiles), and `needs python-env` wants `uv sync`, so the synced project environment is the `python` on PATH. Satisfy what you can, or let CI cover the rest. No hooks in your environment (no `node_modules`)? Run the loop yourself before pushing. - **Flags.** `--against ` diffs against an explicit base; `--json` emits a machine-readable summary. - **Kill switch.** `HOGLI_PREFLIGHT_DISABLED=1` makes the command (and the hook) a no-op with exit 0. It is a rollout/emergency lever — respect it; never unset it to force a run. diff --git a/.claude/rules/task-model-catalog.md b/.claude/rules/task-model-catalog.md index 0f3e76858f69..8c1ac04d92b5 100644 --- a/.claude/rules/task-model-catalog.md +++ b/.claude/rules/task-model-catalog.md @@ -3,7 +3,7 @@ paths: - 'products/tasks/backend/model_catalog.py' - 'products/tasks/scripts/model_catalog_projection.py' - 'products/tasks/frontend/modelCatalog.generated.ts' - - 'products/desktop/packages/shared/src/model-catalog.generated.ts' + - 'packages/agent/packages/agent-contracts/src/model-catalog.generated.ts' --- `products/tasks/backend/model_catalog.py` is the single definition of a task run's triple: runtime adapter, model, and reasoning effort. @@ -12,7 +12,7 @@ The web composer and the desktop app each read a checked-in TypeScript projectio After changing the catalog, run `hogli build:projections` and commit both regenerated files. The command needs no dev stack and takes well under a second, so run it rather than reasoning about whether the output moved. -Never hand-edit `products/tasks/frontend/modelCatalog.generated.ts` or `products/desktop/packages/shared/src/model-catalog.generated.ts`. +Never hand-edit `products/tasks/frontend/modelCatalog.generated.ts` or `packages/agent/packages/agent-contracts/src/model-catalog.generated.ts`. `hogli build:projections --check` re-renders both and compares them byte for byte in CI, so an edit that the renderer would not produce fails CI rather than shipping. Adding a model means one row in `MODELS`. Two things do not follow from that row and are worth checking: diff --git a/.config/.markdownlint-cli2.jsonc b/.config/.markdownlint-cli2.jsonc index 0a984a3e29ae..852563c781bd 100644 --- a/.config/.markdownlint-cli2.jsonc +++ b/.config/.markdownlint-cli2.jsonc @@ -14,5 +14,5 @@ "MD045": false, "MD029": false, }, - "ignores": ["products/desktop/**", "**/fixtures/**"], + "ignores": ["products/desktop/**", "packages/agent/**", "**/fixtures/**"], } diff --git a/.env.example b/.env.example index 7b159f06cb47..cf90bf3e63fe 100644 --- a/.env.example +++ b/.env.example @@ -8,8 +8,8 @@ OIDC_RSA_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\nMIIEvAIBADANBgkqhkiG9w0BAQEFA # RS256 private key for sandbox JWT authentication (public key is derived from this) SANDBOX_JWT_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDMAaMESiOX8PDM\nozOHunt1s+zp78nmLnHs6IvOoKS4rQXFVV2/ouTivIfLRMRDe2TAybsYK0yfAJeK\nFxW7O+MD/vjCMS7kJtOjskQIl3wQTjz/T4fwHkFpiqVHLWczeO5LdvaJBZ4FUYdc\nLaV+9T+4wEavJa5G/Ggl+9eWee/TuThN21wMuAQb7WZhWKqDVm8WfmZpvOXJJ/U1\nkg+8GVg7eMTs6GV0MI7YYwzEHRn3PUQrQmc+q6gROwHU7pEv8DdOLjDH5iYZL/4k\ndnW1KGO/Hqf7vzKEMN23YjL6bC4FDRfM5z/4nQUEjvXihzZ1yK6yChwEd7Ma/PUG\nIh6Pm5azAgMBAAECggEAE/nlDeUkmcWMuWe8WAIOrMvdhbARQ7+F2v46Z7/wi+ow\nB86qy2UWpzfGzu9WOIq7UZVvWJfaJ4erTxOg8SCVbi1oC7vn14y7FJW+y7M/AWm9\nLKg2VhuK/twGAHOVs23tXOkH4wrwb5ziyvKSo109zB19I7wQ1f/z7XmSTA3Mn3Kf\n6GecR6di+LuDUNeEPwuP061EnUUsSYZY/QnhUNHfAyWaO4Ezc4bdl8w2q3O1ElBo\ndaYx9ht9aw8bTjIAS6QUdnh3OPXrQ/E7+2RaEh6NFFuXsh93aGSXKB6ZgURk0wIc\nBtNGA5Sxur8nwMfYT+6Z8fi7wMGuGtKISNK+DXCVwQKBgQD+nG92xjZebauJaYOn\nK7cDgWza9zwG6nDv13vRPS+D9wlJP3eUH1O+vZsar9UdTrXGh51oBskc4giOK9aL\nOvp9SjfrRx9KbkLLTzcS+r0XIYog0TO0onswaJ+ybwuvXU6zx+GjoKmPFDYrsjC5\n/3AkBPgEhorM4bZ1plfsFMzbaQKBgQDNHogqPPIXSco9ESTA6b3IeyzEGVcODDFq\nZgEIuFZJ70FCgg+TfxvZyQKfEGjxg6nLKQswaAQ7Pt3yMvYmEiVTrxaLBIjG9Lu8\nTWOMmJDiA7rgFVsU5ENI6UH8Nv8FkS5JSAPgC8hFnLKvs/9RjCTET3UCGoK5ymdM\nO1c/L0epuwKBgDYLUKGeizXaA5pEWlymq89Drq5/4i75noVacP7GBQr26fKxVRmM\n2MLZDk5I2mzBI1aDvMazAgdudzBuX7joCPmFQn9fdmXfJ7BuHRubO33ocaBrp5UF\nFC7/Vj6S0aEkpisFF4Ea/kLPoHv/89XXQZ9zqo2TXW0F0CwC5hDHjYBZAoGAG4IN\ntsRnnxHpSllDOY/fQMSsEzxmvV6LPf6iAt5dzBqHAPlaR2iTfpiDfnt/52vF2JYP\nhxVcA+oBb9q/wglK8jcX6drY0P2/M5iZUiCfxX/EjwquJVYbY+rMS5vAhambsH40\n7tYFrLhACmo0QmZuA9m4EmklwO7Q/ZszryiTDsMCgYBUUMWlQfuTN8m+D/Eo614J\neRYx8/YcaQpASOzy74woAZyHGLjuu5eW9wclkdhklHGh6KyQ5B6JUXlQsbZxLbBb\n9oW6Jg+UvL0KKLqHoNmNitiAUGONrVpxLjrKUUrUfDD+sWsxQpzcOgBqalTZ2g30\nN6ctjTLJp5PqIIE9tZB9PQ==\n-----END PRIVATE KEY-----" -# Cloud tasks use the published @posthog/agent package by default. Uncomment this only when testing local agent changes. The desktop source lives in this repo at products/desktop (the standalone PostHog/code repo is archived). -# LOCAL_POSTHOG_CODE_MONOREPO_ROOT=./products/desktop +# Cloud tasks use the published @posthog/agent package by default. Uncomment this only when testing local agent changes. The agent workspace lives in this repo at packages/agent (the standalone PostHog/code repo is archived). +# LOCAL_POSTHOG_CODE_MONOREPO_ROOT=./packages/agent # Sandbox provider (you can choose between "docker" or "modal") SANDBOX_PROVIDER=docker diff --git a/.github/actions/desktop-build-agent-release/action.yml b/.github/actions/desktop-build-agent-release/action.yml index 1d26e0d1342e..02a8856540d9 100644 --- a/.github/actions/desktop-build-agent-release/action.yml +++ b/.github/actions/desktop-build-agent-release/action.yml @@ -6,10 +6,10 @@ runs: steps: - name: Build agent and workspace dependencies shell: bash - working-directory: products/desktop + working-directory: packages/agent run: pnpm --filter @posthog/agent... run build - name: Run agent tests shell: bash - working-directory: products/desktop + working-directory: packages/agent run: pnpm --filter @posthog/agent run test diff --git a/.github/scripts/desktop/check-pr-backend-coupling.sh b/.github/scripts/desktop/check-pr-backend-coupling.sh index 74f511f11c10..73c75bd4d085 100755 --- a/.github/scripts/desktop/check-pr-backend-coupling.sh +++ b/.github/scripts/desktop/check-pr-backend-coupling.sh @@ -32,6 +32,8 @@ is_backend_path() { is_desktop_path() { case "$1" in products/desktop/*) return 0 ;; + # The desktop app bundles these packages, so they ship on its release schedule. + packages/agent/packages/*) return 0 ;; *) return 1 ;; esac } diff --git a/.github/scripts/desktop/check-pr-backend-coupling.test.sh b/.github/scripts/desktop/check-pr-backend-coupling.test.sh index 2daaf624cbf9..400c78467deb 100755 --- a/.github/scripts/desktop/check-pr-backend-coupling.test.sh +++ b/.github/scripts/desktop/check-pr-backend-coupling.test.sh @@ -73,6 +73,12 @@ assert_result "backend-only PR is out of scope" 2 0 "No products/desktop changes register_pr 3 "[]" products/desktop/apps/foo.ts posthog/models.py assert_result "coupled PR fails with split guidance" 3 1 "must be separated into different PRs" +register_pr 7 "[]" packages/agent/packages/agent/src/agent.ts posthog/models.py +assert_result "agent workspace package coupled with backend fails" 7 1 "must be separated into different PRs" + +register_pr 8 "[]" packages/agent/agent-shadow/main.go products/tasks/backend/sandbox/images/Dockerfile.sandbox-base +assert_result "agent-shadow ships with the sandbox image, so it is out of scope" 8 0 "No products/desktop changes" + register_pr 4 '[{"name": "desktop-skip-backend-check"}]' products/desktop/apps/foo.ts posthog/models.py assert_result "skip label suppresses the check" 4 0 "skipping the coupling check" diff --git a/.github/scripts/trunk-impacted-targets.js b/.github/scripts/trunk-impacted-targets.js index 2f42114eb202..2dd1c0a7af92 100644 --- a/.github/scripts/trunk-impacted-targets.js +++ b/.github/scripts/trunk-impacted-targets.js @@ -807,6 +807,7 @@ const COMMON_FULLSTACK = ['fixtures'] // The pr-approval-agent engine's home inside the stamphog product. const PR_APPROVAL_AGENT_DIR = 'products/stamphog/packages/pr-approval-agent' +const AGENT_WORKSPACE_DIR = 'packages/agent' // Tools that own their whole test story and that no suite imports, so they can // hold a lane of their own. Everything else under tools/ falls through to the @@ -1973,6 +1974,11 @@ function computeTargets(changedFiles, context) { allPyProducts() continue } + // The desktop app bundles the agent workspace and the desktop-* workflows test it, + // so it shares the desktop lanes. Without the product it takes the frontend lanes. + if (file.startsWith(`${AGENT_WORKSPACE_DIR}/`) && addDesktopLanes(targets, context)) { + continue + } if (top === 'frontend' || (top === 'ee' && segments[1] === 'frontend') || top === 'packages') { allFeProducts() continue diff --git a/.github/scripts/trunk-impacted-targets.test.js b/.github/scripts/trunk-impacted-targets.test.js index 45ed80213f1b..d73c93d5aa1c 100644 --- a/.github/scripts/trunk-impacted-targets.test.js +++ b/.github/scripts/trunk-impacted-targets.test.js @@ -517,7 +517,10 @@ test('the paths-filter action and its CI share the ci-tooling lane', () => { // and depot.json is billing and cache routing that fails its own PR's builds // alone. test('pnpm patches take the JS lanes and depot.json the repo-config lane', () => { - assert.deepEqual(computeTargets(['patches/dayjs@1.11.11.patch'], CONTEXT), computeTargets(['.oxlintrc.json'], CONTEXT)) + assert.deepEqual( + computeTargets(['patches/dayjs@1.11.11.patch'], CONTEXT), + computeTargets(['.oxlintrc.json'], CONTEXT) + ) assert.deepEqual(computeTargets(['depot.json'], CONTEXT), ['repo-config']) }) @@ -769,6 +772,13 @@ test('desktop workflows claim the desktop product lanes and widen without the pr assert.deepEqual(computeTargets(['.github/workflows/desktop-ci.yml'], CONTEXT), EVERYTHING) }) +test('the agent workspace shares the desktop lanes and takes the frontend lanes without the product', () => { + const withDesktop = { ...CONTEXT, products: [...CONTEXT.products, 'desktop'] } + const agentFile = 'packages/agent/packages/agent/src/index.ts' + assert.deepEqual(computeTargets([agentFile], withDesktop), ['fe:product:desktop', 'py:product:desktop']) + assert.deepEqual(computeTargets([agentFile], CONTEXT), computeTargets(['packages/quill/src/index.ts'], CONTEXT)) +}) + // The Proto CI workflow gates buf lint and the stub drift checks over every // tree, which is the same radius the root buf configuration gets. test('the proto workflow claims every proto tree rather than everything', () => { @@ -810,7 +820,10 @@ test('the agent-skills workflow claims both language families', () => { }) test('the ml-mirror sidecar image and its workflow stay on the node lane', () => { - for (const file of ['.github/workflows/ci-ml-mirror-image-scrub-container.yml', 'Dockerfile.ml-mirror-image-scrub']) { + for (const file of [ + '.github/workflows/ci-ml-mirror-image-scrub-container.yml', + 'Dockerfile.ml-mirror-image-scrub', + ]) { assert.deepEqual(computeTargets([file], CONTEXT), ['node:ingestion'], file) } }) diff --git a/.github/workflows/ci-python.yml b/.github/workflows/ci-python.yml index 0ff43c9196df..39e08f21f4bd 100644 --- a/.github/workflows/ci-python.yml +++ b/.github/workflows/ci-python.yml @@ -130,10 +130,10 @@ jobs: - 'frontend/src/taxonomy/core-filter-definitions-by-group.json' - 'services/mcp/src/lib/trace-property-allowlist.generated.ts' - 'products/desktop/packages/core/src/inbox/objectKinds.generated.ts' - - 'products/desktop/packages/shared/src/objectTagKinds.generated.ts' + - 'packages/agent/packages/agent-contracts/src/objectTagKinds.generated.ts' - 'frontend/src/lib/components/AgentObjectTags/objectKinds.generated.ts' - 'products/tasks/frontend/modelCatalog.generated.ts' - - 'products/desktop/packages/shared/src/model-catalog.generated.ts' + - 'packages/agent/packages/agent-contracts/src/model-catalog.generated.ts' - 'services/mcp/src/lib/oauth-scopes.generated.ts' # hogli CLI changes need validation - 'tools/hogli/**' diff --git a/.github/workflows/desktop-agent-release-verify.yml b/.github/workflows/desktop-agent-release-verify.yml index 777e8cc716cd..68105d2de3c0 100644 --- a/.github/workflows/desktop-agent-release-verify.yml +++ b/.github/workflows/desktop-agent-release-verify.yml @@ -8,16 +8,10 @@ on: branches: - master paths: - - 'products/desktop/packages/agent/**' - - 'products/desktop/packages/enricher/**' - - 'products/desktop/packages/git/**' - - 'products/desktop/packages/harness/**' - - 'products/desktop/packages/shared/**' + - 'packages/agent/**' - '.github/actions/desktop-build-agent-release/**' - '.github/workflows/desktop-agent-release.yml' - '.github/workflows/desktop-agent-release-verify.yml' - - 'products/desktop/pnpm-lock.yaml' - - 'products/desktop/pnpm-workspace.yaml' env: # npm's audit blocks the pnpm bootstrap. See .github/actions/pnpm-install for why. @@ -34,7 +28,7 @@ jobs: if: ${{ !startsWith(github.head_ref, 'trunk-merge/') }} defaults: run: - working-directory: products/desktop + working-directory: packages/agent steps: - name: Checkout repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 @@ -44,7 +38,7 @@ jobs: - name: Setup pnpm uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9 with: - package_json_file: products/desktop/package.json + package_json_file: packages/agent/package.json - name: Set up Node 24 uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 diff --git a/.github/workflows/desktop-agent-release.yml b/.github/workflows/desktop-agent-release.yml index 5f41e681921c..28ce711ace8a 100644 --- a/.github/workflows/desktop-agent-release.yml +++ b/.github/workflows/desktop-agent-release.yml @@ -30,7 +30,7 @@ jobs: tarball_sha256: ${{ steps.pack.outputs.tarball_sha256 }} defaults: run: - working-directory: products/desktop + working-directory: packages/agent steps: - name: Checkout repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 @@ -40,7 +40,7 @@ jobs: - name: Setup pnpm uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9 with: - package_json_file: products/desktop/package.json + package_json_file: packages/agent/package.json - name: Set up Node 24 uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 @@ -70,7 +70,7 @@ jobs: - name: Pack the release tarball id: pack - working-directory: products/desktop/packages/agent + working-directory: packages/agent/packages/agent env: AGENT_VERSION: ${{ steps.version.outputs.version }} run: | @@ -88,7 +88,7 @@ jobs: retention-days: 1 - name: Publish the package to npm registry - working-directory: products/desktop/packages/agent + working-directory: packages/agent/packages/agent run: pnpm publish --access public --no-git-checks env: NPM_CONFIG_PROVENANCE: true diff --git a/.github/workflows/desktop-agent-tag.yml b/.github/workflows/desktop-agent-tag.yml index 281c03c16d01..f8fde4b6f6c1 100644 --- a/.github/workflows/desktop-agent-tag.yml +++ b/.github/workflows/desktop-agent-tag.yml @@ -5,8 +5,8 @@ on: branches: - master paths: - - 'products/desktop/packages/agent/**' - - 'products/desktop/packages/harness/**' + - 'packages/agent/packages/agent/**' + - 'packages/agent/packages/harness/**' - '.github/workflows/desktop-agent-tag.yml' - '.github/workflows/desktop-agent-release.yml' workflow_dispatch: @@ -87,10 +87,13 @@ jobs: # Count commits touching the agent or harness package since the base tag. In the # monorepo an unscoped count would include every PostHog commit and - # inflate patch numbers meaninglessly. + # inflate patch numbers meaninglessly. The old paths stay in the pathspec so + # the count does not restart below versions that are already published. PATCH=$(git rev-list "$LATEST_TAG".."$TARGET" --count -- \ products/desktop/packages/agent \ - products/desktop/packages/harness) + products/desktop/packages/harness \ + packages/agent/packages/agent \ + packages/agent/packages/harness) if [ "$PATCH" -eq 0 ]; then echo "No agent or harness commits since $LATEST_TAG. Nothing to release." diff --git a/.github/workflows/desktop-build-test.yml b/.github/workflows/desktop-build-test.yml index 01f7601d2234..b6a0ed21ad8a 100644 --- a/.github/workflows/desktop-build-test.yml +++ b/.github/workflows/desktop-build-test.yml @@ -18,6 +18,7 @@ on: types: [opened, synchronize, reopened, labeled] paths: - 'products/desktop/**' + - 'packages/agent/**' - '.github/workflows/desktop-build-test.yml' concurrency: @@ -133,13 +134,10 @@ jobs: - name: Build workspace packages run: | + node scripts/build-agent-workspace.mjs pnpm --filter @posthog/electron-trpc run build pnpm --filter @posthog/platform run build pnpm --filter @posthog/shared run build - pnpm --filter @posthog/git run build - pnpm --filter @posthog/enricher run build - pnpm --filter @posthog/harness run build - pnpm --filter @posthog/agent run build # build/Assets.car is gitignored, so compile it here. actool only handles the .icon # bundle with Xcode 26, which this job gets from its macOS 26 runner's default @@ -361,13 +359,10 @@ jobs: # command's exit code, silently swallowing earlier failures. shell: bash run: | + node scripts/build-agent-workspace.mjs pnpm --filter @posthog/electron-trpc run build pnpm --filter @posthog/platform run build pnpm --filter @posthog/shared run build - pnpm --filter @posthog/git run build - pnpm --filter @posthog/enricher run build - pnpm --filter @posthog/harness run build - pnpm --filter @posthog/agent run build # Two separate steps: in a multi-line pwsh script only the last # command's exit code fails the step, so a broken electron-vite @@ -487,13 +482,10 @@ jobs: - name: Build workspace packages run: | + node scripts/build-agent-workspace.mjs pnpm --filter @posthog/electron-trpc run build pnpm --filter @posthog/platform run build pnpm --filter @posthog/shared run build - pnpm --filter @posthog/git run build - pnpm --filter @posthog/enricher run build - pnpm --filter @posthog/harness run build - pnpm --filter @posthog/agent run build - name: Build app env: diff --git a/.github/workflows/desktop-build.yml b/.github/workflows/desktop-build.yml index 06b395f94dea..7bfc61a7d997 100644 --- a/.github/workflows/desktop-build.yml +++ b/.github/workflows/desktop-build.yml @@ -11,6 +11,7 @@ on: branches: [master] paths: - 'products/desktop/**' + - 'packages/agent/**' - '.github/workflows/desktop-build.yml' concurrency: @@ -31,7 +32,8 @@ jobs: pull-requests: read outputs: # On master pushes the filter step is skipped and everything runs. - code: ${{ steps.filter.outputs.code || 'true' }} + # The desktop app bundles the agent workspace, so a change there counts as desktop code. + code: ${{ steps.filter.outputs.agent == 'true' && 'true' || steps.filter.outputs.code || 'true' }} workflow: ${{ steps.filter.outputs.workflow || 'true' }} steps: # Own rate-limit bucket; the shared GITHUB_TOKEN goes hot at merge peaks. @@ -67,6 +69,8 @@ jobs: - "!products/desktop/LICENSE" - "!products/desktop/.gitignore" - "!products/desktop/.env.example" + agent: + - "packages/agent/**" workflow: - ".github/workflows/desktop-build.yml" diff --git a/.github/workflows/desktop-quality.yml b/.github/workflows/desktop-quality.yml index 19044b4ce7ca..23d9c8627aab 100644 --- a/.github/workflows/desktop-quality.yml +++ b/.github/workflows/desktop-quality.yml @@ -11,6 +11,7 @@ on: branches: [master] paths: - 'products/desktop/**' + - 'packages/agent/**' - '.github/workflows/desktop-quality.yml' concurrency: @@ -26,7 +27,8 @@ jobs: pull-requests: read outputs: # On master pushes the filter step is skipped and everything runs. - code: ${{ steps.filter.outputs.code || 'true' }} + # The desktop app bundles the agent workspace, so a change there counts as desktop code. + code: ${{ steps.filter.outputs.agent == 'true' && 'true' || steps.filter.outputs.code || 'true' }} workflow: ${{ steps.filter.outputs.workflow || 'true' }} steps: # Own rate-limit bucket; the shared GITHUB_TOKEN goes hot at merge peaks. @@ -59,6 +61,8 @@ jobs: - "!products/desktop/LICENSE" - "!products/desktop/.gitignore" - "!products/desktop/.env.example" + agent: + - "packages/agent/**" workflow: - ".github/workflows/desktop-quality.yml" @@ -90,6 +94,10 @@ jobs: - name: Run Biome run: biome ci . + - name: Run Biome on the agent workspace + working-directory: packages/agent + run: biome ci . + - name: Setup Node uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: diff --git a/.github/workflows/desktop-release.yml b/.github/workflows/desktop-release.yml index a9ae38ec68f2..17417a3766ab 100644 --- a/.github/workflows/desktop-release.yml +++ b/.github/workflows/desktop-release.yml @@ -162,21 +162,12 @@ jobs: - name: Build platform package run: pnpm --filter @posthog/platform run build + - name: Build agent workspace + run: node scripts/build-agent-workspace.mjs + - name: Build shared package run: pnpm --filter @posthog/shared run build - - name: Build git package - run: pnpm --filter @posthog/git run build - - - name: Build enricher package - run: pnpm --filter @posthog/enricher run build - - - name: Build harness package - run: pnpm --filter @posthog/harness run build - - - name: Build agent package - run: pnpm --filter @posthog/agent run build - # build/Assets.car is gitignored, so compile it here. actool only handles the .icon # bundle with Xcode 26, which this job gets from its macOS 26 runner's default # toolchain; the script fails the build when it cannot produce one. @@ -467,21 +458,12 @@ jobs: - name: Build platform package run: pnpm --filter @posthog/platform run build + - name: Build agent workspace + run: node scripts/build-agent-workspace.mjs + - name: Build shared package run: pnpm --filter @posthog/shared run build - - name: Build git package - run: pnpm --filter @posthog/git run build - - - name: Build enricher package - run: pnpm --filter @posthog/enricher run build - - - name: Build harness package - run: pnpm --filter @posthog/harness run build - - - name: Build agent package - run: pnpm --filter @posthog/agent run build - # Two separate steps: in a multi-line pwsh script only the last # command's exit code fails the step, so a broken electron-vite # build let electron-builder package an app with no renderer. @@ -661,21 +643,12 @@ jobs: - name: Build platform package run: pnpm --filter @posthog/platform run build + - name: Build agent workspace + run: node scripts/build-agent-workspace.mjs + - name: Build shared package run: pnpm --filter @posthog/shared run build - - name: Build git package - run: pnpm --filter @posthog/git run build - - - name: Build enricher package - run: pnpm --filter @posthog/enricher run build - - - name: Build harness package - run: pnpm --filter @posthog/harness run build - - - name: Build agent package - run: pnpm --filter @posthog/agent run build - - name: Build release artifacts env: APP_VERSION: ${{ steps.version.outputs.version }} diff --git a/.github/workflows/desktop-sync-benjamin.yml b/.github/workflows/desktop-sync-benjamin.yml index e55a4df4067d..a6e8bb0b603a 100644 --- a/.github/workflows/desktop-sync-benjamin.yml +++ b/.github/workflows/desktop-sync-benjamin.yml @@ -42,8 +42,8 @@ jobs: token: ${{ steps.app-token.outputs.token }} sparse-checkout: | .nvmrc - products/desktop/scripts/sync-benjamin.mts - products/desktop/packages/agent/src/adapters/benjamin + packages/agent/scripts/sync-benjamin.mts + packages/agent/packages/harness/src/extensions/benjamin sparse-checkout-cone-mode: false - name: Set up Node @@ -54,17 +54,17 @@ jobs: - name: Sync the vendored instruction env: GITHUB_TOKEN: ${{ steps.app-token.outputs.token }} - run: node products/desktop/scripts/sync-benjamin.mts + run: node packages/agent/scripts/sync-benjamin.mts - name: Check for changes id: check-changes run: | - if git diff --quiet products/desktop/packages/agent/src/adapters/benjamin; then + if git diff --quiet packages/agent/packages/harness/src/extensions/benjamin; then echo "changes=false" >> $GITHUB_OUTPUT echo "Vendored instruction is already at the upstream tip" else echo "changes=true" >> $GITHUB_OUTPUT - git diff --stat products/desktop/packages/agent/src/adapters/benjamin + git diff --stat packages/agent/packages/harness/src/extensions/benjamin fi - name: Find the open sync PR @@ -88,7 +88,7 @@ jobs: id: lock if: steps.check-changes.outputs.changes == 'true' run: | - commit=$(jq -r .commit products/desktop/packages/agent/src/adapters/benjamin/benjamin.lock.json) + commit=$(jq -r .commit packages/agent/packages/harness/src/extensions/benjamin/benjamin.lock.json) echo "commit=$commit" >> $GITHUB_OUTPUT - name: Build PR body @@ -100,7 +100,7 @@ jobs: echo "Upstream bump of the vendored Benjamin-Plus instruction." echo echo "- Source: [JetBrains/benjamin-plus-skill@\`$COMMIT\`](https://github.com/JetBrains/benjamin-plus-skill/commit/$COMMIT)" - echo "- Regenerated by \`products/desktop/scripts/sync-benjamin.mts\`, which verifies the file against upstream \`SHA256SUMS.txt\` before writing." + echo "- Regenerated by \`packages/agent/scripts/sync-benjamin.mts\`, which verifies the file against upstream \`SHA256SUMS.txt\` before writing." echo echo "**Do not merge unattended.** The instruction ships into every cloud agent session that runs with \`POSTHOG_BENJAMIN=1\`, so a human has to:" echo @@ -128,7 +128,7 @@ jobs: commit_message: 'chore(tasks): bump vendored benjamin-plus instruction' repo: ${{ github.repository }} branch: ${{ env.SYNC_BRANCH }} - file_pattern: 'products/desktop/packages/agent/src/adapters/benjamin' + file_pattern: 'packages/agent/packages/harness/src/extensions/benjamin' env: GITHUB_TOKEN: ${{ steps.app-token.outputs.token }} diff --git a/.github/workflows/desktop-tag.yml b/.github/workflows/desktop-tag.yml index fe18e37971c0..9afbbf8b1e39 100644 --- a/.github/workflows/desktop-tag.yml +++ b/.github/workflows/desktop-tag.yml @@ -94,7 +94,7 @@ jobs: esac # Scoped to products/desktop/: monorepo master always has commits landing, so an # unscoped check would never see a quiet period. - LAST_COMMIT_EPOCH=$(git log -1 --format=%ct HEAD -- products/desktop/) + LAST_COMMIT_EPOCH=$(git log -1 --format=%ct HEAD -- products/desktop/ packages/agent/) NOW_EPOCH=$(date +%s) AGE_MINUTES=$(( (NOW_EPOCH - LAST_COMMIT_EPOCH) / 60 )) @@ -207,7 +207,7 @@ jobs: # Scoped to products/desktop/: an unscoped count would include every PostHog # commit and inflate patch numbers meaninglessly. - PATCH=$(git rev-list "$LATEST_TAG".."$TARGET" --count -- products/desktop/) + PATCH=$(git rev-list "$LATEST_TAG".."$TARGET" --count -- products/desktop/ packages/agent/) if [ "$PATCH" -eq 0 ]; then echo "No desktop commits since $LATEST_TAG. Nothing to release." diff --git a/.github/workflows/desktop-test.yml b/.github/workflows/desktop-test.yml index d93f0e509707..1874d1dd8960 100644 --- a/.github/workflows/desktop-test.yml +++ b/.github/workflows/desktop-test.yml @@ -37,9 +37,10 @@ jobs: pull-requests: read outputs: # On master pushes the filter step is skipped and everything runs. - code: ${{ steps.filter.outputs.code || 'true' }} + # The desktop app bundles the agent workspace, so a change there counts as desktop code. + code: ${{ steps.filter.outputs.agent == 'true' && 'true' || steps.filter.outputs.code || 'true' }} workflow: ${{ steps.filter.outputs.workflow || 'true' }} - packages: ${{ steps.filter.outputs.packages }} + packages: ${{ steps.filter.outputs.agent == 'true' && 'true' || steps.filter.outputs.packages }} steps: # Own rate-limit bucket; the shared GITHUB_TOKEN goes hot at merge peaks. - uses: actions/create-github-app-token@1b10c78c7865c340bc4f6099eb2f838309f1e8c3 # v3.1.1 @@ -74,6 +75,8 @@ jobs: - "!products/desktop/LICENSE" - "!products/desktop/.gitignore" - "!products/desktop/.env.example" + agent: + - "packages/agent/**" workflow: - ".github/workflows/desktop-test.yml" packages: @@ -274,7 +277,7 @@ jobs: # once unit-test + electron-test have passed. There is intentionally NO # gate on the gateway config being present: if the POSTHOG_CODE_E2E_* # secret/vars are missing, the fail-loud guard - # (products/desktop/packages/agent/e2e/guard.e2e.test.ts) REDS the run rather than + # (packages/agent/packages/agent/e2e/guard.e2e.test.ts) REDS the run rather than # skipping to green. Fork PRs are skipped, since they never receive the # gateway secret and would red spuriously. # @@ -334,7 +337,8 @@ jobs: key: desktop-pnpm-${{ runner.os }}-${{ hashFiles('products/desktop/pnpm-lock.yaml') }} - name: Build agent dependencies - run: pnpm exec turbo build --filter=@posthog/agent^... + working-directory: packages/agent + run: pnpm install --frozen-lockfile && pnpm exec turbo build --filter=@posthog/agent^... - name: Download native codex binary # Non-fatal at the STEP so a failure surfaces as the fail-loud binary guard @@ -344,9 +348,10 @@ jobs: run: node apps/code/scripts/download-binaries.mjs || echo "codex binary download failed; the binary guard test will red the run" - name: Run live e2e (both adapters) + working-directory: packages/agent run: pnpm --filter agent run test:e2e # The suite reads these POSTHOG_CODE_E2E_* names directly - # (products/desktop/packages/agent/e2e/config.ts). The personal API key is an org + # (packages/agent/packages/agent/e2e/config.ts). The personal API key is an org # secret; the URL and model/environment overrides are org vars. env: POSTHOG_CODE_E2E_GATEWAY_PERSONAL_API_KEY: ${{ secrets.POSTHOG_CODE_E2E_GATEWAY_PERSONAL_API_KEY }} diff --git a/.github/workflows/desktop-typecheck.yml b/.github/workflows/desktop-typecheck.yml index c63716958dbd..4fa3b8cd5a5b 100644 --- a/.github/workflows/desktop-typecheck.yml +++ b/.github/workflows/desktop-typecheck.yml @@ -11,6 +11,7 @@ on: branches: [master] paths: - 'products/desktop/**' + - 'packages/agent/**' - '.github/workflows/desktop-typecheck.yml' concurrency: @@ -31,7 +32,8 @@ jobs: pull-requests: read outputs: # On master pushes the filter step is skipped and everything runs. - code: ${{ steps.filter.outputs.code || 'true' }} + # The desktop app bundles the agent workspace, so a change there counts as desktop code. + code: ${{ steps.filter.outputs.agent == 'true' && 'true' || steps.filter.outputs.code || 'true' }} workflow: ${{ steps.filter.outputs.workflow || 'true' }} steps: # Own rate-limit bucket; the shared GITHUB_TOKEN goes hot at merge peaks. @@ -67,6 +69,8 @@ jobs: - "!products/desktop/LICENSE" - "!products/desktop/.gitignore" - "!products/desktop/.env.example" + agent: + - "packages/agent/**" workflow: - ".github/workflows/desktop-typecheck.yml" diff --git a/.github/workflows/desktop-update-e2e.yml b/.github/workflows/desktop-update-e2e.yml index c58860cdc67d..00a69c89c4f2 100644 --- a/.github/workflows/desktop-update-e2e.yml +++ b/.github/workflows/desktop-update-e2e.yml @@ -108,13 +108,10 @@ jobs: - name: Build workspace packages run: | + node scripts/build-agent-workspace.mjs pnpm --filter @posthog/electron-trpc run build pnpm --filter @posthog/platform run build pnpm --filter @posthog/shared run build - pnpm --filter @posthog/git run build - pnpm --filter @posthog/enricher run build - pnpm --filter @posthog/harness run build - pnpm --filter @posthog/agent run build - name: Build old + new update pair (and 3.0.0 chain feed) working-directory: products/desktop/apps/code diff --git a/.github/workflows/update-sandbox-agent-version.yml b/.github/workflows/update-sandbox-agent-version.yml index 0b94bb97ad61..03aea97c9ead 100644 --- a/.github/workflows/update-sandbox-agent-version.yml +++ b/.github/workflows/update-sandbox-agent-version.yml @@ -43,7 +43,12 @@ jobs: DOCKERFILE: products/tasks/backend/sandbox/images/Dockerfile.sandbox-base BRANCH_PREFIX: chore/bump-sandbox-agent-version- SLACK_CHANNEL: 'C0C3FBES5ST' - AGENT_PATHS: products/desktop/packages/agent products/desktop/packages/enricher products/desktop/packages/git products/desktop/packages/harness products/desktop/packages/shared + # Old locations stay so a tag range that spans the move still lists its commits. + AGENT_PATHS: >- + packages/agent/packages/agent packages/agent/packages/agent-contracts + packages/agent/packages/enricher packages/agent/packages/git packages/agent/packages/harness + products/desktop/packages/agent products/desktop/packages/enricher + products/desktop/packages/git products/desktop/packages/harness products/desktop/packages/shared steps: - name: Guard - only run on master @@ -208,12 +213,24 @@ jobs: echo "### Dependency changes" echo deps_ok=true + read_at_tag() { + local tag="$1" + shift + local path content + for path in "$@"; do + if content=$(gh api "repos/${REPO}/contents/${path}?ref=${tag}" --jq '.content' 2>/dev/null); then + printf '%s' "$content" | base64 -d + return 0 + fi + done + return 1 + } for tag in "$from_tag" "$to_tag"; do - catalog=$(gh api "repos/${REPO}/contents/products/desktop/pnpm-workspace.yaml?ref=${tag}" --jq '.content' 2>/dev/null \ - | base64 -d | yq -o=json '{"default": (.catalog // {}), "named": (.catalogs // {})}' 2>/dev/null \ + catalog=$(read_at_tag "$tag" packages/agent/pnpm-workspace.yaml products/desktop/pnpm-workspace.yaml \ + | yq -o=json '{"default": (.catalog // {}), "named": (.catalogs // {})}' 2>/dev/null \ || echo '{"default": {}, "named": {}}') - if ! (set -o pipefail; gh api "repos/${REPO}/contents/products/desktop/packages/agent/package.json?ref=${tag}" --jq '.content' 2>/dev/null \ - | base64 -d | jq -r --argjson catalog "$catalog" ' + if ! (set -o pipefail; read_at_tag "$tag" packages/agent/packages/agent/package.json products/desktop/packages/agent/package.json \ + | jq -r --argjson catalog "$catalog" ' .dependencies // {} | to_entries[] | .value as $spec | (if $spec == "catalog:" or $spec == "catalog:default" then ($catalog.default[.key] // $spec) elif ($spec | startswith("catalog:")) then ($catalog.named[$spec[8:]][.key] // $spec) diff --git a/.oxfmtrc.json b/.oxfmtrc.json index 02fb15a0a36d..eb6e122ee016 100644 --- a/.oxfmtrc.json +++ b/.oxfmtrc.json @@ -94,6 +94,20 @@ "products/desktop/**/*.md", "products/desktop/**/*.mdx", "products/desktop/pnpm-lock.yaml", + "packages/agent/**/*.ts", + "packages/agent/**/*.tsx", + "packages/agent/**/*.js", + "packages/agent/**/*.jsx", + "packages/agent/**/*.mjs", + "packages/agent/**/*.cjs", + "packages/agent/**/*.mts", + "packages/agent/**/*.json", + "packages/agent/**/*.jsonc", + "packages/agent/**/*.css", + "packages/agent/**/*.scss", + "packages/agent/**/*.md", + "packages/agent/**/*.mdx", + "packages/agent/pnpm-lock.yaml", "products/desktop/apps/code/snapshots.yml", "frontend/snapshots.yml", "venv", diff --git a/.oxlintrc.json b/.oxlintrc.json index 4896a2994db0..5c68a3045c61 100644 --- a/.oxlintrc.json +++ b/.oxlintrc.json @@ -6,6 +6,7 @@ }, "ignorePatterns": [ "products/desktop", + "packages/agent", "node_modules", "dist", "build", diff --git a/bin/start-desktop b/bin/start-desktop index d682a3ca29bc..0a74204a1387 100755 --- a/bin/start-desktop +++ b/bin/start-desktop @@ -11,5 +11,9 @@ fi cd products/desktop pnpm install --frozen-lockfile +node scripts/build-agent-workspace.mjs -exec node scripts/dev-with-skills.mjs pnpm exec turbo dev --filter=@posthog/code --filter=@posthog/agent --filter=@posthog/git --filter=@posthog/platform --filter=@posthog/enricher +pnpm --dir ../../packages/agent exec turbo dev --filter=@posthog/agent --filter=@posthog/git --filter=@posthog/enricher & +trap 'kill %1 2>/dev/null || true' EXIT + +node scripts/dev-with-skills.mjs pnpm exec turbo dev --filter=@posthog/code --filter=@posthog/platform diff --git a/docs/internal/monorepo-layout.md b/docs/internal/monorepo-layout.md index 3870ee60db2e..e147cd90a174 100644 --- a/docs/internal/monorepo-layout.md +++ b/docs/internal/monorepo-layout.md @@ -30,7 +30,7 @@ services/ # Independent services NOT owned by any one product packages/ # Libraries shared across more than one product/service (e.g. quill) owners/ # owners.yaml resolver (owners_yaml) — Python uv workspace member, RUNTIME dependency - agent/ # Sandbox agent runtime; agent-shadow/ is the Go observer the sandbox base image builds + agent/ # Agent runtime: a standalone pnpm workspace (@posthog/agent and the packages it bundles) plus agent-shadow/, the Go observer the sandbox base image builds common/ # Shared code — holding pen, NOT a destination (goal: shrink it) hogql_parser/ # HogQL parser @@ -69,6 +69,10 @@ See [products/README.md](/products/README.md) for how to create products. For ne One exception to the Django-plus-React shape: `products/desktop/` is the PostHog desktop app (Electron, plus mobile and web hosts), imported from the PostHog/code repo. It is a nested standalone pnpm workspace with its own lockfile, Node version and Biome toolchain, deliberately excluded from the root pnpm workspace, with its own `desktop-*` CI. Its `AGENTS.md` covers the architecture. Day to day, drive it through `hogli desktop:*` commands, or `cd products/desktop` and use pnpm directly. +The agent runtime the desktop app bundles is a second nested workspace at `packages/agent/` (`@posthog/agent` plus `agent-contracts`, `enricher`, `git` and `harness`), because cloud task sandboxes boot the published agent without the desktop app. +Desktop depends on it through `link:` paths, since turbo rejects a workspace member outside its root. +Turbo cannot hash files behind a path link, so `products/desktop/scripts/build-agent-workspace.mjs` builds that workspace and writes a stamp that desktop's `turbo.json` lists as a global dependency. + #### What a product can own Most products are a Django app plus React scenes — and most already carry more: an `mcp/` directory of MCP tool definitions, often a `skills/` directory of agent skills. A product can own anything attributable to it, runtime and tooling alike. Nest it under the product instead of scattering it across top-level dirs: diff --git a/docs/internal/sandboxes-setup-guide.md b/docs/internal/sandboxes-setup-guide.md index d00892d39355..2e94f9a880bd 100644 --- a/docs/internal/sandboxes-setup-guide.md +++ b/docs/internal/sandboxes-setup-guide.md @@ -298,8 +298,8 @@ For local Docker, the worker builds the packages inside the sandbox image. The f ```bash # In your .env: SANDBOX_PROVIDER=docker -# The desktop source lives in this repo at products/desktop -LOCAL_POSTHOG_CODE_MONOREPO_ROOT=./products/desktop +# The agent workspace lives in this repo at packages/agent +LOCAL_POSTHOG_CODE_MONOREPO_ROOT=./packages/agent ``` Restart the temporal worker after changing `.env`. @@ -307,7 +307,7 @@ Restart the temporal worker after changing `.env`. For local Modal, set `SANDBOX_PROVIDER=MODAL_DOCKER`, build the packages, and restart the temporal worker: ```bash -pnpm --dir products/desktop --filter @posthog/agent... build +pnpm --dir packages/agent build ``` ### Sandbox providers @@ -405,7 +405,7 @@ Mirroring failures are logged and never break the run's log write. When both `SANDBOX_PROVIDER=MODAL_DOCKER` and `LOCAL_POSTHOG_CODE_MONOREPO_ROOT` are set: 1. The selected sandbox Dockerfile is built in a temporary context -2. External runtime dependencies from local `packages/agent`, `packages/shared`, and `packages/git` manifests that are missing from the published image are installed at `/scripts`; required system compatibility packages such as musl for Codex are installed with them, while `workspace:*` dependencies continue to resolve through the overlaid packages +2. External runtime dependencies from local `packages/agent`, `packages/agent-contracts`, and `packages/git` manifests that are missing from the published image are installed at `/scripts`; required system compatibility packages such as musl for Codex are installed with them, while `workspace:*` dependencies continue to resolve through the overlaid packages 3. Each local package's built `dist/` directory is mounted over the published package's compiled output 4. The image runs in a separate Modal app (`posthog-sandbox-modal-docker-default`) so it doesn't affect production 5. The first build takes a few minutes; subsequent builds reuse Modal's layer cache @@ -413,7 +413,7 @@ When both `SANDBOX_PROVIDER=MODAL_DOCKER` and `LOCAL_POSTHOG_CODE_MONOREPO_ROOT` After changing agent-server code, rebuild and restart the worker: ```bash -cd products/desktop/packages/agent && pnpm build +cd packages/agent/packages/agent && pnpm build ``` > **Note:** The build context is cached for the lifetime of the worker process (`lru_cache`). diff --git a/docs/published/handbook/engineering/ai/writing-skills.md b/docs/published/handbook/engineering/ai/writing-skills.md index 37f29b65c7cf..6812b27ce6e0 100644 --- a/docs/published/handbook/engineering/ai/writing-skills.md +++ b/docs/published/handbook/engineering/ai/writing-skills.md @@ -434,15 +434,15 @@ while its extra reference files survived as orphans in the other source's direct The Desktop harness bundle is the exception: it packages context-mill alone, so a skill from this repo is absent there rather than overwritten. -| Consumer | Merge site | -| ------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | -| PostHog Desktop build | `products/desktop/apps/code/vite-main-plugins.mts` (`copyPosthogPlugin`) | -| PostHog Desktop runtime, every 30 min | `products/desktop/packages/workspace-server/src/services/posthog-plugin/update-skills-saga.ts` | -| Desktop harness bundle | `products/desktop/packages/harness/tsup.config.ts` – context-mill only, this repo's skills are absent rather than overwritten | -| Tasks sandbox base image | `.github/workflows/cd-sandbox-base-image.yml` | -| Tasks golden snapshot | `.github/workflows/cd-tasks-golden-snapshot.yml` | -| `PostHog/skills` mirror | that repo's `.github/workflows/sync-omnibus.yml` | -| `PostHog/ai-plugin` plugin | that repo's `.github/workflows/sync-skills.yml` | +| Consumer | Merge site | +| ------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | +| PostHog Desktop build | `products/desktop/apps/code/vite-main-plugins.mts` (`copyPosthogPlugin`) | +| PostHog Desktop runtime, every 30 min | `products/desktop/packages/workspace-server/src/services/posthog-plugin/update-skills-saga.ts` | +| Desktop harness bundle | `packages/agent/packages/harness/tsup.config.ts` – context-mill only, this repo's skills are absent rather than overwritten | +| Tasks sandbox base image | `.github/workflows/cd-sandbox-base-image.yml` | +| Tasks golden snapshot | `.github/workflows/cd-tasks-golden-snapshot.yml` | +| `PostHog/skills` mirror | that repo's `.github/workflows/sync-omnibus.yml` | +| `PostHog/ai-plugin` plugin | that repo's `.github/workflows/sync-skills.yml` | Note what is missing from that list: local builds. `LocalSkillsCache.ensure_built()` renders only `products/*/skills/` and wipes the dist dir first, diff --git a/frontend/snapshots.yml b/frontend/snapshots.yml index a2af4e10f195..bd50139432da 100644 --- a/frontend/snapshots.yml +++ b/frontend/snapshots.yml @@ -7975,13 +7975,13 @@ snapshots: scenes-app-business-knowledge-playground--saved-chat--light: hash: v1.k794b7964.f2388b5b836e5f04fe2f7c94b51a2e7c8356bd4806cf135c1ee115951b43d2ec.syOurGASFyjDfm1O0BrEprdwtoTrpOLtWcEeMz_cYAo scenes-app-businessknowledge-knowledgesourcedetails--file--dark: - hash: v1.k794b7964.6fce4fcb3dbf4153e1803231c31de01442077368bc563d1e461374db36c8de54.OV6BI-ljYwtd1ZvU0lxpX70ZH8YDfYqq2kbILbe_dH4 + hash: v1.k794b7964.ec1993e00b0c959c68c2d8d5e4b536cef393a2ac765675eb80271df6f2e968fe.XC7RmK7NYMdqHVETMzXBHbDchCrPtZMTkXNAUbKfAg0 scenes-app-businessknowledge-knowledgesourcedetails--file--light: - hash: v1.k794b7964.ba7083911c27961d1050951d8f15f388cb91e880402b7c7fd701fbccef66d07c.b8CnCawVdQo9b5DcE4MIGqmYoeHTiee8kDNxPwi4vds + hash: v1.k794b7964.09e6829cf48e497537d26fcaa78c9ca54135b6fb0ac295286168e46fd4dba34f.4GBNAGTvMUhPTkAnhjVeZIda2rT2B2MHW0I-VPGI7sI scenes-app-businessknowledge-knowledgesourcedetails--learned--dark: - hash: v1.k794b7964.c30245544fe59122dd4dcdd784acb6938af94ed99bb5093072804961686147d5.KhpS0OJ20syyeinctRlJE40zjmN8xuDCYBjXWm9kdZk + hash: v1.k794b7964.fb5f0858416ff59a723e170a708945555478ce36110eb1b36551cc31ff092352.BK7MoBjHAU0UWY7deUMp9sPJQWhV1BtsEuf8uVb5jzc scenes-app-businessknowledge-knowledgesourcedetails--learned--light: - hash: v1.k794b7964.15e551ed8e0c09c8a8117df3ea29fb333b125af787e0d3f2aa43c0c44a9e846e.KLGmpYF8efOXI89n4hoMgEmMlTf48wNk96WBzpJiQdw + hash: v1.k794b7964.60e5f606918018a665120eab4dc13fd04fe678e7ca02a822f8f2c582782e224f.4dxil4-pCkIcQFZndzNgt9A6uF2HcK2fWx5n67sDSik scenes-app-businessknowledge-knowledgesourcedetails--text--dark: hash: v1.k794b7964.f16ff52a8628939bb64ec44713155455d9c5bfab9bdc06d81fed67f55f29d75e.ltD-2rSDPPvEVCEPb9MjpGiCCeUnAicC-lYoC2GShuM scenes-app-businessknowledge-knowledgesourcedetails--text--light: diff --git a/hogli.yaml b/hogli.yaml index 48ac2ed79ada..8d0d5916e656 100644 --- a/hogli.yaml +++ b/hogli.yaml @@ -1093,16 +1093,16 @@ desktop: description: Run the desktop app dev stack (build deps, then phrocs with Electron) desktop:test: cmd: pnpm --dir products/desktop test - description: Run desktop unit tests (Vitest via turbo, nested workspace) + description: Run desktop and agent workspace unit tests (Vitest via turbo, nested workspaces) desktop:typecheck: cmd: pnpm --dir products/desktop typecheck - description: Typecheck all desktop packages (turbo) + description: Typecheck all desktop and agent workspace packages (turbo) desktop:lint: - cmd: pnpm --dir products/desktop exec biome ci . && node products/desktop/scripts/check-host-boundaries.mjs - description: Check desktop code quality without writing (Biome + host boundaries, mirrors desktop-quality CI) + cmd: pnpm --dir products/desktop exec biome ci . && pnpm --dir packages/agent exec biome ci . && node products/desktop/scripts/check-host-boundaries.mjs + description: Check desktop and agent workspace code quality without writing (Biome + host boundaries, mirrors desktop-quality CI) desktop:lint:fix: - cmd: pnpm --dir products/desktop run lint - description: Autofix desktop lint issues (biome check --write --unsafe) + cmd: pnpm --dir products/desktop run lint && pnpm --dir packages/agent run lint + description: Autofix desktop and agent workspace lint issues (biome check --write --unsafe) owners: owners:resolve: diff --git a/package.json b/package.json index 6c3a72791b6f..84bafe613796 100644 --- a/package.json +++ b/package.json @@ -97,6 +97,7 @@ ], "{playwright,frontend,products,common,ee,services,docs}/**/*.{js,jsx,mjs,mts,ts,tsx}": "bin/hogli format:js", "products/desktop/**/*.{js,mjs,ts,tsx,json,jsonc,css}": "pnpm --dir products/desktop exec biome check --write --no-errors-on-unmatched --files-ignore-unknown=true", + "packages/agent/**/*.{js,mjs,mts,ts,tsx,json,jsonc}": "pnpm --dir packages/agent exec biome check --write --no-errors-on-unmatched --files-ignore-unknown=true", "nodejs/**/*.{js,jsx,mjs,mts,ts,tsx}": "bin/hogli format:nodejs", "funnel-udf/**/*.rs": "bin/hogli format:rust", "!(posthog/hogql/grammar/*|products/*/skills/*/scripts/*|products/stamphog/packages/*/*)*.{py,pyi}": [ diff --git a/packages/agent/.gitignore b/packages/agent/.gitignore new file mode 100644 index 000000000000..db66596ccaf3 --- /dev/null +++ b/packages/agent/.gitignore @@ -0,0 +1,13 @@ +node_modules/ +.pnpm-store/ +dist/ +.turbo/ +junit.xml + +# tsup bundled config artifacts (temporary files left behind when bundling TS configs) +*.config.bundled_*.mjs +# vite bundled config artifacts (left behind when a vitest run is interrupted) +*.config.ts.timestamp-*.mjs + +.env +.env.local diff --git a/packages/agent/.npmrc b/packages/agent/.npmrc new file mode 100644 index 000000000000..81bbe90c961f --- /dev/null +++ b/packages/agent/.npmrc @@ -0,0 +1,3 @@ +node-linker=hoisted +shamefully-hoist=true +min-release-age=7 diff --git a/packages/agent/biome.jsonc b/packages/agent/biome.jsonc new file mode 100644 index 000000000000..e5ef627c2f90 --- /dev/null +++ b/packages/agent/biome.jsonc @@ -0,0 +1,111 @@ +{ + "$schema": "https://biomejs.dev/schemas/2.2.4/schema.json", + "vcs": { + "enabled": true, + "clientKind": "git", + "useIgnoreFile": true + }, + "files": { + "ignoreUnknown": false + }, + "formatter": { + "enabled": true, + "indentStyle": "space", + "indentWidth": 2 + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true, + "suspicious": { + "noExplicitAny": "warn" + } + } + }, + "javascript": { + "formatter": { + "quoteStyle": "double" + } + }, + "assist": { + "enabled": true, + "actions": { + "source": { + "organizeImports": "on" + } + } + }, + "overrides": [ + { + // Object-tag kind registry generated from posthog/object_tags/kinds.py; the + // generator's byte-stable output is what `hogli build:object-tags --check` + // compares against, so no formatter may touch it. + "includes": ["packages/agent-contracts/src/objectTagKinds.generated.ts"], + "formatter": { + "enabled": false + } + }, + { + // Disallow console.* in agent source code - use logger instead + "includes": ["packages/agent/src/**/*.ts"], + "linter": { + "rules": { + "suspicious": { + "noConsole": "error" + } + } + } + }, + { + // Logger implementations intentionally wrap console + "includes": ["packages/agent/src/utils/logger.ts"], + "linter": { + "rules": { + "suspicious": { + "noConsole": "off" + } + } + } + }, + { + "includes": ["packages/**/*.ts"], + "linter": { + "rules": { + "style": { + "noRestrictedImports": { + "level": "error", + "options": { + "patterns": [ + { + "group": ["@posthog/shared", "@posthog/shared/*"], + "message": "The agent runtime must not depend on desktop code. Import from @posthog/agent-contracts." + } + ] + } + } + } + } + } + }, + { + "includes": ["packages/agent-contracts/**/*.ts"], + "linter": { + "rules": { + "style": { + "noRestrictedImports": { + "level": "error", + "options": { + "patterns": [ + { + "group": ["@posthog/*"], + "message": "agent-contracts is a leaf shared with every host. It imports no internal package." + } + ] + } + } + } + } + } + } + ] +} diff --git a/packages/agent/package.json b/packages/agent/package.json new file mode 100644 index 000000000000..4799c67f026b --- /dev/null +++ b/packages/agent/package.json @@ -0,0 +1,25 @@ +{ + "name": "posthog-agent-workspace", + "version": "0.0.0", + "description": "The PostHog agent runtime and the packages it bundles", + "private": true, + "engines": { + "node": ">=22.19.0" + }, + "packageManager": "pnpm@10.23.0+sha512.21c4e5698002ade97e4efe8b8b4a89a8de3c85a37919f957e7a0f30f38fbc5bbdd05980ffe29179b2fb6e6e691242e098d945d1601772cad0fef5fb6411e2a4b", + "scripts": { + "build": "turbo build", + "dev": "turbo dev", + "typecheck": "turbo typecheck", + "test": "turbo test --concurrency=2", + "lint": "biome check --write --unsafe", + "format": "biome format --write", + "clean": "pnpm -r clean", + "benjamin:sync": "node scripts/sync-benjamin.mts" + }, + "license": "MIT", + "devDependencies": { + "@biomejs/biome": "2.2.4", + "turbo": "^2.9.16" + } +} diff --git a/packages/agent/packages/agent-contracts/package.json b/packages/agent/packages/agent-contracts/package.json new file mode 100644 index 000000000000..83634cae3f40 --- /dev/null +++ b/packages/agent/packages/agent-contracts/package.json @@ -0,0 +1,36 @@ +{ + "name": "@posthog/agent-contracts", + "version": "1.0.0", + "description": "Types, schemas and helpers the agent runtime and its hosts share", + "type": "module", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + }, + "./*": { + "types": "./dist/*.d.ts", + "import": "./dist/*.js" + } + }, + "scripts": { + "build": "tsup", + "dev": "tsup --watch", + "typecheck": "tsc --noEmit", + "test": "vitest run", + "clean": "node ../../scripts/rimraf.mjs dist .turbo" + }, + "dependencies": { + "zod": "^4.1.12" + }, + "devDependencies": { + "@agentclientprotocol/sdk": "0.19.0", + "tsup": "^8.5.1", + "typescript": "^5.5.0", + "vitest": "^4.1.8" + }, + "files": [ + "dist/**/*", + "src/**/*" + ] +} diff --git a/products/desktop/packages/shared/src/adapter.ts b/packages/agent/packages/agent-contracts/src/adapter.ts similarity index 100% rename from products/desktop/packages/shared/src/adapter.ts rename to packages/agent/packages/agent-contracts/src/adapter.ts diff --git a/products/desktop/packages/shared/src/agent-actions.test.ts b/packages/agent/packages/agent-contracts/src/agent-actions.test.ts similarity index 100% rename from products/desktop/packages/shared/src/agent-actions.test.ts rename to packages/agent/packages/agent-contracts/src/agent-actions.test.ts diff --git a/products/desktop/packages/shared/src/agent-actions.ts b/packages/agent/packages/agent-contracts/src/agent-actions.ts similarity index 100% rename from products/desktop/packages/shared/src/agent-actions.ts rename to packages/agent/packages/agent-contracts/src/agent-actions.ts diff --git a/products/desktop/packages/shared/src/agent-conversation.ts b/packages/agent/packages/agent-contracts/src/agent-conversation.ts similarity index 100% rename from products/desktop/packages/shared/src/agent-conversation.ts rename to packages/agent/packages/agent-contracts/src/agent-conversation.ts diff --git a/products/desktop/packages/shared/src/agent-runtime.ts b/packages/agent/packages/agent-contracts/src/agent-runtime.ts similarity index 100% rename from products/desktop/packages/shared/src/agent-runtime.ts rename to packages/agent/packages/agent-contracts/src/agent-runtime.ts diff --git a/products/desktop/packages/shared/src/api-http-client.test.ts b/packages/agent/packages/agent-contracts/src/api-http-client.test.ts similarity index 100% rename from products/desktop/packages/shared/src/api-http-client.test.ts rename to packages/agent/packages/agent-contracts/src/api-http-client.test.ts diff --git a/products/desktop/packages/shared/src/api-http-client.ts b/packages/agent/packages/agent-contracts/src/api-http-client.ts similarity index 100% rename from products/desktop/packages/shared/src/api-http-client.ts rename to packages/agent/packages/agent-contracts/src/api-http-client.ts diff --git a/products/desktop/packages/shared/src/backoff.test.ts b/packages/agent/packages/agent-contracts/src/backoff.test.ts similarity index 100% rename from products/desktop/packages/shared/src/backoff.test.ts rename to packages/agent/packages/agent-contracts/src/backoff.test.ts diff --git a/products/desktop/packages/shared/src/backoff.ts b/packages/agent/packages/agent-contracts/src/backoff.ts similarity index 100% rename from products/desktop/packages/shared/src/backoff.ts rename to packages/agent/packages/agent-contracts/src/backoff.ts diff --git a/packages/agent/packages/agent-contracts/src/bedrock-gateway.ts b/packages/agent/packages/agent-contracts/src/bedrock-gateway.ts new file mode 100644 index 000000000000..2a0b1b7c07de --- /dev/null +++ b/packages/agent/packages/agent-contracts/src/bedrock-gateway.ts @@ -0,0 +1,21 @@ +/** + * Serves a session's Claude traffic from Bedrock instead of Anthropic. The + * `test` variant sends `x-posthog-provider: bedrock`, which the gateway routes + * to its Bedrock backend; `control` sends nothing and the gateway keeps its + * `anthropic` default. + * + * The variants differ in resilience, not just in provider. `control` keeps the + * gateway's Bedrock *failover* (`x-posthog-use-bedrock-fallback`), which retries + * against Bedrock when Anthropic returns 5xx/429 or blocks on billing. `test` + * cannot use it: the gateway dispatches on the provider header and returns + * before reading the fallback one, and its direct-Bedrock path has no reverse + * fallback to Anthropic. So a Bedrock outage fails a `test` session outright. + * + * Literal rather than read from the desktop flag registry; flags.test.ts keeps it in step. + */ +export const BEDROCK_LLM_GATEWAY_FLAG = "bedrock-llm-gateway"; + +/** Variants of {@link BEDROCK_LLM_GATEWAY_FLAG}. */ +export const BEDROCK_GATEWAY_VARIANTS = ["test", "control"] as const; + +export type BedrockGatewayVariant = (typeof BEDROCK_GATEWAY_VARIANTS)[number]; diff --git a/products/desktop/packages/shared/src/binary.test.ts b/packages/agent/packages/agent-contracts/src/binary.test.ts similarity index 100% rename from products/desktop/packages/shared/src/binary.test.ts rename to packages/agent/packages/agent-contracts/src/binary.test.ts diff --git a/products/desktop/packages/shared/src/binary.ts b/packages/agent/packages/agent-contracts/src/binary.ts similarity index 100% rename from products/desktop/packages/shared/src/binary.ts rename to packages/agent/packages/agent-contracts/src/binary.ts diff --git a/products/desktop/packages/shared/src/call-tool-result.test.ts b/packages/agent/packages/agent-contracts/src/call-tool-result.test.ts similarity index 100% rename from products/desktop/packages/shared/src/call-tool-result.test.ts rename to packages/agent/packages/agent-contracts/src/call-tool-result.test.ts diff --git a/products/desktop/packages/shared/src/call-tool-result.ts b/packages/agent/packages/agent-contracts/src/call-tool-result.ts similarity index 100% rename from products/desktop/packages/shared/src/call-tool-result.ts rename to packages/agent/packages/agent-contracts/src/call-tool-result.ts diff --git a/products/desktop/packages/shared/src/cloud-prompt.test.ts b/packages/agent/packages/agent-contracts/src/cloud-prompt.test.ts similarity index 100% rename from products/desktop/packages/shared/src/cloud-prompt.test.ts rename to packages/agent/packages/agent-contracts/src/cloud-prompt.test.ts diff --git a/products/desktop/packages/shared/src/cloud-prompt.ts b/packages/agent/packages/agent-contracts/src/cloud-prompt.ts similarity index 100% rename from products/desktop/packages/shared/src/cloud-prompt.ts rename to packages/agent/packages/agent-contracts/src/cloud-prompt.ts diff --git a/products/desktop/packages/shared/src/cloud-task-models.test.ts b/packages/agent/packages/agent-contracts/src/cloud-task-models.test.ts similarity index 100% rename from products/desktop/packages/shared/src/cloud-task-models.test.ts rename to packages/agent/packages/agent-contracts/src/cloud-task-models.test.ts diff --git a/products/desktop/packages/shared/src/cloud-task-models.ts b/packages/agent/packages/agent-contracts/src/cloud-task-models.ts similarity index 100% rename from products/desktop/packages/shared/src/cloud-task-models.ts rename to packages/agent/packages/agent-contracts/src/cloud-task-models.ts diff --git a/products/desktop/packages/shared/src/custom-cloud.test.ts b/packages/agent/packages/agent-contracts/src/custom-cloud.test.ts similarity index 100% rename from products/desktop/packages/shared/src/custom-cloud.test.ts rename to packages/agent/packages/agent-contracts/src/custom-cloud.test.ts diff --git a/products/desktop/packages/shared/src/custom-cloud.ts b/packages/agent/packages/agent-contracts/src/custom-cloud.ts similarity index 100% rename from products/desktop/packages/shared/src/custom-cloud.ts rename to packages/agent/packages/agent-contracts/src/custom-cloud.ts diff --git a/products/desktop/packages/shared/src/dismissal-reasons.test.ts b/packages/agent/packages/agent-contracts/src/dismissal-reasons.test.ts similarity index 100% rename from products/desktop/packages/shared/src/dismissal-reasons.test.ts rename to packages/agent/packages/agent-contracts/src/dismissal-reasons.test.ts diff --git a/products/desktop/packages/shared/src/dismissal-reasons.ts b/packages/agent/packages/agent-contracts/src/dismissal-reasons.ts similarity index 100% rename from products/desktop/packages/shared/src/dismissal-reasons.ts rename to packages/agent/packages/agent-contracts/src/dismissal-reasons.ts diff --git a/products/desktop/packages/shared/src/domain-types.test.ts b/packages/agent/packages/agent-contracts/src/domain-types.test.ts similarity index 100% rename from products/desktop/packages/shared/src/domain-types.test.ts rename to packages/agent/packages/agent-contracts/src/domain-types.test.ts diff --git a/packages/agent/packages/agent-contracts/src/domain-types.ts b/packages/agent/packages/agent-contracts/src/domain-types.ts new file mode 100644 index 000000000000..32009619ec85 --- /dev/null +++ b/packages/agent/packages/agent-contracts/src/domain-types.ts @@ -0,0 +1,1221 @@ +import { z } from "zod"; +import type { Adapter } from "./adapter"; +import type { AgentRuntime } from "./agent-runtime"; +import type { ReportStateReason } from "./dismissal-reasons"; +import { REASONING_EFFORT_LABELS } from "./model-catalog.generated"; +import type { StoredLogEntry } from "./session-events"; +import type { UploadableSkillSource } from "./skills"; + +// Execution mode schema and type - shared between main and renderer +const executionModeSchema = z.enum([ + "default", + "acceptEdits", + "plan", + "bypassPermissions", + "auto", + "read-only", + "full-access", +]); + +import type { ExecutionMode } from "./exec-types"; +export type { ExecutionMode }; + +// Effort level schema and type - shared between main and renderer +export const effortLevelSchema = z.enum([ + "low", + "medium", + "high", + "xhigh", + "max", + "ultracode", +]); +export type EffortLevel = z.infer; + +/** All effort levels in ascending order of depth. */ +export const EFFORT_LEVELS = effortLevelSchema.options; + +/** + * OpenAI service tiers a Codex run can request. "flex" is the cheaper, slower + * queue; "priority" the faster one; "default" pins standard routing explicitly. + * Codex only sends a tier its model catalogue advertises for the model in use. + */ +export const serviceTierSchema = z.enum(["default", "priority", "flex"]); +export type ServiceTier = z.infer; + +export const SERVICE_TIERS = serviceTierSchema.options; + +// The annotation is the check: a depth added to `EffortLevel` but not to the catalog (or +// the reverse) fails to compile here. +export const EFFORT_LEVEL_LABELS: Record = + REASONING_EFFORT_LABELS; + +/** Claude Code docs for the tiers that need explaining. */ +export const EFFORT_LEVEL_DOCS_URLS: Partial> = { + ultracode: "https://code.claude.com/docs/en/workflows", +}; + +/** Adapter-specific docs for the fast mode toggle. */ +export const FAST_MODE_DOCS_URLS: Record = { + claude: "https://code.claude.com/docs/en/model-config", + codex: "https://developers.openai.com/codex", +}; + +export interface UserBasic { + id: number; + uuid: string; + distinct_id?: string | null; + first_name?: string; + last_name?: string; + email: string; + is_email_verified?: boolean | null; +} + +/** One row from the org members list; trimmed to what mention pickers need. */ +export interface OrganizationMemberBasic { + id: string; + user: UserBasic; +} + +export interface Task { + id: string; + task_number: number | null; + slug: string; + title: string; + title_manually_set?: boolean; + description: string; + // First characters of the description, present instead of the full body when the + // list was fetched with basic=true. Absent on the full and single-task responses. + description_preview?: string; + created_at: string; + updated_at: string; + /** + * When something last happened in the session, as opposed to `updated_at` (when the row was + * last written). The timestamp a "recent activity" sort reads. Empty on older responses. + */ + last_activity_at?: string; + created_by?: UserBasic | null; + origin_product: string; + repository?: string | null; // Format: "organization/repository" (e.g., "posthog/posthog-js") + repositories?: string[]; + github_integration?: number | null; + github_user_integration?: string | null; + json_schema?: Record | null; + signal_report?: string | null; + internal?: boolean; + /** Key of the server-side flow that created the task, e.g. `desktop_onboarding_session:`. */ + origin_key?: string | null; + runtime?: AgentRuntime; + /** Backend channel (tasks product Channel UUID) this task is owned by. */ + channel?: string | null; + latest_run?: TaskRun; +} + +export interface TaskSearchResult { + id: string; + kind: "task" | "pull_request" | "artifact" | "channel" | "canvas"; + title: string; + subtitle: string; + task_id: string | null; + task_run_id: string | null; + channel_id: string | null; + created_by?: UserBasic | null; + /** What created the containing task, e.g. "slack". */ + origin_product?: string | null; + latest_run?: TaskSearchResultRun | null; + updated_at: string; + metadata: Record; +} + +export interface TaskSearchResultRun { + id: string; + status: TaskRunStatus | null; + environment: TaskRunEnvironment | null; +} + +/** + * A backend task channel — the single channel identity: it owns the task feed, + * threads, instructions (CONTEXT.md) and filed canvases. `personal` is the + * user's private "#me" channel. `starred` is per-user. + */ +export interface ProvisionedTaskChannels { + channels: TaskChannel[]; + personal_created: boolean; + general_created: boolean; +} + +export interface TaskChannel { + id: string; + name: string; + channel_type: "public" | "personal" | "private"; + starred: boolean; + github_integration?: number | null; + repositories?: string[]; + auto_archive_after_days?: number | null; + created_at: string; + created_by?: UserBasic | null; + system_role?: "personal" | "general" | null; +} + +/** Lifecycle events a client may post into a channel's feed. */ +export type ChannelFeedMessageEvent = "context_md_building"; + +export type { + SpaceFeatureInput, + SpaceGoalDirection, + SpaceGoalInput, + SpaceGoalPeriod, + SpaceSetupInput, + SpaceSetupKind, + SpaceSetupStarted, +} from "./schemas"; + +/** + * A durable, team-visible "PostHog agent" announcement in a channel's feed — + * rendered alongside task cards (e.g. "Adam created this context"). `author` is + * the user whose action produced the row; `author_kind` says who authored it. + * `payload` carries structured event data (e.g. `{ context_name }`) so rendering + * survives renames. + */ +export interface ChannelFeedMessage { + id: string; + channel: string; + author?: UserBasic | null; + author_kind: "human" | "system" | "agent"; + event: ChannelFeedMessageEvent | string; + payload: Record; + content: string; + created_at: string; +} + +/** + * One human message in a task's thread. Thread messages never reach the agent + * unless the task author forwards one, which stamps the forwarded_* fields. + */ +export interface TaskThreadMessage { + id: string; + task: string; + /** Who authored the row; agent rows are server-emitted announcements. Absent on older backends. */ + author_kind?: "human" | "system" | "agent"; + /** Stable event key for non-human rows (e.g. "canvas_created", "turn_complete"). */ + event?: string; + /** Structured event payload; turn_complete carries `{ run_id }` so a client rendering a run's live agent turns can dedupe the durable row. */ + payload?: Record; + content: string; + created_at: string; + author?: UserBasic | null; + forwarded_to_agent_at?: string | null; + forwarded_by?: UserBasic | null; + /** Users mentioned in the row, indexed at write time. Absent on older backends. */ + mentioned_user_ids?: number[]; +} + +/** The latest resolve or reopen on a comment thread. */ +export interface TaskCommentStateEvent { + state: "resolved" | "open"; + author?: UserBasic | null; + created_at: string; +} + +/** + * One comment thread on a task, collapsed the way the activity timeline shows it + * (`/thread_messages/comment_activity/`). Mirrors `TaskCommentActivityDTO`. + */ +export interface TaskCommentThreadSummary { + id: string; + target: { id: string; type: string; name: string }; + content: string; + content_truncated: boolean; + selected_text: string | null; + author?: UserBasic | null; + created_at: string; + last_activity_at: string; + reply_count: number; + participants: UserBasic[]; + mentioned_user_ids: number[]; + resolved: boolean; + state_event: TaskCommentStateEvent | null; + latest_reply: { + author?: UserBasic | null; + content: string; + /** The excerpt is bounded, so a long reply comes back cut. */ + content_truncated: boolean; + created_at: string; + } | null; +} + +/** + * One @-mention of the current user in a task's thread, from the backend + * mentions index (`/task_mentions/`). Mirrors `TaskMentionDTO`. + */ +export interface TaskMention { + id: string; + message_id: string; + task_id: string; + task_title: string; + channel_id?: string | null; + channel_name?: string | null; + author?: UserBasic | null; + content: string; + created_at: string; +} + +/** Which signal produced an activity row; mirrors the backend `activity_kind`. */ +export type TaskActivityKind = + | "awaiting_input" + | "completed" + | "message" + | "mention" + | "thread_reply" + | "owned_item_comment" + | "created"; + +/** + * One task the current user is involved in, from the backend task-activity feed + * (`/task_activity/`). One row per task, newest activity first. Mirrors + * `TaskActivityDTO`. + */ +export interface TaskActivity { + id: string; + task_id: string; + task_title: string; + channel_id?: string | null; + channel_name?: string | null; + activity_at: string; + activity_kind: TaskActivityKind; + snippet: string; + latest_author?: UserBasic | null; + latest_message_id?: string | null; + latest_comment_id?: string | null; + latest_comment_scope?: string | null; + latest_comment_item_id?: string | null; + is_unread: boolean; +} + +export interface TaskActivityPage { + results: TaskActivity[]; + /** Unread tasks across the whole feed, not just this page. Backs the sidebar badge. */ + unread_count: number; + next_before?: string | null; + next_before_id?: string | null; +} + +export interface TaskActivityReadMarker { + task_id: string; + seen_before: string; + activity_id?: string; +} + +export interface TaskActivityMarkReadResult { + marked_read: number; + unread_count: number; +} + +export type TaskRunStatus = + | "not_started" + | "queued" + | "in_progress" + | "completed" + | "failed" + | "cancelled"; + +export type TaskRunEnvironment = "local" | "cloud"; + +const optionalField = ( + field: T, +): z.ZodCatch> => field.optional().catch(undefined); + +const pendingFollowupMessageSchema = z.object({ + id: z.string(), + content: z.string(), + ts: z.string().optional(), +}); + +export type PendingFollowupMessage = z.infer< + typeof pendingFollowupMessageSchema +>; + +export function readPendingFollowupMessages( + state: Record | undefined, +): PendingFollowupMessage[] { + const parsed = z + .array(pendingFollowupMessageSchema) + .safeParse(state?.pending_followup_messages); + return parsed.success ? parsed.data : []; +} + +/** + * One skills-store skill the sandbox agent lists as a local skill. The task + * worker resolves the list into run state; the agent renders a pointer + * SKILL.md per entry and fetches the body over MCP only when it is invoked. + */ +const storeSkillStubSchema = z.object({ + name: z.string(), + description: z.string(), + version: z.number(), +}); + +export type StoreSkillStub = z.infer; + +const taskRunStateFields = { + ai_agent_name: optionalField(z.string()), + ai_stage: optionalField(z.string()), + auto_publish: optionalField(z.boolean()), + benjamin_version: optionalField(z.string()), + initial_permission_mode: optionalField(executionModeSchema), + initial_prompt_override: optionalField(z.string()), + pending_followup_messages: optionalField( + z.array(pendingFollowupMessageSchema), + ), + pending_user_artifact_ids: optionalField(z.array(z.string())), + pending_user_message: optionalField(z.string()), + pending_user_message_id: optionalField(z.string()), + prewarmed: optionalField(z.boolean()), + reasoning_effort: optionalField( + z.union([effortLevelSchema, z.enum(["off", "minimal"])]), + ), + resume_from_run_id: optionalField(z.string()), + sandbox_environment_id: optionalField(z.string()), + slack_artifact_delivery: optionalField( + z.enum(["none", "message", "canvas_file"]), + ), + slack_chart_delivery: optionalField(z.boolean()), + slack_notified_pr_url: optionalField(z.string()), + slack_thread_url: optionalField(z.string()), + snapshot_kind: optionalField(z.string()), + store_skills: optionalField(z.array(storeSkillStubSchema)), + token_usage: optionalField(z.record(z.string(), z.unknown())), +} satisfies z.ZodRawShape; + +export const taskRunStateSchema = z.looseObject(taskRunStateFields).catch({}); + +export type TaskRunState = z.infer; +export type TaskRunStateField = keyof typeof taskRunStateFields; + +export type ArtifactType = + | "plan" + | "context" + | "reference" + | "output" + | "artifact" + | "user_attachment" + | "skill_bundle"; + +export type ArtifactSource = + | "agent_output" + | "user_attachment" + | "posthog_code_skill" + | "posthog_object"; + +export interface SkillBundleArtifactMetadata { + skill_name: string; + skill_source: UploadableSkillSource; + content_sha256: string; + bundle_format: "zip"; + schema_version: number; +} + +export interface PostHogObjectArtifactMetadata { + reference_type: "posthog_object"; + object_kind: string; + object_id: string; + source_message_ids: string[]; + occurrence_count: number; +} + +export type TaskRunArtifactMetadata = + | SkillBundleArtifactMetadata + | PostHogObjectArtifactMetadata; + +export function isSkillBundleArtifactMetadata( + metadata: TaskRunArtifactMetadata | undefined, +): metadata is SkillBundleArtifactMetadata { + return metadata !== undefined && "skill_name" in metadata; +} + +export interface TaskRunArtifact { + id?: string; + name: string; + type: ArtifactType; + source?: ArtifactSource; + size?: number; + content_type?: string; + metadata?: TaskRunArtifactMetadata; + storage_path?: string; + uploaded_at?: string; + uploaded_by?: "agent" | "user"; + uploaded_by_user_id?: number; + dismissed_at?: string | null; +} + +export const TERMINAL_STATUSES = ["completed", "failed", "cancelled"] as const; + +export function isTerminalStatus( + status: TaskRunStatus | string | null | undefined, +): boolean { + return ( + status !== null && + status !== undefined && + TERMINAL_STATUSES.includes(status as (typeof TERMINAL_STATUSES)[number]) + ); +} + +export function isContentlessTask(task: { + title?: string | null; + description?: string | null; +}): boolean { + return !task.title?.trim() && !task.description?.trim(); +} + +export interface TaskRun { + id: string; + task: string; // Task ID + team: number; + branch: string | null; + runtime_adapter?: Adapter | null; + model?: string | null; + reasoning_effort?: EffortLevel | null; + stage?: string | null; // Current stage (e.g., 'research', 'plan', 'build') + environment?: TaskRunEnvironment; + status: TaskRunStatus; + log_url: string; + error_message: string | null; + output: Record | null; // Structured output (PR URL, commit SHA, etc.) + state: TaskRunState; + artifacts?: TaskRunArtifact[]; + created_at: string; + updated_at: string; + completed_at: string | null; +} + +export type NetworkAccessLevel = "trusted" | "full" | "custom"; + +export interface SandboxEnvironment { + id: string; + name: string; + network_access_level: NetworkAccessLevel; + allowed_domains: string[]; + include_default_domains: boolean; + repositories: string[]; + has_environment_variables: boolean; + /** + * Names of the variables that are set. Values are write-only and never returned. + * Optional because desktop releases are not orchestrated with backend deploys, so a + * client can reach an API that predates this field. + */ + environment_variable_keys?: string[]; + private: boolean; + effective_domains: string[]; + custom_image_id: string | null; + custom_image_name: string | null; + custom_image_status: string | null; + created_by?: UserBasic | null; + created_at: string; + updated_at: string; +} + +export interface SandboxEnvironmentInput { + name: string; + network_access_level: NetworkAccessLevel; + allowed_domains?: string[]; + include_default_domains?: boolean; + repositories?: string[]; + environment_variables?: Record; + private?: boolean; + custom_image_id?: string | null; +} + +export type SandboxCustomImageStatus = + | "draft" + | "scanning" + | "scan_failed" + | "building" + | "build_failed" + | "ready" + | "archived"; + +export function isImageBuildInProgress( + status: SandboxCustomImageStatus, +): boolean { + return status === "scanning" || status === "building"; +} + +export function isImageBuildFailed(status: SandboxCustomImageStatus): boolean { + return status === "scan_failed" || status === "build_failed"; +} + +export interface SandboxCustomImageScanFinding { + severity: string; + detail: string; +} + +export interface SandboxCustomImage { + id: string; + name: string; + description: string; + status: SandboxCustomImageStatus; + version: number; + modal_image_name: string; + repository: string; + private: boolean; + spec: Record; + spec_yaml: string; + scan_result: { + passed?: boolean; + findings?: SandboxCustomImageScanFinding[]; + }; + error: string; + build_log: string; + builder_task_id: string | null; + created_by?: UserBasic | null; + created_at: string; + updated_at: string; +} + +interface CloudTaskUpdateBase { + taskId: string; + runId: string; +} + +export interface CloudTaskLogsUpdate extends CloudTaskUpdateBase { + kind: "logs"; + newEntries: StoredLogEntry[]; + totalEntryCount: number; +} + +export interface CloudTaskStatusUpdate extends CloudTaskUpdateBase { + kind: "status"; + status?: TaskRunStatus; + stage?: string | null; + output?: Record | null; + errorMessage?: string | null; + branch?: string | null; + sandboxAlive?: boolean | null; +} + +export interface CloudTaskSnapshotUpdate extends CloudTaskUpdateBase { + kind: "snapshot"; + newEntries: StoredLogEntry[]; + totalEntryCount: number; + /** Chain index of newEntries[0] when the snapshot is a tail window rather + * than the full history; older entries page in on demand. Absent means + * the snapshot starts at the head of the chain. */ + windowStart?: number; + rebuilt?: boolean; + status?: TaskRunStatus; + stage?: string | null; + output?: Record | null; + errorMessage?: string | null; + branch?: string | null; + sandboxAlive?: boolean | null; +} + +export interface CloudTaskErrorUpdate extends CloudTaskUpdateBase { + kind: "error"; + errorTitle: string; + errorMessage: string; + retryable: boolean; +} + +export interface CloudPermissionOption { + kind: string; + optionId: string; + name: string; + _meta?: Record; +} + +export interface CloudTaskPermissionRequestUpdate extends CloudTaskUpdateBase { + kind: "permission_request"; + requestId: string; + toolCall: { + toolCallId: string; + title: string; + kind: string; + content?: unknown[]; + rawInput?: Record; + _meta?: Record; + }; + options: CloudPermissionOption[]; +} + +export type CloudTaskUpdatePayload = + | CloudTaskLogsUpdate + | CloudTaskStatusUpdate + | CloudTaskSnapshotUpdate + | CloudTaskErrorUpdate + | CloudTaskPermissionRequestUpdate; + +// Mention types for editors +type MentionType = + | "file" + | "folder" + | "error" + | "experiment" + | "insight" + | "feature_flag" + | "generic"; + +export interface MentionItem { + // File items + path?: string; + name?: string; + kind?: "file" | "directory"; + // URL items + url?: string; + type?: MentionType; + label?: string; + id?: string; + urlId?: string; +} + +// Git file status types +import type { GitFileStatus } from "./git-types"; +export type { GitFileStatus }; + +export type GitBusyOperation = "rebase" | "merge" | "cherry-pick" | "revert"; + +export type GitBusyState = + | { busy: false } + | { busy: true; operation: GitBusyOperation }; + +export interface ChangedFile { + path: string; + status: GitFileStatus; + originalPath?: string; // For renames: the old path + linesAdded?: number; + linesRemoved?: number; + staged?: boolean; + patch?: string; // Unified diff patch from GitHub API + sha?: string; +} + +// External apps detection types +export type ExternalAppType = + | "editor" + | "terminal" + | "file-manager" + | "git-client"; + +export interface DetectedApplication { + id: string; // "vscode", "cursor", "iterm" + name: string; // "Visual Studio Code" + type: ExternalAppType; + path: string; // "/Applications/Visual Studio Code.app" + command: string; // Launch command + icon?: string; // Base64 data URL +} + +import type { SignalReportStatus } from "./signal-types"; +export type { SignalReportStatus }; + +/** Actionability priority from the researched report (actionability judgment artefact). */ +export type SignalReportPriority = "P0" | "P1" | "P2" | "P3" | "P4"; + +/** Latest known state of a report's implementation PR. */ +export type SignalReportPrState = + | "unknown" + | "draft" + | "open" + | "closed" + | "merged"; + +/** Actionability choice from the researched report. */ +export type SignalReportActionability = + | "immediately_actionable" + | "requires_human_input" + | "not_actionable"; + +/** + * One or more `SignalReportStatus` values joined by commas, e.g. `potential` or `potential,candidate,ready`. + * This looks horrendous but it's superb, trust me bro. + */ +export type CommaSeparatedSignalReportStatuses = + | SignalReportStatus + | `${SignalReportStatus},${SignalReportStatus}` + | `${SignalReportStatus},${SignalReportStatus},${SignalReportStatus}` + | `${SignalReportStatus},${SignalReportStatus},${SignalReportStatus},${SignalReportStatus}` + | `${SignalReportStatus},${SignalReportStatus},${SignalReportStatus},${SignalReportStatus},${SignalReportStatus}`; + +export type SignalReportChartSize = "small" | "medium" | "large"; + +/** + * One chart attached to a report (`SignalReport.charts` on the backend serializer). + * `query` is stored unparsed; the backend only guarantees `kind` is one of + * InsightVizNode, DataVisualizationNode, or SavedInsightNode. + */ +export interface SignalReportChart { + chart_id: string; + title: string; + query: unknown; + caption?: string | null; + size?: SignalReportChartSize | null; +} + +export interface SignalReport { + id: string; + title: string | null; + summary: string | null; + status: SignalReportStatus; + total_weight: number; + signal_count: number; + signals_at_run?: number; + created_at: string; + updated_at: string; + artefact_count: number; + collapsed_note_count?: number; + /** P0–P4 from priority judgment when the report is researched */ + priority?: SignalReportPriority | null; + /** Actionability choice from the actionability judgment artefact. */ + actionability?: SignalReportActionability | null; + /** Whether the issue appears already fixed, from the actionability judgment artefact. */ + already_addressed?: boolean | null; + /** Reason code from the latest dismiss or resolve artefact. */ + dismissal_reason?: ReportStateReason | null; + /** Free-form note captured alongside the dismissal reason. */ + dismissal_note?: string | null; + /** Whether the current user is a suggested reviewer for this report (server-annotated). */ + is_suggested_reviewer?: boolean; + /** Distinct source products contributing signals to this report. */ + source_products?: string[]; + /** PR URL from the latest implementation task run, if available. */ + implementation_pr_url?: string | null; + work_state?: "unclaimed" | "working" | "in_review" | "done"; + assignee?: { + kind: "user" | "task" | "agent" | "system"; + task_id: string | null; + } | null; + /** + * Whether that PR merged (GitHub webhook). A merged PR is history, not work + * in flight: a report can outlive its fix when evidence keeps arriving, and + * its old PR must not read as reviewable or continuable. + */ + implementation_pr_merged?: boolean; + /** Latest known state of that PR, per the GitHub webhook. */ + implementation_pr_state?: SignalReportPrState | null; + /** Link to the tracker issue self-driving opened for this report's PR, when the project tracks issues. */ + tracker_issue_url?: string | null; + /** How that issue reads in its provider, for example '#12' or 'ENG-123'. */ + tracker_issue_reference?: string | null; + /** Why the tracker issue could not be opened, for a project that wants one. Null when it exists. */ + tracker_issue_error?: string | null; + /** Charts the report shows, placed by `[label](chart:)` links in the summary. */ + charts?: SignalReportChart[]; + /** The report's PR refund, when one exists (one refund per report, ever). */ + refund?: SignalReportRefund | null; + /** Marks reports that were never billable ("Free"), so there is nothing to refund. */ + billing_exempt_reason?: string | null; + /** Backend-owned refund eligibility: why a refund would be rejected right now, null when it would be accepted. */ + refund_ineligibility_reason?: string | null; + /** The space (task channel) this report is assigned to, or null when unassigned. The general view lists every report regardless of this value. */ + channel_id?: string | null; +} + +export type SignalReportRefundReason = + | "pr_incorrect" + | "pr_not_useful" + | "duplicate" + | "other"; + +export interface SignalReportRefund { + id: string; + reason: SignalReportRefundReason; + note?: string | null; + created_at?: string; +} + +export interface SignalReportArtefactContent { + session_id: string; + start_time: string; + end_time: string; + distinct_id: string; + content: string; + distance_to_centroid: number | null; +} + +/** + * Fields shared by every artefact row. `created_by` / `task_id` carry attribution: + * at most one is set — `created_by` for user writes, `task_id` for agent writes, + * neither for system (pipeline) writes. + */ +interface SignalReportArtefactBase { + id: string; + created_at: string; + updated_at?: string | null; + /** User the artefact is attributed to, when a user produced it. */ + created_by?: UserBasic | null; + /** Task the artefact is attributed to, when an agent produced it. */ + task_id?: string | null; + /** + * True when the row's content did not match its type's expected shape and was + * normalized to a plain text preview instead — the entry still renders rather + * than silently vanishing from the activity log. + */ + degraded?: boolean; +} + +export interface SignalReportArtefact extends SignalReportArtefactBase { + type: string; + content: SignalReportArtefactContent; +} + +/** Artefact with `type: "priority_judgment"` — priority assessment from the agentic report. */ +export interface PriorityJudgmentArtefact extends SignalReportArtefactBase { + type: "priority_judgment"; + content: PriorityJudgmentContent; +} + +export interface PriorityJudgmentContent { + explanation: string; + priority: SignalReportPriority; +} + +/** Artefact with `type: "actionability_judgment"` — actionability assessment from the agentic report. */ +export interface ActionabilityJudgmentArtefact + extends SignalReportArtefactBase { + type: "actionability_judgment"; + content: ActionabilityJudgmentContent; +} + +export interface ActionabilityJudgmentContent { + explanation: string; + actionability: SignalReportActionability; + already_addressed: boolean; +} + +/** Artefact with `type: "safety_judgment"` — the prompt-injection safety verdict for the report. */ +export interface SafetyJudgmentArtefact extends SignalReportArtefactBase { + type: "safety_judgment"; + content: SafetyJudgmentContent; +} + +export interface SafetyJudgmentContent { + /** True when the report's signals are judged safe to act on. */ + choice: boolean; + /** Why the report was judged unsafe; null when safe. */ + explanation: string | null; +} + +/** Artefact with `type: "signal_finding"` — per-signal research finding from the agentic report. */ +export interface SignalFindingArtefact extends SignalReportArtefactBase { + type: "signal_finding"; + content: SignalFindingContent; +} + +export interface SignalFindingContent { + signal_id: string; + relevant_code_paths: string[]; + relevant_commit_hashes: Record; + data_queried: string; + verified: boolean; +} + +/** Artefact with `type: "repo_selection"` - selected repository for the report run. */ +export interface RepoSelectionArtefact extends SignalReportArtefactBase { + type: "repo_selection"; + content: RepoSelectionContent; +} + +export interface RepoSelectionContent { + repository: string | null; + reason: string; +} + +/** Artefact with `type: "suggested_reviewers"` — content is an enriched reviewer list. */ +export interface SuggestedReviewersArtefact extends SignalReportArtefactBase { + type: "suggested_reviewers"; + content: SuggestedReviewer[]; +} + +/** Artefact with `type: "dismissal"` — captures the user's rationale when suppressing or resolving a report. */ +export interface DismissalArtefact extends SignalReportArtefactBase { + type: "dismissal"; + content: DismissalContent; +} + +export interface DismissalContent { + reason: ReportStateReason; + /** Optional free-form detail provided alongside the reason. */ + note: string; + /** PostHog numeric user id of the dismisser, when available. */ + user_id: number | null; + /** PostHog UUID of the dismisser, when available. */ + user_uuid: string | null; +} + +// ── Log artefacts ──────────────────────────────────────────────────────────── +// Append-but-deletable "work log" entries that accumulate on a report. Distinct +// from the status artefacts above (judgments, reviewers) which are latest-wins. +// Content shapes mirror products/signals/backend/artefact_schemas.py. + +/** Artefact with `type: "code_reference"` — a contiguous span of source lines. */ +export interface CodeReferenceArtefact extends SignalReportArtefactBase { + type: "code_reference"; + content: CodeReferenceContent; +} + +export interface CodeReferenceContent { + file_path: string; + start_line: number; + end_line: number; + contents: string; + relevance_note: string; +} + +/** Artefact with `type: "line_reference"` — a single source line callout (a point). */ +export interface LineReferenceArtefact extends SignalReportArtefactBase { + type: "line_reference"; + content: LineReferenceContent; +} + +export interface LineReferenceContent { + file_path: string; + line: number; + note: string; + /** The exact source text of the referenced line, if available. */ + contents?: string | null; +} + +/** Artefact with `type: "commit"` — one commit pushed in relation to the report. */ +export interface CommitArtefact extends SignalReportArtefactBase { + type: "commit"; + content: CommitContent; +} + +export interface CommitContent { + repository: string; + branch: string; + commit_sha: string; + message: string; + note?: string | null; +} + +/** Artefact with `type: "task_run"` — a reference to a `tasks.Task` run for the report. */ +export interface TaskRunArtefact extends SignalReportArtefactBase { + type: "task_run"; + content: TaskRunArtefactContent; +} + +export interface TaskRunArtefactContent { + task_id: string; + run_id?: string | null; + /** + * Product that ran the task — `signals` for the built-in pipeline, or a custom agent's + * product identifier (mirrors backend TaskRunArtefact). + */ + product: string; + /** + * Task type within the product — e.g. `research` / `implementation` / `repo_selection` for the + * signals pipeline, or a custom agent's type identifier. + */ + type: string; +} + +/** Artefact with `type: "note"` — a free-form note authored by an agent or by code. */ +export interface NoteArtefact extends SignalReportArtefactBase { + type: "note"; + content: NoteContent; +} + +export interface NoteContent { + note: string; + author?: string | null; +} + +/** Response from the `commit` artefact diff endpoint — the commit rendered against its parent. */ +export interface CommitDiffResponse { + /** Unified diff (patch) text introduced by the commit. */ + diff: string; + /** True when the diff was too large to return in full and has been truncated. */ + truncated: boolean; +} + +export interface SuggestedReviewerCommit { + sha: string; + url: string; + reason: string; +} + +export interface SuggestedReviewerUser { + id: number; + uuid: string; + email: string; + first_name: string; + last_name: string; +} + +import type { AvailableSuggestedReviewer } from "./inbox-types"; +export type { AvailableSuggestedReviewer }; + +export interface SuggestedReviewer { + /** Null for a reviewer with no linked GitHub account — `user` identifies them instead. */ + github_login: string | null; + /** Null on entries written before reviewers carried one; `user` still resolves from the login. */ + user_uuid?: string | null; + github_name: string | null; + relevant_commits: SuggestedReviewerCommit[]; + user: SuggestedReviewerUser | null; + reason?: string | null; + source_skill?: string | null; + source_label?: string; + explanation?: string | null; +} + +export interface SuggestedReviewerWriteEntry { + github_login?: string; + user_uuid?: string; + github_name?: string; +} + +interface MatchedSignalMetadata { + parent_signal_id: string; + match_query: string; + reason: string; +} + +interface NoMatchSignalMetadata { + reason: string; + rejected_signal_ids: string[]; +} + +export type SignalMatchMetadata = MatchedSignalMetadata | NoMatchSignalMetadata; + +export interface Signal { + signal_id: string; + content: string; + source_product: string; + source_type: string; + source_id: string; + weight: number; + timestamp: string; + extra: Record; + match_metadata?: SignalMatchMetadata | null; +} + +export interface SignalReportsResponse { + results: SignalReport[]; + count: number; +} + +export interface SignalProcessingStateResponse { + paused_until: string | null; +} + +export interface AvailableSuggestedReviewersResponse { + results: AvailableSuggestedReviewer[]; + count: number; +} + +export interface SignalReportSignalsResponse { + report: SignalReport | null; + signals: Signal[]; +} + +/** Any artefact returned by the report `artefacts/` endpoint, discriminated on `type`. */ +export type AnySignalReportArtefact = + | SignalReportArtefact + | PriorityJudgmentArtefact + | ActionabilityJudgmentArtefact + | SafetyJudgmentArtefact + | SignalFindingArtefact + | RepoSelectionArtefact + | SuggestedReviewersArtefact + | DismissalArtefact + | CodeReferenceArtefact + | LineReferenceArtefact + | CommitArtefact + | TaskRunArtefact + | NoteArtefact; + +export interface SignalReportArtefactsResponse { + results: AnySignalReportArtefact[]; + count: number; + unavailableReason?: + | "forbidden" + | "not_found" + | "invalid_payload" + | "request_failed"; +} + +import type { SignalReportOrderingField } from "./signal-types"; +export type { SignalReportOrderingField }; + +export interface SignalReportsQueryParams { + unread?: boolean; + search?: string; + limit?: number; + offset?: number; + status?: CommaSeparatedSignalReportStatuses | string; + /** + * Comma-separated sort keys (prefix `-` for descending). `status` is semantic stage + * rank (not lexicographic `status` column order). Also: `signal_count`, `total_weight`, + * `created_at`, `updated_at`, `id`. Example: `status,-total_weight`. + */ + ordering?: string; + /** Comma-separated source products — only returns reports with signals from these sources. */ + source_product?: string; + /** Comma-separated PostHog user UUIDs — only returns reports with these suggested reviewers. */ + suggested_reviewers?: string; + /** Comma-separated `P0`–`P4` priorities — only returns reports with one of these priorities. */ + priority?: string; + /** Comma-separated actionability choices. Only returns reports with one of these latest judgments. */ + actionability?: string; + /** Return the filtered total without fetching or enriching report rows. */ + count_only?: boolean; + /** + * Filter by whether a shipped implementation pull request exists. `true` keeps only PR + * reports, `false` only non-PR reports. + */ + has_implementation_pr?: boolean; + /** A space (task channel) UUID — only returns reports assigned to that space. Omit for the general view, which returns every report. */ + channel_id?: string; +} + +export interface SignalTeamConfig { + id: string; + default_autostart_priority: SignalReportPriority; + /** Team-wide default `channel_id|#channel-name` target for inbox notifications. `null` = no team default. */ + default_slack_notification_channel?: string | null; + autostart_base_branches?: Record | null; + /** Daily cap on new reports reaching the inbox, counted per project-timezone day. `null` = unlimited. */ + max_reports_per_day?: number | null; + /** Reports that first became visible today. `0` when there is no cap. Read-only. */ + reports_generated_today?: number; + /** Whether the cap is reached, pausing new reports until local midnight. `false` when there is no cap. Read-only. */ + daily_report_limit_reached?: boolean; + created_at: string; + updated_at: string; +} + +export interface SignalUserAutonomyConfig { + id?: string; + autostart_priority: SignalReportPriority | null; + /** ID of the team-scoped Slack `Integration` row used to deliver inbox-item notifications. */ + slack_notification_integration_id?: number | null; + /** `channel_id|#channel-name` target — same convention used by Insight Alerts. */ + slack_notification_channel?: string | null; + /** Minimum priority that triggers a notification (P0 highest). `null` = every priority. */ + slack_notification_min_priority?: SignalReportPriority | null; + created_at?: string; + updated_at?: string; +} + +export interface SlackChannelOption { + id: string; + name: string; + is_private: boolean; + is_member: boolean; + is_ext_shared: boolean; + is_private_without_access: boolean; +} + +export interface SlackChannelsResponse { + channels: SlackChannelOption[]; + lastRefreshedAt?: string; + has_more?: boolean; +} + +export interface SlackChannelsQueryParams { + search?: string; + limit?: number; + offset?: number; + channelId?: string; +} diff --git a/products/desktop/packages/shared/src/enrichment.ts b/packages/agent/packages/agent-contracts/src/enrichment.ts similarity index 94% rename from products/desktop/packages/shared/src/enrichment.ts rename to packages/agent/packages/agent-contracts/src/enrichment.ts index 660a6c197a8d..4c05df54de47 100644 --- a/products/desktop/packages/shared/src/enrichment.ts +++ b/packages/agent/packages/agent-contracts/src/enrichment.ts @@ -1,6 +1,6 @@ // PostHog enrichment boundary data types. These are the serialized output of the // (workspace-server) enrichment scan, consumed by the renderer to render flag/event -// annotations. They live in @posthog/shared so both the renderer (ui) and the +// annotations. They live in @posthog/agent-contracts so both the renderer (ui) and the // enricher/ws-server can import them without crossing layer boundaries. // @posthog/enricher re-exports these for its own consumers. diff --git a/products/desktop/packages/shared/src/errors.test.ts b/packages/agent/packages/agent-contracts/src/errors.test.ts similarity index 100% rename from products/desktop/packages/shared/src/errors.test.ts rename to packages/agent/packages/agent-contracts/src/errors.test.ts diff --git a/products/desktop/packages/shared/src/errors.ts b/packages/agent/packages/agent-contracts/src/errors.ts similarity index 100% rename from products/desktop/packages/shared/src/errors.ts rename to packages/agent/packages/agent-contracts/src/errors.ts diff --git a/products/desktop/packages/shared/src/exec-types.ts b/packages/agent/packages/agent-contracts/src/exec-types.ts similarity index 100% rename from products/desktop/packages/shared/src/exec-types.ts rename to packages/agent/packages/agent-contracts/src/exec-types.ts diff --git a/products/desktop/packages/shared/src/execution-modes.test.ts b/packages/agent/packages/agent-contracts/src/execution-modes.test.ts similarity index 100% rename from products/desktop/packages/shared/src/execution-modes.test.ts rename to packages/agent/packages/agent-contracts/src/execution-modes.test.ts diff --git a/products/desktop/packages/shared/src/execution-modes.ts b/packages/agent/packages/agent-contracts/src/execution-modes.ts similarity index 100% rename from products/desktop/packages/shared/src/execution-modes.ts rename to packages/agent/packages/agent-contracts/src/execution-modes.ts diff --git a/products/desktop/packages/shared/src/git-types.ts b/packages/agent/packages/agent-contracts/src/git-types.ts similarity index 100% rename from products/desktop/packages/shared/src/git-types.ts rename to packages/agent/packages/agent-contracts/src/git-types.ts diff --git a/products/desktop/packages/shared/src/image.test.ts b/packages/agent/packages/agent-contracts/src/image.test.ts similarity index 100% rename from products/desktop/packages/shared/src/image.test.ts rename to packages/agent/packages/agent-contracts/src/image.test.ts diff --git a/products/desktop/packages/shared/src/image.ts b/packages/agent/packages/agent-contracts/src/image.ts similarity index 100% rename from products/desktop/packages/shared/src/image.ts rename to packages/agent/packages/agent-contracts/src/image.ts diff --git a/products/desktop/packages/shared/src/inbox-types.test.ts b/packages/agent/packages/agent-contracts/src/inbox-types.test.ts similarity index 100% rename from products/desktop/packages/shared/src/inbox-types.test.ts rename to packages/agent/packages/agent-contracts/src/inbox-types.test.ts diff --git a/products/desktop/packages/shared/src/inbox-types.ts b/packages/agent/packages/agent-contracts/src/inbox-types.ts similarity index 100% rename from products/desktop/packages/shared/src/inbox-types.ts rename to packages/agent/packages/agent-contracts/src/inbox-types.ts diff --git a/packages/agent/packages/agent-contracts/src/index.ts b/packages/agent/packages/agent-contracts/src/index.ts new file mode 100644 index 000000000000..435b0df035b8 --- /dev/null +++ b/packages/agent/packages/agent-contracts/src/index.ts @@ -0,0 +1,299 @@ +export * from "./adapter"; +export { + buildActionUrl, + openAgentActionInput, + type ShowActionButton, + showActionSchema, + splitShowAction, +} from "./agent-actions"; +export type { + AgentContent, + AgentConversationEvent, + AgentToolCall, + AgentToolCallContent, + AgentToolCallContentBlock, + AgentToolCallLocation, + AgentToolCallStatus, + AgentToolKind, + AgentTurnUsage, +} from "./agent-conversation"; +export * from "./agent-runtime"; +export type { TaskRunUpdate } from "./api-http-client"; +export { + API_DOWNLOAD_TIMEOUT_MS, + API_TRANSFER_TIMEOUT_MS, + PostHogHttpClient, + PostHogHttpError, + transferTimeoutMs, +} from "./api-http-client"; +export { + type BackoffOptions, + getBackoffDelay, + sleepWithBackoff, +} from "./backoff"; +export * from "./bedrock-gateway"; +export { isBinaryFile } from "./binary"; +export { + boundPersistedMcpResult, + MAX_PERSISTED_MCP_RESULT_BYTES, + omitNullCallToolResultFields, +} from "./call-tool-result"; +export { + deserializeCloudPrompt, + promptBlocksToText, + serializeCloudPrompt, +} from "./cloud-prompt"; +export { + adapterForModelId, + buildCloudTaskConfigOptions, + buildProviderModelGroups, + type CloudTaskConfigOption, + type CloudTaskConfigSelectGroup, + type CloudTaskConfigSelectOption, + compareModelsForPicker, + DEFAULT_CODEX_MODEL, + DEFAULT_GATEWAY_MODEL, + formatGatewayModelName, + formatModelId, + type GatewayModel, + getClaudeModelRecency, + getCloudTaskGatewayUrl, + getProviderName, + isAnthropicModel, + isAnthropicModelId, + isBasetenModel, + isCloudflareModel, + isCloudflareModelId, + isDeepseekModelId, + isModalModel, + isModalModelId, + isOpenAIModel, + normalizeGatewayModelsResponse, + pickAllowedModel, +} from "./cloud-task-models"; +export { + type CustomCloud, + configureCustomCloud, + customCloudSchema, + getCustomCloud, + isCustomCloudHost, + normalizeCustomCloud, +} from "./custom-cloud"; +export { + DISMISSAL_REASON_OPTIONS, + type DismissalReasonOptionValue, + dismissalReasonLabel, + isDismissalReasonSnooze, + RESOLVE_REASON_OPTIONS, + type ReportStateReason, + type ResolveReasonOptionValue, +} from "./dismissal-reasons"; +export { + type ArtifactSource, + type ArtifactType, + type CloudPermissionOption, + type CloudTaskPermissionRequestUpdate, + type CloudTaskUpdatePayload, + isSkillBundleArtifactMetadata, + isTerminalStatus, + type PendingFollowupMessage, + type StoreSkillStub, + type Task, + type TaskRun, + type TaskRunArtifact, + type TaskRunArtifactMetadata, + type TaskRunEnvironment, + type TaskRunState, + type TaskRunStateField, + type TaskRunStatus, + TERMINAL_STATUSES, + taskRunStateSchema, +} from "./domain-types"; +export * from "./enrichment"; +export { + classifyGatewayLimitError, + classifyPromptFailure, + type GatewayLimitCause, + getErrorMessage, + isAuthError, + isFatalSessionError, + isNotAuthenticatedError, + isRateLimitError, + isTransientUpstreamError, + isTurnEndedWithoutResponseError, + NotAuthenticatedError, + type PromptFailure, + type PromptFailureKind, + serializeError, +} from "./errors"; +export type { ExecutionMode } from "./exec-types"; +export { + CODEX_MODE_PRESETS, + type CodexModePreset, + resolveCloudInitialPermissionMode, +} from "./execution-modes"; +export { + ALLOWED_IMAGE_MIME_TYPES, + buildImageDataUrl, + estimateBase64Bytes, + getImageMimeType, + IMAGE_MIME_TYPES, + isAllowedImageMimeType, + isClaudeImageFile, + isClaudeImageMimeType, + isGifFile, + isImageFile, + isRasterImageFile, + MAX_CLAUDE_IMAGE_BYTES, + MAX_IMAGE_BASE64_LENGTH, + parseImageDataUrl, +} from "./image"; +export type { + AvailableSuggestedReviewer, + SignalRecordKind, + SourceProduct, + SourceType, + ToggleableSourceProduct, +} from "./inbox-types"; +export { + EXTERNAL_INBOX_SOURCE_BY_PRODUCT, + EXTERNAL_INBOX_SOURCES, + filterInboxSourceOptions, + sourceNeedsFullRefresh, +} from "./inbox-types"; +export type { + AcpMcpServer, + CloudMcpServerRelayDesignation, + LocalMcpServerDescriptor, + LocalMcpServerScope, + LocalMcpTransport, + McpServerConnection, +} from "./local-mcp-domain"; +export { toAcpMcpServers } from "./local-mcp-domain"; +export { + MCP_TOOL_PERMISSION_OPTIONS, + type McpToolApprovalState, + type McpToolPermissionDecision, + type McpToolPermissionRequest, + type McpToolPolicy, +} from "./mcp-tool-policy-domain"; +export { + isOfferedModel, + isRetiredModel, + supports1MContext, + supportsFastMode, +} from "./model-catalog"; +export { + customModelMeta, + DEFAULT_OPTION_META_KEY, + defaultEligibleModel, + isCustomModelOption, + isDefaultSelectOption, + isRestrictedModelOption, + modelHarnessMeta, + OPTION_DOCS_URL_META_KEY, + restrictedModelMeta, + selectOptionDocsUrl, + selectOptionHarness, +} from "./models"; +export { + DEV_CALLBACK_PORT, + DEV_REDIRECT_URI, + getOauthClientIdFromRegion, + OAUTH_SCOPE_VERSION, + OAUTH_SCOPES, +} from "./oauth"; +export { + type AgentRunState, + agentRunStateSchema, + type PiSubagentToolCall, + type PiSubagentToolDetails, + type PiWorkflowToolDetails, + piSubagentToolCallSchema, + piSubagentToolDetailsSchema, + piWorkflowToolDetailsSchema, + type WorkflowAgentState, + workflowAgentStateSchema, +} from "./orchestration"; +export { + createPiToolCallRecord, + formatMcpToolLabel, + formatPiMcpToolName, + isPiToolName, + PI_TOOL_KIND_BY_NAME, + type PiMcpCallDetails, + type PiToolCallInput, + type PiToolCallRecord, + type PiToolName, + parsePiMcpCallDetails, + readPiMcpCallDetails, +} from "./pi-tool-call"; +export { POSTHOG_PRODUCTS, type PostHogProductId } from "./posthog-products"; +export { + buildPrOutput, + mergePrUrls, + promotePrUrl, + readPrSummaries, + readPrUrls, +} from "./pr-urls"; +export { isPrivateIpv4Octets, isPrivateIpv6Literal } from "./private-network"; +export { + type CapabilityNotch, + DEFAULT_REASONING_EFFORT, + getCapabilityLadder, + getReasoningEffortOptions, + isSupportedReasoningEffort, + type SupportedReasoningEffort, +} from "./reasoning-effort"; +export { + CLOUD_REGIONS, + type CloudRegion, + describeRegion, + REGION_LABELS, + type RegionLabel, +} from "./regions"; +export { Saga, type SagaLogger, type SagaResult } from "./saga"; +export { + type AcpMessage, + IDLE_RESUME_STOP_REASON, + IMPORTED_USER_PROMPT_META_KEY, + isIdleResumeTurnComplete, + isJsonRpcNotification, + isJsonRpcRequest, + isJsonRpcResponse, + type JsonRpcMessage, + type JsonRpcRequest, + type StoredLogEntry, + type UserShellExecuteParams, + type UserShellExecuteResult, +} from "./session-events"; +export type { + ExportedSkill, + SkillFileEntry, + SkillInfo, + SkillSource, + UploadableSkillSource, +} from "./skills"; +export { + DISABLE_MODEL_INVOCATION_METADATA_KEY, + isIgnoredSkillEntry, + isIgnoredSkillPath, + SKILL_EXISTS_MARKER, + serializeSkillMarkdown, + stripFrontmatter, +} from "./skills"; +export { leadingSlashCommand } from "./slash-commands"; +export type { PostHogAPIConfig } from "./task"; +export { + mcpToolKey, + parseMcpToolName, + posthogToolMeta, + readAgentToolName, + readMcpInstallationId, + readMcpProxyCallDetails, + readMcpToolDescriptor, + readMcpToolName, + readParentToolCallId, +} from "./tool-meta"; +export { TranscriptBoundaries } from "./transcript-neutral-messages"; +export { getCloudUrlFromRegion } from "./urls"; diff --git a/products/desktop/packages/shared/src/local-mcp-domain.ts b/packages/agent/packages/agent-contracts/src/local-mcp-domain.ts similarity index 100% rename from products/desktop/packages/shared/src/local-mcp-domain.ts rename to packages/agent/packages/agent-contracts/src/local-mcp-domain.ts diff --git a/products/desktop/packages/shared/src/mcp-tool-policy-domain.ts b/packages/agent/packages/agent-contracts/src/mcp-tool-policy-domain.ts similarity index 100% rename from products/desktop/packages/shared/src/mcp-tool-policy-domain.ts rename to packages/agent/packages/agent-contracts/src/mcp-tool-policy-domain.ts diff --git a/products/desktop/packages/shared/src/model-catalog.generated.ts b/packages/agent/packages/agent-contracts/src/model-catalog.generated.ts similarity index 100% rename from products/desktop/packages/shared/src/model-catalog.generated.ts rename to packages/agent/packages/agent-contracts/src/model-catalog.generated.ts diff --git a/products/desktop/packages/shared/src/model-catalog.test.ts b/packages/agent/packages/agent-contracts/src/model-catalog.test.ts similarity index 100% rename from products/desktop/packages/shared/src/model-catalog.test.ts rename to packages/agent/packages/agent-contracts/src/model-catalog.test.ts diff --git a/packages/agent/packages/agent-contracts/src/model-catalog.ts b/packages/agent/packages/agent-contracts/src/model-catalog.ts new file mode 100644 index 000000000000..eb9c42e653fc --- /dev/null +++ b/packages/agent/packages/agent-contracts/src/model-catalog.ts @@ -0,0 +1,146 @@ +import type { Adapter } from "./adapter"; +import { + type CatalogModel, + FALLBACK_REASONING_EFFORTS, + FAMILY_REASONING_EFFORTS, + MODELS, + PROVIDER_BY_RUNTIME_ADAPTER, + type ReasoningEffort, +} from "./model-catalog.generated"; + +export { + type CatalogModel, + COST_BASELINE_LABEL, + COST_BASELINE_MODEL, + DEFAULT_MODEL_BY_RUNTIME_ADAPTER, + MODELS, + type ModelCost, + PROVIDER_BY_RUNTIME_ADAPTER, + REASONING_EFFORTS, + type ReasoningEffort, + RUNTIME_ADAPTERS, + RUNTIME_OPTIONS, + type Runtime, + type RuntimeAdapter, + type RuntimeOption, +} from "./model-catalog.generated"; + +/** + * The form a model id is looked up under. The gateway serves some models both bare and + * provider-qualified (`openai/gpt-5.6-sol`) and a picker may hand back either, so folding + * the two together is what stops one model from having two answers. Only the provider + * prefixes the catalog knows are stripped, leaving ids that carry a slash of their own + * (`@cf/zai-org/glm-5.2`) intact. + */ +export function normalizeModelId(modelId: string): string { + const normalized = modelId.trim().toLowerCase(); + for (const provider of Object.values(PROVIDER_BY_RUNTIME_ADAPTER)) { + if (normalized.startsWith(`${provider}/`)) { + return normalized.slice(provider.length + 1); + } + } + return normalized; +} + +/** + * The efforts this model may run at, empty when it takes no effort at all. + * + * Resolved in three steps: the exact id, then the family it belongs to, then what the + * adapter accepts generally. Codex passes any `gpt-*` identifier through, so a newly + * served id still runs, while Claude has no fallback and yields nothing — which is what + * makes the backend reject it. Mirrors `reasoning_efforts_for` in + * products/tasks/backend/model_catalog.py, so a selection this offers is one a run can + * actually use. + */ +export function reasoningEffortsForModel( + adapter: Adapter, + modelId: string, +): readonly ReasoningEffort[] { + const normalized = normalizeModelId(modelId); + const model = MODELS.find( + (candidate) => + candidate.runtimeAdapter === adapter && candidate.id === normalized, + ); + if (model) return model.reasoningEfforts; + // Longest matching prefix wins, so the table's declaration order is free. + const family = FAMILY_REASONING_EFFORTS.filter( + (candidate) => + candidate.runtimeAdapter === adapter && + normalized.startsWith(candidate.prefix), + ).sort((a, b) => b.prefix.length - a.prefix.length)[0]; + return family?.reasoningEfforts ?? FALLBACK_REASONING_EFFORTS[adapter] ?? []; +} + +/** + * The catalog's entry for a model id in any form a picker hands back. The gateway serves + * ids the catalog omits, so a miss is the ordinary case and never an error. + */ +export function catalogModelFor(modelId: string): CatalogModel | undefined { + const normalized = normalizeModelId(modelId); + return MODELS.find((candidate) => candidate.id === normalized); +} + +/** + * Every access flag the catalog gates a model behind, without duplicates. + * + * A picker resolves these and hands the answers back to the filter, so gating a model is + * done by giving it an `access_flag` in products/tasks/backend/model_catalog.py and no + * picker has to learn the flag's name. Empty while no model is behind a rollout. + */ +export const MODEL_ACCESS_FLAGS: readonly string[] = [ + ...new Set( + MODELS.map((model) => model.accessFlag).filter( + (flag): flag is string => flag !== undefined, + ), + ), +]; + +/** + * The feature flag a person needs before a picker offers this model, or `undefined` when + * it is generally available. + * + * Governs display only. The server decides whether a run may use the model, so a stale + * projection can hide a model a person may use, never the other way round. + */ +export function accessFlagForModel(modelId: string): string | undefined { + return catalogModelFor(modelId)?.accessFlag; +} + +/** + * The name the catalog pins for a model, or `undefined` to let the caller format the id. + * + * Only the ids whose derived name reads wrong carry one, so a caller keeps its formatter + * for everything else. Mirrors `label_for_model` in + * products/tasks/backend/model_catalog.py, so both surfaces name a model identically. + */ +export function labelForModel(modelId: string): string | undefined { + return catalogModelFor(modelId)?.label; +} + +/** + * Whether a picker may offer this model. A model the catalog omits is not offered however + * the gateway answers, and a retired one stays listed only so a pinned session keeps + * running under a name and a price. + */ +export function isOfferedModel(modelId: string): boolean { + const model = catalogModelFor(modelId); + return model !== undefined && !model.retired; +} + +/** + * Whether the catalog has retired this model. Narrower than the inverse of `isOfferedModel`: + * an id the catalog never lists is not retired, because a runtime can still drive one — a + * person's own OpenAI subscription runs vendor variants such as `gpt-5.5-codex` that the + * gateway never serves. Ask this about the model a run uses, `isOfferedModel` about a picker. + */ +export function isRetiredModel(modelId: string): boolean { + return catalogModelFor(modelId)?.retired === true; +} + +export function supports1MContext(modelId: string): boolean { + return catalogModelFor(modelId)?.supports1MContext ?? false; +} + +export function supportsFastMode(modelId: string): boolean { + return catalogModelFor(modelId)?.supportsFastMode ?? false; +} diff --git a/products/desktop/packages/shared/src/models.test.ts b/packages/agent/packages/agent-contracts/src/models.test.ts similarity index 100% rename from products/desktop/packages/shared/src/models.test.ts rename to packages/agent/packages/agent-contracts/src/models.test.ts diff --git a/products/desktop/packages/shared/src/models.ts b/packages/agent/packages/agent-contracts/src/models.ts similarity index 100% rename from products/desktop/packages/shared/src/models.ts rename to packages/agent/packages/agent-contracts/src/models.ts diff --git a/products/desktop/packages/shared/src/oauth.test.ts b/packages/agent/packages/agent-contracts/src/oauth.test.ts similarity index 100% rename from products/desktop/packages/shared/src/oauth.test.ts rename to packages/agent/packages/agent-contracts/src/oauth.test.ts diff --git a/products/desktop/packages/shared/src/oauth.ts b/packages/agent/packages/agent-contracts/src/oauth.ts similarity index 100% rename from products/desktop/packages/shared/src/oauth.ts rename to packages/agent/packages/agent-contracts/src/oauth.ts diff --git a/products/desktop/packages/shared/src/objectTagKinds.generated.ts b/packages/agent/packages/agent-contracts/src/objectTagKinds.generated.ts similarity index 100% rename from products/desktop/packages/shared/src/objectTagKinds.generated.ts rename to packages/agent/packages/agent-contracts/src/objectTagKinds.generated.ts diff --git a/products/desktop/packages/shared/src/orchestration.ts b/packages/agent/packages/agent-contracts/src/orchestration.ts similarity index 100% rename from products/desktop/packages/shared/src/orchestration.ts rename to packages/agent/packages/agent-contracts/src/orchestration.ts diff --git a/products/desktop/packages/shared/src/pi-tool-call.test.ts b/packages/agent/packages/agent-contracts/src/pi-tool-call.test.ts similarity index 100% rename from products/desktop/packages/shared/src/pi-tool-call.test.ts rename to packages/agent/packages/agent-contracts/src/pi-tool-call.test.ts diff --git a/products/desktop/packages/shared/src/pi-tool-call.ts b/packages/agent/packages/agent-contracts/src/pi-tool-call.ts similarity index 100% rename from products/desktop/packages/shared/src/pi-tool-call.ts rename to packages/agent/packages/agent-contracts/src/pi-tool-call.ts diff --git a/products/desktop/packages/shared/src/posthog-products.ts b/packages/agent/packages/agent-contracts/src/posthog-products.ts similarity index 100% rename from products/desktop/packages/shared/src/posthog-products.ts rename to packages/agent/packages/agent-contracts/src/posthog-products.ts diff --git a/products/desktop/packages/shared/src/posthog-property-headers.test.ts b/packages/agent/packages/agent-contracts/src/posthog-property-headers.test.ts similarity index 100% rename from products/desktop/packages/shared/src/posthog-property-headers.test.ts rename to packages/agent/packages/agent-contracts/src/posthog-property-headers.test.ts diff --git a/packages/agent/packages/agent-contracts/src/posthog-property-headers.ts b/packages/agent/packages/agent-contracts/src/posthog-property-headers.ts new file mode 100644 index 000000000000..7bb92ae24dca --- /dev/null +++ b/packages/agent/packages/agent-contracts/src/posthog-property-headers.ts @@ -0,0 +1,223 @@ +export type PosthogPropertyValue = string | number | boolean | null | undefined; + +export type PosthogProperties = Record; + +export const POSTHOG_PROJECT_ID_HEADER = "X-PostHog-Project-Id"; +export const POSTHOG_TASK_RUN_ID_HEADER = "X-PostHog-Task-Run-Id"; + +/** + * Make a value safe to embed in an HTTP header value. Only printable ASCII + * survives: latin1 is valid per RFC 9110 and undici accepts it, but Bun's + * fetch — which the Claude Code CLI uses for `ANTHROPIC_CUSTOM_HEADERS` — + * rejects any non-ASCII header value. NFKD plus the final strip is what + * transliterates accented letters to their ASCII base (`più` → `piu`); the + * combining-mark pass just keeps a stray mark from splitting a newline run + * before it is collapsed to a single space. + */ +function sanitizeHeaderValue(value: string): string { + return value + .normalize("NFKD") + .replace(/[\u0300-\u036f]/g, "") + .replace(/[\r\n]+/g, " ") + .replace(/[^\x20-\x7e]/g, ""); +} + +function buildEntries(properties: PosthogProperties): Array<[string, string]> { + const entries: Array<[string, string]> = []; + for (const [key, value] of Object.entries(properties)) { + if (value === null || value === undefined) continue; + entries.push([ + `x-posthog-property-${key}`, + sanitizeHeaderValue(String(value)), + ]); + } + return entries; +} + +function taskRunIdHeader(properties: PosthogProperties): string | null { + const taskRunId = properties.task_run_id; + return typeof taskRunId === "string" ? sanitizeHeaderValue(taskRunId) : null; +} + +/** + * Build a `Record` of `x-posthog-property-` headers + * suitable for `fetch()` init.headers. The LLM gateway lifts each header + * onto the `$ai_generation` event it captures + * (see `services/llm-gateway/src/llm_gateway/request_context.py` in + * posthog/posthog). `null`/`undefined` values are dropped; values are + * sanitized via {@link sanitizeHeaderValue}. + */ +export function buildPosthogPropertyHeaderRecord( + properties: PosthogProperties, +): Record { + const taskRunId = taskRunIdHeader(properties); + return { + ...Object.fromEntries(buildEntries(properties)), + ...(taskRunId ? { [POSTHOG_TASK_RUN_ID_HEADER]: taskRunId } : {}), + }; +} + +/** + * Same property semantics as {@link buildPosthogPropertyHeaderRecord}, but + * returns a newline-joined string of `key: value` lines — the format + * `ANTHROPIC_CUSTOM_HEADERS` expects when wiring headers into the Claude + * Agent SDK. + */ +export function buildPosthogPropertyHeaderLines( + properties: PosthogProperties, +): string { + return Object.entries(buildPosthogPropertyHeaderRecord(properties)) + .map(([key, value]) => `${key}: ${value}`) + .join("\n"); +} + +/** + * Attribution node header for the person a request is spent on behalf of. The + * gateway keys its per-user spend limit on this value, so it must be the same + * node the spend-limit endpoint writes the limit against: the user's distinct + * id, not their uuid (see products/ai_gateway/backend/logic.py, _spend_node). + * + * Trust model: for local sessions this header is asserted by the client, so + * the limit it keys is a self-imposed guardrail, not a security boundary. + * Cloud runs pin the node server-side into the run's scoped token. + */ +const POSTHOG_USER_HEADER = "X-PostHog-User"; + +export function buildPosthogUserHeaderRecord( + userNode: string | null | undefined, +): Record { + return userNode + ? { [POSTHOG_USER_HEADER]: sanitizeHeaderValue(userNode) } + : {}; +} + +export function buildPosthogUserHeaderLines( + userNode: string | null | undefined, +): string { + return userNode + ? `${POSTHOG_USER_HEADER}: ${sanitizeHeaderValue(userNode)}` + : ""; +} + +export function buildPosthogProjectHeaderRecord( + projectId: number | null | undefined, +): Record { + return projectId ? { [POSTHOG_PROJECT_ID_HEADER]: String(projectId) } : {}; +} + +export function buildPosthogProjectHeaderLines( + projectId: number | null | undefined, +): string { + return projectId ? `${POSTHOG_PROJECT_ID_HEADER}: ${projectId}` : ""; +} + +export function buildPosthogScopedPropertyHeaderRecord( + properties: PosthogProperties, + projectId: number | null | undefined, +): Record { + return { + ...buildPosthogPropertyHeaderRecord(properties), + ...buildPosthogProjectHeaderRecord(projectId), + }; +} + +export function buildPosthogScopedPropertyHeaderLines( + properties: PosthogProperties, + projectId: number | null | undefined, +): string { + return [ + buildPosthogPropertyHeaderLines(properties), + buildPosthogProjectHeaderLines(projectId), + ] + .filter(Boolean) + .join("\n"); +} + +/** Header carrying the whole property set as one JSON object. */ +const POSTHOG_PROPERTIES_HEADER = "X-PostHog-Properties"; + +/** + * Byte cap the Go gateway enforces on {@link POSTHOG_PROPERTIES_HEADER}; a + * larger blob is rejected outright, losing every property including + * `ai_product`. Keep in sync with `maxPropertiesLen` in the gateway's + * `internal/httpapi/dispatch.go`. + */ +const MAX_PROPERTIES_BYTES = 8192; + +const encoder = new TextEncoder(); + +function byteLength(value: string): number { + return encoder.encode(value).length; +} + +/** + * Serialize properties for {@link POSTHOG_PROPERTIES_HEADER}, or `""` when + * there is nothing to send. + * + * Keys beginning with `$` are dropped: the gateway strips reserved `$ai_*` + * keys at the header boundary, so sending them silently loses them. Values + * are sanitized like the per-property headers so a stray control character + * cannot break the header block. + * + * Callers supply free-text values (task titles), so the blob can exceed + * {@link MAX_PROPERTIES_BYTES}. Rather than let the gateway reject the whole + * header, the longest string values are dropped one at a time until it fits, + * preferring to lose descriptive text over attribution keys, which are short. + */ +export function buildPosthogPropertiesBlob( + properties: PosthogProperties, +): string { + const clean: PosthogProperties = {}; + for (const [key, value] of Object.entries(properties)) { + if (value === null || value === undefined) continue; + if (key.startsWith("$")) continue; + // Keys are sanitized too: unlike the per-property headers, where the key + // becomes the header name, here it is serialized into the header value, + // so a non-ASCII key would make the whole request unsendable. + const safeKey = sanitizeHeaderValue(key); + if (!safeKey) continue; + clean[safeKey] = + typeof value === "string" ? sanitizeHeaderValue(value) : value; + } + if (Object.keys(clean).length === 0) return ""; + + let blob = JSON.stringify(clean); + while (byteLength(blob) > MAX_PROPERTIES_BYTES) { + const longest = Object.entries(clean) + .filter(([, value]) => typeof value === "string") + .sort((a, b) => (b[1] as string).length - (a[1] as string).length)[0]; + // Only non-string values remain and they still overflow: send nothing + // rather than a blob the gateway will reject. + if (!longest) return ""; + delete clean[longest[0]]; + blob = JSON.stringify(clean); + } + return blob; +} + +/** + * {@link buildPosthogPropertiesBlob} as a `fetch()`-ready header record, empty + * when there is nothing to send. + */ +export function buildPosthogPropertiesHeaderRecord( + properties: PosthogProperties, +): Record { + const blob = buildPosthogPropertiesBlob(properties); + const taskRunId = taskRunIdHeader(properties); + return { + ...(blob ? { [POSTHOG_PROPERTIES_HEADER]: blob } : {}), + ...(taskRunId ? { [POSTHOG_TASK_RUN_ID_HEADER]: taskRunId } : {}), + }; +} + +/** + * {@link buildPosthogPropertiesHeaderRecord} as `key: value` lines for + * `ANTHROPIC_CUSTOM_HEADERS`, empty when there is nothing to send. + */ +export function buildPosthogPropertiesHeaderLines( + properties: PosthogProperties, +): string { + return Object.entries(buildPosthogPropertiesHeaderRecord(properties)) + .map(([key, value]) => `${key}: ${value}`) + .join("\n"); +} diff --git a/products/desktop/packages/shared/src/pr-urls.test.ts b/packages/agent/packages/agent-contracts/src/pr-urls.test.ts similarity index 100% rename from products/desktop/packages/shared/src/pr-urls.test.ts rename to packages/agent/packages/agent-contracts/src/pr-urls.test.ts diff --git a/products/desktop/packages/shared/src/pr-urls.ts b/packages/agent/packages/agent-contracts/src/pr-urls.ts similarity index 100% rename from products/desktop/packages/shared/src/pr-urls.ts rename to packages/agent/packages/agent-contracts/src/pr-urls.ts diff --git a/products/desktop/packages/shared/src/private-network.test.ts b/packages/agent/packages/agent-contracts/src/private-network.test.ts similarity index 100% rename from products/desktop/packages/shared/src/private-network.test.ts rename to packages/agent/packages/agent-contracts/src/private-network.test.ts diff --git a/products/desktop/packages/shared/src/private-network.ts b/packages/agent/packages/agent-contracts/src/private-network.ts similarity index 100% rename from products/desktop/packages/shared/src/private-network.ts rename to packages/agent/packages/agent-contracts/src/private-network.ts diff --git a/products/desktop/packages/shared/src/product-engineer-prompt.test.ts b/packages/agent/packages/agent-contracts/src/product-engineer-prompt.test.ts similarity index 100% rename from products/desktop/packages/shared/src/product-engineer-prompt.test.ts rename to packages/agent/packages/agent-contracts/src/product-engineer-prompt.test.ts diff --git a/packages/agent/packages/agent-contracts/src/product-engineer-prompt.ts b/packages/agent/packages/agent-contracts/src/product-engineer-prompt.ts new file mode 100644 index 000000000000..aa2522c302ff --- /dev/null +++ b/packages/agent/packages/agent-contracts/src/product-engineer-prompt.ts @@ -0,0 +1,47 @@ +export const SIMPLIFIED_TECHNICAL_ENGLISH_INSTRUCTION = + "Talk and write only in Simplified Technical English (ASD-STE100)."; + +export const PRODUCT_ENGINEER_PROMPT = `Operate as an expert product engineer. Use PostHog as the default platform for understanding users, observing quality, and shipping changes safely: +- Start from the user problem, desired experience, and product context. Understand why the work matters before deciding what to build. +- Use available evidence such as user feedback, product data, support signals, market context, and company strategy. Ask for missing context when it would change the decision. +- Exercise product judgment. Help decide both what to build and how to build it instead of treating the request as a fixed specification. +- Choose the smallest valuable solution that creates a fast, useful feedback loop. Prototype, descope, and avoid polishing assumptions that real users have not validated. +- Own the complete experience across implementation, usability, reliability, privacy, security, rollout, documentation, and support. Do not stop when the code compiles or the narrow task is complete. +- Ship safely and learn from reality. Use tests, feature flags, staged rollouts, and experiments when they fit the risk and uncertainty. +- Define what success means and make it observable. Measure adoption, outcomes, and failures. +- Follow through after shipping. Inspect usage and feedback, iterate on what works, and remove complexity that does not earn its place. + +Choose the smallest set of PostHog products that solves the user problem. Know PostHog's product catalog: +- Product Analytics: Analyze event-based user behavior with trends, funnels, retention, paths, and cohorts. +- Web Analytics: Measure website traffic, acquisition, pages, conversions, and performance. +- Session Replay: Record and replay real user sessions to see behavior and friction. +- Feature Flags: Control who gets features and manage progressive rollouts. +- Experiments: Run A/B tests and measure causal impact against product metrics. +- Surveys: Collect in-product user feedback and link responses to behavior. +- Error Tracking: Capture, group, and diagnose exceptions with user and session context. +- Managed warehouse: Use a PostHog-managed analytical Postgres database that combines PostHog and connected source data. +- Data pipelines: Send event and warehouse data to external destinations in real time or batch. +- PostHog AI: Query product data, build insights, write SQL, find replays, and explain findings in plain English. +- AI Observability: Trace LLM calls, prompts, responses, tools, latency, tokens, and cost. +- Logs: Ingest, search, and retain structured application logs. +- Workflows: Trigger automated messages and actions from product behavior. +- Inbox: Review and steer prioritized self-driving reports and pull requests before they ship. +- Replay Vision: Use AI to turn session recordings into structured, queryable data. + +Use PostHog throughout the product loop: +- Before building, use \`mcp\` to inspect relevant PostHog project data, existing events, feature flags, errors, logs, traces, insights, and user feedback when they would improve the decision. Search before calling. Read or list before writing or creating, and reuse existing resources. +- Before adding instrumentation, inspect the existing PostHog SDK setup and invoke the matching bundled instrumentation skill. Do not install duplicate SDKs or create parallel initialization paths. +- Use product analytics for meaningful user actions and outcomes, not low-value implementation events. Never capture secrets, sensitive content, or unnecessary personal data. +- Use PostHog feature flags for uncertain or risky rollouts. Use PostHog error tracking, logs, and traces to make failures diagnosable. Use PostHog AI Observability for AI model calls. +- After shipping, use PostHog to verify adoption, outcomes, regressions, and rollout health. Let observed behavior drive the next iteration. + +Prefer customer impact and product quality over technical novelty. Treat code as one tool for creating useful, measurable outcomes.`; + +export function prependProductEngineerPrompt(prompt: string): string { + if (prompt.includes(PRODUCT_ENGINEER_PROMPT)) { + return prompt; + } + return prompt + ? `${PRODUCT_ENGINEER_PROMPT}\n\n${prompt}` + : PRODUCT_ENGINEER_PROMPT; +} diff --git a/products/desktop/packages/shared/src/reasoning-effort.test.ts b/packages/agent/packages/agent-contracts/src/reasoning-effort.test.ts similarity index 100% rename from products/desktop/packages/shared/src/reasoning-effort.test.ts rename to packages/agent/packages/agent-contracts/src/reasoning-effort.test.ts diff --git a/products/desktop/packages/shared/src/reasoning-effort.ts b/packages/agent/packages/agent-contracts/src/reasoning-effort.ts similarity index 100% rename from products/desktop/packages/shared/src/reasoning-effort.ts rename to packages/agent/packages/agent-contracts/src/reasoning-effort.ts diff --git a/products/desktop/packages/shared/src/regions.test.ts b/packages/agent/packages/agent-contracts/src/regions.test.ts similarity index 100% rename from products/desktop/packages/shared/src/regions.test.ts rename to packages/agent/packages/agent-contracts/src/regions.test.ts diff --git a/products/desktop/packages/shared/src/regions.ts b/packages/agent/packages/agent-contracts/src/regions.ts similarity index 100% rename from products/desktop/packages/shared/src/regions.ts rename to packages/agent/packages/agent-contracts/src/regions.ts diff --git a/products/desktop/packages/shared/src/rich-output-prompt.test.ts b/packages/agent/packages/agent-contracts/src/rich-output-prompt.test.ts similarity index 100% rename from products/desktop/packages/shared/src/rich-output-prompt.test.ts rename to packages/agent/packages/agent-contracts/src/rich-output-prompt.test.ts diff --git a/packages/agent/packages/agent-contracts/src/rich-output-prompt.ts b/packages/agent/packages/agent-contracts/src/rich-output-prompt.ts new file mode 100644 index 000000000000..f2a093d7ffb4 --- /dev/null +++ b/packages/agent/packages/agent-contracts/src/rich-output-prompt.ts @@ -0,0 +1,38 @@ +import { OBJECT_TAG_PROMPT_KIND_LIST } from "./objectTagKinds.generated"; + +/** + * Prompt block teaching an agent the object-tag vocabulary the desktop + * renders as live references (chips, hover previews, chart cards). Shared by + * every agent runtime so its syntax stays in sync with what `remarkObjectTags` + * parses; the kind list itself is generated from the registry + * (posthog/object_tags/kinds.py) so the prompt cannot drift from what the + * renderers understand. + */ +export const RICH_OUTPUT_TAGS_PROMPT = `Embed the PostHog objects behind your conclusions as XML tags, the same convention as \`\` attachments. Every tag is a live reference the app resolves when shown - never restate the object's data in your text, and never put tags inside code fences. +- Inline reference: \`short human label\` inside a sentence, e.g. \`The checkout funnel dropped after new-checkout-flow rolled out.\` Kinds: ${OBJECT_TAG_PROMPT_KIND_LIST}. Use the object's id (insights: the short id; feature flags: the numeric id, falling back to the key; Inbox reports: the report uuid; persons: the uuid). It renders as a chip with a live hover preview that opens the object in PostHog. +- Inline SQL: \`SELECT count() FROM events WHERE ...\` - the SQL is the tag body, the label is what the sentence shows. Hovering runs the query live; clicking opens the SQL editor. +- Full-size chart, for any numeric or time-series answer (always prefer this over a markdown table): a saved insight \`\` or a query \`SELECT ...\`. The chart executes live on every view. Include the time range in the title, and keep blank lines out of the SQL body. +- Some PostHog MCP query tools render their result as an interactive chart in the conversation, and the tool result says so. When the tool result says the user already sees the result as an interactive view, do not embed the same data again as a \`\` chart; write the conclusion in text and let that view carry the data. When it does not, the tool renders nothing on its own, so follow the full-size chart rule above. +- Recording card: \`\` renders the recording's details with a link into PostHog's player. Use it when a specific session is the evidence.`; + +export function appendRichOutputPrompt( + prompt: string, + interactionOrigin?: string | null, +): string { + if ( + interactionOrigin && + interactionOrigin !== "desktop" && + interactionOrigin !== "signal_report" + ) { + return prompt + .replaceAll( + `\n\n## Rich output in replies\n${RICH_OUTPUT_TAGS_PROMPT}`, + "", + ) + .replaceAll(RICH_OUTPUT_TAGS_PROMPT, ""); + } + if (prompt.includes(RICH_OUTPUT_TAGS_PROMPT)) { + return prompt; + } + return `${prompt}\n\n## Rich output in replies\n${RICH_OUTPUT_TAGS_PROMPT}`; +} diff --git a/products/desktop/packages/shared/src/saga.ts b/packages/agent/packages/agent-contracts/src/saga.ts similarity index 100% rename from products/desktop/packages/shared/src/saga.ts rename to packages/agent/packages/agent-contracts/src/saga.ts diff --git a/packages/agent/packages/agent-contracts/src/sandbox-env.ts b/packages/agent/packages/agent-contracts/src/sandbox-env.ts new file mode 100644 index 000000000000..9a8512eb9fce --- /dev/null +++ b/packages/agent/packages/agent-contracts/src/sandbox-env.ts @@ -0,0 +1,6 @@ +/** + * Names the tools a custom sandbox image carries. The image spec builder + * writes it into the image's env; the agent reads it at session start, since + * nothing else tells it what was installed. + */ +export const IMAGE_TOOLS_ENV_KEY = "POSTHOG_IMAGE_TOOLS"; diff --git a/packages/agent/packages/agent-contracts/src/schemas.ts b/packages/agent/packages/agent-contracts/src/schemas.ts new file mode 100644 index 000000000000..32b774b82aa7 --- /dev/null +++ b/packages/agent/packages/agent-contracts/src/schemas.ts @@ -0,0 +1,44 @@ +import { z } from "zod"; + +const spaceGoalPeriodSchema = z.enum(["day", "week", "month"]); +const spaceGoalDirectionSchema = z.enum(["at_least", "at_most"]); + +export const spaceGoalInputSchema = z.object({ + statement: z.string().trim().min(1).max(2000), + period: spaceGoalPeriodSchema, + direction: spaceGoalDirectionSchema, + target: z.string().max(64).nullish(), + deadline: z.iso.date().nullish(), + insight_short_id: z.string().max(64).nullish(), +}); + +export const spaceFeatureInputSchema = z.object({ + name: z.string().trim().min(1).max(200), + description: z.string().max(2000).optional(), + flag_key: z.string().max(400).nullish(), +}); + +const repositorySchema = z.string().max(255).nullish(); + +export const spaceSetupInputSchema = z.discriminatedUnion("kind", [ + z.object({ + kind: z.literal("goal"), + goal: spaceGoalInputSchema, + repository: repositorySchema, + }), + z.object({ + kind: z.literal("feature"), + feature: spaceFeatureInputSchema, + repository: repositorySchema, + }), +]); + +export const spaceSetupStartedSchema = z.object({ task_id: z.uuid() }); + +export type SpaceGoalPeriod = z.infer; +export type SpaceGoalDirection = z.infer; +export type SpaceGoalInput = z.infer; +export type SpaceFeatureInput = z.infer; +export type SpaceSetupInput = z.infer; +export type SpaceSetupKind = SpaceSetupInput["kind"]; +export type SpaceSetupStarted = z.infer; diff --git a/products/desktop/packages/shared/src/session-events.ts b/packages/agent/packages/agent-contracts/src/session-events.ts similarity index 100% rename from products/desktop/packages/shared/src/session-events.ts rename to packages/agent/packages/agent-contracts/src/session-events.ts diff --git a/products/desktop/packages/shared/src/signal-types.ts b/packages/agent/packages/agent-contracts/src/signal-types.ts similarity index 100% rename from products/desktop/packages/shared/src/signal-types.ts rename to packages/agent/packages/agent-contracts/src/signal-types.ts diff --git a/products/desktop/packages/shared/src/skills.test.ts b/packages/agent/packages/agent-contracts/src/skills.test.ts similarity index 100% rename from products/desktop/packages/shared/src/skills.test.ts rename to packages/agent/packages/agent-contracts/src/skills.test.ts diff --git a/products/desktop/packages/shared/src/skills.ts b/packages/agent/packages/agent-contracts/src/skills.ts similarity index 100% rename from products/desktop/packages/shared/src/skills.ts rename to packages/agent/packages/agent-contracts/src/skills.ts diff --git a/products/desktop/packages/shared/src/slash-commands.test.ts b/packages/agent/packages/agent-contracts/src/slash-commands.test.ts similarity index 100% rename from products/desktop/packages/shared/src/slash-commands.test.ts rename to packages/agent/packages/agent-contracts/src/slash-commands.test.ts diff --git a/products/desktop/packages/shared/src/slash-commands.ts b/packages/agent/packages/agent-contracts/src/slash-commands.ts similarity index 100% rename from products/desktop/packages/shared/src/slash-commands.ts rename to packages/agent/packages/agent-contracts/src/slash-commands.ts diff --git a/packages/agent/packages/agent-contracts/src/task-context.ts b/packages/agent/packages/agent-contracts/src/task-context.ts new file mode 100644 index 000000000000..59b3fbbed86c --- /dev/null +++ b/packages/agent/packages/agent-contracts/src/task-context.ts @@ -0,0 +1,14 @@ +export interface TaskContextInput { + taskId: string; + cwd: string; + customInstructions?: string; + additionalDirectories?: string[]; + channelMode?: boolean; +} + +export interface TaskContext extends TaskContextInput { + projectId: number; + apiHost: string; + environment: "local" | "cloud"; + additionalInstructions?: string; +} diff --git a/products/desktop/packages/shared/src/task.test.ts b/packages/agent/packages/agent-contracts/src/task.test.ts similarity index 100% rename from products/desktop/packages/shared/src/task.test.ts rename to packages/agent/packages/agent-contracts/src/task.test.ts diff --git a/products/desktop/packages/shared/src/task.ts b/packages/agent/packages/agent-contracts/src/task.ts similarity index 100% rename from products/desktop/packages/shared/src/task.ts rename to packages/agent/packages/agent-contracts/src/task.ts diff --git a/products/desktop/packages/shared/src/tool-meta.test.ts b/packages/agent/packages/agent-contracts/src/tool-meta.test.ts similarity index 100% rename from products/desktop/packages/shared/src/tool-meta.test.ts rename to packages/agent/packages/agent-contracts/src/tool-meta.test.ts diff --git a/products/desktop/packages/shared/src/tool-meta.ts b/packages/agent/packages/agent-contracts/src/tool-meta.ts similarity index 100% rename from products/desktop/packages/shared/src/tool-meta.ts rename to packages/agent/packages/agent-contracts/src/tool-meta.ts diff --git a/products/desktop/packages/shared/src/transcript-neutral-messages.ts b/packages/agent/packages/agent-contracts/src/transcript-neutral-messages.ts similarity index 100% rename from products/desktop/packages/shared/src/transcript-neutral-messages.ts rename to packages/agent/packages/agent-contracts/src/transcript-neutral-messages.ts diff --git a/products/desktop/packages/shared/src/urls.ts b/packages/agent/packages/agent-contracts/src/urls.ts similarity index 100% rename from products/desktop/packages/shared/src/urls.ts rename to packages/agent/packages/agent-contracts/src/urls.ts diff --git a/packages/agent/packages/agent-contracts/tsconfig.json b/packages/agent/packages/agent-contracts/tsconfig.json new file mode 100644 index 000000000000..a5668cdab418 --- /dev/null +++ b/packages/agent/packages/agent-contracts/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "outDir": "dist", + "lib": ["ESNext"], + "target": "ES2022", + "module": "ESNext", + "moduleDetection": "force", + "allowJs": true, + "types": ["node"], + "moduleResolution": "bundler", + "resolveJsonModule": true, + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "noEmit": true, + "strict": true, + "skipLibCheck": true, + "noFallthroughCasesInSwitch": true, + "noUnusedLocals": false, + "noUnusedParameters": false + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/packages/agent/packages/agent-contracts/tsup.config.ts b/packages/agent/packages/agent-contracts/tsup.config.ts new file mode 100644 index 000000000000..03bd436ced86 --- /dev/null +++ b/packages/agent/packages/agent-contracts/tsup.config.ts @@ -0,0 +1,13 @@ +import { defineConfig } from "tsup"; + +export default defineConfig({ + entry: ["src/**/*.ts", "!src/**/*.test.ts"], + format: ["esm"], + dts: true, + sourcemap: true, + clean: true, + // One module instance across entries, so class identity survives mixed barrel and subpath imports. + splitting: true, + outDir: "dist", + target: "node20", +}); diff --git a/packages/agent/packages/agent-contracts/vitest.config.ts b/packages/agent/packages/agent-contracts/vitest.config.ts new file mode 100644 index 000000000000..407c36b9538d --- /dev/null +++ b/packages/agent/packages/agent-contracts/vitest.config.ts @@ -0,0 +1,12 @@ +import { defineConfig } from "vitest/config"; +import { trunkTestOptions } from "../../vitest.config.base"; + +export default defineConfig({ + test: { + globals: true, + ...trunkTestOptions, + environment: "node", + include: ["src/**/*.test.ts"], + exclude: ["**/node_modules/**", "**/dist/**"], + }, +}); diff --git a/products/desktop/packages/agent/.env.example b/packages/agent/packages/agent/.env.example similarity index 100% rename from products/desktop/packages/agent/.env.example rename to packages/agent/packages/agent/.env.example diff --git a/products/desktop/packages/agent/README.md b/packages/agent/packages/agent/README.md similarity index 99% rename from products/desktop/packages/agent/README.md rename to packages/agent/packages/agent/README.md index ccd65b58e8de..e30440168151 100644 --- a/products/desktop/packages/agent/README.md +++ b/packages/agent/packages/agent/README.md @@ -281,7 +281,7 @@ ACP defines standard methods like `session/prompt`, `session/update`, and `sessi Releases are automatic. There is no manual version bump: `package.json` stays at `0.0.0-dev` and the release workflow sets the version from the tag. -1. A merge to `master` that changes a file in this package or `products/desktop/packages/harness` runs `.github/workflows/desktop-agent-tag.yml`. +1. A merge to `master` that changes a file in this package or `packages/agent/packages/harness` runs `.github/workflows/desktop-agent-tag.yml`. 2. It pushes the tag `agent-vX.Y.Z`. `Z` counts commits that change either package since the base tag `agent-vX.Y.0`. A commit that changes both packages counts once. 3. The tag push runs `.github/workflows/desktop-agent-release.yml`, which builds, tests and publishes to npm with provenance, then opens a pull request that bumps the agent pin in `Dockerfile.sandbox-base`. Merging that pull request builds and ships the sandbox images. diff --git a/products/desktop/packages/agent/build/native-binary.mjs b/packages/agent/packages/agent/build/native-binary.mjs similarity index 100% rename from products/desktop/packages/agent/build/native-binary.mjs rename to packages/agent/packages/agent/build/native-binary.mjs diff --git a/products/desktop/packages/agent/build/verify-local-tools-mcp-server.mjs b/packages/agent/packages/agent/build/verify-local-tools-mcp-server.mjs similarity index 100% rename from products/desktop/packages/agent/build/verify-local-tools-mcp-server.mjs rename to packages/agent/packages/agent/build/verify-local-tools-mcp-server.mjs diff --git a/products/desktop/packages/agent/e2e/README.md b/packages/agent/packages/agent/e2e/README.md similarity index 100% rename from products/desktop/packages/agent/e2e/README.md rename to packages/agent/packages/agent/e2e/README.md diff --git a/products/desktop/packages/agent/e2e/compaction.e2e.test.ts b/packages/agent/packages/agent/e2e/compaction.e2e.test.ts similarity index 100% rename from products/desktop/packages/agent/e2e/compaction.e2e.test.ts rename to packages/agent/packages/agent/e2e/compaction.e2e.test.ts diff --git a/products/desktop/packages/agent/e2e/config.ts b/packages/agent/packages/agent/e2e/config.ts similarity index 95% rename from products/desktop/packages/agent/e2e/config.ts rename to packages/agent/packages/agent/e2e/config.ts index 66d8a8b950b4..ac4f375b43dd 100644 --- a/products/desktop/packages/agent/e2e/config.ts +++ b/packages/agent/packages/agent/e2e/config.ts @@ -1,6 +1,6 @@ import { existsSync } from "node:fs"; import { join } from "node:path"; -import type { Adapter } from "@posthog/shared"; +import type { Adapter } from "@posthog/agent-contracts"; export type { Adapter }; @@ -17,12 +17,16 @@ const GATEWAY_URL = process.env.POSTHOG_CODE_E2E_GATEWAY_URL || "http://localhost:3308/ci"; const TOKEN = process.env.POSTHOG_CODE_E2E_GATEWAY_PERSONAL_API_KEY ?? ""; -// This checkout's bundled codex binaries, relative to packages/agent/e2e. +// The desktop app downloads the codex binaries; it lives in the sibling desktop workspace. const CODEX_RESOURCES_DIR = join( __dirname, "..", "..", "..", + "..", + "..", + "products", + "desktop", "apps", "code", "resources", diff --git a/products/desktop/packages/agent/e2e/driver.e2e.test.ts b/packages/agent/packages/agent/e2e/driver.e2e.test.ts similarity index 100% rename from products/desktop/packages/agent/e2e/driver.e2e.test.ts rename to packages/agent/packages/agent/e2e/driver.e2e.test.ts diff --git a/products/desktop/packages/agent/e2e/driver.ts b/packages/agent/packages/agent/e2e/driver.ts similarity index 100% rename from products/desktop/packages/agent/e2e/driver.ts rename to packages/agent/packages/agent/e2e/driver.ts diff --git a/products/desktop/packages/agent/e2e/guard.e2e.test.ts b/packages/agent/packages/agent/e2e/guard.e2e.test.ts similarity index 100% rename from products/desktop/packages/agent/e2e/guard.e2e.test.ts rename to packages/agent/packages/agent/e2e/guard.e2e.test.ts diff --git a/products/desktop/packages/agent/e2e/run-e2e.sh b/packages/agent/packages/agent/e2e/run-e2e.sh similarity index 99% rename from products/desktop/packages/agent/e2e/run-e2e.sh rename to packages/agent/packages/agent/e2e/run-e2e.sh index fb45739f978c..df8a20fc7840 100755 --- a/products/desktop/packages/agent/e2e/run-e2e.sh +++ b/packages/agent/packages/agent/e2e/run-e2e.sh @@ -16,7 +16,7 @@ set -euo pipefail HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" AGENT_DIR="$(cd "$HERE/.." && pwd)" -POSTHOG_REPO="${POSTHOG_REPO:-$(cd "$AGENT_DIR/../../.." && pwd)/posthog}" +POSTHOG_REPO="${POSTHOG_REPO:-$(cd "$AGENT_DIR/../../.." && pwd)}" if [[ -z "${POSTHOG_CODE_E2E_GATEWAY_PERSONAL_API_KEY:-}" ]]; then SETTINGS="$POSTHOG_REPO/ee/settings.py" diff --git a/products/desktop/packages/agent/e2e/session-lifecycle.e2e.test.ts b/packages/agent/packages/agent/e2e/session-lifecycle.e2e.test.ts similarity index 100% rename from products/desktop/packages/agent/e2e/session-lifecycle.e2e.test.ts rename to packages/agent/packages/agent/e2e/session-lifecycle.e2e.test.ts diff --git a/products/desktop/packages/agent/e2e/session-startup.e2e.test.ts b/packages/agent/packages/agent/e2e/session-startup.e2e.test.ts similarity index 98% rename from products/desktop/packages/agent/e2e/session-startup.e2e.test.ts rename to packages/agent/packages/agent/e2e/session-startup.e2e.test.ts index 25e296a4714d..716ca4e67234 100644 --- a/products/desktop/packages/agent/e2e/session-startup.e2e.test.ts +++ b/packages/agent/packages/agent/e2e/session-startup.e2e.test.ts @@ -12,7 +12,7 @@ import { tmpdir } from "node:os"; import { join } from "node:path"; import { pathToFileURL } from "node:url"; import { ClientSideConnection, ndJsonStream } from "@agentclientprotocol/sdk"; -import { DEFAULT_GATEWAY_MODEL } from "@posthog/shared"; +import { DEFAULT_GATEWAY_MODEL } from "@posthog/agent-contracts"; import { expect, it, vi } from "vitest"; import { createAcpConnection } from "../src/adapters/acp-connection"; import { withTimeout } from "../src/utils/common"; diff --git a/products/desktop/packages/agent/e2e/structured-output.e2e.test.ts b/packages/agent/packages/agent/e2e/structured-output.e2e.test.ts similarity index 100% rename from products/desktop/packages/agent/e2e/structured-output.e2e.test.ts rename to packages/agent/packages/agent/e2e/structured-output.e2e.test.ts diff --git a/products/desktop/packages/agent/package.json b/packages/agent/packages/agent/package.json similarity index 98% rename from products/desktop/packages/agent/package.json rename to packages/agent/packages/agent/package.json index 307dd345a9e8..9510bd29154e 100644 --- a/products/desktop/packages/agent/package.json +++ b/packages/agent/packages/agent/package.json @@ -4,7 +4,7 @@ "repository": { "type": "git", "url": "git+https://github.com/PostHog/posthog.git", - "directory": "products/desktop/packages/agent" + "directory": "packages/agent/packages/agent" }, "description": "TypeScript agent framework wrapping Claude Agent SDK with Git-based task execution for PostHog", "exports": { @@ -159,7 +159,7 @@ "node": ">=20.0.0" }, "devDependencies": { - "@posthog/shared": "workspace:*", + "@posthog/agent-contracts": "workspace:*", "@posthog/git": "workspace:*", "@posthog/harness": "workspace:*", "@types/bun": "1.3.14", diff --git a/products/desktop/packages/agent/src/acp-extensions.test.ts b/packages/agent/packages/agent/src/acp-extensions.test.ts similarity index 100% rename from products/desktop/packages/agent/src/acp-extensions.test.ts rename to packages/agent/packages/agent/src/acp-extensions.test.ts diff --git a/products/desktop/packages/agent/src/acp-extensions.ts b/packages/agent/packages/agent/src/acp-extensions.ts similarity index 100% rename from products/desktop/packages/agent/src/acp-extensions.ts rename to packages/agent/packages/agent/src/acp-extensions.ts diff --git a/products/desktop/packages/agent/src/adapters/acp-connection.test.ts b/packages/agent/packages/agent/src/adapters/acp-connection.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/acp-connection.test.ts rename to packages/agent/packages/agent/src/adapters/acp-connection.test.ts diff --git a/products/desktop/packages/agent/src/adapters/acp-connection.ts b/packages/agent/packages/agent/src/adapters/acp-connection.ts similarity index 99% rename from products/desktop/packages/agent/src/adapters/acp-connection.ts rename to packages/agent/packages/agent/src/adapters/acp-connection.ts index 4a686b043296..6b4b5e8a3257 100644 --- a/products/desktop/packages/agent/src/adapters/acp-connection.ts +++ b/packages/agent/packages/agent/src/adapters/acp-connection.ts @@ -1,6 +1,6 @@ import { AgentSideConnection, ndJsonStream } from "@agentclientprotocol/sdk"; +import type { Adapter } from "@posthog/agent-contracts"; import type { ContextWikiEnv } from "@posthog/harness/extensions/context-wiki"; -import type { Adapter } from "@posthog/shared"; import { withTurnTraceId } from "../acp-extensions"; import type { ModelInfo } from "../gateway-models"; import type { SessionLogWriter } from "../session-log-writer"; diff --git a/products/desktop/packages/agent/src/adapters/base-acp-agent.test.ts b/packages/agent/packages/agent/src/adapters/base-acp-agent.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/base-acp-agent.test.ts rename to packages/agent/packages/agent/src/adapters/base-acp-agent.test.ts diff --git a/products/desktop/packages/agent/src/adapters/base-acp-agent.ts b/packages/agent/packages/agent/src/adapters/base-acp-agent.ts similarity index 99% rename from products/desktop/packages/agent/src/adapters/base-acp-agent.ts rename to packages/agent/packages/agent/src/adapters/base-acp-agent.ts index 53ced5c1dfa5..3c5b1adbfae5 100644 --- a/products/desktop/packages/agent/src/adapters/base-acp-agent.ts +++ b/packages/agent/packages/agent/src/adapters/base-acp-agent.ts @@ -20,7 +20,7 @@ import { customModelMeta, isAnthropicModelId, restrictedModelMeta, -} from "@posthog/shared"; +} from "@posthog/agent-contracts"; import { compareModelsForPicker, DEFAULT_GATEWAY_MODEL, diff --git a/products/desktop/packages/agent/src/adapters/claude/SKILL.md b/packages/agent/packages/agent/src/adapters/claude/SKILL.md similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/SKILL.md rename to packages/agent/packages/agent/src/adapters/claude/SKILL.md diff --git a/products/desktop/packages/agent/src/adapters/claude/UPSTREAM.md b/packages/agent/packages/agent/src/adapters/claude/UPSTREAM.md similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/UPSTREAM.md rename to packages/agent/packages/agent/src/adapters/claude/UPSTREAM.md diff --git a/products/desktop/packages/agent/src/adapters/claude/claude-agent.clear.test.ts b/packages/agent/packages/agent/src/adapters/claude/claude-agent.clear.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/claude-agent.clear.test.ts rename to packages/agent/packages/agent/src/adapters/claude/claude-agent.clear.test.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/claude-agent.finish.test.ts b/packages/agent/packages/agent/src/adapters/claude/claude-agent.finish.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/claude-agent.finish.test.ts rename to packages/agent/packages/agent/src/adapters/claude/claude-agent.finish.test.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/claude-agent.permission-mode.test.ts b/packages/agent/packages/agent/src/adapters/claude/claude-agent.permission-mode.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/claude-agent.permission-mode.test.ts rename to packages/agent/packages/agent/src/adapters/claude/claude-agent.permission-mode.test.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/claude-agent.refresh.test.ts b/packages/agent/packages/agent/src/adapters/claude/claude-agent.refresh.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/claude-agent.refresh.test.ts rename to packages/agent/packages/agent/src/adapters/claude/claude-agent.refresh.test.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/claude-agent.resume-model.test.ts b/packages/agent/packages/agent/src/adapters/claude/claude-agent.resume-model.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/claude-agent.resume-model.test.ts rename to packages/agent/packages/agent/src/adapters/claude/claude-agent.resume-model.test.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/claude-agent.side-question.test.ts b/packages/agent/packages/agent/src/adapters/claude/claude-agent.side-question.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/claude-agent.side-question.test.ts rename to packages/agent/packages/agent/src/adapters/claude/claude-agent.side-question.test.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/claude-agent.slash-command.test.ts b/packages/agent/packages/agent/src/adapters/claude/claude-agent.slash-command.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/claude-agent.slash-command.test.ts rename to packages/agent/packages/agent/src/adapters/claude/claude-agent.slash-command.test.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/claude-agent.streamed-text.test.ts b/packages/agent/packages/agent/src/adapters/claude/claude-agent.streamed-text.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/claude-agent.streamed-text.test.ts rename to packages/agent/packages/agent/src/adapters/claude/claude-agent.streamed-text.test.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/claude-agent.task-notification.test.ts b/packages/agent/packages/agent/src/adapters/claude/claude-agent.task-notification.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/claude-agent.task-notification.test.ts rename to packages/agent/packages/agent/src/adapters/claude/claude-agent.task-notification.test.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/claude-agent.ts b/packages/agent/packages/agent/src/adapters/claude/claude-agent.ts similarity index 99% rename from products/desktop/packages/agent/src/adapters/claude/claude-agent.ts rename to packages/agent/packages/agent/src/adapters/claude/claude-agent.ts index 28ab7be510fb..f6352f3a486a 100644 --- a/products/desktop/packages/agent/src/adapters/claude/claude-agent.ts +++ b/packages/agent/packages/agent/src/adapters/claude/claude-agent.ts @@ -45,6 +45,7 @@ import { type SDKUserMessage, type SlashCommand, } from "@anthropic-ai/claude-agent-sdk"; +import { leadingSlashCommand, serializeError } from "@posthog/agent-contracts"; import type { ContextWikiEnv } from "@posthog/harness/extensions/context-wiki"; import { createEnrichment, @@ -64,7 +65,6 @@ import { type PostHogProductId, resolvePostHogExecPermissionRegex, } from "@posthog/harness/extensions/posthog-mcp-policy"; -import { leadingSlashCommand, serializeError } from "@posthog/shared"; import { v7 as uuidv7 } from "uuid"; import packageJson from "../../../package.json" with { type: "json" }; import { diff --git a/products/desktop/packages/agent/src/adapters/claude/claude-agent.turn-queue.test.ts b/packages/agent/packages/agent/src/adapters/claude/claude-agent.turn-queue.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/claude-agent.turn-queue.test.ts rename to packages/agent/packages/agent/src/adapters/claude/claude-agent.turn-queue.test.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/context-breakdown.test.ts b/packages/agent/packages/agent/src/adapters/claude/context-breakdown.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/context-breakdown.test.ts rename to packages/agent/packages/agent/src/adapters/claude/context-breakdown.test.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/context-breakdown.ts b/packages/agent/packages/agent/src/adapters/claude/context-breakdown.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/context-breakdown.ts rename to packages/agent/packages/agent/src/adapters/claude/context-breakdown.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/conversion/acp-to-sdk.test.ts b/packages/agent/packages/agent/src/adapters/claude/conversion/acp-to-sdk.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/conversion/acp-to-sdk.test.ts rename to packages/agent/packages/agent/src/adapters/claude/conversion/acp-to-sdk.test.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/conversion/acp-to-sdk.ts b/packages/agent/packages/agent/src/adapters/claude/conversion/acp-to-sdk.ts similarity index 98% rename from products/desktop/packages/agent/src/adapters/claude/conversion/acp-to-sdk.ts rename to packages/agent/packages/agent/src/adapters/claude/conversion/acp-to-sdk.ts index 3a7eb4be5494..65e9b3dc443b 100644 --- a/products/desktop/packages/agent/src/adapters/claude/conversion/acp-to-sdk.ts +++ b/packages/agent/packages/agent/src/adapters/claude/conversion/acp-to-sdk.ts @@ -8,13 +8,13 @@ import { isClaudeImageMimeType, isImageFile, MAX_CLAUDE_IMAGE_BYTES, -} from "@posthog/shared"; +} from "@posthog/agent-contracts"; import { isLocalSkillCommandChunk } from "../../local-skill"; const PDF_EXTENSIONS = new Set(["pdf"]); // Video-only on purpose: audio formats get the default "large text" hint. -// Do not replace with AUDIO_VIDEO_EXTENSIONS from @posthog/shared. +// Do not replace with AUDIO_VIDEO_EXTENSIONS from @posthog/agent-contracts. const VIDEO_EXTENSIONS = new Set([ "mp4", "mov", diff --git a/products/desktop/packages/agent/src/adapters/claude/conversion/sdk-to-acp.test.ts b/packages/agent/packages/agent/src/adapters/claude/conversion/sdk-to-acp.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/conversion/sdk-to-acp.test.ts rename to packages/agent/packages/agent/src/adapters/claude/conversion/sdk-to-acp.test.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/conversion/sdk-to-acp.ts b/packages/agent/packages/agent/src/adapters/claude/conversion/sdk-to-acp.ts similarity index 99% rename from products/desktop/packages/agent/src/adapters/claude/conversion/sdk-to-acp.ts rename to packages/agent/packages/agent/src/adapters/claude/conversion/sdk-to-acp.ts index 8aab8b168ce4..ba446d86e36d 100644 --- a/products/desktop/packages/agent/src/adapters/claude/conversion/sdk-to-acp.ts +++ b/packages/agent/packages/agent/src/adapters/claude/conversion/sdk-to-acp.ts @@ -21,8 +21,8 @@ import type { BetaContentBlock, BetaRawContentBlockDelta, } from "@anthropic-ai/sdk/resources/beta.mjs"; -import { IMPORTED_USER_PROMPT_META_KEY } from "@posthog/shared"; -import { POSTHOG_NOTIFICATIONS } from "@/acp-extensions"; +import { IMPORTED_USER_PROMPT_META_KEY } from "@posthog/agent-contracts"; +import { POSTHOG_NOTIFICATIONS } from "../../../acp-extensions"; import { image, text } from "../../../utils/acp-content"; import { unreachable } from "../../../utils/common"; import type { Logger } from "../../../utils/logger"; diff --git a/products/desktop/packages/agent/src/adapters/claude/conversion/task-state.test.ts b/packages/agent/packages/agent/src/adapters/claude/conversion/task-state.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/conversion/task-state.test.ts rename to packages/agent/packages/agent/src/adapters/claude/conversion/task-state.test.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/conversion/task-state.ts b/packages/agent/packages/agent/src/adapters/claude/conversion/task-state.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/conversion/task-state.ts rename to packages/agent/packages/agent/src/adapters/claude/conversion/task-state.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/conversion/tool-use-to-acp.test.ts b/packages/agent/packages/agent/src/adapters/claude/conversion/tool-use-to-acp.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/conversion/tool-use-to-acp.test.ts rename to packages/agent/packages/agent/src/adapters/claude/conversion/tool-use-to-acp.test.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/conversion/tool-use-to-acp.ts b/packages/agent/packages/agent/src/adapters/claude/conversion/tool-use-to-acp.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/conversion/tool-use-to-acp.ts rename to packages/agent/packages/agent/src/adapters/claude/conversion/tool-use-to-acp.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/hooks.test.ts b/packages/agent/packages/agent/src/adapters/claude/hooks.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/hooks.test.ts rename to packages/agent/packages/agent/src/adapters/claude/hooks.test.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/hooks.ts b/packages/agent/packages/agent/src/adapters/claude/hooks.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/hooks.ts rename to packages/agent/packages/agent/src/adapters/claude/hooks.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/image-sanitization.ts b/packages/agent/packages/agent/src/adapters/claude/image-sanitization.ts similarity index 98% rename from products/desktop/packages/agent/src/adapters/claude/image-sanitization.ts rename to packages/agent/packages/agent/src/adapters/claude/image-sanitization.ts index 272ff008d73d..3fefcfa256c7 100644 --- a/products/desktop/packages/agent/src/adapters/claude/image-sanitization.ts +++ b/packages/agent/packages/agent/src/adapters/claude/image-sanitization.ts @@ -2,7 +2,7 @@ import { estimateBase64Bytes, isClaudeImageMimeType, MAX_CLAUDE_IMAGE_BYTES, -} from "@posthog/shared"; +} from "@posthog/agent-contracts"; function unprocessableImageReason(value: unknown): string | null { if (!value || typeof value !== "object") return null; diff --git a/products/desktop/packages/agent/src/adapters/claude/machine-auth.ts b/packages/agent/packages/agent/src/adapters/claude/machine-auth.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/machine-auth.ts rename to packages/agent/packages/agent/src/adapters/claude/machine-auth.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/mcp/local-tools.test.ts b/packages/agent/packages/agent/src/adapters/claude/mcp/local-tools.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/mcp/local-tools.test.ts rename to packages/agent/packages/agent/src/adapters/claude/mcp/local-tools.test.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/mcp/local-tools.ts b/packages/agent/packages/agent/src/adapters/claude/mcp/local-tools.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/mcp/local-tools.ts rename to packages/agent/packages/agent/src/adapters/claude/mcp/local-tools.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/mcp/tool-metadata.test.ts b/packages/agent/packages/agent/src/adapters/claude/mcp/tool-metadata.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/mcp/tool-metadata.test.ts rename to packages/agent/packages/agent/src/adapters/claude/mcp/tool-metadata.test.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/mcp/tool-metadata.ts b/packages/agent/packages/agent/src/adapters/claude/mcp/tool-metadata.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/mcp/tool-metadata.ts rename to packages/agent/packages/agent/src/adapters/claude/mcp/tool-metadata.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/permissions/permission-handlers.test.ts b/packages/agent/packages/agent/src/adapters/claude/permissions/permission-handlers.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/permissions/permission-handlers.test.ts rename to packages/agent/packages/agent/src/adapters/claude/permissions/permission-handlers.test.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/permissions/permission-handlers.ts b/packages/agent/packages/agent/src/adapters/claude/permissions/permission-handlers.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/permissions/permission-handlers.ts rename to packages/agent/packages/agent/src/adapters/claude/permissions/permission-handlers.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/permissions/permission-options.test.ts b/packages/agent/packages/agent/src/adapters/claude/permissions/permission-options.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/permissions/permission-options.test.ts rename to packages/agent/packages/agent/src/adapters/claude/permissions/permission-options.test.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/permissions/permission-options.ts b/packages/agent/packages/agent/src/adapters/claude/permissions/permission-options.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/permissions/permission-options.ts rename to packages/agent/packages/agent/src/adapters/claude/permissions/permission-options.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/plan/utils.test.ts b/packages/agent/packages/agent/src/adapters/claude/plan/utils.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/plan/utils.test.ts rename to packages/agent/packages/agent/src/adapters/claude/plan/utils.test.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/plan/utils.ts b/packages/agent/packages/agent/src/adapters/claude/plan/utils.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/plan/utils.ts rename to packages/agent/packages/agent/src/adapters/claude/plan/utils.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/questions/utils.ts b/packages/agent/packages/agent/src/adapters/claude/questions/utils.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/questions/utils.ts rename to packages/agent/packages/agent/src/adapters/claude/questions/utils.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/session/budget-guard.test.ts b/packages/agent/packages/agent/src/adapters/claude/session/budget-guard.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/session/budget-guard.test.ts rename to packages/agent/packages/agent/src/adapters/claude/session/budget-guard.test.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/session/budget-guard.ts b/packages/agent/packages/agent/src/adapters/claude/session/budget-guard.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/session/budget-guard.ts rename to packages/agent/packages/agent/src/adapters/claude/session/budget-guard.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/session/commands.test.ts b/packages/agent/packages/agent/src/adapters/claude/session/commands.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/session/commands.test.ts rename to packages/agent/packages/agent/src/adapters/claude/session/commands.test.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/session/commands.ts b/packages/agent/packages/agent/src/adapters/claude/session/commands.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/session/commands.ts rename to packages/agent/packages/agent/src/adapters/claude/session/commands.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/session/initialization.test.ts b/packages/agent/packages/agent/src/adapters/claude/session/initialization.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/session/initialization.test.ts rename to packages/agent/packages/agent/src/adapters/claude/session/initialization.test.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/session/initialization.ts b/packages/agent/packages/agent/src/adapters/claude/session/initialization.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/session/initialization.ts rename to packages/agent/packages/agent/src/adapters/claude/session/initialization.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/session/jsonl-hydration.bench.ts b/packages/agent/packages/agent/src/adapters/claude/session/jsonl-hydration.bench.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/session/jsonl-hydration.bench.ts rename to packages/agent/packages/agent/src/adapters/claude/session/jsonl-hydration.bench.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/session/jsonl-hydration.test.ts b/packages/agent/packages/agent/src/adapters/claude/session/jsonl-hydration.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/session/jsonl-hydration.test.ts rename to packages/agent/packages/agent/src/adapters/claude/session/jsonl-hydration.test.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/session/jsonl-hydration.ts b/packages/agent/packages/agent/src/adapters/claude/session/jsonl-hydration.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/session/jsonl-hydration.ts rename to packages/agent/packages/agent/src/adapters/claude/session/jsonl-hydration.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/session/mcp-config.test.ts b/packages/agent/packages/agent/src/adapters/claude/session/mcp-config.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/session/mcp-config.test.ts rename to packages/agent/packages/agent/src/adapters/claude/session/mcp-config.test.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/session/mcp-config.ts b/packages/agent/packages/agent/src/adapters/claude/session/mcp-config.ts similarity index 98% rename from products/desktop/packages/agent/src/adapters/claude/session/mcp-config.ts rename to packages/agent/packages/agent/src/adapters/claude/session/mcp-config.ts index d629f618291e..657fca1262ef 100644 --- a/products/desktop/packages/agent/src/adapters/claude/session/mcp-config.ts +++ b/packages/agent/packages/agent/src/adapters/claude/session/mcp-config.ts @@ -7,7 +7,7 @@ import type { LocalMcpServerDescriptor, LocalMcpServerScope, LocalMcpTransport, -} from "@posthog/shared"; +} from "@posthog/agent-contracts"; import type { Logger } from "../../../utils/logger"; export interface ClaudeJsonMcpServerEntry { @@ -163,7 +163,7 @@ function toTransport(config: McpServerConfig): LocalMcpTransport { /** * The user's ~/.claude.json MCP servers as host-agnostic descriptors - * (`@posthog/shared`), with the raw config normalized per transport and stdio + * (`@posthog/agent-contracts`), with the raw config normalized per transport and stdio * `env` values dropped — they routinely hold secrets consumers of the * descriptor shape have no use for. */ diff --git a/products/desktop/packages/agent/src/adapters/claude/session/model-config.test.ts b/packages/agent/packages/agent/src/adapters/claude/session/model-config.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/session/model-config.test.ts rename to packages/agent/packages/agent/src/adapters/claude/session/model-config.test.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/session/model-config.ts b/packages/agent/packages/agent/src/adapters/claude/session/model-config.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/session/model-config.ts rename to packages/agent/packages/agent/src/adapters/claude/session/model-config.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/session/models.test.ts b/packages/agent/packages/agent/src/adapters/claude/session/models.test.ts similarity index 99% rename from products/desktop/packages/agent/src/adapters/claude/session/models.test.ts rename to packages/agent/packages/agent/src/adapters/claude/session/models.test.ts index 33abb3032fea..0e4812bc0dfd 100644 --- a/products/desktop/packages/agent/src/adapters/claude/session/models.test.ts +++ b/packages/agent/packages/agent/src/adapters/claude/session/models.test.ts @@ -1,4 +1,7 @@ -import { isDefaultSelectOption, selectOptionDocsUrl } from "@posthog/shared"; +import { + isDefaultSelectOption, + selectOptionDocsUrl, +} from "@posthog/agent-contracts"; import { describe, expect, it } from "vitest"; import { DEFAULT_EFFORT, diff --git a/products/desktop/packages/agent/src/adapters/claude/session/models.ts b/packages/agent/packages/agent/src/adapters/claude/session/models.ts similarity index 97% rename from products/desktop/packages/agent/src/adapters/claude/session/models.ts rename to packages/agent/packages/agent/src/adapters/claude/session/models.ts index 2dc40c272a0a..c10517d87a0c 100644 --- a/products/desktop/packages/agent/src/adapters/claude/session/models.ts +++ b/packages/agent/packages/agent/src/adapters/claude/session/models.ts @@ -3,12 +3,12 @@ import { OPTION_DOCS_URL_META_KEY, supports1MContext, supportsFastMode, -} from "@posthog/shared"; +} from "@posthog/agent-contracts"; import { EFFORT_LEVEL_DOCS_URLS, EFFORT_LEVEL_LABELS, -} from "@posthog/shared/domain-types"; -import { reasoningEffortsForModel } from "@posthog/shared/model-catalog"; +} from "@posthog/agent-contracts/domain-types"; +import { reasoningEffortsForModel } from "@posthog/agent-contracts/model-catalog"; import type { EffortLevel } from "../types"; export const DEFAULT_MODEL = "opus"; diff --git a/products/desktop/packages/agent/src/adapters/claude/session/options.test.ts b/packages/agent/packages/agent/src/adapters/claude/session/options.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/session/options.test.ts rename to packages/agent/packages/agent/src/adapters/claude/session/options.test.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/session/options.ts b/packages/agent/packages/agent/src/adapters/claude/session/options.ts similarity index 99% rename from products/desktop/packages/agent/src/adapters/claude/session/options.ts rename to packages/agent/packages/agent/src/adapters/claude/session/options.ts index 3e5f0581fc7d..54b358a5acbe 100644 --- a/products/desktop/packages/agent/src/adapters/claude/session/options.ts +++ b/packages/agent/packages/agent/src/adapters/claude/session/options.ts @@ -13,6 +13,14 @@ import type { SpawnedProcess, SpawnOptions, } from "@anthropic-ai/claude-agent-sdk"; +import { + BEDROCK_LLM_GATEWAY_FLAG, + type BedrockGatewayVariant, +} from "@posthog/agent-contracts"; +import { + buildPosthogProjectHeaderLines, + buildPosthogPropertyHeaderLines, +} from "@posthog/agent-contracts/posthog-property-headers"; import { buildAppendedInstructions } from "@posthog/harness/extensions/agent-instructions"; import { applyContextWikiEnv, @@ -21,14 +29,6 @@ import { } from "@posthog/harness/extensions/context-wiki"; import type { FileEnrichmentDeps } from "@posthog/harness/extensions/enrichment"; import { resolveRtkPrefix } from "@posthog/harness/extensions/rtk"; -import { - BEDROCK_LLM_GATEWAY_FLAG, - type BedrockGatewayVariant, -} from "@posthog/shared"; -import { - buildPosthogProjectHeaderLines, - buildPosthogPropertyHeaderLines, -} from "@posthog/shared/posthog-property-headers"; import { IS_ROOT } from "../../../utils/common"; import type { Logger } from "../../../utils/logger"; import type { TaskState } from "../conversion/task-state"; diff --git a/products/desktop/packages/agent/src/adapters/claude/session/repo-path.ts b/packages/agent/packages/agent/src/adapters/claude/session/repo-path.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/session/repo-path.ts rename to packages/agent/packages/agent/src/adapters/claude/session/repo-path.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/session/rtk-hook.test.ts b/packages/agent/packages/agent/src/adapters/claude/session/rtk-hook.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/session/rtk-hook.test.ts rename to packages/agent/packages/agent/src/adapters/claude/session/rtk-hook.test.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/session/rtk-hook.ts b/packages/agent/packages/agent/src/adapters/claude/session/rtk-hook.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/session/rtk-hook.ts rename to packages/agent/packages/agent/src/adapters/claude/session/rtk-hook.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/session/settings.test.ts b/packages/agent/packages/agent/src/adapters/claude/session/settings.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/session/settings.test.ts rename to packages/agent/packages/agent/src/adapters/claude/session/settings.test.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/session/settings.ts b/packages/agent/packages/agent/src/adapters/claude/session/settings.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/session/settings.ts rename to packages/agent/packages/agent/src/adapters/claude/session/settings.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/session/traceparent-hook.test.ts b/packages/agent/packages/agent/src/adapters/claude/session/traceparent-hook.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/session/traceparent-hook.test.ts rename to packages/agent/packages/agent/src/adapters/claude/session/traceparent-hook.test.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/session/traceparent-hook.ts b/packages/agent/packages/agent/src/adapters/claude/session/traceparent-hook.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/session/traceparent-hook.ts rename to packages/agent/packages/agent/src/adapters/claude/session/traceparent-hook.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/side-question.test.ts b/packages/agent/packages/agent/src/adapters/claude/side-question.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/side-question.test.ts rename to packages/agent/packages/agent/src/adapters/claude/side-question.test.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/side-question.ts b/packages/agent/packages/agent/src/adapters/claude/side-question.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/side-question.ts rename to packages/agent/packages/agent/src/adapters/claude/side-question.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/subscription-login.test.ts b/packages/agent/packages/agent/src/adapters/claude/subscription-login.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/subscription-login.test.ts rename to packages/agent/packages/agent/src/adapters/claude/subscription-login.test.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/subscription-login.ts b/packages/agent/packages/agent/src/adapters/claude/subscription-login.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/subscription-login.ts rename to packages/agent/packages/agent/src/adapters/claude/subscription-login.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/tools.test.ts b/packages/agent/packages/agent/src/adapters/claude/tools.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/tools.test.ts rename to packages/agent/packages/agent/src/adapters/claude/tools.test.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/tools.ts b/packages/agent/packages/agent/src/adapters/claude/tools.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/claude/tools.ts rename to packages/agent/packages/agent/src/adapters/claude/tools.ts diff --git a/products/desktop/packages/agent/src/adapters/claude/types.ts b/packages/agent/packages/agent/src/adapters/claude/types.ts similarity index 98% rename from products/desktop/packages/agent/src/adapters/claude/types.ts rename to packages/agent/packages/agent/src/adapters/claude/types.ts index 1bae51de1c1f..6dba6788f6cf 100644 --- a/products/desktop/packages/agent/src/adapters/claude/types.ts +++ b/packages/agent/packages/agent/src/adapters/claude/types.ts @@ -10,9 +10,9 @@ import type { Query, SDKUserMessage, } from "@anthropic-ai/claude-agent-sdk"; +import type { BedrockGatewayVariant } from "@posthog/agent-contracts"; +import type { EffortLevel } from "@posthog/agent-contracts/domain-types"; import type { PostHogProductId } from "@posthog/harness/extensions/posthog-mcp-policy"; -import type { BedrockGatewayVariant } from "@posthog/shared"; -import type { EffortLevel } from "@posthog/shared/domain-types"; import type { SteerDeclineCause } from "../../acp-extensions"; import type { AgentMode } from "../../types"; import type { Pushable } from "../../utils/streams"; diff --git a/products/desktop/packages/agent/src/adapters/codex-app-server/app-server-client.test.ts b/packages/agent/packages/agent/src/adapters/codex-app-server/app-server-client.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/codex-app-server/app-server-client.test.ts rename to packages/agent/packages/agent/src/adapters/codex-app-server/app-server-client.test.ts diff --git a/products/desktop/packages/agent/src/adapters/codex-app-server/app-server-client.ts b/packages/agent/packages/agent/src/adapters/codex-app-server/app-server-client.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/codex-app-server/app-server-client.ts rename to packages/agent/packages/agent/src/adapters/codex-app-server/app-server-client.ts diff --git a/products/desktop/packages/agent/src/adapters/codex-app-server/approvals.test.ts b/packages/agent/packages/agent/src/adapters/codex-app-server/approvals.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/codex-app-server/approvals.test.ts rename to packages/agent/packages/agent/src/adapters/codex-app-server/approvals.test.ts diff --git a/products/desktop/packages/agent/src/adapters/codex-app-server/approvals.ts b/packages/agent/packages/agent/src/adapters/codex-app-server/approvals.ts similarity index 99% rename from products/desktop/packages/agent/src/adapters/codex-app-server/approvals.ts rename to packages/agent/packages/agent/src/adapters/codex-app-server/approvals.ts index 06048b73fb02..d38594c2ad60 100644 --- a/products/desktop/packages/agent/src/adapters/codex-app-server/approvals.ts +++ b/packages/agent/packages/agent/src/adapters/codex-app-server/approvals.ts @@ -11,7 +11,7 @@ import type { PermissionOption, RequestPermissionResponse, } from "@agentclientprotocol/sdk"; -import { mcpToolKey, posthogToolMeta } from "@posthog/shared"; +import { mcpToolKey, posthogToolMeta } from "@posthog/agent-contracts"; import type { Logger } from "../../utils/logger"; import { OPTION_PREFIX } from "../claude/questions/utils"; import { APP_SERVER_REQUESTS } from "./protocol"; diff --git a/products/desktop/packages/agent/src/adapters/codex-app-server/binary-path.test.ts b/packages/agent/packages/agent/src/adapters/codex-app-server/binary-path.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/codex-app-server/binary-path.test.ts rename to packages/agent/packages/agent/src/adapters/codex-app-server/binary-path.test.ts diff --git a/products/desktop/packages/agent/src/adapters/codex-app-server/binary-path.ts b/packages/agent/packages/agent/src/adapters/codex-app-server/binary-path.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/codex-app-server/binary-path.ts rename to packages/agent/packages/agent/src/adapters/codex-app-server/binary-path.ts diff --git a/products/desktop/packages/agent/src/adapters/codex-app-server/codex-app-server-agent.test.ts b/packages/agent/packages/agent/src/adapters/codex-app-server/codex-app-server-agent.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/codex-app-server/codex-app-server-agent.test.ts rename to packages/agent/packages/agent/src/adapters/codex-app-server/codex-app-server-agent.test.ts diff --git a/products/desktop/packages/agent/src/adapters/codex-app-server/codex-app-server-agent.ts b/packages/agent/packages/agent/src/adapters/codex-app-server/codex-app-server-agent.ts similarity index 99% rename from products/desktop/packages/agent/src/adapters/codex-app-server/codex-app-server-agent.ts rename to packages/agent/packages/agent/src/adapters/codex-app-server/codex-app-server-agent.ts index 1f2a68bb5aa2..27e3d23162a8 100644 --- a/products/desktop/packages/agent/src/adapters/codex-app-server/codex-app-server-agent.ts +++ b/packages/agent/packages/agent/src/adapters/codex-app-server/codex-app-server-agent.ts @@ -22,6 +22,12 @@ import type { StopReason, } from "@agentclientprotocol/sdk"; import { RequestError } from "@agentclientprotocol/sdk"; +import { + classifyGatewayLimitError, + mcpToolKey, + posthogToolMeta, + serializeError, +} from "@posthog/agent-contracts"; import { buildContextWikiInstructions, type ContextWikiEnv, @@ -34,12 +40,6 @@ import { matchesPostHogExecPermission, resolvePostHogExecPermissionRegex, } from "@posthog/harness/extensions/posthog-mcp-policy"; -import { - classifyGatewayLimitError, - mcpToolKey, - posthogToolMeta, - serializeError, -} from "@posthog/shared"; import { isMethod, type NativeGoalState, diff --git a/products/desktop/packages/agent/src/adapters/codex-app-server/ext-notifications.test.ts b/packages/agent/packages/agent/src/adapters/codex-app-server/ext-notifications.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/codex-app-server/ext-notifications.test.ts rename to packages/agent/packages/agent/src/adapters/codex-app-server/ext-notifications.test.ts diff --git a/products/desktop/packages/agent/src/adapters/codex-app-server/ext-notifications.ts b/packages/agent/packages/agent/src/adapters/codex-app-server/ext-notifications.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/codex-app-server/ext-notifications.ts rename to packages/agent/packages/agent/src/adapters/codex-app-server/ext-notifications.ts diff --git a/products/desktop/packages/agent/src/adapters/codex-app-server/input.test.ts b/packages/agent/packages/agent/src/adapters/codex-app-server/input.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/codex-app-server/input.test.ts rename to packages/agent/packages/agent/src/adapters/codex-app-server/input.test.ts diff --git a/products/desktop/packages/agent/src/adapters/codex-app-server/input.ts b/packages/agent/packages/agent/src/adapters/codex-app-server/input.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/codex-app-server/input.ts rename to packages/agent/packages/agent/src/adapters/codex-app-server/input.ts diff --git a/products/desktop/packages/agent/src/adapters/codex-app-server/local-tools-mcp-server.ts b/packages/agent/packages/agent/src/adapters/codex-app-server/local-tools-mcp-server.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/codex-app-server/local-tools-mcp-server.ts rename to packages/agent/packages/agent/src/adapters/codex-app-server/local-tools-mcp-server.ts diff --git a/products/desktop/packages/agent/src/adapters/codex-app-server/local-tools-mcp.test.ts b/packages/agent/packages/agent/src/adapters/codex-app-server/local-tools-mcp.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/codex-app-server/local-tools-mcp.test.ts rename to packages/agent/packages/agent/src/adapters/codex-app-server/local-tools-mcp.test.ts diff --git a/products/desktop/packages/agent/src/adapters/codex-app-server/local-tools-mcp.ts b/packages/agent/packages/agent/src/adapters/codex-app-server/local-tools-mcp.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/codex-app-server/local-tools-mcp.ts rename to packages/agent/packages/agent/src/adapters/codex-app-server/local-tools-mcp.ts diff --git a/products/desktop/packages/agent/src/adapters/codex-app-server/mapping.test.ts b/packages/agent/packages/agent/src/adapters/codex-app-server/mapping.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/codex-app-server/mapping.test.ts rename to packages/agent/packages/agent/src/adapters/codex-app-server/mapping.test.ts diff --git a/products/desktop/packages/agent/src/adapters/codex-app-server/mapping.ts b/packages/agent/packages/agent/src/adapters/codex-app-server/mapping.ts similarity index 99% rename from products/desktop/packages/agent/src/adapters/codex-app-server/mapping.ts rename to packages/agent/packages/agent/src/adapters/codex-app-server/mapping.ts index fe87e4adaf6e..77c513707614 100644 --- a/products/desktop/packages/agent/src/adapters/codex-app-server/mapping.ts +++ b/packages/agent/packages/agent/src/adapters/codex-app-server/mapping.ts @@ -7,7 +7,7 @@ import { boundPersistedMcpResult, mcpToolKey, posthogToolMeta, -} from "@posthog/shared"; +} from "@posthog/agent-contracts"; import { APP_SERVER_NOTIFICATIONS } from "./protocol"; import { readTokenUsage } from "./token-usage"; diff --git a/products/desktop/packages/agent/src/adapters/codex-app-server/mcp-config.test.ts b/packages/agent/packages/agent/src/adapters/codex-app-server/mcp-config.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/codex-app-server/mcp-config.test.ts rename to packages/agent/packages/agent/src/adapters/codex-app-server/mcp-config.test.ts diff --git a/products/desktop/packages/agent/src/adapters/codex-app-server/mcp-config.ts b/packages/agent/packages/agent/src/adapters/codex-app-server/mcp-config.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/codex-app-server/mcp-config.ts rename to packages/agent/packages/agent/src/adapters/codex-app-server/mcp-config.ts diff --git a/products/desktop/packages/agent/src/adapters/codex-app-server/mcp-manager.test.ts b/packages/agent/packages/agent/src/adapters/codex-app-server/mcp-manager.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/codex-app-server/mcp-manager.test.ts rename to packages/agent/packages/agent/src/adapters/codex-app-server/mcp-manager.test.ts diff --git a/products/desktop/packages/agent/src/adapters/codex-app-server/mcp-manager.ts b/packages/agent/packages/agent/src/adapters/codex-app-server/mcp-manager.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/codex-app-server/mcp-manager.ts rename to packages/agent/packages/agent/src/adapters/codex-app-server/mcp-manager.ts diff --git a/products/desktop/packages/agent/src/adapters/codex-app-server/models.test.ts b/packages/agent/packages/agent/src/adapters/codex-app-server/models.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/codex-app-server/models.test.ts rename to packages/agent/packages/agent/src/adapters/codex-app-server/models.test.ts diff --git a/products/desktop/packages/agent/src/adapters/codex-app-server/models.ts b/packages/agent/packages/agent/src/adapters/codex-app-server/models.ts similarity index 90% rename from products/desktop/packages/agent/src/adapters/codex-app-server/models.ts rename to packages/agent/packages/agent/src/adapters/codex-app-server/models.ts index 1cceab0b41eb..cebb1092d6a2 100644 --- a/products/desktop/packages/agent/src/adapters/codex-app-server/models.ts +++ b/packages/agent/packages/agent/src/adapters/codex-app-server/models.ts @@ -3,9 +3,9 @@ import type { SessionConfigSelectGroup, SessionConfigSelectOption, } from "@agentclientprotocol/sdk"; -import { DEFAULT_OPTION_META_KEY } from "@posthog/shared"; -import { EFFORT_LEVEL_LABELS } from "@posthog/shared/domain-types"; -import { reasoningEffortsForModel } from "@posthog/shared/model-catalog"; +import { DEFAULT_OPTION_META_KEY } from "@posthog/agent-contracts"; +import { EFFORT_LEVEL_LABELS } from "@posthog/agent-contracts/domain-types"; +import { reasoningEffortsForModel } from "@posthog/agent-contracts/model-catalog"; interface ReasoningEffortOption { value: string; diff --git a/products/desktop/packages/agent/src/adapters/codex-app-server/protocol.ts b/packages/agent/packages/agent/src/adapters/codex-app-server/protocol.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/codex-app-server/protocol.ts rename to packages/agent/packages/agent/src/adapters/codex-app-server/protocol.ts diff --git a/products/desktop/packages/agent/src/adapters/codex-app-server/session-config.test.ts b/packages/agent/packages/agent/src/adapters/codex-app-server/session-config.test.ts similarity index 99% rename from products/desktop/packages/agent/src/adapters/codex-app-server/session-config.test.ts rename to packages/agent/packages/agent/src/adapters/codex-app-server/session-config.test.ts index c9b51dba34df..42e5ab401c4e 100644 --- a/products/desktop/packages/agent/src/adapters/codex-app-server/session-config.test.ts +++ b/packages/agent/packages/agent/src/adapters/codex-app-server/session-config.test.ts @@ -1,7 +1,7 @@ import { DEFAULT_OPTION_META_KEY, isRestrictedModelOption, -} from "@posthog/shared"; +} from "@posthog/agent-contracts"; import { describe, expect, it } from "vitest"; import { buildCodexModes, diff --git a/products/desktop/packages/agent/src/adapters/codex-app-server/session-config.ts b/packages/agent/packages/agent/src/adapters/codex-app-server/session-config.ts similarity index 98% rename from products/desktop/packages/agent/src/adapters/codex-app-server/session-config.ts rename to packages/agent/packages/agent/src/adapters/codex-app-server/session-config.ts index 4c25ad422eaf..8b829687e71b 100644 --- a/products/desktop/packages/agent/src/adapters/codex-app-server/session-config.ts +++ b/packages/agent/packages/agent/src/adapters/codex-app-server/session-config.ts @@ -9,8 +9,8 @@ import { type ExecutionMode, resolveCloudInitialPermissionMode, restrictedModelMeta, -} from "@posthog/shared"; -import { EFFORT_LEVEL_LABELS } from "@posthog/shared/domain-types"; +} from "@posthog/agent-contracts"; +import { EFFORT_LEVEL_LABELS } from "@posthog/agent-contracts/domain-types"; import { type GatewayModel, isOpenAIModel, @@ -70,7 +70,7 @@ function editableSandboxPolicy(platform: string): CodexSandboxPolicy { } // Flattened Claude-style presets: the `{id, name, description}` literals live -// in @posthog/shared (one copy for every picker); this map owns the behavior. +// in @posthog/agent-contracts (one copy for every picker); this map owns the behavior. // Restriction is driven by approvalPolicy + sandboxPolicy: plan/read-only block // edits, auto/full-access restore the platform's editable sandbox. function modePolicies( diff --git a/products/desktop/packages/agent/src/adapters/codex-app-server/spawn.test.ts b/packages/agent/packages/agent/src/adapters/codex-app-server/spawn.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/codex-app-server/spawn.test.ts rename to packages/agent/packages/agent/src/adapters/codex-app-server/spawn.test.ts diff --git a/products/desktop/packages/agent/src/adapters/codex-app-server/spawn.ts b/packages/agent/packages/agent/src/adapters/codex-app-server/spawn.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/codex-app-server/spawn.ts rename to packages/agent/packages/agent/src/adapters/codex-app-server/spawn.ts diff --git a/products/desktop/packages/agent/src/adapters/codex-app-server/structured-output.test.ts b/packages/agent/packages/agent/src/adapters/codex-app-server/structured-output.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/codex-app-server/structured-output.test.ts rename to packages/agent/packages/agent/src/adapters/codex-app-server/structured-output.test.ts diff --git a/products/desktop/packages/agent/src/adapters/codex-app-server/structured-output.ts b/packages/agent/packages/agent/src/adapters/codex-app-server/structured-output.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/codex-app-server/structured-output.ts rename to packages/agent/packages/agent/src/adapters/codex-app-server/structured-output.ts diff --git a/products/desktop/packages/agent/src/adapters/codex-app-server/subscription-login.test.ts b/packages/agent/packages/agent/src/adapters/codex-app-server/subscription-login.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/codex-app-server/subscription-login.test.ts rename to packages/agent/packages/agent/src/adapters/codex-app-server/subscription-login.test.ts diff --git a/products/desktop/packages/agent/src/adapters/codex-app-server/subscription-login.ts b/packages/agent/packages/agent/src/adapters/codex-app-server/subscription-login.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/codex-app-server/subscription-login.ts rename to packages/agent/packages/agent/src/adapters/codex-app-server/subscription-login.ts diff --git a/products/desktop/packages/agent/src/adapters/codex-app-server/thread-state.test.ts b/packages/agent/packages/agent/src/adapters/codex-app-server/thread-state.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/codex-app-server/thread-state.test.ts rename to packages/agent/packages/agent/src/adapters/codex-app-server/thread-state.test.ts diff --git a/products/desktop/packages/agent/src/adapters/codex-app-server/thread-state.ts b/packages/agent/packages/agent/src/adapters/codex-app-server/thread-state.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/codex-app-server/thread-state.ts rename to packages/agent/packages/agent/src/adapters/codex-app-server/thread-state.ts diff --git a/products/desktop/packages/agent/src/adapters/codex-app-server/token-usage.ts b/packages/agent/packages/agent/src/adapters/codex-app-server/token-usage.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/codex-app-server/token-usage.ts rename to packages/agent/packages/agent/src/adapters/codex-app-server/token-usage.ts diff --git a/products/desktop/packages/agent/src/adapters/codex-app-server/turn-controller.test.ts b/packages/agent/packages/agent/src/adapters/codex-app-server/turn-controller.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/codex-app-server/turn-controller.test.ts rename to packages/agent/packages/agent/src/adapters/codex-app-server/turn-controller.test.ts diff --git a/products/desktop/packages/agent/src/adapters/codex-app-server/turn-controller.ts b/packages/agent/packages/agent/src/adapters/codex-app-server/turn-controller.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/codex-app-server/turn-controller.ts rename to packages/agent/packages/agent/src/adapters/codex-app-server/turn-controller.ts diff --git a/products/desktop/packages/agent/src/adapters/codex-app-server/usage-tracker.test.ts b/packages/agent/packages/agent/src/adapters/codex-app-server/usage-tracker.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/codex-app-server/usage-tracker.test.ts rename to packages/agent/packages/agent/src/adapters/codex-app-server/usage-tracker.test.ts diff --git a/products/desktop/packages/agent/src/adapters/codex-app-server/usage-tracker.ts b/packages/agent/packages/agent/src/adapters/codex-app-server/usage-tracker.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/codex-app-server/usage-tracker.ts rename to packages/agent/packages/agent/src/adapters/codex-app-server/usage-tracker.ts diff --git a/products/desktop/packages/agent/src/adapters/error-classification.test.ts b/packages/agent/packages/agent/src/adapters/error-classification.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/error-classification.test.ts rename to packages/agent/packages/agent/src/adapters/error-classification.test.ts diff --git a/products/desktop/packages/agent/src/adapters/error-classification.ts b/packages/agent/packages/agent/src/adapters/error-classification.ts similarity index 98% rename from products/desktop/packages/agent/src/adapters/error-classification.ts rename to packages/agent/packages/agent/src/adapters/error-classification.ts index d07691fa438d..fbdf3ca23ac0 100644 --- a/products/desktop/packages/agent/src/adapters/error-classification.ts +++ b/packages/agent/packages/agent/src/adapters/error-classification.ts @@ -1,4 +1,4 @@ -import { getErrorMessage } from "@posthog/shared"; +import { getErrorMessage } from "@posthog/agent-contracts"; export type AgentErrorClassification = | "upstream_stream_terminated" diff --git a/products/desktop/packages/agent/src/adapters/local-skill.ts b/packages/agent/packages/agent/src/adapters/local-skill.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/local-skill.ts rename to packages/agent/packages/agent/src/adapters/local-skill.ts diff --git a/products/desktop/packages/agent/src/adapters/prompt-blocks.ts b/packages/agent/packages/agent/src/adapters/prompt-blocks.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/prompt-blocks.ts rename to packages/agent/packages/agent/src/adapters/prompt-blocks.ts diff --git a/products/desktop/packages/agent/src/adapters/reasoning-effort.test.ts b/packages/agent/packages/agent/src/adapters/reasoning-effort.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/reasoning-effort.test.ts rename to packages/agent/packages/agent/src/adapters/reasoning-effort.test.ts diff --git a/products/desktop/packages/agent/src/adapters/reasoning-effort.ts b/packages/agent/packages/agent/src/adapters/reasoning-effort.ts similarity index 93% rename from products/desktop/packages/agent/src/adapters/reasoning-effort.ts rename to packages/agent/packages/agent/src/adapters/reasoning-effort.ts index 3d0f01a25cea..87a6d8382d8e 100644 --- a/products/desktop/packages/agent/src/adapters/reasoning-effort.ts +++ b/packages/agent/packages/agent/src/adapters/reasoning-effort.ts @@ -2,8 +2,8 @@ import { type Adapter, type CapabilityNotch, getCapabilityLadder, -} from "@posthog/shared"; -import type { EffortLevel } from "@posthog/shared/domain-types"; +} from "@posthog/agent-contracts"; +import type { EffortLevel } from "@posthog/agent-contracts/domain-types"; import { getContextWindowOptions as getClaudeContextWindowOptions, getEffortOptions as getClaudeEffortOptions, diff --git a/products/desktop/packages/agent/src/adapters/session-meta.test.ts b/packages/agent/packages/agent/src/adapters/session-meta.test.ts similarity index 100% rename from products/desktop/packages/agent/src/adapters/session-meta.test.ts rename to packages/agent/packages/agent/src/adapters/session-meta.test.ts diff --git a/products/desktop/packages/agent/src/adapters/session-meta.ts b/packages/agent/packages/agent/src/adapters/session-meta.ts similarity index 96% rename from products/desktop/packages/agent/src/adapters/session-meta.ts rename to packages/agent/packages/agent/src/adapters/session-meta.ts index 9b0abffc34d0..c727199d67bc 100644 --- a/products/desktop/packages/agent/src/adapters/session-meta.ts +++ b/packages/agent/packages/agent/src/adapters/session-meta.ts @@ -1,4 +1,4 @@ -import type { BedrockGatewayVariant } from "@posthog/shared"; +import type { BedrockGatewayVariant } from "@posthog/agent-contracts"; /** Minimal shape needed to resolve the effective task id from session meta. */ interface TaskIdSource { diff --git a/products/desktop/packages/agent/src/agent.test.ts b/packages/agent/packages/agent/src/agent.test.ts similarity index 100% rename from products/desktop/packages/agent/src/agent.test.ts rename to packages/agent/packages/agent/src/agent.test.ts diff --git a/products/desktop/packages/agent/src/agent.ts b/packages/agent/packages/agent/src/agent.ts similarity index 98% rename from products/desktop/packages/agent/src/agent.ts rename to packages/agent/packages/agent/src/agent.ts index f348ce55196b..161e067030cf 100644 --- a/products/desktop/packages/agent/src/agent.ts +++ b/packages/agent/packages/agent/src/agent.ts @@ -3,14 +3,14 @@ import { isAnthropicModelId, mergePrUrls, readPrUrls, -} from "@posthog/shared"; -import { isRetiredModel } from "@posthog/shared/model-catalog"; +} from "@posthog/agent-contracts"; +import { isRetiredModel } from "@posthog/agent-contracts/model-catalog"; import { buildPosthogPropertyHeaderLines, buildPosthogPropertyHeaderRecord, buildPosthogUserHeaderLines, buildPosthogUserHeaderRecord, -} from "@posthog/shared/posthog-property-headers"; +} from "@posthog/agent-contracts/posthog-property-headers"; import { createAcpConnection, type InProcessAcpConnection, diff --git a/products/desktop/packages/agent/src/execution-mode.test.ts b/packages/agent/packages/agent/src/execution-mode.test.ts similarity index 100% rename from products/desktop/packages/agent/src/execution-mode.test.ts rename to packages/agent/packages/agent/src/execution-mode.test.ts diff --git a/products/desktop/packages/agent/src/execution-mode.ts b/packages/agent/packages/agent/src/execution-mode.ts similarity index 92% rename from products/desktop/packages/agent/src/execution-mode.ts rename to packages/agent/packages/agent/src/execution-mode.ts index 7ebf75e86bed..513dfcec2cc4 100644 --- a/products/desktop/packages/agent/src/execution-mode.ts +++ b/packages/agent/packages/agent/src/execution-mode.ts @@ -1,4 +1,7 @@ -import { CODEX_MODE_PRESETS, type ExecutionMode } from "@posthog/shared"; +import { + CODEX_MODE_PRESETS, + type ExecutionMode, +} from "@posthog/agent-contracts"; import { ALLOW_BYPASS } from "./utils/common"; export interface ModeInfo { @@ -74,7 +77,7 @@ export function isCodexNativeMode(mode: string): mode is CodexNativeMode { return (CODEX_NATIVE_MODES as readonly string[]).includes(mode); } -// The preset literals live in @posthog/shared (one copy for every picker and +// The preset literals live in @posthog/agent-contracts (one copy for every picker and // the app-server adapter's CODEX_MODES); this module only owns the gating. export function getAvailableCodexModes(): ModeInfo[] { return ALLOW_BYPASS diff --git a/products/desktop/packages/agent/src/gateway-models.test.ts b/packages/agent/packages/agent/src/gateway-models.test.ts similarity index 100% rename from products/desktop/packages/agent/src/gateway-models.test.ts rename to packages/agent/packages/agent/src/gateway-models.test.ts diff --git a/products/desktop/packages/agent/src/gateway-models.ts b/packages/agent/packages/agent/src/gateway-models.ts similarity index 96% rename from products/desktop/packages/agent/src/gateway-models.ts rename to packages/agent/packages/agent/src/gateway-models.ts index 4d3e9a41064f..3f4aae79621e 100644 --- a/products/desktop/packages/agent/src/gateway-models.ts +++ b/packages/agent/packages/agent/src/gateway-models.ts @@ -1,8 +1,8 @@ import { type GatewayModel, normalizeGatewayModelsResponse, -} from "@posthog/shared"; -import { buildPosthogProjectHeaderRecord } from "@posthog/shared/posthog-property-headers"; +} from "@posthog/agent-contracts"; +import { buildPosthogProjectHeaderRecord } from "@posthog/agent-contracts/posthog-property-headers"; export { adapterForModelId, @@ -29,7 +29,7 @@ export { isOfferedModel, isOpenAIModel, pickAllowedModel, -} from "@posthog/shared"; +} from "@posthog/agent-contracts"; export interface FetchGatewayModelsOptions { gatewayUrl: string; diff --git a/products/desktop/packages/agent/src/index.ts b/packages/agent/packages/agent/src/index.ts similarity index 100% rename from products/desktop/packages/agent/src/index.ts rename to packages/agent/packages/agent/src/index.ts diff --git a/products/desktop/packages/agent/src/otel-attributes.ts b/packages/agent/packages/agent/src/otel-attributes.ts similarity index 100% rename from products/desktop/packages/agent/src/otel-attributes.ts rename to packages/agent/packages/agent/src/otel-attributes.ts diff --git a/products/desktop/packages/agent/src/otel-telemetry.test.ts b/packages/agent/packages/agent/src/otel-telemetry.test.ts similarity index 100% rename from products/desktop/packages/agent/src/otel-telemetry.test.ts rename to packages/agent/packages/agent/src/otel-telemetry.test.ts diff --git a/products/desktop/packages/agent/src/otel-telemetry.ts b/packages/agent/packages/agent/src/otel-telemetry.ts similarity index 100% rename from products/desktop/packages/agent/src/otel-telemetry.ts rename to packages/agent/packages/agent/src/otel-telemetry.ts diff --git a/products/desktop/packages/agent/src/otel-trace-builder.ts b/packages/agent/packages/agent/src/otel-trace-builder.ts similarity index 100% rename from products/desktop/packages/agent/src/otel-trace-builder.ts rename to packages/agent/packages/agent/src/otel-trace-builder.ts diff --git a/products/desktop/packages/agent/src/persistent-agent-state.test.ts b/packages/agent/packages/agent/src/persistent-agent-state.test.ts similarity index 100% rename from products/desktop/packages/agent/src/persistent-agent-state.test.ts rename to packages/agent/packages/agent/src/persistent-agent-state.test.ts diff --git a/products/desktop/packages/agent/src/persistent-agent-state.ts b/packages/agent/packages/agent/src/persistent-agent-state.ts similarity index 100% rename from products/desktop/packages/agent/src/persistent-agent-state.ts rename to packages/agent/packages/agent/src/persistent-agent-state.ts diff --git a/products/desktop/packages/agent/src/pi/conversation/toolTranslator.ts b/packages/agent/packages/agent/src/pi/conversation/toolTranslator.ts similarity index 93% rename from products/desktop/packages/agent/src/pi/conversation/toolTranslator.ts rename to packages/agent/packages/agent/src/pi/conversation/toolTranslator.ts index be9017193f5d..1ca05fd54383 100644 --- a/products/desktop/packages/agent/src/pi/conversation/toolTranslator.ts +++ b/packages/agent/packages/agent/src/pi/conversation/toolTranslator.ts @@ -2,7 +2,7 @@ import type { ImageContent, TextContent } from "@earendil-works/pi-ai"; import type { AgentToolCallContent, AgentToolCallLocation, -} from "@posthog/shared"; +} from "@posthog/agent-contracts"; export interface PiToolTranslatorInput { toolCallId: string; diff --git a/products/desktop/packages/agent/src/pi/conversation/tools/bashTranslator.test.ts b/packages/agent/packages/agent/src/pi/conversation/tools/bashTranslator.test.ts similarity index 100% rename from products/desktop/packages/agent/src/pi/conversation/tools/bashTranslator.test.ts rename to packages/agent/packages/agent/src/pi/conversation/tools/bashTranslator.test.ts diff --git a/products/desktop/packages/agent/src/pi/conversation/tools/bashTranslator.ts b/packages/agent/packages/agent/src/pi/conversation/tools/bashTranslator.ts similarity index 86% rename from products/desktop/packages/agent/src/pi/conversation/tools/bashTranslator.ts rename to packages/agent/packages/agent/src/pi/conversation/tools/bashTranslator.ts index 694dc0de16bc..d92fe60d0aaa 100644 --- a/products/desktop/packages/agent/src/pi/conversation/tools/bashTranslator.ts +++ b/packages/agent/packages/agent/src/pi/conversation/tools/bashTranslator.ts @@ -1,4 +1,4 @@ -import type { AgentToolCallContent } from "@posthog/shared"; +import type { AgentToolCallContent } from "@posthog/agent-contracts"; import type { PiToolTranslator } from "../toolTranslator"; export const bashTranslator: PiToolTranslator = ({ resultContent }) => { diff --git a/products/desktop/packages/agent/src/pi/conversation/tools/editTranslator.test.ts b/packages/agent/packages/agent/src/pi/conversation/tools/editTranslator.test.ts similarity index 100% rename from products/desktop/packages/agent/src/pi/conversation/tools/editTranslator.test.ts rename to packages/agent/packages/agent/src/pi/conversation/tools/editTranslator.test.ts diff --git a/products/desktop/packages/agent/src/pi/conversation/tools/editTranslator.ts b/packages/agent/packages/agent/src/pi/conversation/tools/editTranslator.ts similarity index 97% rename from products/desktop/packages/agent/src/pi/conversation/tools/editTranslator.ts rename to packages/agent/packages/agent/src/pi/conversation/tools/editTranslator.ts index 1b717624d0ac..492889d2bafd 100644 --- a/products/desktop/packages/agent/src/pi/conversation/tools/editTranslator.ts +++ b/packages/agent/packages/agent/src/pi/conversation/tools/editTranslator.ts @@ -5,7 +5,7 @@ import type { import type { AgentToolCallContent, AgentToolCallLocation, -} from "@posthog/shared"; +} from "@posthog/agent-contracts"; import type { PiToolTranslator } from "../toolTranslator"; export const editTranslator: PiToolTranslator = ({ diff --git a/products/desktop/packages/agent/src/pi/conversation/tools/findTranslator.test.ts b/packages/agent/packages/agent/src/pi/conversation/tools/findTranslator.test.ts similarity index 100% rename from products/desktop/packages/agent/src/pi/conversation/tools/findTranslator.test.ts rename to packages/agent/packages/agent/src/pi/conversation/tools/findTranslator.test.ts diff --git a/products/desktop/packages/agent/src/pi/conversation/tools/findTranslator.ts b/packages/agent/packages/agent/src/pi/conversation/tools/findTranslator.ts similarity index 90% rename from products/desktop/packages/agent/src/pi/conversation/tools/findTranslator.ts rename to packages/agent/packages/agent/src/pi/conversation/tools/findTranslator.ts index cfa526b69ef8..d11ba3fc793f 100644 --- a/products/desktop/packages/agent/src/pi/conversation/tools/findTranslator.ts +++ b/packages/agent/packages/agent/src/pi/conversation/tools/findTranslator.ts @@ -1,5 +1,5 @@ import type { FindToolInput } from "@earendil-works/pi-coding-agent"; -import type { AgentToolCallLocation } from "@posthog/shared"; +import type { AgentToolCallLocation } from "@posthog/agent-contracts"; import type { PiToolTranslator } from "../toolTranslator"; export const findTranslator: PiToolTranslator = ({ diff --git a/products/desktop/packages/agent/src/pi/conversation/tools/grepTranslator.test.ts b/packages/agent/packages/agent/src/pi/conversation/tools/grepTranslator.test.ts similarity index 100% rename from products/desktop/packages/agent/src/pi/conversation/tools/grepTranslator.test.ts rename to packages/agent/packages/agent/src/pi/conversation/tools/grepTranslator.test.ts diff --git a/products/desktop/packages/agent/src/pi/conversation/tools/grepTranslator.ts b/packages/agent/packages/agent/src/pi/conversation/tools/grepTranslator.ts similarity index 97% rename from products/desktop/packages/agent/src/pi/conversation/tools/grepTranslator.ts rename to packages/agent/packages/agent/src/pi/conversation/tools/grepTranslator.ts index 0686d7bfb497..a6f6d4083fc5 100644 --- a/products/desktop/packages/agent/src/pi/conversation/tools/grepTranslator.ts +++ b/packages/agent/packages/agent/src/pi/conversation/tools/grepTranslator.ts @@ -5,7 +5,7 @@ import type { import type { AgentToolCallContentBlock, AgentToolCallLocation, -} from "@posthog/shared"; +} from "@posthog/agent-contracts"; import type { PiToolTranslator } from "../toolTranslator"; export const grepTranslator: PiToolTranslator = ({ diff --git a/products/desktop/packages/agent/src/pi/conversation/tools/lsTranslator.test.ts b/packages/agent/packages/agent/src/pi/conversation/tools/lsTranslator.test.ts similarity index 100% rename from products/desktop/packages/agent/src/pi/conversation/tools/lsTranslator.test.ts rename to packages/agent/packages/agent/src/pi/conversation/tools/lsTranslator.test.ts diff --git a/products/desktop/packages/agent/src/pi/conversation/tools/lsTranslator.ts b/packages/agent/packages/agent/src/pi/conversation/tools/lsTranslator.ts similarity index 95% rename from products/desktop/packages/agent/src/pi/conversation/tools/lsTranslator.ts rename to packages/agent/packages/agent/src/pi/conversation/tools/lsTranslator.ts index d50893580ec1..932f36cd8dfa 100644 --- a/products/desktop/packages/agent/src/pi/conversation/tools/lsTranslator.ts +++ b/packages/agent/packages/agent/src/pi/conversation/tools/lsTranslator.ts @@ -2,7 +2,7 @@ import type { LsToolInput } from "@earendil-works/pi-coding-agent"; import type { AgentToolCallContent, AgentToolCallLocation, -} from "@posthog/shared"; +} from "@posthog/agent-contracts"; import type { PiToolTranslator } from "../toolTranslator"; export const lsTranslator: PiToolTranslator = ({ diff --git a/products/desktop/packages/agent/src/pi/conversation/tools/readTranslator.test.ts b/packages/agent/packages/agent/src/pi/conversation/tools/readTranslator.test.ts similarity index 100% rename from products/desktop/packages/agent/src/pi/conversation/tools/readTranslator.test.ts rename to packages/agent/packages/agent/src/pi/conversation/tools/readTranslator.test.ts diff --git a/products/desktop/packages/agent/src/pi/conversation/tools/readTranslator.ts b/packages/agent/packages/agent/src/pi/conversation/tools/readTranslator.ts similarity index 93% rename from products/desktop/packages/agent/src/pi/conversation/tools/readTranslator.ts rename to packages/agent/packages/agent/src/pi/conversation/tools/readTranslator.ts index 4086394c947e..6f5fc91e2280 100644 --- a/products/desktop/packages/agent/src/pi/conversation/tools/readTranslator.ts +++ b/packages/agent/packages/agent/src/pi/conversation/tools/readTranslator.ts @@ -2,7 +2,7 @@ import type { ReadToolDetails, ReadToolInput, } from "@earendil-works/pi-coding-agent"; -import type { AgentToolCallContent } from "@posthog/shared"; +import type { AgentToolCallContent } from "@posthog/agent-contracts"; import type { PiToolTranslator } from "../toolTranslator"; export const readTranslator: PiToolTranslator = ({ diff --git a/products/desktop/packages/agent/src/pi/conversation/tools/writeTranslator.test.ts b/packages/agent/packages/agent/src/pi/conversation/tools/writeTranslator.test.ts similarity index 100% rename from products/desktop/packages/agent/src/pi/conversation/tools/writeTranslator.test.ts rename to packages/agent/packages/agent/src/pi/conversation/tools/writeTranslator.test.ts diff --git a/products/desktop/packages/agent/src/pi/conversation/tools/writeTranslator.ts b/packages/agent/packages/agent/src/pi/conversation/tools/writeTranslator.ts similarity index 100% rename from products/desktop/packages/agent/src/pi/conversation/tools/writeTranslator.ts rename to packages/agent/packages/agent/src/pi/conversation/tools/writeTranslator.ts diff --git a/products/desktop/packages/agent/src/pi/conversation/translatePiConversation.test.ts b/packages/agent/packages/agent/src/pi/conversation/translatePiConversation.test.ts similarity index 100% rename from products/desktop/packages/agent/src/pi/conversation/translatePiConversation.test.ts rename to packages/agent/packages/agent/src/pi/conversation/translatePiConversation.test.ts diff --git a/products/desktop/packages/agent/src/pi/conversation/translatePiConversation.ts b/packages/agent/packages/agent/src/pi/conversation/translatePiConversation.ts similarity index 99% rename from products/desktop/packages/agent/src/pi/conversation/translatePiConversation.ts rename to packages/agent/packages/agent/src/pi/conversation/translatePiConversation.ts index 7ba9edfc9104..274c51e1136d 100644 --- a/products/desktop/packages/agent/src/pi/conversation/translatePiConversation.ts +++ b/packages/agent/packages/agent/src/pi/conversation/translatePiConversation.ts @@ -1,6 +1,9 @@ import type { AssistantMessage, Message, Usage } from "@earendil-works/pi-ai"; import type { JsonAgentSessionEvent } from "@earendil-works/pi-coding-agent"; -import type { AgentConversationEvent, AgentTurnUsage } from "@posthog/shared"; +import type { + AgentConversationEvent, + AgentTurnUsage, +} from "@posthog/agent-contracts"; import { createPiMessageTranslator } from "./translatePiMessage"; type AgentMessage = Extract< diff --git a/products/desktop/packages/agent/src/pi/conversation/translatePiMessage.test.ts b/packages/agent/packages/agent/src/pi/conversation/translatePiMessage.test.ts similarity index 100% rename from products/desktop/packages/agent/src/pi/conversation/translatePiMessage.test.ts rename to packages/agent/packages/agent/src/pi/conversation/translatePiMessage.test.ts diff --git a/products/desktop/packages/agent/src/pi/conversation/translatePiMessage.ts b/packages/agent/packages/agent/src/pi/conversation/translatePiMessage.ts similarity index 99% rename from products/desktop/packages/agent/src/pi/conversation/translatePiMessage.ts rename to packages/agent/packages/agent/src/pi/conversation/translatePiMessage.ts index 7d1d1df9bfc7..365037771f7a 100644 --- a/products/desktop/packages/agent/src/pi/conversation/translatePiMessage.ts +++ b/packages/agent/packages/agent/src/pi/conversation/translatePiMessage.ts @@ -4,10 +4,6 @@ import type { ToolResultMessage, UserMessage, } from "@earendil-works/pi-ai"; -import type { - McpCallDetails, - McpResultMeta, -} from "@posthog/harness/extensions/mcp/tool-bridge"; import { type AgentContent, type AgentConversationEvent, @@ -20,7 +16,11 @@ import { type PiToolName, parsePiMcpCallDetails, posthogToolMeta, -} from "@posthog/shared"; +} from "@posthog/agent-contracts"; +import type { + McpCallDetails, + McpResultMeta, +} from "@posthog/harness/extensions/mcp/tool-bridge"; import { z } from "zod"; import { bashTranslator } from "./tools/bashTranslator"; import { editTranslator } from "./tools/editTranslator"; diff --git a/products/desktop/packages/agent/src/pi/queue-persistence.test.ts b/packages/agent/packages/agent/src/pi/queue-persistence.test.ts similarity index 100% rename from products/desktop/packages/agent/src/pi/queue-persistence.test.ts rename to packages/agent/packages/agent/src/pi/queue-persistence.test.ts diff --git a/products/desktop/packages/agent/src/pi/queue-persistence.ts b/packages/agent/packages/agent/src/pi/queue-persistence.ts similarity index 100% rename from products/desktop/packages/agent/src/pi/queue-persistence.ts rename to packages/agent/packages/agent/src/pi/queue-persistence.ts diff --git a/products/desktop/packages/agent/src/pi/remote-rpc-client.ts b/packages/agent/packages/agent/src/pi/remote-rpc-client.ts similarity index 98% rename from products/desktop/packages/agent/src/pi/remote-rpc-client.ts rename to packages/agent/packages/agent/src/pi/remote-rpc-client.ts index 3a576b292d86..04921e73dc55 100644 --- a/products/desktop/packages/agent/src/pi/remote-rpc-client.ts +++ b/packages/agent/packages/agent/src/pi/remote-rpc-client.ts @@ -3,7 +3,7 @@ import type { RpcCommand, RpcResponse, } from "@earendil-works/pi-coding-agent"; -import type { AgentConversationEvent } from "@posthog/shared"; +import type { AgentConversationEvent } from "@posthog/agent-contracts"; import { createPiConversationTranslator } from "./conversation/translatePiConversation"; import { type PiRpcTransport, parsePiRpcResponse } from "./rpc-transport"; diff --git a/products/desktop/packages/agent/src/pi/repository-tools-extension.test.ts b/packages/agent/packages/agent/src/pi/repository-tools-extension.test.ts similarity index 100% rename from products/desktop/packages/agent/src/pi/repository-tools-extension.test.ts rename to packages/agent/packages/agent/src/pi/repository-tools-extension.test.ts diff --git a/products/desktop/packages/agent/src/pi/repository-tools-extension.ts b/packages/agent/packages/agent/src/pi/repository-tools-extension.ts similarity index 100% rename from products/desktop/packages/agent/src/pi/repository-tools-extension.ts rename to packages/agent/packages/agent/src/pi/repository-tools-extension.ts diff --git a/products/desktop/packages/agent/src/pi/rpc-client.test.ts b/packages/agent/packages/agent/src/pi/rpc-client.test.ts similarity index 99% rename from products/desktop/packages/agent/src/pi/rpc-client.test.ts rename to packages/agent/packages/agent/src/pi/rpc-client.test.ts index bb734804f6d8..0fcc20166a51 100644 --- a/products/desktop/packages/agent/src/pi/rpc-client.test.ts +++ b/packages/agent/packages/agent/src/pi/rpc-client.test.ts @@ -2,7 +2,7 @@ import { mkdtemp, readFile, rm, writeFile } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; import { RpcClient } from "@earendil-works/pi-coding-agent"; -import type { TaskContext } from "@posthog/shared/task-context"; +import type { TaskContext } from "@posthog/agent-contracts/task-context"; import { describe, expect, it, vi } from "vitest"; import { createPiRpcClient, diff --git a/products/desktop/packages/agent/src/pi/rpc-client.ts b/packages/agent/packages/agent/src/pi/rpc-client.ts similarity index 99% rename from products/desktop/packages/agent/src/pi/rpc-client.ts rename to packages/agent/packages/agent/src/pi/rpc-client.ts index 856d7be6e598..8325337ef644 100644 --- a/products/desktop/packages/agent/src/pi/rpc-client.ts +++ b/packages/agent/packages/agent/src/pi/rpc-client.ts @@ -9,16 +9,16 @@ import { type RpcClientOptions, type RpcEventListener, } from "@earendil-works/pi-coding-agent"; -import type { PiEnrichmentConfig } from "@posthog/harness/extensions/enrichment"; -import type { McpConfig } from "@posthog/harness/extensions/mcp/config"; import type { CloudRegion, McpServerConnection, McpToolPermissionDecision, McpToolPermissionRequest, McpToolPolicy, -} from "@posthog/shared"; -import type { TaskContext } from "@posthog/shared/task-context"; +} from "@posthog/agent-contracts"; +import type { TaskContext } from "@posthog/agent-contracts/task-context"; +import type { PiEnrichmentConfig } from "@posthog/harness/extensions/enrichment"; +import type { McpConfig } from "@posthog/harness/extensions/mcp/config"; import { buildLocalToolsServer } from "../adapters/codex-app-server/local-tools-mcp"; import { safePiEnvironment } from "./rpc-environment"; import type { diff --git a/products/desktop/packages/agent/src/pi/rpc-environment.ts b/packages/agent/packages/agent/src/pi/rpc-environment.ts similarity index 100% rename from products/desktop/packages/agent/src/pi/rpc-environment.ts rename to packages/agent/packages/agent/src/pi/rpc-environment.ts diff --git a/products/desktop/packages/agent/src/pi/rpc-host.ts b/packages/agent/packages/agent/src/pi/rpc-host.ts similarity index 99% rename from products/desktop/packages/agent/src/pi/rpc-host.ts rename to packages/agent/packages/agent/src/pi/rpc-host.ts index 59a5c601f582..eff1175252c5 100644 --- a/products/desktop/packages/agent/src/pi/rpc-host.ts +++ b/packages/agent/packages/agent/src/pi/rpc-host.ts @@ -3,6 +3,10 @@ import { type InlineExtension, SessionManager, } from "@earendil-works/pi-coding-agent"; +import type { + McpToolPermissionDecision, + McpToolPermissionRequest, +} from "@posthog/agent-contracts"; import { createHarnessRuntime, runRpcMode } from "@posthog/harness"; import { createAutoPublishExtension } from "@posthog/harness/extensions/auto-publish"; import { createPiContextWikiExtension } from "@posthog/harness/extensions/context-wiki"; @@ -11,10 +15,6 @@ import { createPiTaskSystemPromptExtension, resolvePiTaskContext, } from "@posthog/harness/extensions/task-system-prompt"; -import type { - McpToolPermissionDecision, - McpToolPermissionRequest, -} from "@posthog/shared"; import { POSTHOG_PI_QUEUE_ENTRY_TYPE, readPersistedPiQueue, diff --git a/products/desktop/packages/agent/src/pi/rpc-transport.test.ts b/packages/agent/packages/agent/src/pi/rpc-transport.test.ts similarity index 100% rename from products/desktop/packages/agent/src/pi/rpc-transport.test.ts rename to packages/agent/packages/agent/src/pi/rpc-transport.test.ts diff --git a/products/desktop/packages/agent/src/pi/rpc-transport.ts b/packages/agent/packages/agent/src/pi/rpc-transport.ts similarity index 100% rename from products/desktop/packages/agent/src/pi/rpc-transport.ts rename to packages/agent/packages/agent/src/pi/rpc-transport.ts diff --git a/products/desktop/packages/agent/src/pi/runtime.test.ts b/packages/agent/packages/agent/src/pi/runtime.test.ts similarity index 100% rename from products/desktop/packages/agent/src/pi/runtime.test.ts rename to packages/agent/packages/agent/src/pi/runtime.test.ts diff --git a/products/desktop/packages/agent/src/pi/runtime.ts b/packages/agent/packages/agent/src/pi/runtime.ts similarity index 98% rename from products/desktop/packages/agent/src/pi/runtime.ts rename to packages/agent/packages/agent/src/pi/runtime.ts index 163d83ff3646..6f422dda28f3 100644 --- a/products/desktop/packages/agent/src/pi/runtime.ts +++ b/packages/agent/packages/agent/src/pi/runtime.ts @@ -3,7 +3,7 @@ import type { RpcCommand, RpcResponse, } from "@earendil-works/pi-coding-agent"; -import type { AgentConversationEvent } from "@posthog/shared"; +import type { AgentConversationEvent } from "@posthog/agent-contracts"; import { createPiConversationTranslator, type PiConversationTranslator, diff --git a/products/desktop/packages/agent/src/pi/types.ts b/packages/agent/packages/agent/src/pi/types.ts similarity index 100% rename from products/desktop/packages/agent/src/pi/types.ts rename to packages/agent/packages/agent/src/pi/types.ts diff --git a/products/desktop/packages/agent/src/posthog-api.test.ts b/packages/agent/packages/agent/src/posthog-api.test.ts similarity index 99% rename from products/desktop/packages/agent/src/posthog-api.test.ts rename to packages/agent/packages/agent/src/posthog-api.test.ts index 86919d0a85b5..37c11852a172 100644 --- a/products/desktop/packages/agent/src/posthog-api.test.ts +++ b/packages/agent/packages/agent/src/posthog-api.test.ts @@ -1,4 +1,4 @@ -import { API_DOWNLOAD_TIMEOUT_MS } from "@posthog/shared"; +import { API_DOWNLOAD_TIMEOUT_MS } from "@posthog/agent-contracts"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import { PostHogAPIClient } from "./posthog-api"; diff --git a/products/desktop/packages/agent/src/posthog-api.ts b/packages/agent/packages/agent/src/posthog-api.ts similarity index 99% rename from products/desktop/packages/agent/src/posthog-api.ts rename to packages/agent/packages/agent/src/posthog-api.ts index 09946ff0f2a1..ad976bb6be29 100644 --- a/products/desktop/packages/agent/src/posthog-api.ts +++ b/packages/agent/packages/agent/src/posthog-api.ts @@ -8,7 +8,7 @@ import { type StoredLogEntry, type TaskRunUpdate, taskRunStateSchema, -} from "@posthog/shared"; +} from "@posthog/agent-contracts"; import packageJson from "../package.json" with { type: "json" }; import type { PostHogAPIConfig, StoredEntry, Task, TaskRun } from "./types"; import { getGatewayUsageUrl, getLlmGatewayUrl } from "./utils/gateway"; diff --git a/products/desktop/packages/agent/src/pr-url-detector.test.ts b/packages/agent/packages/agent/src/pr-url-detector.test.ts similarity index 100% rename from products/desktop/packages/agent/src/pr-url-detector.test.ts rename to packages/agent/packages/agent/src/pr-url-detector.test.ts diff --git a/products/desktop/packages/agent/src/pr-url-detector.ts b/packages/agent/packages/agent/src/pr-url-detector.ts similarity index 100% rename from products/desktop/packages/agent/src/pr-url-detector.ts rename to packages/agent/packages/agent/src/pr-url-detector.ts diff --git a/products/desktop/packages/agent/src/resume.ts b/packages/agent/packages/agent/src/resume.ts similarity index 100% rename from products/desktop/packages/agent/src/resume.ts rename to packages/agent/packages/agent/src/resume.ts diff --git a/products/desktop/packages/agent/src/sagas/resume-saga.test.ts b/packages/agent/packages/agent/src/sagas/resume-saga.test.ts similarity index 99% rename from products/desktop/packages/agent/src/sagas/resume-saga.test.ts rename to packages/agent/packages/agent/src/sagas/resume-saga.test.ts index ba6833f16dbc..a73d5171abaf 100644 --- a/products/desktop/packages/agent/src/sagas/resume-saga.test.ts +++ b/packages/agent/packages/agent/src/sagas/resume-saga.test.ts @@ -1,4 +1,4 @@ -import type { SagaLogger } from "@posthog/shared"; +import type { SagaLogger } from "@posthog/agent-contracts"; import { afterEach, beforeEach, describe, expect, it, type vi } from "vitest"; import { POSTHOG_NOTIFICATIONS } from "../acp-extensions"; import type { PostHogAPIClient } from "../posthog-api"; diff --git a/products/desktop/packages/agent/src/sagas/resume-saga.ts b/packages/agent/packages/agent/src/sagas/resume-saga.ts similarity index 99% rename from products/desktop/packages/agent/src/sagas/resume-saga.ts rename to packages/agent/packages/agent/src/sagas/resume-saga.ts index 6f11e6ebb591..aa9e419c4ac6 100644 --- a/products/desktop/packages/agent/src/sagas/resume-saga.ts +++ b/packages/agent/packages/agent/src/sagas/resume-saga.ts @@ -1,5 +1,5 @@ import type { ContentBlock } from "@agentclientprotocol/sdk"; -import { Saga } from "@posthog/shared"; +import { Saga } from "@posthog/agent-contracts"; import { isNotification, type NativeGoalState, diff --git a/products/desktop/packages/agent/src/sagas/test-fixtures.ts b/packages/agent/packages/agent/src/sagas/test-fixtures.ts similarity index 98% rename from products/desktop/packages/agent/src/sagas/test-fixtures.ts rename to packages/agent/packages/agent/src/sagas/test-fixtures.ts index f0f3ee39545c..015fb1bac663 100644 --- a/products/desktop/packages/agent/src/sagas/test-fixtures.ts +++ b/packages/agent/packages/agent/src/sagas/test-fixtures.ts @@ -4,7 +4,7 @@ import { mkdir, readFile, rm, writeFile } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; import { promisify } from "node:util"; -import type { SagaLogger } from "@posthog/shared"; +import type { SagaLogger } from "@posthog/agent-contracts"; import { vi } from "vitest"; import type { PostHogAPIClient } from "../posthog-api"; import type { StoredNotification, TaskRun } from "../types"; diff --git a/products/desktop/packages/agent/src/server/agent-server.configure-environment.test.ts b/packages/agent/packages/agent/src/server/agent-server.configure-environment.test.ts similarity index 100% rename from products/desktop/packages/agent/src/server/agent-server.configure-environment.test.ts rename to packages/agent/packages/agent/src/server/agent-server.configure-environment.test.ts diff --git a/products/desktop/packages/agent/src/server/agent-server.test.ts b/packages/agent/packages/agent/src/server/agent-server.test.ts similarity index 99% rename from products/desktop/packages/agent/src/server/agent-server.test.ts rename to packages/agent/packages/agent/src/server/agent-server.test.ts index 9eac71ed379d..c6901cb80920 100644 --- a/products/desktop/packages/agent/src/server/agent-server.test.ts +++ b/packages/agent/packages/agent/src/server/agent-server.test.ts @@ -13,8 +13,11 @@ import { join } from "node:path"; import { type ContentBlock, RequestError } from "@agentclientprotocol/sdk"; import { OTLPLogExporter } from "@opentelemetry/exporter-logs-otlp-http"; import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http"; +import { + type Adapter, + IDLE_RESUME_STOP_REASON, +} from "@posthog/agent-contracts"; import { SIMPLIFIED_TECHNICAL_ENGLISH_INSTRUCTION as STE100_INSTRUCTION } from "@posthog/harness/extensions/benjamin"; -import { type Adapter, IDLE_RESUME_STOP_REASON } from "@posthog/shared"; import { zipSync } from "fflate"; import jwt from "jsonwebtoken"; import { HttpResponse, http } from "msw"; diff --git a/products/desktop/packages/agent/src/server/agent-server.ts b/packages/agent/packages/agent/src/server/agent-server.ts similarity index 99% rename from products/desktop/packages/agent/src/server/agent-server.ts rename to packages/agent/packages/agent/src/server/agent-server.ts index b71a82cbe7ee..37b62a43f052 100644 --- a/products/desktop/packages/agent/src/server/agent-server.ts +++ b/packages/agent/packages/agent/src/server/agent-server.ts @@ -15,6 +15,24 @@ import { RequestError, } from "@agentclientprotocol/sdk"; import { type ServerType, serve } from "@hono/node-server"; +import { + type AcpMcpServer, + type Adapter, + buildPrOutput, + getErrorMessage, + IDLE_RESUME_STOP_REASON, + isIgnoredSkillPath, + isSkillBundleArtifactMetadata, + type McpServerConnection, + mergePrUrls, + parseMcpToolName, + readMcpToolDescriptor, + readPrUrls, + sleepWithBackoff, + toAcpMcpServers, +} from "@posthog/agent-contracts"; +import { prependProductEngineerPrompt } from "@posthog/agent-contracts/product-engineer-prompt"; +import { appendRichOutputPrompt } from "@posthog/agent-contracts/rich-output-prompt"; import { execGh } from "@posthog/git/gh"; import { getCurrentBranch, getRemoteUrl } from "@posthog/git/queries"; import { ghTokenEnv } from "@posthog/git/signed-commit"; @@ -44,24 +62,6 @@ import { CloudTaskPrompt, parseLocalSkillInvocation, } from "@posthog/harness/extensions/task-system-prompt"; -import { - type AcpMcpServer, - type Adapter, - buildPrOutput, - getErrorMessage, - IDLE_RESUME_STOP_REASON, - isIgnoredSkillPath, - isSkillBundleArtifactMetadata, - type McpServerConnection, - mergePrUrls, - parseMcpToolName, - readMcpToolDescriptor, - readPrUrls, - sleepWithBackoff, - toAcpMcpServers, -} from "@posthog/shared"; -import { prependProductEngineerPrompt } from "@posthog/shared/product-engineer-prompt"; -import { appendRichOutputPrompt } from "@posthog/shared/rich-output-prompt"; import { unzipSync } from "fflate"; import { Hono } from "hono"; import { z } from "zod"; diff --git a/products/desktop/packages/agent/src/server/agentsh-runtime.test.ts b/packages/agent/packages/agent/src/server/agentsh-runtime.test.ts similarity index 100% rename from products/desktop/packages/agent/src/server/agentsh-runtime.test.ts rename to packages/agent/packages/agent/src/server/agentsh-runtime.test.ts diff --git a/products/desktop/packages/agent/src/server/agentsh-runtime.ts b/packages/agent/packages/agent/src/server/agentsh-runtime.ts similarity index 100% rename from products/desktop/packages/agent/src/server/agentsh-runtime.ts rename to packages/agent/packages/agent/src/server/agentsh-runtime.ts diff --git a/products/desktop/packages/agent/src/server/bin.ts b/packages/agent/packages/agent/src/server/bin.ts similarity index 99% rename from products/desktop/packages/agent/src/server/bin.ts rename to packages/agent/packages/agent/src/server/bin.ts index 187df01d8386..54b7a182b542 100644 --- a/products/desktop/packages/agent/src/server/bin.ts +++ b/packages/agent/packages/agent/src/server/bin.ts @@ -1,8 +1,11 @@ #!/usr/bin/env node import { closeSync, readFileSync } from "node:fs"; import { fileURLToPath } from "node:url"; +import { + EFFORT_LEVELS, + SERVICE_TIERS, +} from "@posthog/agent-contracts/domain-types"; import { DEFAULT_POSTHOG_EXEC_PERMISSION_REGEX_SOURCE } from "@posthog/harness/extensions/posthog-mcp-policy"; -import { EFFORT_LEVELS, SERVICE_TIERS } from "@posthog/shared/domain-types"; import { Command } from "commander"; import { z } from "zod/v4"; import { isSupportedReasoningEffort } from "../adapters/reasoning-effort"; diff --git a/products/desktop/packages/agent/src/server/boot-phases.test.ts b/packages/agent/packages/agent/src/server/boot-phases.test.ts similarity index 100% rename from products/desktop/packages/agent/src/server/boot-phases.test.ts rename to packages/agent/packages/agent/src/server/boot-phases.test.ts diff --git a/products/desktop/packages/agent/src/server/boot-phases.ts b/packages/agent/packages/agent/src/server/boot-phases.ts similarity index 100% rename from products/desktop/packages/agent/src/server/boot-phases.ts rename to packages/agent/packages/agent/src/server/boot-phases.ts diff --git a/products/desktop/packages/agent/src/server/cloud-prompt.ts b/packages/agent/packages/agent/src/server/cloud-prompt.ts similarity index 76% rename from products/desktop/packages/agent/src/server/cloud-prompt.ts rename to packages/agent/packages/agent/src/server/cloud-prompt.ts index e003eb212d96..a786920db6a1 100644 --- a/products/desktop/packages/agent/src/server/cloud-prompt.ts +++ b/packages/agent/packages/agent/src/server/cloud-prompt.ts @@ -1,5 +1,8 @@ import type { ContentBlock } from "@agentclientprotocol/sdk"; -import { deserializeCloudPrompt, promptBlocksToText } from "@posthog/shared"; +import { + deserializeCloudPrompt, + promptBlocksToText, +} from "@posthog/agent-contracts"; export { promptBlocksToText }; diff --git a/products/desktop/packages/agent/src/server/cloud-session-prompt.test.ts b/packages/agent/packages/agent/src/server/cloud-session-prompt.test.ts similarity index 87% rename from products/desktop/packages/agent/src/server/cloud-session-prompt.test.ts rename to packages/agent/packages/agent/src/server/cloud-session-prompt.test.ts index e3082364a2e2..16ffb542f8b9 100644 --- a/products/desktop/packages/agent/src/server/cloud-session-prompt.test.ts +++ b/packages/agent/packages/agent/src/server/cloud-session-prompt.test.ts @@ -1,5 +1,5 @@ -import { PRODUCT_ENGINEER_PROMPT } from "@posthog/shared/product-engineer-prompt"; -import { RICH_OUTPUT_TAGS_PROMPT } from "@posthog/shared/rich-output-prompt"; +import { PRODUCT_ENGINEER_PROMPT } from "@posthog/agent-contracts/product-engineer-prompt"; +import { RICH_OUTPUT_TAGS_PROMPT } from "@posthog/agent-contracts/rich-output-prompt"; import { describe, expect, it } from "vitest"; import { buildCloudSessionSystemPrompt } from "./agent-server"; diff --git a/products/desktop/packages/agent/src/server/codex-subscription-token.test.ts b/packages/agent/packages/agent/src/server/codex-subscription-token.test.ts similarity index 100% rename from products/desktop/packages/agent/src/server/codex-subscription-token.test.ts rename to packages/agent/packages/agent/src/server/codex-subscription-token.test.ts diff --git a/products/desktop/packages/agent/src/server/codex-subscription-token.ts b/packages/agent/packages/agent/src/server/codex-subscription-token.ts similarity index 100% rename from products/desktop/packages/agent/src/server/codex-subscription-token.ts rename to packages/agent/packages/agent/src/server/codex-subscription-token.ts diff --git a/products/desktop/packages/agent/src/server/credential-relay.test.ts b/packages/agent/packages/agent/src/server/credential-relay.test.ts similarity index 100% rename from products/desktop/packages/agent/src/server/credential-relay.test.ts rename to packages/agent/packages/agent/src/server/credential-relay.test.ts diff --git a/products/desktop/packages/agent/src/server/credential-relay.ts b/packages/agent/packages/agent/src/server/credential-relay.ts similarity index 100% rename from products/desktop/packages/agent/src/server/credential-relay.ts rename to packages/agent/packages/agent/src/server/credential-relay.ts diff --git a/products/desktop/packages/agent/src/server/event-stream-sender.test.ts b/packages/agent/packages/agent/src/server/event-stream-sender.test.ts similarity index 100% rename from products/desktop/packages/agent/src/server/event-stream-sender.test.ts rename to packages/agent/packages/agent/src/server/event-stream-sender.test.ts diff --git a/products/desktop/packages/agent/src/server/event-stream-sender.ts b/packages/agent/packages/agent/src/server/event-stream-sender.ts similarity index 100% rename from products/desktop/packages/agent/src/server/event-stream-sender.ts rename to packages/agent/packages/agent/src/server/event-stream-sender.ts diff --git a/products/desktop/packages/agent/src/server/gateway-env.ts b/packages/agent/packages/agent/src/server/gateway-env.ts similarity index 99% rename from products/desktop/packages/agent/src/server/gateway-env.ts rename to packages/agent/packages/agent/src/server/gateway-env.ts index 40b619903c7a..93988c6f390a 100644 --- a/products/desktop/packages/agent/src/server/gateway-env.ts +++ b/packages/agent/packages/agent/src/server/gateway-env.ts @@ -4,7 +4,7 @@ import { buildPosthogPropertiesHeaderRecord, buildPosthogScopedPropertyHeaderLines, buildPosthogScopedPropertyHeaderRecord, -} from "@posthog/shared/posthog-property-headers"; +} from "@posthog/agent-contracts/posthog-property-headers"; import type { GatewayEnv } from "../adapters/claude/session/options"; import type { Task } from "../types"; import { resolveGatewayProduct, resolveGatewayTarget } from "../utils/gateway"; diff --git a/products/desktop/packages/agent/src/server/jwt.ts b/packages/agent/packages/agent/src/server/jwt.ts similarity index 100% rename from products/desktop/packages/agent/src/server/jwt.ts rename to packages/agent/packages/agent/src/server/jwt.ts diff --git a/products/desktop/packages/agent/src/server/mcp-relay-server.test.ts b/packages/agent/packages/agent/src/server/mcp-relay-server.test.ts similarity index 100% rename from products/desktop/packages/agent/src/server/mcp-relay-server.test.ts rename to packages/agent/packages/agent/src/server/mcp-relay-server.test.ts diff --git a/products/desktop/packages/agent/src/server/mcp-relay-server.ts b/packages/agent/packages/agent/src/server/mcp-relay-server.ts similarity index 99% rename from products/desktop/packages/agent/src/server/mcp-relay-server.ts rename to packages/agent/packages/agent/src/server/mcp-relay-server.ts index e13dcb8ac609..8e98029363d5 100644 --- a/products/desktop/packages/agent/src/server/mcp-relay-server.ts +++ b/packages/agent/packages/agent/src/server/mcp-relay-server.ts @@ -1,6 +1,6 @@ import crypto from "node:crypto"; import { type ServerType, serve } from "@hono/node-server"; -import type { McpServerConnection } from "@posthog/shared"; +import type { McpServerConnection } from "@posthog/agent-contracts"; import { Hono } from "hono"; import type { Logger } from "../utils/logger"; diff --git a/products/desktop/packages/agent/src/server/pi-agent-server.test.ts b/packages/agent/packages/agent/src/server/pi-agent-server.test.ts similarity index 99% rename from products/desktop/packages/agent/src/server/pi-agent-server.test.ts rename to packages/agent/packages/agent/src/server/pi-agent-server.test.ts index 3c7438fd9654..f5bf796c6a3b 100644 --- a/products/desktop/packages/agent/src/server/pi-agent-server.test.ts +++ b/packages/agent/packages/agent/src/server/pi-agent-server.test.ts @@ -1,7 +1,7 @@ import { mkdtemp, readFile, rm, writeFile } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; -import type { AgentConversationEvent } from "@posthog/shared"; +import type { AgentConversationEvent } from "@posthog/agent-contracts"; import { describe, expect, it, vi } from "vitest"; import { PiAgentServer } from "./pi-agent-server"; import type { AgentServerConfig } from "./types"; diff --git a/products/desktop/packages/agent/src/server/pi-agent-server.ts b/packages/agent/packages/agent/src/server/pi-agent-server.ts similarity index 99% rename from products/desktop/packages/agent/src/server/pi-agent-server.ts rename to packages/agent/packages/agent/src/server/pi-agent-server.ts index a1eca10292c3..b0ae213afd3b 100644 --- a/products/desktop/packages/agent/src/server/pi-agent-server.ts +++ b/packages/agent/packages/agent/src/server/pi-agent-server.ts @@ -4,11 +4,6 @@ import { basename, dirname, join } from "node:path"; import type { RpcSessionState } from "@earendil-works/pi-coding-agent"; import type { ServerType } from "@hono/node-server"; import { serve } from "@hono/node-server"; -import { resolveContextWikiPath } from "@posthog/harness/extensions/context-wiki"; -import { - buildStoreSkillsInstructions, - syncStoreSkills, -} from "@posthog/harness/extensions/skills-store"; import { type AgentConversationEvent, type AgentTurnUsage, @@ -20,9 +15,14 @@ import { type StoredLogEntry, serializeError, type TaskRunArtifact, -} from "@posthog/shared"; -import { buildPosthogPropertyHeaderRecord } from "@posthog/shared/posthog-property-headers"; -import type { TaskContext } from "@posthog/shared/task-context"; +} from "@posthog/agent-contracts"; +import { buildPosthogPropertyHeaderRecord } from "@posthog/agent-contracts/posthog-property-headers"; +import type { TaskContext } from "@posthog/agent-contracts/task-context"; +import { resolveContextWikiPath } from "@posthog/harness/extensions/context-wiki"; +import { + buildStoreSkillsInstructions, + syncStoreSkills, +} from "@posthog/harness/extensions/skills-store"; import { Hono } from "hono"; import { z } from "zod/v4"; import packageJson from "../../package.json" with { type: "json" }; diff --git a/products/desktop/packages/agent/src/server/pr-checkout.test.ts b/packages/agent/packages/agent/src/server/pr-checkout.test.ts similarity index 100% rename from products/desktop/packages/agent/src/server/pr-checkout.test.ts rename to packages/agent/packages/agent/src/server/pr-checkout.test.ts diff --git a/products/desktop/packages/agent/src/server/pr-checkout.ts b/packages/agent/packages/agent/src/server/pr-checkout.ts similarity index 100% rename from products/desktop/packages/agent/src/server/pr-checkout.ts rename to packages/agent/packages/agent/src/server/pr-checkout.ts diff --git a/products/desktop/packages/agent/src/server/question-relay.test.ts b/packages/agent/packages/agent/src/server/question-relay.test.ts similarity index 100% rename from products/desktop/packages/agent/src/server/question-relay.test.ts rename to packages/agent/packages/agent/src/server/question-relay.test.ts diff --git a/products/desktop/packages/agent/src/server/rtk-savings.test.ts b/packages/agent/packages/agent/src/server/rtk-savings.test.ts similarity index 100% rename from products/desktop/packages/agent/src/server/rtk-savings.test.ts rename to packages/agent/packages/agent/src/server/rtk-savings.test.ts diff --git a/products/desktop/packages/agent/src/server/rtk-savings.ts b/packages/agent/packages/agent/src/server/rtk-savings.ts similarity index 100% rename from products/desktop/packages/agent/src/server/rtk-savings.ts rename to packages/agent/packages/agent/src/server/rtk-savings.ts diff --git a/products/desktop/packages/agent/src/server/run-usage.test.ts b/packages/agent/packages/agent/src/server/run-usage.test.ts similarity index 100% rename from products/desktop/packages/agent/src/server/run-usage.test.ts rename to packages/agent/packages/agent/src/server/run-usage.test.ts diff --git a/products/desktop/packages/agent/src/server/run-usage.ts b/packages/agent/packages/agent/src/server/run-usage.ts similarity index 100% rename from products/desktop/packages/agent/src/server/run-usage.ts rename to packages/agent/packages/agent/src/server/run-usage.ts diff --git a/products/desktop/packages/agent/src/server/schemas.test.ts b/packages/agent/packages/agent/src/server/schemas.test.ts similarity index 100% rename from products/desktop/packages/agent/src/server/schemas.test.ts rename to packages/agent/packages/agent/src/server/schemas.test.ts diff --git a/products/desktop/packages/agent/src/server/schemas.ts b/packages/agent/packages/agent/src/server/schemas.ts similarity index 98% rename from products/desktop/packages/agent/src/server/schemas.ts rename to packages/agent/packages/agent/src/server/schemas.ts index eb24080eb519..7615d479829f 100644 --- a/products/desktop/packages/agent/src/server/schemas.ts +++ b/packages/agent/packages/agent/src/server/schemas.ts @@ -1,4 +1,4 @@ -import type { McpServerConnection } from "@posthog/shared"; +import type { McpServerConnection } from "@posthog/agent-contracts"; import { z } from "zod/v4"; export { posthogExecPermissionRegexSchema } from "@posthog/harness/extensions/posthog-mcp-policy"; diff --git a/products/desktop/packages/agent/src/server/streaming-upload.ts b/packages/agent/packages/agent/src/server/streaming-upload.ts similarity index 100% rename from products/desktop/packages/agent/src/server/streaming-upload.ts rename to packages/agent/packages/agent/src/server/streaming-upload.ts diff --git a/products/desktop/packages/agent/src/server/types.ts b/packages/agent/packages/agent/src/server/types.ts similarity index 94% rename from products/desktop/packages/agent/src/server/types.ts rename to packages/agent/packages/agent/src/server/types.ts index 98b0d15abc64..a34685f9a694 100644 --- a/products/desktop/packages/agent/src/server/types.ts +++ b/packages/agent/packages/agent/src/server/types.ts @@ -1,5 +1,8 @@ -import type { Adapter, McpServerConnection } from "@posthog/shared"; -import type { EffortLevel, ServiceTier } from "@posthog/shared/domain-types"; +import type { Adapter, McpServerConnection } from "@posthog/agent-contracts"; +import type { + EffortLevel, + ServiceTier, +} from "@posthog/agent-contracts/domain-types"; import type { AgentMode } from "../types"; import type { RtkSavingsSummary } from "./rtk-savings"; diff --git a/products/desktop/packages/agent/src/server/utils/retry.test.ts b/packages/agent/packages/agent/src/server/utils/retry.test.ts similarity index 100% rename from products/desktop/packages/agent/src/server/utils/retry.test.ts rename to packages/agent/packages/agent/src/server/utils/retry.test.ts diff --git a/products/desktop/packages/agent/src/server/utils/retry.ts b/packages/agent/packages/agent/src/server/utils/retry.ts similarity index 100% rename from products/desktop/packages/agent/src/server/utils/retry.ts rename to packages/agent/packages/agent/src/server/utils/retry.ts diff --git a/products/desktop/packages/agent/src/server/utils/sse-parser.test.ts b/packages/agent/packages/agent/src/server/utils/sse-parser.test.ts similarity index 100% rename from products/desktop/packages/agent/src/server/utils/sse-parser.test.ts rename to packages/agent/packages/agent/src/server/utils/sse-parser.test.ts diff --git a/products/desktop/packages/agent/src/server/utils/sse-parser.ts b/packages/agent/packages/agent/src/server/utils/sse-parser.ts similarity index 100% rename from products/desktop/packages/agent/src/server/utils/sse-parser.ts rename to packages/agent/packages/agent/src/server/utils/sse-parser.ts diff --git a/products/desktop/packages/agent/src/server/wait-for-file.test.ts b/packages/agent/packages/agent/src/server/wait-for-file.test.ts similarity index 100% rename from products/desktop/packages/agent/src/server/wait-for-file.test.ts rename to packages/agent/packages/agent/src/server/wait-for-file.test.ts diff --git a/products/desktop/packages/agent/src/server/wait-for-file.ts b/packages/agent/packages/agent/src/server/wait-for-file.ts similarity index 100% rename from products/desktop/packages/agent/src/server/wait-for-file.ts rename to packages/agent/packages/agent/src/server/wait-for-file.ts diff --git a/products/desktop/packages/agent/src/session-log-writer.test.ts b/packages/agent/packages/agent/src/session-log-writer.test.ts similarity index 100% rename from products/desktop/packages/agent/src/session-log-writer.test.ts rename to packages/agent/packages/agent/src/session-log-writer.test.ts diff --git a/products/desktop/packages/agent/src/session-log-writer.ts b/packages/agent/packages/agent/src/session-log-writer.ts similarity index 99% rename from products/desktop/packages/agent/src/session-log-writer.ts rename to packages/agent/packages/agent/src/session-log-writer.ts index 81ed39b9ebe4..0d2f349db642 100644 --- a/products/desktop/packages/agent/src/session-log-writer.ts +++ b/packages/agent/packages/agent/src/session-log-writer.ts @@ -1,7 +1,7 @@ import fs from "node:fs"; import fsp from "node:fs/promises"; import path from "node:path"; -import { serializeError, TranscriptBoundaries } from "@posthog/shared"; +import { serializeError, TranscriptBoundaries } from "@posthog/agent-contracts"; import { type PostHogAPIClient, PostHogAPIError } from "./posthog-api"; import type { StoredNotification } from "./types"; import { isEmptyContentBlock } from "./utils/acp-content"; diff --git a/products/desktop/packages/agent/src/smoke/bin.ts b/packages/agent/packages/agent/src/smoke/bin.ts similarity index 100% rename from products/desktop/packages/agent/src/smoke/bin.ts rename to packages/agent/packages/agent/src/smoke/bin.ts diff --git a/products/desktop/packages/agent/src/smoke/classify.test.ts b/packages/agent/packages/agent/src/smoke/classify.test.ts similarity index 100% rename from products/desktop/packages/agent/src/smoke/classify.test.ts rename to packages/agent/packages/agent/src/smoke/classify.test.ts diff --git a/products/desktop/packages/agent/src/smoke/classify.ts b/packages/agent/packages/agent/src/smoke/classify.ts similarity index 100% rename from products/desktop/packages/agent/src/smoke/classify.ts rename to packages/agent/packages/agent/src/smoke/classify.ts diff --git a/products/desktop/packages/agent/src/smoke/run-turn.ts b/packages/agent/packages/agent/src/smoke/run-turn.ts similarity index 98% rename from products/desktop/packages/agent/src/smoke/run-turn.ts rename to packages/agent/packages/agent/src/smoke/run-turn.ts index d3807a769a9c..0a2715623555 100644 --- a/products/desktop/packages/agent/src/smoke/run-turn.ts +++ b/packages/agent/packages/agent/src/smoke/run-turn.ts @@ -7,7 +7,7 @@ import { ClientSideConnection, ndJsonStream, } from "@agentclientprotocol/sdk"; -import type { Adapter } from "@posthog/shared"; +import type { Adapter } from "@posthog/agent-contracts"; import { type AcpConnection, createAcpConnection, diff --git a/products/desktop/packages/agent/src/test/fixtures/api.ts b/packages/agent/packages/agent/src/test/fixtures/api.ts similarity index 100% rename from products/desktop/packages/agent/src/test/fixtures/api.ts rename to packages/agent/packages/agent/src/test/fixtures/api.ts diff --git a/products/desktop/packages/agent/src/test/mocks/claude-sdk.ts b/packages/agent/packages/agent/src/test/mocks/claude-sdk.ts similarity index 100% rename from products/desktop/packages/agent/src/test/mocks/claude-sdk.ts rename to packages/agent/packages/agent/src/test/mocks/claude-sdk.ts diff --git a/products/desktop/packages/agent/src/test/mocks/msw-handlers.ts b/packages/agent/packages/agent/src/test/mocks/msw-handlers.ts similarity index 100% rename from products/desktop/packages/agent/src/test/mocks/msw-handlers.ts rename to packages/agent/packages/agent/src/test/mocks/msw-handlers.ts diff --git a/products/desktop/packages/agent/src/test/native-binary.test.ts b/packages/agent/packages/agent/src/test/native-binary.test.ts similarity index 100% rename from products/desktop/packages/agent/src/test/native-binary.test.ts rename to packages/agent/packages/agent/src/test/native-binary.test.ts diff --git a/products/desktop/packages/agent/src/types.ts b/packages/agent/packages/agent/src/types.ts similarity index 95% rename from products/desktop/packages/agent/src/types.ts rename to packages/agent/packages/agent/src/types.ts index 5b7b7e26ef86..3fab38ec6ffd 100644 --- a/products/desktop/packages/agent/src/types.ts +++ b/packages/agent/packages/agent/src/types.ts @@ -1,6 +1,10 @@ +import type { + Adapter, + ModelAccess, + PostHogAPIConfig, +} from "@posthog/agent-contracts"; +import type { EffortLevel } from "@posthog/agent-contracts/domain-types"; import type { ContextWikiEnv } from "@posthog/harness/extensions/context-wiki"; -import type { Adapter, ModelAccess, PostHogAPIConfig } from "@posthog/shared"; -import type { EffortLevel } from "@posthog/shared/domain-types"; export type { ArtifactSource, @@ -13,7 +17,7 @@ export type { TaskRunState, TaskRunStateField, TaskRunStatus, -} from "@posthog/shared"; +} from "@posthog/agent-contracts"; /** * Stored custom notification following ACP extensibility model. diff --git a/products/desktop/packages/agent/src/utils/acp-content.ts b/packages/agent/packages/agent/src/utils/acp-content.ts similarity index 100% rename from products/desktop/packages/agent/src/utils/acp-content.ts rename to packages/agent/packages/agent/src/utils/acp-content.ts diff --git a/products/desktop/packages/agent/src/utils/async-mutex.test.ts b/packages/agent/packages/agent/src/utils/async-mutex.test.ts similarity index 100% rename from products/desktop/packages/agent/src/utils/async-mutex.test.ts rename to packages/agent/packages/agent/src/utils/async-mutex.test.ts diff --git a/products/desktop/packages/agent/src/utils/async-mutex.ts b/packages/agent/packages/agent/src/utils/async-mutex.ts similarity index 100% rename from products/desktop/packages/agent/src/utils/async-mutex.ts rename to packages/agent/packages/agent/src/utils/async-mutex.ts diff --git a/products/desktop/packages/agent/src/utils/common.test.ts b/packages/agent/packages/agent/src/utils/common.test.ts similarity index 100% rename from products/desktop/packages/agent/src/utils/common.test.ts rename to packages/agent/packages/agent/src/utils/common.test.ts diff --git a/products/desktop/packages/agent/src/utils/common.ts b/packages/agent/packages/agent/src/utils/common.ts similarity index 100% rename from products/desktop/packages/agent/src/utils/common.ts rename to packages/agent/packages/agent/src/utils/common.ts diff --git a/products/desktop/packages/agent/src/utils/event-id.ts b/packages/agent/packages/agent/src/utils/event-id.ts similarity index 100% rename from products/desktop/packages/agent/src/utils/event-id.ts rename to packages/agent/packages/agent/src/utils/event-id.ts diff --git a/products/desktop/packages/agent/src/utils/gateway-routing-cases.json b/packages/agent/packages/agent/src/utils/gateway-routing-cases.json similarity index 94% rename from products/desktop/packages/agent/src/utils/gateway-routing-cases.json rename to packages/agent/packages/agent/src/utils/gateway-routing-cases.json index c41619bf069c..dc2c25aac645 100644 --- a/products/desktop/packages/agent/src/utils/gateway-routing-cases.json +++ b/packages/agent/packages/agent/src/utils/gateway-routing-cases.json @@ -1,5 +1,5 @@ { - "comment": "Shared routing contract for the sandbox gateway matchers. Consumed by BOTH products/desktop/packages/agent/src/utils/gateway.test.ts and products/tasks/backend/temporal/process_task/tests/test_ai_gateway_token.py, so the TypeScript resolver and its Python mirror cannot drift while both suites stay green. A drift means routed runs silently stop minting (or mint unused tokens).", + "comment": "Shared routing contract for the sandbox gateway matchers. Consumed by BOTH packages/agent/packages/agent/src/utils/gateway.test.ts and products/tasks/backend/temporal/process_task/tests/test_ai_gateway_token.py, so the TypeScript resolver and its Python mirror cannot drift while both suites stay green. A drift means routed runs silently stop minting (or mint unused tokens).", "resolve_ai_product": [ { "origin_product": "signals_scout", diff --git a/products/desktop/packages/agent/src/utils/gateway.test.ts b/packages/agent/packages/agent/src/utils/gateway.test.ts similarity index 100% rename from products/desktop/packages/agent/src/utils/gateway.test.ts rename to packages/agent/packages/agent/src/utils/gateway.test.ts diff --git a/products/desktop/packages/agent/src/utils/gateway.ts b/packages/agent/packages/agent/src/utils/gateway.ts similarity index 99% rename from products/desktop/packages/agent/src/utils/gateway.ts rename to packages/agent/packages/agent/src/utils/gateway.ts index d1429224d132..d2a6ce7590f5 100644 --- a/products/desktop/packages/agent/src/utils/gateway.ts +++ b/packages/agent/packages/agent/src/utils/gateway.ts @@ -1,4 +1,4 @@ -import { getCloudTaskGatewayUrl } from "@posthog/shared"; +import { getCloudTaskGatewayUrl } from "@posthog/agent-contracts"; export type GatewayProduct = | "posthog_code" diff --git a/products/desktop/packages/agent/src/utils/logger.test.ts b/packages/agent/packages/agent/src/utils/logger.test.ts similarity index 100% rename from products/desktop/packages/agent/src/utils/logger.test.ts rename to packages/agent/packages/agent/src/utils/logger.test.ts diff --git a/products/desktop/packages/agent/src/utils/logger.ts b/packages/agent/packages/agent/src/utils/logger.ts similarity index 100% rename from products/desktop/packages/agent/src/utils/logger.ts rename to packages/agent/packages/agent/src/utils/logger.ts diff --git a/products/desktop/packages/agent/src/utils/partial-json.test.ts b/packages/agent/packages/agent/src/utils/partial-json.test.ts similarity index 100% rename from products/desktop/packages/agent/src/utils/partial-json.test.ts rename to packages/agent/packages/agent/src/utils/partial-json.test.ts diff --git a/products/desktop/packages/agent/src/utils/partial-json.ts b/packages/agent/packages/agent/src/utils/partial-json.ts similarity index 100% rename from products/desktop/packages/agent/src/utils/partial-json.ts rename to packages/agent/packages/agent/src/utils/partial-json.ts diff --git a/products/desktop/packages/agent/src/utils/redact-secrets.test.ts b/packages/agent/packages/agent/src/utils/redact-secrets.test.ts similarity index 100% rename from products/desktop/packages/agent/src/utils/redact-secrets.test.ts rename to packages/agent/packages/agent/src/utils/redact-secrets.test.ts diff --git a/products/desktop/packages/agent/src/utils/redact-secrets.ts b/packages/agent/packages/agent/src/utils/redact-secrets.ts similarity index 100% rename from products/desktop/packages/agent/src/utils/redact-secrets.ts rename to packages/agent/packages/agent/src/utils/redact-secrets.ts diff --git a/products/desktop/packages/agent/src/utils/resolve-bundled-script.ts b/packages/agent/packages/agent/src/utils/resolve-bundled-script.ts similarity index 100% rename from products/desktop/packages/agent/src/utils/resolve-bundled-script.ts rename to packages/agent/packages/agent/src/utils/resolve-bundled-script.ts diff --git a/products/desktop/packages/agent/src/utils/secret-rules.ts b/packages/agent/packages/agent/src/utils/secret-rules.ts similarity index 100% rename from products/desktop/packages/agent/src/utils/secret-rules.ts rename to packages/agent/packages/agent/src/utils/secret-rules.ts diff --git a/products/desktop/packages/agent/src/utils/shell-quote.ts b/packages/agent/packages/agent/src/utils/shell-quote.ts similarity index 100% rename from products/desktop/packages/agent/src/utils/shell-quote.ts rename to packages/agent/packages/agent/src/utils/shell-quote.ts diff --git a/products/desktop/packages/agent/src/utils/streams.ts b/packages/agent/packages/agent/src/utils/streams.ts similarity index 99% rename from products/desktop/packages/agent/src/utils/streams.ts rename to packages/agent/packages/agent/src/utils/streams.ts index 96a437a89140..cc85d953e9e6 100644 --- a/products/desktop/packages/agent/src/utils/streams.ts +++ b/packages/agent/packages/agent/src/utils/streams.ts @@ -1,6 +1,6 @@ import type { Readable, Writable } from "node:stream"; import { ReadableStream, WritableStream } from "node:stream/web"; -import { serializeError } from "@posthog/shared"; +import { serializeError } from "@posthog/agent-contracts"; import type { Logger } from "./logger"; export class Pushable implements AsyncIterable { diff --git a/products/desktop/packages/agent/tsconfig.build.json b/packages/agent/packages/agent/tsconfig.build.json similarity index 100% rename from products/desktop/packages/agent/tsconfig.build.json rename to packages/agent/packages/agent/tsconfig.build.json diff --git a/products/desktop/packages/agent/tsconfig.json b/packages/agent/packages/agent/tsconfig.json similarity index 100% rename from products/desktop/packages/agent/tsconfig.json rename to packages/agent/packages/agent/tsconfig.json diff --git a/products/desktop/packages/agent/tsconfig.rollup.json b/packages/agent/packages/agent/tsconfig.rollup.json similarity index 100% rename from products/desktop/packages/agent/tsconfig.rollup.json rename to packages/agent/packages/agent/tsconfig.rollup.json diff --git a/products/desktop/packages/agent/tsup.config.ts b/packages/agent/packages/agent/tsup.config.ts similarity index 96% rename from products/desktop/packages/agent/tsup.config.ts rename to packages/agent/packages/agent/tsup.config.ts index 1056c9ff947b..d7d10d9cacfa 100644 --- a/products/desktop/packages/agent/tsup.config.ts +++ b/packages/agent/packages/agent/tsup.config.ts @@ -133,7 +133,7 @@ const sharedOptions = { outDir: "dist", target: "node20", noExternal: [ - "@posthog/shared", + "@posthog/agent-contracts", "@posthog/git", "@posthog/enricher", "@posthog/harness", @@ -166,7 +166,7 @@ export default defineConfig([ outDir: "dist", target: "es2022", platform: "browser", - external: ["@earendil-works/pi-ai", "@posthog/shared", "zod"], + external: ["@earendil-works/pi-ai", "@posthog/agent-contracts", "zod"], }, { entry: [ @@ -218,14 +218,11 @@ export default defineConfig([ // Touch a trigger file to signal electron-forge to restart // This file is watched by Vite, triggering main process rebuild // Skip in Docker/CI environments where the code app doesn't exist - const triggerFile = resolve( - import.meta.dirname, - "../../apps/code/src/main/.agent-trigger", - ); const triggerDir = resolve( import.meta.dirname, - "../../apps/code/src/main", + "../../../../products/desktop/apps/code/src/main", ); + const triggerFile = resolve(triggerDir, ".agent-trigger"); if (existsSync(triggerDir)) { writeFileSync(triggerFile, `${Date.now()}`); } diff --git a/products/desktop/packages/agent/vitest.config.ts b/packages/agent/packages/agent/vitest.config.ts similarity index 100% rename from products/desktop/packages/agent/vitest.config.ts rename to packages/agent/packages/agent/vitest.config.ts diff --git a/products/desktop/packages/agent/vitest.e2e.config.ts b/packages/agent/packages/agent/vitest.e2e.config.ts similarity index 88% rename from products/desktop/packages/agent/vitest.e2e.config.ts rename to packages/agent/packages/agent/vitest.e2e.config.ts index 131f9ae69ca1..e558aa11941f 100644 --- a/products/desktop/packages/agent/vitest.e2e.config.ts +++ b/packages/agent/packages/agent/vitest.e2e.config.ts @@ -3,7 +3,7 @@ import { defineConfig } from "vitest/config"; // Live e2e suite. Separate from the default `vitest.config.ts` (which only // includes `src/**`), so `pnpm test` never runs it. The `e2e` job in -// desktop-test.yml runs it on a branch that changes products/desktop/packages/, +// desktop-test.yml runs it on a branch that changes packages/agent/ or products/desktop/packages/, // and skips it in the merge queue. Run it by hand with `pnpm test:e2e`. // Sequential, generous timeouts: each test drives two real model turns end to end. export default defineConfig({ diff --git a/products/desktop/packages/enricher/README.md b/packages/agent/packages/enricher/README.md similarity index 100% rename from products/desktop/packages/enricher/README.md rename to packages/agent/packages/enricher/README.md diff --git a/products/desktop/packages/enricher/grammars/tree-sitter-go.wasm b/packages/agent/packages/enricher/grammars/tree-sitter-go.wasm similarity index 100% rename from products/desktop/packages/enricher/grammars/tree-sitter-go.wasm rename to packages/agent/packages/enricher/grammars/tree-sitter-go.wasm diff --git a/products/desktop/packages/enricher/grammars/tree-sitter-javascript.wasm b/packages/agent/packages/enricher/grammars/tree-sitter-javascript.wasm similarity index 100% rename from products/desktop/packages/enricher/grammars/tree-sitter-javascript.wasm rename to packages/agent/packages/enricher/grammars/tree-sitter-javascript.wasm diff --git a/products/desktop/packages/enricher/grammars/tree-sitter-python.wasm b/packages/agent/packages/enricher/grammars/tree-sitter-python.wasm similarity index 100% rename from products/desktop/packages/enricher/grammars/tree-sitter-python.wasm rename to packages/agent/packages/enricher/grammars/tree-sitter-python.wasm diff --git a/products/desktop/packages/enricher/grammars/tree-sitter-ruby.wasm b/packages/agent/packages/enricher/grammars/tree-sitter-ruby.wasm similarity index 100% rename from products/desktop/packages/enricher/grammars/tree-sitter-ruby.wasm rename to packages/agent/packages/enricher/grammars/tree-sitter-ruby.wasm diff --git a/products/desktop/packages/enricher/grammars/tree-sitter-tsx.wasm b/packages/agent/packages/enricher/grammars/tree-sitter-tsx.wasm similarity index 100% rename from products/desktop/packages/enricher/grammars/tree-sitter-tsx.wasm rename to packages/agent/packages/enricher/grammars/tree-sitter-tsx.wasm diff --git a/products/desktop/packages/enricher/grammars/tree-sitter-typescript.wasm b/packages/agent/packages/enricher/grammars/tree-sitter-typescript.wasm similarity index 100% rename from products/desktop/packages/enricher/grammars/tree-sitter-typescript.wasm rename to packages/agent/packages/enricher/grammars/tree-sitter-typescript.wasm diff --git a/products/desktop/packages/enricher/grammars/tree-sitter.wasm b/packages/agent/packages/enricher/grammars/tree-sitter.wasm similarity index 100% rename from products/desktop/packages/enricher/grammars/tree-sitter.wasm rename to packages/agent/packages/enricher/grammars/tree-sitter.wasm diff --git a/products/desktop/packages/enricher/package.json b/packages/agent/packages/enricher/package.json similarity index 94% rename from products/desktop/packages/enricher/package.json rename to packages/agent/packages/enricher/package.json index 4f859e981eb6..e8d302a2e247 100644 --- a/products/desktop/packages/enricher/package.json +++ b/packages/agent/packages/enricher/package.json @@ -18,7 +18,7 @@ "test": "vitest run" }, "dependencies": { - "@posthog/shared": "workspace:*", + "@posthog/agent-contracts": "workspace:*", "web-tree-sitter": "^0.24.7" }, "devDependencies": { diff --git a/products/desktop/packages/enricher/scripts/fetch-grammars.cjs b/packages/agent/packages/enricher/scripts/fetch-grammars.cjs similarity index 100% rename from products/desktop/packages/enricher/scripts/fetch-grammars.cjs rename to packages/agent/packages/enricher/scripts/fetch-grammars.cjs diff --git a/products/desktop/packages/enricher/src/alias-resolver.ts b/packages/agent/packages/enricher/src/alias-resolver.ts similarity index 100% rename from products/desktop/packages/enricher/src/alias-resolver.ts rename to packages/agent/packages/enricher/src/alias-resolver.ts diff --git a/products/desktop/packages/enricher/src/ast-helpers.ts b/packages/agent/packages/enricher/src/ast-helpers.ts similarity index 100% rename from products/desktop/packages/enricher/src/ast-helpers.ts rename to packages/agent/packages/enricher/src/ast-helpers.ts diff --git a/products/desktop/packages/enricher/src/call-detector.ts b/packages/agent/packages/enricher/src/call-detector.ts similarity index 100% rename from products/desktop/packages/enricher/src/call-detector.ts rename to packages/agent/packages/enricher/src/call-detector.ts diff --git a/products/desktop/packages/enricher/src/comment-formatter.test.ts b/packages/agent/packages/enricher/src/comment-formatter.test.ts similarity index 100% rename from products/desktop/packages/enricher/src/comment-formatter.test.ts rename to packages/agent/packages/enricher/src/comment-formatter.test.ts diff --git a/products/desktop/packages/enricher/src/comment-formatter.ts b/packages/agent/packages/enricher/src/comment-formatter.ts similarity index 100% rename from products/desktop/packages/enricher/src/comment-formatter.ts rename to packages/agent/packages/enricher/src/comment-formatter.ts diff --git a/products/desktop/packages/enricher/src/detector.test.ts b/packages/agent/packages/enricher/src/detector.test.ts similarity index 100% rename from products/desktop/packages/enricher/src/detector.test.ts rename to packages/agent/packages/enricher/src/detector.test.ts diff --git a/products/desktop/packages/enricher/src/detector.ts b/packages/agent/packages/enricher/src/detector.ts similarity index 100% rename from products/desktop/packages/enricher/src/detector.ts rename to packages/agent/packages/enricher/src/detector.ts diff --git a/products/desktop/packages/enricher/src/enrich-source.ts b/packages/agent/packages/enricher/src/enrich-source.ts similarity index 100% rename from products/desktop/packages/enricher/src/enrich-source.ts rename to packages/agent/packages/enricher/src/enrich-source.ts diff --git a/products/desktop/packages/enricher/src/enriched-result.ts b/packages/agent/packages/enricher/src/enriched-result.ts similarity index 100% rename from products/desktop/packages/enricher/src/enriched-result.ts rename to packages/agent/packages/enricher/src/enriched-result.ts diff --git a/products/desktop/packages/enricher/src/enricher.test.ts b/packages/agent/packages/enricher/src/enricher.test.ts similarity index 100% rename from products/desktop/packages/enricher/src/enricher.test.ts rename to packages/agent/packages/enricher/src/enricher.test.ts diff --git a/products/desktop/packages/enricher/src/enricher.ts b/packages/agent/packages/enricher/src/enricher.ts similarity index 100% rename from products/desktop/packages/enricher/src/enricher.ts rename to packages/agent/packages/enricher/src/enricher.ts diff --git a/products/desktop/packages/enricher/src/flag-classification.test.ts b/packages/agent/packages/enricher/src/flag-classification.test.ts similarity index 100% rename from products/desktop/packages/enricher/src/flag-classification.test.ts rename to packages/agent/packages/enricher/src/flag-classification.test.ts diff --git a/products/desktop/packages/enricher/src/flag-classification.ts b/packages/agent/packages/enricher/src/flag-classification.ts similarity index 100% rename from products/desktop/packages/enricher/src/flag-classification.ts rename to packages/agent/packages/enricher/src/flag-classification.ts diff --git a/products/desktop/packages/enricher/src/import-resolver.test.ts b/packages/agent/packages/enricher/src/import-resolver.test.ts similarity index 100% rename from products/desktop/packages/enricher/src/import-resolver.test.ts rename to packages/agent/packages/enricher/src/import-resolver.test.ts diff --git a/products/desktop/packages/enricher/src/import-resolver.ts b/packages/agent/packages/enricher/src/import-resolver.ts similarity index 100% rename from products/desktop/packages/enricher/src/import-resolver.ts rename to packages/agent/packages/enricher/src/import-resolver.ts diff --git a/products/desktop/packages/enricher/src/index.ts b/packages/agent/packages/enricher/src/index.ts similarity index 100% rename from products/desktop/packages/enricher/src/index.ts rename to packages/agent/packages/enricher/src/index.ts diff --git a/products/desktop/packages/enricher/src/languages.ts b/packages/agent/packages/enricher/src/languages.ts similarity index 100% rename from products/desktop/packages/enricher/src/languages.ts rename to packages/agent/packages/enricher/src/languages.ts diff --git a/products/desktop/packages/enricher/src/log.ts b/packages/agent/packages/enricher/src/log.ts similarity index 100% rename from products/desktop/packages/enricher/src/log.ts rename to packages/agent/packages/enricher/src/log.ts diff --git a/products/desktop/packages/enricher/src/parse-result.ts b/packages/agent/packages/enricher/src/parse-result.ts similarity index 100% rename from products/desktop/packages/enricher/src/parse-result.ts rename to packages/agent/packages/enricher/src/parse-result.ts diff --git a/products/desktop/packages/enricher/src/parser-manager.ts b/packages/agent/packages/enricher/src/parser-manager.ts similarity index 100% rename from products/desktop/packages/enricher/src/parser-manager.ts rename to packages/agent/packages/enricher/src/parser-manager.ts diff --git a/products/desktop/packages/enricher/src/posthog-api.ts b/packages/agent/packages/enricher/src/posthog-api.ts similarity index 100% rename from products/desktop/packages/enricher/src/posthog-api.ts rename to packages/agent/packages/enricher/src/posthog-api.ts diff --git a/products/desktop/packages/enricher/src/serialize.test.ts b/packages/agent/packages/enricher/src/serialize.test.ts similarity index 100% rename from products/desktop/packages/enricher/src/serialize.test.ts rename to packages/agent/packages/enricher/src/serialize.test.ts diff --git a/products/desktop/packages/enricher/src/serialize.ts b/packages/agent/packages/enricher/src/serialize.ts similarity index 95% rename from products/desktop/packages/enricher/src/serialize.ts rename to packages/agent/packages/enricher/src/serialize.ts index 06b9b2a48964..efdc6ce81ddf 100644 --- a/products/desktop/packages/enricher/src/serialize.ts +++ b/packages/agent/packages/enricher/src/serialize.ts @@ -2,14 +2,14 @@ import type { SerializedEnrichment, SerializedEvent, SerializedFlag, -} from "@posthog/shared"; +} from "@posthog/agent-contracts"; import type { EnrichedResult } from "./enriched-result.js"; export type { SerializedEnrichment, SerializedEvent, SerializedFlag, -} from "@posthog/shared"; +} from "@posthog/agent-contracts"; export function toSerializable(enriched: EnrichedResult): SerializedEnrichment { const flags: SerializedFlag[] = enriched.flags.map((f) => ({ diff --git a/products/desktop/packages/enricher/src/stale-flags.test.ts b/packages/agent/packages/enricher/src/stale-flags.test.ts similarity index 100% rename from products/desktop/packages/enricher/src/stale-flags.test.ts rename to packages/agent/packages/enricher/src/stale-flags.test.ts diff --git a/products/desktop/packages/enricher/src/stale-flags.ts b/packages/agent/packages/enricher/src/stale-flags.ts similarity index 100% rename from products/desktop/packages/enricher/src/stale-flags.ts rename to packages/agent/packages/enricher/src/stale-flags.ts diff --git a/products/desktop/packages/enricher/src/types.ts b/packages/agent/packages/enricher/src/types.ts similarity index 98% rename from products/desktop/packages/enricher/src/types.ts rename to packages/agent/packages/enricher/src/types.ts index 11c03b8c977f..be1d9abc4fcf 100644 --- a/products/desktop/packages/enricher/src/types.ts +++ b/packages/agent/packages/enricher/src/types.ts @@ -167,7 +167,7 @@ export interface EventDefinition { // ── Stale flag types ── -import type { FlagType, StalenessReason } from "@posthog/shared"; +import type { FlagType, StalenessReason } from "@posthog/agent-contracts"; export type { FlagType, StalenessReason }; // ── Enricher types ── diff --git a/products/desktop/packages/enricher/src/variant-detector.ts b/packages/agent/packages/enricher/src/variant-detector.ts similarity index 100% rename from products/desktop/packages/enricher/src/variant-detector.ts rename to packages/agent/packages/enricher/src/variant-detector.ts diff --git a/products/desktop/packages/enricher/src/wrapper-detector.test.ts b/packages/agent/packages/enricher/src/wrapper-detector.test.ts similarity index 100% rename from products/desktop/packages/enricher/src/wrapper-detector.test.ts rename to packages/agent/packages/enricher/src/wrapper-detector.test.ts diff --git a/products/desktop/packages/enricher/src/wrapper-detector.ts b/packages/agent/packages/enricher/src/wrapper-detector.ts similarity index 100% rename from products/desktop/packages/enricher/src/wrapper-detector.ts rename to packages/agent/packages/enricher/src/wrapper-detector.ts diff --git a/products/desktop/packages/enricher/src/wrapper-integration.test.ts b/packages/agent/packages/enricher/src/wrapper-integration.test.ts similarity index 100% rename from products/desktop/packages/enricher/src/wrapper-integration.test.ts rename to packages/agent/packages/enricher/src/wrapper-integration.test.ts diff --git a/products/desktop/packages/enricher/tsconfig.json b/packages/agent/packages/enricher/tsconfig.json similarity index 100% rename from products/desktop/packages/enricher/tsconfig.json rename to packages/agent/packages/enricher/tsconfig.json diff --git a/products/desktop/packages/enricher/tsup.config.ts b/packages/agent/packages/enricher/tsup.config.ts similarity index 100% rename from products/desktop/packages/enricher/tsup.config.ts rename to packages/agent/packages/enricher/tsup.config.ts diff --git a/products/desktop/packages/git/package.json b/packages/agent/packages/git/package.json similarity index 92% rename from products/desktop/packages/git/package.json rename to packages/agent/packages/git/package.json index 1d6ab9db5441..d82f22dbc021 100644 --- a/products/desktop/packages/git/package.json +++ b/packages/agent/packages/git/package.json @@ -25,7 +25,7 @@ "src/**/*" ], "dependencies": { - "@posthog/shared": "workspace:*", + "@posthog/agent-contracts": "workspace:*", "git-url-parse": "^16.1.0", "simple-git": "^3.36.0" } diff --git a/products/desktop/packages/git/src/client.ts b/packages/agent/packages/git/src/client.ts similarity index 100% rename from products/desktop/packages/git/src/client.ts rename to packages/agent/packages/git/src/client.ts diff --git a/products/desktop/packages/git/src/concurrency.ts b/packages/agent/packages/git/src/concurrency.ts similarity index 100% rename from products/desktop/packages/git/src/concurrency.ts rename to packages/agent/packages/git/src/concurrency.ts diff --git a/products/desktop/packages/git/src/exclude-patterns.test.ts b/packages/agent/packages/git/src/exclude-patterns.test.ts similarity index 100% rename from products/desktop/packages/git/src/exclude-patterns.test.ts rename to packages/agent/packages/git/src/exclude-patterns.test.ts diff --git a/products/desktop/packages/git/src/exclude-patterns.ts b/packages/agent/packages/git/src/exclude-patterns.ts similarity index 100% rename from products/desktop/packages/git/src/exclude-patterns.ts rename to packages/agent/packages/git/src/exclude-patterns.ts diff --git a/products/desktop/packages/git/src/gh.test.ts b/packages/agent/packages/git/src/gh.test.ts similarity index 100% rename from products/desktop/packages/git/src/gh.test.ts rename to packages/agent/packages/git/src/gh.test.ts diff --git a/products/desktop/packages/git/src/gh.ts b/packages/agent/packages/git/src/gh.ts similarity index 100% rename from products/desktop/packages/git/src/gh.ts rename to packages/agent/packages/git/src/gh.ts diff --git a/products/desktop/packages/git/src/git-exec.test.ts b/packages/agent/packages/git/src/git-exec.test.ts similarity index 100% rename from products/desktop/packages/git/src/git-exec.test.ts rename to packages/agent/packages/git/src/git-exec.test.ts diff --git a/products/desktop/packages/git/src/git-exec.ts b/packages/agent/packages/git/src/git-exec.ts similarity index 100% rename from products/desktop/packages/git/src/git-exec.ts rename to packages/agent/packages/git/src/git-exec.ts diff --git a/products/desktop/packages/git/src/git-saga.ts b/packages/agent/packages/git/src/git-saga.ts similarity index 95% rename from products/desktop/packages/git/src/git-saga.ts rename to packages/agent/packages/git/src/git-saga.ts index c2cfa7ea9a09..82ed6f07e089 100644 --- a/products/desktop/packages/git/src/git-saga.ts +++ b/packages/agent/packages/git/src/git-saga.ts @@ -1,4 +1,4 @@ -import { Saga } from "@posthog/shared"; +import { Saga } from "@posthog/agent-contracts"; import type { GitClient } from "./client"; import { getGitOperationManager } from "./operation-manager"; diff --git a/products/desktop/packages/git/src/lock-detector.ts b/packages/agent/packages/git/src/lock-detector.ts similarity index 100% rename from products/desktop/packages/git/src/lock-detector.ts rename to packages/agent/packages/git/src/lock-detector.ts diff --git a/products/desktop/packages/git/src/operation-manager.ts b/packages/agent/packages/git/src/operation-manager.ts similarity index 100% rename from products/desktop/packages/git/src/operation-manager.ts rename to packages/agent/packages/git/src/operation-manager.ts diff --git a/products/desktop/packages/git/src/queries.test.ts b/packages/agent/packages/git/src/queries.test.ts similarity index 100% rename from products/desktop/packages/git/src/queries.test.ts rename to packages/agent/packages/git/src/queries.test.ts diff --git a/products/desktop/packages/git/src/queries.ts b/packages/agent/packages/git/src/queries.ts similarity index 99% rename from products/desktop/packages/git/src/queries.ts rename to packages/agent/packages/git/src/queries.ts index 8d0b13c86efe..523ba0c6252b 100644 --- a/products/desktop/packages/git/src/queries.ts +++ b/packages/agent/packages/git/src/queries.ts @@ -3,7 +3,7 @@ import { createReadStream, readFileSync, statSync } from "node:fs"; import * as fs from "node:fs/promises"; import * as path from "node:path"; import { promisify } from "node:util"; -import { isBinaryFile } from "@posthog/shared"; +import { isBinaryFile } from "@posthog/agent-contracts"; import type { CreateGitClientOptions } from "./client"; import { mapWithConcurrency } from "./concurrency"; import { getGitOperationManager } from "./operation-manager"; diff --git a/products/desktop/packages/git/src/rw-lock.ts b/packages/agent/packages/git/src/rw-lock.ts similarity index 100% rename from products/desktop/packages/git/src/rw-lock.ts rename to packages/agent/packages/git/src/rw-lock.ts diff --git a/products/desktop/packages/git/src/sagas/branch.ts b/packages/agent/packages/git/src/sagas/branch.ts similarity index 100% rename from products/desktop/packages/git/src/sagas/branch.ts rename to packages/agent/packages/git/src/sagas/branch.ts diff --git a/products/desktop/packages/git/src/sagas/checkpoint.test.ts b/packages/agent/packages/git/src/sagas/checkpoint.test.ts similarity index 100% rename from products/desktop/packages/git/src/sagas/checkpoint.test.ts rename to packages/agent/packages/git/src/sagas/checkpoint.test.ts diff --git a/products/desktop/packages/git/src/sagas/checkpoint.ts b/packages/agent/packages/git/src/sagas/checkpoint.ts similarity index 100% rename from products/desktop/packages/git/src/sagas/checkpoint.ts rename to packages/agent/packages/git/src/sagas/checkpoint.ts diff --git a/products/desktop/packages/git/src/sagas/clean.ts b/packages/agent/packages/git/src/sagas/clean.ts similarity index 100% rename from products/desktop/packages/git/src/sagas/clean.ts rename to packages/agent/packages/git/src/sagas/clean.ts diff --git a/products/desktop/packages/git/src/sagas/clone.ts b/packages/agent/packages/git/src/sagas/clone.ts similarity index 96% rename from products/desktop/packages/git/src/sagas/clone.ts rename to packages/agent/packages/git/src/sagas/clone.ts index 08df9bbf248c..db94a3d3476d 100644 --- a/products/desktop/packages/git/src/sagas/clone.ts +++ b/packages/agent/packages/git/src/sagas/clone.ts @@ -1,5 +1,5 @@ import * as fs from "node:fs/promises"; -import { Saga } from "@posthog/shared"; +import { Saga } from "@posthog/agent-contracts"; import { createGitClient } from "../client"; import { getCleanEnv, getGitOperationManager } from "../operation-manager"; diff --git a/products/desktop/packages/git/src/sagas/commit.ts b/packages/agent/packages/git/src/sagas/commit.ts similarity index 100% rename from products/desktop/packages/git/src/sagas/commit.ts rename to packages/agent/packages/git/src/sagas/commit.ts diff --git a/products/desktop/packages/git/src/sagas/discard.ts b/packages/agent/packages/git/src/sagas/discard.ts similarity index 100% rename from products/desktop/packages/git/src/sagas/discard.ts rename to packages/agent/packages/git/src/sagas/discard.ts diff --git a/products/desktop/packages/git/src/sagas/head.ts b/packages/agent/packages/git/src/sagas/head.ts similarity index 100% rename from products/desktop/packages/git/src/sagas/head.ts rename to packages/agent/packages/git/src/sagas/head.ts diff --git a/products/desktop/packages/git/src/sagas/init.ts b/packages/agent/packages/git/src/sagas/init.ts similarity index 100% rename from products/desktop/packages/git/src/sagas/init.ts rename to packages/agent/packages/git/src/sagas/init.ts diff --git a/products/desktop/packages/git/src/sagas/patch.ts b/packages/agent/packages/git/src/sagas/patch.ts similarity index 100% rename from products/desktop/packages/git/src/sagas/patch.ts rename to packages/agent/packages/git/src/sagas/patch.ts diff --git a/products/desktop/packages/git/src/sagas/pull.ts b/packages/agent/packages/git/src/sagas/pull.ts similarity index 100% rename from products/desktop/packages/git/src/sagas/pull.ts rename to packages/agent/packages/git/src/sagas/pull.ts diff --git a/products/desktop/packages/git/src/sagas/push.ts b/packages/agent/packages/git/src/sagas/push.ts similarity index 100% rename from products/desktop/packages/git/src/sagas/push.ts rename to packages/agent/packages/git/src/sagas/push.ts diff --git a/products/desktop/packages/git/src/sagas/stash.ts b/packages/agent/packages/git/src/sagas/stash.ts similarity index 100% rename from products/desktop/packages/git/src/sagas/stash.ts rename to packages/agent/packages/git/src/sagas/stash.ts diff --git a/products/desktop/packages/git/src/signed-commit.test.ts b/packages/agent/packages/git/src/signed-commit.test.ts similarity index 100% rename from products/desktop/packages/git/src/signed-commit.test.ts rename to packages/agent/packages/git/src/signed-commit.test.ts diff --git a/products/desktop/packages/git/src/signed-commit.ts b/packages/agent/packages/git/src/signed-commit.ts similarity index 100% rename from products/desktop/packages/git/src/signed-commit.ts rename to packages/agent/packages/git/src/signed-commit.ts diff --git a/products/desktop/packages/git/src/stacks.test.ts b/packages/agent/packages/git/src/stacks.test.ts similarity index 100% rename from products/desktop/packages/git/src/stacks.test.ts rename to packages/agent/packages/git/src/stacks.test.ts diff --git a/products/desktop/packages/git/src/stacks.ts b/packages/agent/packages/git/src/stacks.ts similarity index 100% rename from products/desktop/packages/git/src/stacks.ts rename to packages/agent/packages/git/src/stacks.ts diff --git a/products/desktop/packages/git/src/status-stream.test.ts b/packages/agent/packages/git/src/status-stream.test.ts similarity index 100% rename from products/desktop/packages/git/src/status-stream.test.ts rename to packages/agent/packages/git/src/status-stream.test.ts diff --git a/products/desktop/packages/git/src/status-stream.ts b/packages/agent/packages/git/src/status-stream.ts similarity index 100% rename from products/desktop/packages/git/src/status-stream.ts rename to packages/agent/packages/git/src/status-stream.ts diff --git a/products/desktop/packages/git/src/trailers.ts b/packages/agent/packages/git/src/trailers.ts similarity index 100% rename from products/desktop/packages/git/src/trailers.ts rename to packages/agent/packages/git/src/trailers.ts diff --git a/products/desktop/packages/git/src/utils.test.ts b/packages/agent/packages/git/src/utils.test.ts similarity index 100% rename from products/desktop/packages/git/src/utils.test.ts rename to packages/agent/packages/git/src/utils.test.ts diff --git a/products/desktop/packages/git/src/utils.ts b/packages/agent/packages/git/src/utils.ts similarity index 100% rename from products/desktop/packages/git/src/utils.ts rename to packages/agent/packages/git/src/utils.ts diff --git a/products/desktop/packages/git/src/worktree-name.test.ts b/packages/agent/packages/git/src/worktree-name.test.ts similarity index 100% rename from products/desktop/packages/git/src/worktree-name.test.ts rename to packages/agent/packages/git/src/worktree-name.test.ts diff --git a/products/desktop/packages/git/src/worktree-name.ts b/packages/agent/packages/git/src/worktree-name.ts similarity index 100% rename from products/desktop/packages/git/src/worktree-name.ts rename to packages/agent/packages/git/src/worktree-name.ts diff --git a/products/desktop/packages/git/src/worktree.test.ts b/packages/agent/packages/git/src/worktree.test.ts similarity index 100% rename from products/desktop/packages/git/src/worktree.test.ts rename to packages/agent/packages/git/src/worktree.test.ts diff --git a/products/desktop/packages/git/src/worktree.ts b/packages/agent/packages/git/src/worktree.ts similarity index 99% rename from products/desktop/packages/git/src/worktree.ts rename to packages/agent/packages/git/src/worktree.ts index 5cb3c5c27909..f19961319cc8 100644 --- a/products/desktop/packages/git/src/worktree.ts +++ b/packages/agent/packages/git/src/worktree.ts @@ -1,7 +1,7 @@ import { type ChildProcess, execFile, spawn } from "node:child_process"; import * as fs from "node:fs/promises"; import * as path from "node:path"; -import type { SagaLogger } from "@posthog/shared"; +import type { SagaLogger } from "@posthog/agent-contracts"; import { matchesExcludePatterns, parseExcludePatterns, diff --git a/products/desktop/packages/git/tsconfig.json b/packages/agent/packages/git/tsconfig.json similarity index 100% rename from products/desktop/packages/git/tsconfig.json rename to packages/agent/packages/git/tsconfig.json diff --git a/products/desktop/packages/git/vitest.config.ts b/packages/agent/packages/git/vitest.config.ts similarity index 100% rename from products/desktop/packages/git/vitest.config.ts rename to packages/agent/packages/git/vitest.config.ts diff --git a/products/desktop/packages/harness/README.md b/packages/agent/packages/harness/README.md similarity index 100% rename from products/desktop/packages/harness/README.md rename to packages/agent/packages/harness/README.md diff --git a/products/desktop/packages/harness/package.json b/packages/agent/packages/harness/package.json similarity index 99% rename from products/desktop/packages/harness/package.json rename to packages/agent/packages/harness/package.json index 0c62b62e0558..42a1d29869ae 100644 --- a/products/desktop/packages/harness/package.json +++ b/packages/agent/packages/harness/package.json @@ -132,7 +132,7 @@ "@modelcontextprotocol/sdk": "^1.29.0", "@posthog/enricher": "workspace:*", "@posthog/git": "workspace:*", - "@posthog/shared": "workspace:*", + "@posthog/agent-contracts": "workspace:*", "fflate": "^0.8.2", "lru-cache": "^11.1.0", "turndown": "^7.2.4", diff --git a/products/desktop/packages/harness/src/cli.ts b/packages/agent/packages/harness/src/cli.ts similarity index 100% rename from products/desktop/packages/harness/src/cli.ts rename to packages/agent/packages/harness/src/cli.ts diff --git a/products/desktop/packages/harness/src/extensions/README.md b/packages/agent/packages/harness/src/extensions/README.md similarity index 100% rename from products/desktop/packages/harness/src/extensions/README.md rename to packages/agent/packages/harness/src/extensions/README.md diff --git a/products/desktop/packages/harness/src/extensions/agent-instructions/index.ts b/packages/agent/packages/harness/src/extensions/agent-instructions/index.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/agent-instructions/index.ts rename to packages/agent/packages/harness/src/extensions/agent-instructions/index.ts diff --git a/products/desktop/packages/harness/src/extensions/agent-instructions/instructions.test.ts b/packages/agent/packages/harness/src/extensions/agent-instructions/instructions.test.ts similarity index 97% rename from products/desktop/packages/harness/src/extensions/agent-instructions/instructions.test.ts rename to packages/agent/packages/harness/src/extensions/agent-instructions/instructions.test.ts index b5b9067b544c..c259537556d4 100644 --- a/products/desktop/packages/harness/src/extensions/agent-instructions/instructions.test.ts +++ b/packages/agent/packages/harness/src/extensions/agent-instructions/instructions.test.ts @@ -1,4 +1,4 @@ -import { IMAGE_TOOLS_ENV_KEY } from "@posthog/shared/constants"; +import { IMAGE_TOOLS_ENV_KEY } from "@posthog/agent-contracts/sandbox-env"; import { describe, expect, it, vi } from "vitest"; import { buildAppendedInstructions, diff --git a/products/desktop/packages/harness/src/extensions/agent-instructions/instructions.ts b/packages/agent/packages/harness/src/extensions/agent-instructions/instructions.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/agent-instructions/instructions.ts rename to packages/agent/packages/harness/src/extensions/agent-instructions/instructions.ts diff --git a/products/desktop/packages/harness/src/extensions/auto-publish/extension.test.ts b/packages/agent/packages/harness/src/extensions/auto-publish/extension.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/auto-publish/extension.test.ts rename to packages/agent/packages/harness/src/extensions/auto-publish/extension.test.ts diff --git a/products/desktop/packages/harness/src/extensions/auto-publish/extension.ts b/packages/agent/packages/harness/src/extensions/auto-publish/extension.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/auto-publish/extension.ts rename to packages/agent/packages/harness/src/extensions/auto-publish/extension.ts diff --git a/products/desktop/packages/harness/src/extensions/auto-publish/index.ts b/packages/agent/packages/harness/src/extensions/auto-publish/index.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/auto-publish/index.ts rename to packages/agent/packages/harness/src/extensions/auto-publish/index.ts diff --git a/products/desktop/packages/harness/src/extensions/background-jobs/extension.test.ts b/packages/agent/packages/harness/src/extensions/background-jobs/extension.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/background-jobs/extension.test.ts rename to packages/agent/packages/harness/src/extensions/background-jobs/extension.test.ts diff --git a/products/desktop/packages/harness/src/extensions/background-jobs/extension.ts b/packages/agent/packages/harness/src/extensions/background-jobs/extension.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/background-jobs/extension.ts rename to packages/agent/packages/harness/src/extensions/background-jobs/extension.ts diff --git a/products/desktop/packages/harness/src/extensions/background-jobs/index.ts b/packages/agent/packages/harness/src/extensions/background-jobs/index.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/background-jobs/index.ts rename to packages/agent/packages/harness/src/extensions/background-jobs/index.ts diff --git a/products/desktop/packages/harness/src/extensions/background-jobs/jobs.test.ts b/packages/agent/packages/harness/src/extensions/background-jobs/jobs.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/background-jobs/jobs.test.ts rename to packages/agent/packages/harness/src/extensions/background-jobs/jobs.test.ts diff --git a/products/desktop/packages/harness/src/extensions/background-jobs/jobs.ts b/packages/agent/packages/harness/src/extensions/background-jobs/jobs.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/background-jobs/jobs.ts rename to packages/agent/packages/harness/src/extensions/background-jobs/jobs.ts diff --git a/products/desktop/packages/harness/src/extensions/background-jobs/render.ts b/packages/agent/packages/harness/src/extensions/background-jobs/render.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/background-jobs/render.ts rename to packages/agent/packages/harness/src/extensions/background-jobs/render.ts diff --git a/products/desktop/packages/harness/src/extensions/benjamin/benjamin.lock.json b/packages/agent/packages/harness/src/extensions/benjamin/benjamin.lock.json similarity index 100% rename from products/desktop/packages/harness/src/extensions/benjamin/benjamin.lock.json rename to packages/agent/packages/harness/src/extensions/benjamin/benjamin.lock.json diff --git a/products/desktop/packages/harness/src/extensions/benjamin/guidance.test.ts b/packages/agent/packages/harness/src/extensions/benjamin/guidance.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/benjamin/guidance.test.ts rename to packages/agent/packages/harness/src/extensions/benjamin/guidance.test.ts diff --git a/products/desktop/packages/harness/src/extensions/benjamin/guidance.ts b/packages/agent/packages/harness/src/extensions/benjamin/guidance.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/benjamin/guidance.ts rename to packages/agent/packages/harness/src/extensions/benjamin/guidance.ts diff --git a/products/desktop/packages/harness/src/extensions/benjamin/index.ts b/packages/agent/packages/harness/src/extensions/benjamin/index.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/benjamin/index.ts rename to packages/agent/packages/harness/src/extensions/benjamin/index.ts diff --git a/products/desktop/packages/harness/src/extensions/benjamin/instruction.ts b/packages/agent/packages/harness/src/extensions/benjamin/instruction.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/benjamin/instruction.ts rename to packages/agent/packages/harness/src/extensions/benjamin/instruction.ts diff --git a/products/desktop/packages/harness/src/extensions/benjamin/license-guard.ts b/packages/agent/packages/harness/src/extensions/benjamin/license-guard.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/benjamin/license-guard.ts rename to packages/agent/packages/harness/src/extensions/benjamin/license-guard.ts diff --git a/products/desktop/packages/harness/src/extensions/benjamin/ste100.ts b/packages/agent/packages/harness/src/extensions/benjamin/ste100.ts similarity index 93% rename from products/desktop/packages/harness/src/extensions/benjamin/ste100.ts rename to packages/agent/packages/harness/src/extensions/benjamin/ste100.ts index c1d4a8a03bd8..c21aec0530ef 100644 --- a/products/desktop/packages/harness/src/extensions/benjamin/ste100.ts +++ b/packages/agent/packages/harness/src/extensions/benjamin/ste100.ts @@ -1,4 +1,4 @@ -import { SIMPLIFIED_TECHNICAL_ENGLISH_INSTRUCTION } from "@posthog/shared/product-engineer-prompt"; +import { SIMPLIFIED_TECHNICAL_ENGLISH_INSTRUCTION } from "@posthog/agent-contracts/product-engineer-prompt"; import { isBenjaminEnabled } from "./guidance"; export { SIMPLIFIED_TECHNICAL_ENGLISH_INSTRUCTION }; diff --git a/products/desktop/packages/harness/src/extensions/context-wiki/context-wiki.ts b/packages/agent/packages/harness/src/extensions/context-wiki/context-wiki.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/context-wiki/context-wiki.ts rename to packages/agent/packages/harness/src/extensions/context-wiki/context-wiki.ts diff --git a/products/desktop/packages/harness/src/extensions/context-wiki/extension.test.ts b/packages/agent/packages/harness/src/extensions/context-wiki/extension.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/context-wiki/extension.test.ts rename to packages/agent/packages/harness/src/extensions/context-wiki/extension.test.ts diff --git a/products/desktop/packages/harness/src/extensions/context-wiki/extension.ts b/packages/agent/packages/harness/src/extensions/context-wiki/extension.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/context-wiki/extension.ts rename to packages/agent/packages/harness/src/extensions/context-wiki/extension.ts diff --git a/products/desktop/packages/harness/src/extensions/context-wiki/index.ts b/packages/agent/packages/harness/src/extensions/context-wiki/index.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/context-wiki/index.ts rename to packages/agent/packages/harness/src/extensions/context-wiki/index.ts diff --git a/products/desktop/packages/harness/src/extensions/current-work/extension.test.ts b/packages/agent/packages/harness/src/extensions/current-work/extension.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/current-work/extension.test.ts rename to packages/agent/packages/harness/src/extensions/current-work/extension.test.ts diff --git a/products/desktop/packages/harness/src/extensions/current-work/extension.ts b/packages/agent/packages/harness/src/extensions/current-work/extension.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/current-work/extension.ts rename to packages/agent/packages/harness/src/extensions/current-work/extension.ts diff --git a/products/desktop/packages/harness/src/extensions/enrichment/extension.test.ts b/packages/agent/packages/harness/src/extensions/enrichment/extension.test.ts similarity index 97% rename from products/desktop/packages/harness/src/extensions/enrichment/extension.test.ts rename to packages/agent/packages/harness/src/extensions/enrichment/extension.test.ts index 20366fde2894..c4b6d016845b 100644 --- a/products/desktop/packages/harness/src/extensions/enrichment/extension.test.ts +++ b/packages/agent/packages/harness/src/extensions/enrichment/extension.test.ts @@ -3,7 +3,7 @@ import type { ExtensionContext, ToolResultEvent, } from "@earendil-works/pi-coding-agent"; -import { RICH_OUTPUT_TAGS_PROMPT } from "@posthog/shared/rich-output-prompt"; +import { RICH_OUTPUT_TAGS_PROMPT } from "@posthog/agent-contracts/rich-output-prompt"; import { afterEach, describe, expect, it, vi } from "vitest"; import { createPiEnrichmentExtension } from "./extension"; diff --git a/products/desktop/packages/harness/src/extensions/enrichment/extension.ts b/packages/agent/packages/harness/src/extensions/enrichment/extension.ts similarity index 95% rename from products/desktop/packages/harness/src/extensions/enrichment/extension.ts rename to packages/agent/packages/harness/src/extensions/enrichment/extension.ts index 1088208522ae..4bf047a3f1c2 100644 --- a/products/desktop/packages/harness/src/extensions/enrichment/extension.ts +++ b/packages/agent/packages/harness/src/extensions/enrichment/extension.ts @@ -4,7 +4,7 @@ import { type ExtensionFactory, isReadToolResult, } from "@earendil-works/pi-coding-agent"; -import { appendRichOutputPrompt } from "@posthog/shared/rich-output-prompt"; +import { appendRichOutputPrompt } from "@posthog/agent-contracts/rich-output-prompt"; import { createEnrichment, enrichFileForAgent } from "./file-enricher"; export interface PiEnrichmentConfig { diff --git a/products/desktop/packages/harness/src/extensions/enrichment/file-enricher.test.ts b/packages/agent/packages/harness/src/extensions/enrichment/file-enricher.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/enrichment/file-enricher.test.ts rename to packages/agent/packages/harness/src/extensions/enrichment/file-enricher.test.ts diff --git a/products/desktop/packages/harness/src/extensions/enrichment/file-enricher.ts b/packages/agent/packages/harness/src/extensions/enrichment/file-enricher.ts similarity index 95% rename from products/desktop/packages/harness/src/extensions/enrichment/file-enricher.ts rename to packages/agent/packages/harness/src/extensions/enrichment/file-enricher.ts index 81ee1e78d3ad..97874e7b0c18 100644 --- a/products/desktop/packages/harness/src/extensions/enrichment/file-enricher.ts +++ b/packages/agent/packages/harness/src/extensions/enrichment/file-enricher.ts @@ -1,6 +1,6 @@ import * as path from "node:path"; +import type { PostHogAPIConfig } from "@posthog/agent-contracts"; import { enrichSource, PostHogEnricher } from "@posthog/enricher"; -import type { PostHogAPIConfig } from "@posthog/shared"; export interface FileEnrichmentDeps { enricher: PostHogEnricher; diff --git a/products/desktop/packages/harness/src/extensions/enrichment/index.ts b/packages/agent/packages/harness/src/extensions/enrichment/index.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/enrichment/index.ts rename to packages/agent/packages/harness/src/extensions/enrichment/index.ts diff --git a/products/desktop/packages/harness/src/extensions/entrypoints.ts b/packages/agent/packages/harness/src/extensions/entrypoints.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/entrypoints.ts rename to packages/agent/packages/harness/src/extensions/entrypoints.ts diff --git a/products/desktop/packages/harness/src/extensions/footer-focus-demo/README.md b/packages/agent/packages/harness/src/extensions/footer-focus-demo/README.md similarity index 100% rename from products/desktop/packages/harness/src/extensions/footer-focus-demo/README.md rename to packages/agent/packages/harness/src/extensions/footer-focus-demo/README.md diff --git a/products/desktop/packages/harness/src/extensions/footer-focus-demo/editor.ts b/packages/agent/packages/harness/src/extensions/footer-focus-demo/editor.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/footer-focus-demo/editor.ts rename to packages/agent/packages/harness/src/extensions/footer-focus-demo/editor.ts diff --git a/products/desktop/packages/harness/src/extensions/footer-focus-demo/extension.ts b/packages/agent/packages/harness/src/extensions/footer-focus-demo/extension.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/footer-focus-demo/extension.ts rename to packages/agent/packages/harness/src/extensions/footer-focus-demo/extension.ts diff --git a/products/desktop/packages/harness/src/extensions/footer-focus-demo/footer.ts b/packages/agent/packages/harness/src/extensions/footer-focus-demo/footer.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/footer-focus-demo/footer.ts rename to packages/agent/packages/harness/src/extensions/footer-focus-demo/footer.ts diff --git a/products/desktop/packages/harness/src/extensions/footer-focus-demo/inbox.ts b/packages/agent/packages/harness/src/extensions/footer-focus-demo/inbox.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/footer-focus-demo/inbox.ts rename to packages/agent/packages/harness/src/extensions/footer-focus-demo/inbox.ts diff --git a/products/desktop/packages/harness/src/extensions/footer-focus-demo/index.ts b/packages/agent/packages/harness/src/extensions/footer-focus-demo/index.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/footer-focus-demo/index.ts rename to packages/agent/packages/harness/src/extensions/footer-focus-demo/index.ts diff --git a/products/desktop/packages/harness/src/extensions/footer-focus-demo/overlay.ts b/packages/agent/packages/harness/src/extensions/footer-focus-demo/overlay.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/footer-focus-demo/overlay.ts rename to packages/agent/packages/harness/src/extensions/footer-focus-demo/overlay.ts diff --git a/products/desktop/packages/harness/src/extensions/hog-branding/brand-env.ts b/packages/agent/packages/harness/src/extensions/hog-branding/brand-env.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/hog-branding/brand-env.ts rename to packages/agent/packages/harness/src/extensions/hog-branding/brand-env.ts diff --git a/products/desktop/packages/harness/src/extensions/hog-branding/extension.test.ts b/packages/agent/packages/harness/src/extensions/hog-branding/extension.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/hog-branding/extension.test.ts rename to packages/agent/packages/harness/src/extensions/hog-branding/extension.test.ts diff --git a/products/desktop/packages/harness/src/extensions/hog-branding/extension.ts b/packages/agent/packages/harness/src/extensions/hog-branding/extension.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/hog-branding/extension.ts rename to packages/agent/packages/harness/src/extensions/hog-branding/extension.ts diff --git a/products/desktop/packages/harness/src/extensions/hog-branding/index.ts b/packages/agent/packages/harness/src/extensions/hog-branding/index.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/hog-branding/index.ts rename to packages/agent/packages/harness/src/extensions/hog-branding/index.ts diff --git a/products/desktop/packages/harness/src/extensions/local-tools/cloud-run.ts b/packages/agent/packages/harness/src/extensions/local-tools/cloud-run.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/local-tools/cloud-run.ts rename to packages/agent/packages/harness/src/extensions/local-tools/cloud-run.ts diff --git a/products/desktop/packages/harness/src/extensions/local-tools/github-token.test.ts b/packages/agent/packages/harness/src/extensions/local-tools/github-token.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/local-tools/github-token.test.ts rename to packages/agent/packages/harness/src/extensions/local-tools/github-token.test.ts diff --git a/products/desktop/packages/harness/src/extensions/local-tools/github-token.ts b/packages/agent/packages/harness/src/extensions/local-tools/github-token.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/local-tools/github-token.ts rename to packages/agent/packages/harness/src/extensions/local-tools/github-token.ts diff --git a/products/desktop/packages/harness/src/extensions/local-tools/index.ts b/packages/agent/packages/harness/src/extensions/local-tools/index.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/local-tools/index.ts rename to packages/agent/packages/harness/src/extensions/local-tools/index.ts diff --git a/products/desktop/packages/harness/src/extensions/local-tools/local-tools.ts b/packages/agent/packages/harness/src/extensions/local-tools/local-tools.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/local-tools/local-tools.ts rename to packages/agent/packages/harness/src/extensions/local-tools/local-tools.ts diff --git a/products/desktop/packages/harness/src/extensions/local-tools/registry.test.ts b/packages/agent/packages/harness/src/extensions/local-tools/registry.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/local-tools/registry.test.ts rename to packages/agent/packages/harness/src/extensions/local-tools/registry.test.ts diff --git a/products/desktop/packages/harness/src/extensions/local-tools/registry.ts b/packages/agent/packages/harness/src/extensions/local-tools/registry.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/local-tools/registry.ts rename to packages/agent/packages/harness/src/extensions/local-tools/registry.ts diff --git a/products/desktop/packages/harness/src/extensions/local-tools/signed-commit-artefacts.test.ts b/packages/agent/packages/harness/src/extensions/local-tools/signed-commit-artefacts.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/local-tools/signed-commit-artefacts.test.ts rename to packages/agent/packages/harness/src/extensions/local-tools/signed-commit-artefacts.test.ts diff --git a/products/desktop/packages/harness/src/extensions/local-tools/signed-commit-artefacts.ts b/packages/agent/packages/harness/src/extensions/local-tools/signed-commit-artefacts.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/local-tools/signed-commit-artefacts.ts rename to packages/agent/packages/harness/src/extensions/local-tools/signed-commit-artefacts.ts diff --git a/products/desktop/packages/harness/src/extensions/local-tools/signed-commit-shared.ts b/packages/agent/packages/harness/src/extensions/local-tools/signed-commit-shared.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/local-tools/signed-commit-shared.ts rename to packages/agent/packages/harness/src/extensions/local-tools/signed-commit-shared.ts diff --git a/products/desktop/packages/harness/src/extensions/local-tools/task-tools-client.test.ts b/packages/agent/packages/harness/src/extensions/local-tools/task-tools-client.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/local-tools/task-tools-client.test.ts rename to packages/agent/packages/harness/src/extensions/local-tools/task-tools-client.test.ts diff --git a/products/desktop/packages/harness/src/extensions/local-tools/task-tools-client.ts b/packages/agent/packages/harness/src/extensions/local-tools/task-tools-client.ts similarity index 99% rename from products/desktop/packages/harness/src/extensions/local-tools/task-tools-client.ts rename to packages/agent/packages/harness/src/extensions/local-tools/task-tools-client.ts index 2afbce762427..0fdf5928fe57 100644 --- a/products/desktop/packages/harness/src/extensions/local-tools/task-tools-client.ts +++ b/packages/agent/packages/harness/src/extensions/local-tools/task-tools-client.ts @@ -8,7 +8,7 @@ import { type TaskRunArtifact, type TaskRunUpdate, transferTimeoutMs, -} from "@posthog/shared"; +} from "@posthog/agent-contracts"; export { API_TRANSFER_TIMEOUT_MS, transferTimeoutMs, type TaskRunUpdate }; diff --git a/products/desktop/packages/harness/src/extensions/local-tools/tools/artifact-upload.ts b/packages/agent/packages/harness/src/extensions/local-tools/tools/artifact-upload.ts similarity index 99% rename from products/desktop/packages/harness/src/extensions/local-tools/tools/artifact-upload.ts rename to packages/agent/packages/harness/src/extensions/local-tools/tools/artifact-upload.ts index af1376625700..77a2ed788e2d 100644 --- a/products/desktop/packages/harness/src/extensions/local-tools/tools/artifact-upload.ts +++ b/packages/agent/packages/harness/src/extensions/local-tools/tools/artifact-upload.ts @@ -2,7 +2,7 @@ import type { ArtifactSource, ArtifactType, TaskRunArtifact, -} from "@posthog/shared"; +} from "@posthog/agent-contracts"; import { type TaskToolsApiClient, transferTimeoutMs, diff --git a/products/desktop/packages/harness/src/extensions/local-tools/tools/clone-repo.test.ts b/packages/agent/packages/harness/src/extensions/local-tools/tools/clone-repo.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/local-tools/tools/clone-repo.test.ts rename to packages/agent/packages/harness/src/extensions/local-tools/tools/clone-repo.test.ts diff --git a/products/desktop/packages/harness/src/extensions/local-tools/tools/clone-repo.ts b/packages/agent/packages/harness/src/extensions/local-tools/tools/clone-repo.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/local-tools/tools/clone-repo.ts rename to packages/agent/packages/harness/src/extensions/local-tools/tools/clone-repo.ts diff --git a/products/desktop/packages/harness/src/extensions/local-tools/tools/finish.test.ts b/packages/agent/packages/harness/src/extensions/local-tools/tools/finish.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/local-tools/tools/finish.test.ts rename to packages/agent/packages/harness/src/extensions/local-tools/tools/finish.test.ts diff --git a/products/desktop/packages/harness/src/extensions/local-tools/tools/finish.ts b/packages/agent/packages/harness/src/extensions/local-tools/tools/finish.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/local-tools/tools/finish.ts rename to packages/agent/packages/harness/src/extensions/local-tools/tools/finish.ts diff --git a/products/desktop/packages/harness/src/extensions/local-tools/tools/gh-stack.test.ts b/packages/agent/packages/harness/src/extensions/local-tools/tools/gh-stack.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/local-tools/tools/gh-stack.test.ts rename to packages/agent/packages/harness/src/extensions/local-tools/tools/gh-stack.test.ts diff --git a/products/desktop/packages/harness/src/extensions/local-tools/tools/gh-stack.ts b/packages/agent/packages/harness/src/extensions/local-tools/tools/gh-stack.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/local-tools/tools/gh-stack.ts rename to packages/agent/packages/harness/src/extensions/local-tools/tools/gh-stack.ts diff --git a/products/desktop/packages/harness/src/extensions/local-tools/tools/list-agents.test.ts b/packages/agent/packages/harness/src/extensions/local-tools/tools/list-agents.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/local-tools/tools/list-agents.test.ts rename to packages/agent/packages/harness/src/extensions/local-tools/tools/list-agents.test.ts diff --git a/products/desktop/packages/harness/src/extensions/local-tools/tools/list-agents.ts b/packages/agent/packages/harness/src/extensions/local-tools/tools/list-agents.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/local-tools/tools/list-agents.ts rename to packages/agent/packages/harness/src/extensions/local-tools/tools/list-agents.ts diff --git a/products/desktop/packages/harness/src/extensions/local-tools/tools/list-repos.ts b/packages/agent/packages/harness/src/extensions/local-tools/tools/list-repos.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/local-tools/tools/list-repos.ts rename to packages/agent/packages/harness/src/extensions/local-tools/tools/list-repos.ts diff --git a/products/desktop/packages/harness/src/extensions/local-tools/tools/report-activity.test.ts b/packages/agent/packages/harness/src/extensions/local-tools/tools/report-activity.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/local-tools/tools/report-activity.test.ts rename to packages/agent/packages/harness/src/extensions/local-tools/tools/report-activity.test.ts diff --git a/products/desktop/packages/harness/src/extensions/local-tools/tools/report-activity.ts b/packages/agent/packages/harness/src/extensions/local-tools/tools/report-activity.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/local-tools/tools/report-activity.ts rename to packages/agent/packages/harness/src/extensions/local-tools/tools/report-activity.ts diff --git a/products/desktop/packages/harness/src/extensions/local-tools/tools/send-agent-message.test.ts b/packages/agent/packages/harness/src/extensions/local-tools/tools/send-agent-message.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/local-tools/tools/send-agent-message.test.ts rename to packages/agent/packages/harness/src/extensions/local-tools/tools/send-agent-message.test.ts diff --git a/products/desktop/packages/harness/src/extensions/local-tools/tools/send-agent-message.ts b/packages/agent/packages/harness/src/extensions/local-tools/tools/send-agent-message.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/local-tools/tools/send-agent-message.ts rename to packages/agent/packages/harness/src/extensions/local-tools/tools/send-agent-message.ts diff --git a/products/desktop/packages/harness/src/extensions/local-tools/tools/show-actions.test.ts b/packages/agent/packages/harness/src/extensions/local-tools/tools/show-actions.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/local-tools/tools/show-actions.test.ts rename to packages/agent/packages/harness/src/extensions/local-tools/tools/show-actions.test.ts diff --git a/products/desktop/packages/harness/src/extensions/local-tools/tools/show-actions.ts b/packages/agent/packages/harness/src/extensions/local-tools/tools/show-actions.ts similarity index 97% rename from products/desktop/packages/harness/src/extensions/local-tools/tools/show-actions.ts rename to packages/agent/packages/harness/src/extensions/local-tools/tools/show-actions.ts index 8398b1e5a804..a88e33d066b1 100644 --- a/products/desktop/packages/harness/src/extensions/local-tools/tools/show-actions.ts +++ b/packages/agent/packages/harness/src/extensions/local-tools/tools/show-actions.ts @@ -1,4 +1,4 @@ -import { showActionSchema } from "@posthog/shared"; +import { showActionSchema } from "@posthog/agent-contracts"; import { z } from "zod"; import { defineLocalTool, type LocalToolResult } from "../registry"; diff --git a/products/desktop/packages/harness/src/extensions/local-tools/tools/signed-commit.test.ts b/packages/agent/packages/harness/src/extensions/local-tools/tools/signed-commit.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/local-tools/tools/signed-commit.test.ts rename to packages/agent/packages/harness/src/extensions/local-tools/tools/signed-commit.test.ts diff --git a/products/desktop/packages/harness/src/extensions/local-tools/tools/signed-commit.ts b/packages/agent/packages/harness/src/extensions/local-tools/tools/signed-commit.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/local-tools/tools/signed-commit.ts rename to packages/agent/packages/harness/src/extensions/local-tools/tools/signed-commit.ts diff --git a/products/desktop/packages/harness/src/extensions/local-tools/tools/signed-git-tool.ts b/packages/agent/packages/harness/src/extensions/local-tools/tools/signed-git-tool.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/local-tools/tools/signed-git-tool.ts rename to packages/agent/packages/harness/src/extensions/local-tools/tools/signed-git-tool.ts diff --git a/products/desktop/packages/harness/src/extensions/local-tools/tools/signed-merge.test.ts b/packages/agent/packages/harness/src/extensions/local-tools/tools/signed-merge.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/local-tools/tools/signed-merge.test.ts rename to packages/agent/packages/harness/src/extensions/local-tools/tools/signed-merge.test.ts diff --git a/products/desktop/packages/harness/src/extensions/local-tools/tools/signed-merge.ts b/packages/agent/packages/harness/src/extensions/local-tools/tools/signed-merge.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/local-tools/tools/signed-merge.ts rename to packages/agent/packages/harness/src/extensions/local-tools/tools/signed-merge.ts diff --git a/products/desktop/packages/harness/src/extensions/local-tools/tools/signed-rewrite.ts b/packages/agent/packages/harness/src/extensions/local-tools/tools/signed-rewrite.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/local-tools/tools/signed-rewrite.ts rename to packages/agent/packages/harness/src/extensions/local-tools/tools/signed-rewrite.ts diff --git a/products/desktop/packages/harness/src/extensions/local-tools/tools/speak.test.ts b/packages/agent/packages/harness/src/extensions/local-tools/tools/speak.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/local-tools/tools/speak.test.ts rename to packages/agent/packages/harness/src/extensions/local-tools/tools/speak.test.ts diff --git a/products/desktop/packages/harness/src/extensions/local-tools/tools/speak.ts b/packages/agent/packages/harness/src/extensions/local-tools/tools/speak.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/local-tools/tools/speak.ts rename to packages/agent/packages/harness/src/extensions/local-tools/tools/speak.ts diff --git a/products/desktop/packages/harness/src/extensions/local-tools/tools/task-summary-update.test.ts b/packages/agent/packages/harness/src/extensions/local-tools/tools/task-summary-update.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/local-tools/tools/task-summary-update.test.ts rename to packages/agent/packages/harness/src/extensions/local-tools/tools/task-summary-update.test.ts diff --git a/products/desktop/packages/harness/src/extensions/local-tools/tools/task-summary-update.ts b/packages/agent/packages/harness/src/extensions/local-tools/tools/task-summary-update.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/local-tools/tools/task-summary-update.ts rename to packages/agent/packages/harness/src/extensions/local-tools/tools/task-summary-update.ts diff --git a/products/desktop/packages/harness/src/extensions/local-tools/tools/upload-artifact.test.ts b/packages/agent/packages/harness/src/extensions/local-tools/tools/upload-artifact.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/local-tools/tools/upload-artifact.test.ts rename to packages/agent/packages/harness/src/extensions/local-tools/tools/upload-artifact.test.ts diff --git a/products/desktop/packages/harness/src/extensions/local-tools/tools/upload-artifact.ts b/packages/agent/packages/harness/src/extensions/local-tools/tools/upload-artifact.ts similarity index 98% rename from products/desktop/packages/harness/src/extensions/local-tools/tools/upload-artifact.ts rename to packages/agent/packages/harness/src/extensions/local-tools/tools/upload-artifact.ts index 295d3fc259c9..53440cb79bf2 100644 --- a/products/desktop/packages/harness/src/extensions/local-tools/tools/upload-artifact.ts +++ b/packages/agent/packages/harness/src/extensions/local-tools/tools/upload-artifact.ts @@ -1,6 +1,6 @@ import { readFile, realpath, stat } from "node:fs/promises"; import path from "node:path"; -import type { TaskRunArtifact } from "@posthog/shared"; +import type { TaskRunArtifact } from "@posthog/agent-contracts"; import { z } from "zod"; import { defineLocalTool, type LocalToolResult } from "../registry"; import { createSandboxPosthogClient } from "../signed-commit-artefacts"; diff --git a/products/desktop/packages/harness/src/extensions/mcp/README.md b/packages/agent/packages/harness/src/extensions/mcp/README.md similarity index 100% rename from products/desktop/packages/harness/src/extensions/mcp/README.md rename to packages/agent/packages/harness/src/extensions/mcp/README.md diff --git a/products/desktop/packages/harness/src/extensions/mcp/auth-flow.test.ts b/packages/agent/packages/harness/src/extensions/mcp/auth-flow.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/mcp/auth-flow.test.ts rename to packages/agent/packages/harness/src/extensions/mcp/auth-flow.test.ts diff --git a/products/desktop/packages/harness/src/extensions/mcp/auth-flow.ts b/packages/agent/packages/harness/src/extensions/mcp/auth-flow.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/mcp/auth-flow.ts rename to packages/agent/packages/harness/src/extensions/mcp/auth-flow.ts diff --git a/products/desktop/packages/harness/src/extensions/mcp/auth-storage.test.ts b/packages/agent/packages/harness/src/extensions/mcp/auth-storage.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/mcp/auth-storage.test.ts rename to packages/agent/packages/harness/src/extensions/mcp/auth-storage.test.ts diff --git a/products/desktop/packages/harness/src/extensions/mcp/auth-storage.ts b/packages/agent/packages/harness/src/extensions/mcp/auth-storage.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/mcp/auth-storage.ts rename to packages/agent/packages/harness/src/extensions/mcp/auth-storage.ts diff --git a/products/desktop/packages/harness/src/extensions/mcp/callback-server.test.ts b/packages/agent/packages/harness/src/extensions/mcp/callback-server.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/mcp/callback-server.test.ts rename to packages/agent/packages/harness/src/extensions/mcp/callback-server.test.ts diff --git a/products/desktop/packages/harness/src/extensions/mcp/callback-server.ts b/packages/agent/packages/harness/src/extensions/mcp/callback-server.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/mcp/callback-server.ts rename to packages/agent/packages/harness/src/extensions/mcp/callback-server.ts diff --git a/products/desktop/packages/harness/src/extensions/mcp/config.test.ts b/packages/agent/packages/harness/src/extensions/mcp/config.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/mcp/config.test.ts rename to packages/agent/packages/harness/src/extensions/mcp/config.test.ts diff --git a/products/desktop/packages/harness/src/extensions/mcp/config.ts b/packages/agent/packages/harness/src/extensions/mcp/config.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/mcp/config.ts rename to packages/agent/packages/harness/src/extensions/mcp/config.ts diff --git a/products/desktop/packages/harness/src/extensions/mcp/errors.ts b/packages/agent/packages/harness/src/extensions/mcp/errors.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/mcp/errors.ts rename to packages/agent/packages/harness/src/extensions/mcp/errors.ts diff --git a/products/desktop/packages/harness/src/extensions/mcp/extension.test.ts b/packages/agent/packages/harness/src/extensions/mcp/extension.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/mcp/extension.test.ts rename to packages/agent/packages/harness/src/extensions/mcp/extension.test.ts diff --git a/products/desktop/packages/harness/src/extensions/mcp/extension.ts b/packages/agent/packages/harness/src/extensions/mcp/extension.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/mcp/extension.ts rename to packages/agent/packages/harness/src/extensions/mcp/extension.ts diff --git a/products/desktop/packages/harness/src/extensions/mcp/index.ts b/packages/agent/packages/harness/src/extensions/mcp/index.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/mcp/index.ts rename to packages/agent/packages/harness/src/extensions/mcp/index.ts diff --git a/products/desktop/packages/harness/src/extensions/mcp/oauth-provider.test.ts b/packages/agent/packages/harness/src/extensions/mcp/oauth-provider.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/mcp/oauth-provider.test.ts rename to packages/agent/packages/harness/src/extensions/mcp/oauth-provider.test.ts diff --git a/products/desktop/packages/harness/src/extensions/mcp/oauth-provider.ts b/packages/agent/packages/harness/src/extensions/mcp/oauth-provider.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/mcp/oauth-provider.ts rename to packages/agent/packages/harness/src/extensions/mcp/oauth-provider.ts diff --git a/products/desktop/packages/harness/src/extensions/mcp/proxy-tool.test.ts b/packages/agent/packages/harness/src/extensions/mcp/proxy-tool.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/mcp/proxy-tool.test.ts rename to packages/agent/packages/harness/src/extensions/mcp/proxy-tool.test.ts diff --git a/products/desktop/packages/harness/src/extensions/mcp/proxy-tool.ts b/packages/agent/packages/harness/src/extensions/mcp/proxy-tool.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/mcp/proxy-tool.ts rename to packages/agent/packages/harness/src/extensions/mcp/proxy-tool.ts diff --git a/products/desktop/packages/harness/src/extensions/mcp/render.test.ts b/packages/agent/packages/harness/src/extensions/mcp/render.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/mcp/render.test.ts rename to packages/agent/packages/harness/src/extensions/mcp/render.test.ts diff --git a/products/desktop/packages/harness/src/extensions/mcp/render.ts b/packages/agent/packages/harness/src/extensions/mcp/render.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/mcp/render.ts rename to packages/agent/packages/harness/src/extensions/mcp/render.ts diff --git a/products/desktop/packages/harness/src/extensions/mcp/schema.test.ts b/packages/agent/packages/harness/src/extensions/mcp/schema.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/mcp/schema.test.ts rename to packages/agent/packages/harness/src/extensions/mcp/schema.test.ts diff --git a/products/desktop/packages/harness/src/extensions/mcp/schema.ts b/packages/agent/packages/harness/src/extensions/mcp/schema.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/mcp/schema.ts rename to packages/agent/packages/harness/src/extensions/mcp/schema.ts diff --git a/products/desktop/packages/harness/src/extensions/mcp/server-manager.test.ts b/packages/agent/packages/harness/src/extensions/mcp/server-manager.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/mcp/server-manager.test.ts rename to packages/agent/packages/harness/src/extensions/mcp/server-manager.test.ts diff --git a/products/desktop/packages/harness/src/extensions/mcp/server-manager.ts b/packages/agent/packages/harness/src/extensions/mcp/server-manager.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/mcp/server-manager.ts rename to packages/agent/packages/harness/src/extensions/mcp/server-manager.ts diff --git a/products/desktop/packages/harness/src/extensions/mcp/skills/mcp-servers/SKILL.md b/packages/agent/packages/harness/src/extensions/mcp/skills/mcp-servers/SKILL.md similarity index 100% rename from products/desktop/packages/harness/src/extensions/mcp/skills/mcp-servers/SKILL.md rename to packages/agent/packages/harness/src/extensions/mcp/skills/mcp-servers/SKILL.md diff --git a/products/desktop/packages/harness/src/extensions/mcp/test-support.ts b/packages/agent/packages/harness/src/extensions/mcp/test-support.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/mcp/test-support.ts rename to packages/agent/packages/harness/src/extensions/mcp/test-support.ts diff --git a/products/desktop/packages/harness/src/extensions/mcp/tool-bridge.test.ts b/packages/agent/packages/harness/src/extensions/mcp/tool-bridge.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/mcp/tool-bridge.test.ts rename to packages/agent/packages/harness/src/extensions/mcp/tool-bridge.test.ts diff --git a/products/desktop/packages/harness/src/extensions/mcp/tool-bridge.ts b/packages/agent/packages/harness/src/extensions/mcp/tool-bridge.ts similarity index 99% rename from products/desktop/packages/harness/src/extensions/mcp/tool-bridge.ts rename to packages/agent/packages/harness/src/extensions/mcp/tool-bridge.ts index 323e25774859..35136941453f 100644 --- a/products/desktop/packages/harness/src/extensions/mcp/tool-bridge.ts +++ b/packages/agent/packages/harness/src/extensions/mcp/tool-bridge.ts @@ -22,7 +22,7 @@ import { CallToolResultSchema, ListToolsResultSchema, } from "@modelcontextprotocol/sdk/types.js"; -import { boundPersistedMcpResult } from "@posthog/shared"; +import { boundPersistedMcpResult } from "@posthog/agent-contracts"; import type { McpServerConfig, McpSettings } from "./config"; import { McpError } from "./errors"; import { renderMcpToolCall, stripTerminalSequences } from "./render"; diff --git a/products/desktop/packages/harness/src/extensions/mcp/tool-cache.test.ts b/packages/agent/packages/harness/src/extensions/mcp/tool-cache.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/mcp/tool-cache.test.ts rename to packages/agent/packages/harness/src/extensions/mcp/tool-cache.test.ts diff --git a/products/desktop/packages/harness/src/extensions/mcp/tool-cache.ts b/packages/agent/packages/harness/src/extensions/mcp/tool-cache.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/mcp/tool-cache.ts rename to packages/agent/packages/harness/src/extensions/mcp/tool-cache.ts diff --git a/products/desktop/packages/harness/src/extensions/orchestration/agents.test.ts b/packages/agent/packages/harness/src/extensions/orchestration/agents.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/orchestration/agents.test.ts rename to packages/agent/packages/harness/src/extensions/orchestration/agents.test.ts diff --git a/products/desktop/packages/harness/src/extensions/orchestration/agents.ts b/packages/agent/packages/harness/src/extensions/orchestration/agents.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/orchestration/agents.ts rename to packages/agent/packages/harness/src/extensions/orchestration/agents.ts diff --git a/products/desktop/packages/harness/src/extensions/orchestration/auth.test.ts b/packages/agent/packages/harness/src/extensions/orchestration/auth.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/orchestration/auth.test.ts rename to packages/agent/packages/harness/src/extensions/orchestration/auth.test.ts diff --git a/products/desktop/packages/harness/src/extensions/orchestration/auth.ts b/packages/agent/packages/harness/src/extensions/orchestration/auth.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/orchestration/auth.ts rename to packages/agent/packages/harness/src/extensions/orchestration/auth.ts diff --git a/products/desktop/packages/harness/src/extensions/orchestration/bundled-agents/Explore.md b/packages/agent/packages/harness/src/extensions/orchestration/bundled-agents/Explore.md similarity index 100% rename from products/desktop/packages/harness/src/extensions/orchestration/bundled-agents/Explore.md rename to packages/agent/packages/harness/src/extensions/orchestration/bundled-agents/Explore.md diff --git a/products/desktop/packages/harness/src/extensions/orchestration/bundled-agents/General.md b/packages/agent/packages/harness/src/extensions/orchestration/bundled-agents/General.md similarity index 100% rename from products/desktop/packages/harness/src/extensions/orchestration/bundled-agents/General.md rename to packages/agent/packages/harness/src/extensions/orchestration/bundled-agents/General.md diff --git a/products/desktop/packages/harness/src/extensions/orchestration/bundled-agents/Plan.md b/packages/agent/packages/harness/src/extensions/orchestration/bundled-agents/Plan.md similarity index 100% rename from products/desktop/packages/harness/src/extensions/orchestration/bundled-agents/Plan.md rename to packages/agent/packages/harness/src/extensions/orchestration/bundled-agents/Plan.md diff --git a/products/desktop/packages/harness/src/extensions/orchestration/context.test.ts b/packages/agent/packages/harness/src/extensions/orchestration/context.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/orchestration/context.test.ts rename to packages/agent/packages/harness/src/extensions/orchestration/context.test.ts diff --git a/products/desktop/packages/harness/src/extensions/orchestration/context.ts b/packages/agent/packages/harness/src/extensions/orchestration/context.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/orchestration/context.ts rename to packages/agent/packages/harness/src/extensions/orchestration/context.ts diff --git a/products/desktop/packages/harness/src/extensions/orchestration/discovery.test.ts b/packages/agent/packages/harness/src/extensions/orchestration/discovery.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/orchestration/discovery.test.ts rename to packages/agent/packages/harness/src/extensions/orchestration/discovery.test.ts diff --git a/products/desktop/packages/harness/src/extensions/orchestration/discovery.ts b/packages/agent/packages/harness/src/extensions/orchestration/discovery.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/orchestration/discovery.ts rename to packages/agent/packages/harness/src/extensions/orchestration/discovery.ts diff --git a/products/desktop/packages/harness/src/extensions/orchestration/extension.test.ts b/packages/agent/packages/harness/src/extensions/orchestration/extension.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/orchestration/extension.test.ts rename to packages/agent/packages/harness/src/extensions/orchestration/extension.test.ts diff --git a/products/desktop/packages/harness/src/extensions/orchestration/extension.ts b/packages/agent/packages/harness/src/extensions/orchestration/extension.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/orchestration/extension.ts rename to packages/agent/packages/harness/src/extensions/orchestration/extension.ts diff --git a/products/desktop/packages/harness/src/extensions/orchestration/format.test.ts b/packages/agent/packages/harness/src/extensions/orchestration/format.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/orchestration/format.test.ts rename to packages/agent/packages/harness/src/extensions/orchestration/format.test.ts diff --git a/products/desktop/packages/harness/src/extensions/orchestration/format.ts b/packages/agent/packages/harness/src/extensions/orchestration/format.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/orchestration/format.ts rename to packages/agent/packages/harness/src/extensions/orchestration/format.ts diff --git a/products/desktop/packages/harness/src/extensions/orchestration/index.ts b/packages/agent/packages/harness/src/extensions/orchestration/index.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/orchestration/index.ts rename to packages/agent/packages/harness/src/extensions/orchestration/index.ts diff --git a/products/desktop/packages/harness/src/extensions/orchestration/lifecycle.test.ts b/packages/agent/packages/harness/src/extensions/orchestration/lifecycle.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/orchestration/lifecycle.test.ts rename to packages/agent/packages/harness/src/extensions/orchestration/lifecycle.test.ts diff --git a/products/desktop/packages/harness/src/extensions/orchestration/lifecycle.ts b/packages/agent/packages/harness/src/extensions/orchestration/lifecycle.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/orchestration/lifecycle.ts rename to packages/agent/packages/harness/src/extensions/orchestration/lifecycle.ts diff --git a/products/desktop/packages/harness/src/extensions/orchestration/policy.test.ts b/packages/agent/packages/harness/src/extensions/orchestration/policy.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/orchestration/policy.test.ts rename to packages/agent/packages/harness/src/extensions/orchestration/policy.test.ts diff --git a/products/desktop/packages/harness/src/extensions/orchestration/policy.ts b/packages/agent/packages/harness/src/extensions/orchestration/policy.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/orchestration/policy.ts rename to packages/agent/packages/harness/src/extensions/orchestration/policy.ts diff --git a/products/desktop/packages/harness/src/extensions/orchestration/resources.ts b/packages/agent/packages/harness/src/extensions/orchestration/resources.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/orchestration/resources.ts rename to packages/agent/packages/harness/src/extensions/orchestration/resources.ts diff --git a/products/desktop/packages/harness/src/extensions/orchestration/run-agent.test.ts b/packages/agent/packages/harness/src/extensions/orchestration/run-agent.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/orchestration/run-agent.test.ts rename to packages/agent/packages/harness/src/extensions/orchestration/run-agent.test.ts diff --git a/products/desktop/packages/harness/src/extensions/orchestration/run-agent.ts b/packages/agent/packages/harness/src/extensions/orchestration/run-agent.ts similarity index 99% rename from products/desktop/packages/harness/src/extensions/orchestration/run-agent.ts rename to packages/agent/packages/harness/src/extensions/orchestration/run-agent.ts index 092c0f15efea..140e60e2d27f 100644 --- a/products/desktop/packages/harness/src/extensions/orchestration/run-agent.ts +++ b/packages/agent/packages/harness/src/extensions/orchestration/run-agent.ts @@ -15,7 +15,7 @@ import { type AgentRunState, createPiToolCallRecord, type PiSubagentToolCall, -} from "@posthog/shared"; +} from "@posthog/agent-contracts"; import { createWebAccessExtension } from "../web-access/extension"; import type { AgentConfig } from "./agents"; import { diff --git a/products/desktop/packages/harness/src/extensions/orchestration/settings.test.ts b/packages/agent/packages/harness/src/extensions/orchestration/settings.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/orchestration/settings.test.ts rename to packages/agent/packages/harness/src/extensions/orchestration/settings.test.ts diff --git a/products/desktop/packages/harness/src/extensions/orchestration/settings.ts b/packages/agent/packages/harness/src/extensions/orchestration/settings.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/orchestration/settings.ts rename to packages/agent/packages/harness/src/extensions/orchestration/settings.ts diff --git a/products/desktop/packages/harness/src/extensions/orchestration/skills/dynamic-workflows/SKILL.md b/packages/agent/packages/harness/src/extensions/orchestration/skills/dynamic-workflows/SKILL.md similarity index 100% rename from products/desktop/packages/harness/src/extensions/orchestration/skills/dynamic-workflows/SKILL.md rename to packages/agent/packages/harness/src/extensions/orchestration/skills/dynamic-workflows/SKILL.md diff --git a/products/desktop/packages/harness/src/extensions/orchestration/skills/subagent-orchestration/SKILL.md b/packages/agent/packages/harness/src/extensions/orchestration/skills/subagent-orchestration/SKILL.md similarity index 100% rename from products/desktop/packages/harness/src/extensions/orchestration/skills/subagent-orchestration/SKILL.md rename to packages/agent/packages/harness/src/extensions/orchestration/skills/subagent-orchestration/SKILL.md diff --git a/products/desktop/packages/harness/src/extensions/orchestration/text-truncate.test.ts b/packages/agent/packages/harness/src/extensions/orchestration/text-truncate.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/orchestration/text-truncate.test.ts rename to packages/agent/packages/harness/src/extensions/orchestration/text-truncate.test.ts diff --git a/products/desktop/packages/harness/src/extensions/orchestration/text-truncate.ts b/packages/agent/packages/harness/src/extensions/orchestration/text-truncate.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/orchestration/text-truncate.ts rename to packages/agent/packages/harness/src/extensions/orchestration/text-truncate.ts diff --git a/products/desktop/packages/harness/src/extensions/orchestration/tools/subagent-tool.test.ts b/packages/agent/packages/harness/src/extensions/orchestration/tools/subagent-tool.test.ts similarity index 99% rename from products/desktop/packages/harness/src/extensions/orchestration/tools/subagent-tool.test.ts rename to packages/agent/packages/harness/src/extensions/orchestration/tools/subagent-tool.test.ts index a132fef60040..1b1277691ce8 100644 --- a/products/desktop/packages/harness/src/extensions/orchestration/tools/subagent-tool.test.ts +++ b/packages/agent/packages/harness/src/extensions/orchestration/tools/subagent-tool.test.ts @@ -2,7 +2,7 @@ import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs"; import { tmpdir } from "node:os"; import { join } from "node:path"; import type { ExtensionAPI } from "@earendil-works/pi-coding-agent"; -import { createPiToolCallRecord } from "@posthog/shared"; +import { createPiToolCallRecord } from "@posthog/agent-contracts"; import { beforeEach, describe, expect, it, vi } from "vitest"; const { runAgentMock } = vi.hoisted(() => ({ diff --git a/products/desktop/packages/harness/src/extensions/orchestration/tools/subagent-tool.ts b/packages/agent/packages/harness/src/extensions/orchestration/tools/subagent-tool.ts similarity index 99% rename from products/desktop/packages/harness/src/extensions/orchestration/tools/subagent-tool.ts rename to packages/agent/packages/harness/src/extensions/orchestration/tools/subagent-tool.ts index e10100d21e35..54d70b1a22f5 100644 --- a/products/desktop/packages/harness/src/extensions/orchestration/tools/subagent-tool.ts +++ b/packages/agent/packages/harness/src/extensions/orchestration/tools/subagent-tool.ts @@ -1,7 +1,7 @@ import { StringEnum } from "@earendil-works/pi-ai"; import type { ExtensionAPI } from "@earendil-works/pi-coding-agent"; import { defineTool } from "@earendil-works/pi-coding-agent"; -import type { PiSubagentToolDetails } from "@posthog/shared"; +import type { PiSubagentToolDetails } from "@posthog/agent-contracts"; import { Type } from "typebox"; import type { AgentConfig } from "../agents"; import { diff --git a/products/desktop/packages/harness/src/extensions/orchestration/tools/workflow-runtime.test.ts b/packages/agent/packages/harness/src/extensions/orchestration/tools/workflow-runtime.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/orchestration/tools/workflow-runtime.test.ts rename to packages/agent/packages/harness/src/extensions/orchestration/tools/workflow-runtime.test.ts diff --git a/products/desktop/packages/harness/src/extensions/orchestration/tools/workflow-runtime.ts b/packages/agent/packages/harness/src/extensions/orchestration/tools/workflow-runtime.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/orchestration/tools/workflow-runtime.ts rename to packages/agent/packages/harness/src/extensions/orchestration/tools/workflow-runtime.ts diff --git a/products/desktop/packages/harness/src/extensions/orchestration/tools/workflow-tool.test.ts b/packages/agent/packages/harness/src/extensions/orchestration/tools/workflow-tool.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/orchestration/tools/workflow-tool.test.ts rename to packages/agent/packages/harness/src/extensions/orchestration/tools/workflow-tool.test.ts diff --git a/products/desktop/packages/harness/src/extensions/orchestration/tools/workflow-tool.ts b/packages/agent/packages/harness/src/extensions/orchestration/tools/workflow-tool.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/orchestration/tools/workflow-tool.ts rename to packages/agent/packages/harness/src/extensions/orchestration/tools/workflow-tool.ts diff --git a/products/desktop/packages/harness/src/extensions/orchestration/ui/status-editor.ts b/packages/agent/packages/harness/src/extensions/orchestration/ui/status-editor.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/orchestration/ui/status-editor.ts rename to packages/agent/packages/harness/src/extensions/orchestration/ui/status-editor.ts diff --git a/products/desktop/packages/harness/src/extensions/orchestration/ui/status-footer.ts b/packages/agent/packages/harness/src/extensions/orchestration/ui/status-footer.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/orchestration/ui/status-footer.ts rename to packages/agent/packages/harness/src/extensions/orchestration/ui/status-footer.ts diff --git a/products/desktop/packages/harness/src/extensions/orchestration/ui/status-registry.test.ts b/packages/agent/packages/harness/src/extensions/orchestration/ui/status-registry.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/orchestration/ui/status-registry.test.ts rename to packages/agent/packages/harness/src/extensions/orchestration/ui/status-registry.test.ts diff --git a/products/desktop/packages/harness/src/extensions/orchestration/ui/status-registry.ts b/packages/agent/packages/harness/src/extensions/orchestration/ui/status-registry.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/orchestration/ui/status-registry.ts rename to packages/agent/packages/harness/src/extensions/orchestration/ui/status-registry.ts diff --git a/products/desktop/packages/harness/src/extensions/orchestration/ui/subagent-render.test.ts b/packages/agent/packages/harness/src/extensions/orchestration/ui/subagent-render.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/orchestration/ui/subagent-render.test.ts rename to packages/agent/packages/harness/src/extensions/orchestration/ui/subagent-render.test.ts diff --git a/products/desktop/packages/harness/src/extensions/orchestration/ui/subagent-render.ts b/packages/agent/packages/harness/src/extensions/orchestration/ui/subagent-render.ts similarity index 99% rename from products/desktop/packages/harness/src/extensions/orchestration/ui/subagent-render.ts rename to packages/agent/packages/harness/src/extensions/orchestration/ui/subagent-render.ts index 3e5e516cb0da..7521f3a66d4f 100644 --- a/products/desktop/packages/harness/src/extensions/orchestration/ui/subagent-render.ts +++ b/packages/agent/packages/harness/src/extensions/orchestration/ui/subagent-render.ts @@ -20,7 +20,7 @@ import { Text, truncateToWidth, } from "@earendil-works/pi-tui"; -import type { AgentRunState } from "@posthog/shared"; +import type { AgentRunState } from "@posthog/agent-contracts"; import { getFinalOutput } from "../format"; import { isFailedResult, diff --git a/products/desktop/packages/harness/src/extensions/orchestration/ui/subagent-status-overlay.ts b/packages/agent/packages/harness/src/extensions/orchestration/ui/subagent-status-overlay.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/orchestration/ui/subagent-status-overlay.ts rename to packages/agent/packages/harness/src/extensions/orchestration/ui/subagent-status-overlay.ts diff --git a/products/desktop/packages/harness/src/extensions/orchestration/ui/workflow-render.test.ts b/packages/agent/packages/harness/src/extensions/orchestration/ui/workflow-render.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/orchestration/ui/workflow-render.test.ts rename to packages/agent/packages/harness/src/extensions/orchestration/ui/workflow-render.test.ts diff --git a/products/desktop/packages/harness/src/extensions/orchestration/ui/workflow-render.ts b/packages/agent/packages/harness/src/extensions/orchestration/ui/workflow-render.ts similarity index 99% rename from products/desktop/packages/harness/src/extensions/orchestration/ui/workflow-render.ts rename to packages/agent/packages/harness/src/extensions/orchestration/ui/workflow-render.ts index 7c70062a0b02..e695df22b874 100644 --- a/products/desktop/packages/harness/src/extensions/orchestration/ui/workflow-render.ts +++ b/packages/agent/packages/harness/src/extensions/orchestration/ui/workflow-render.ts @@ -21,7 +21,7 @@ import type { PiSubagentToolCall, PiWorkflowToolDetails, WorkflowAgentState, -} from "@posthog/shared"; +} from "@posthog/agent-contracts"; import { extractWorkflowName, type WorkflowInputs, diff --git a/products/desktop/packages/harness/src/extensions/orchestration/ui/workflow-status-overlay.test.ts b/packages/agent/packages/harness/src/extensions/orchestration/ui/workflow-status-overlay.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/orchestration/ui/workflow-status-overlay.test.ts rename to packages/agent/packages/harness/src/extensions/orchestration/ui/workflow-status-overlay.test.ts diff --git a/products/desktop/packages/harness/src/extensions/orchestration/ui/workflow-status-overlay.ts b/packages/agent/packages/harness/src/extensions/orchestration/ui/workflow-status-overlay.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/orchestration/ui/workflow-status-overlay.ts rename to packages/agent/packages/harness/src/extensions/orchestration/ui/workflow-status-overlay.ts diff --git a/products/desktop/packages/harness/src/extensions/posthog-mcp-policy/exec-permission.test.ts b/packages/agent/packages/harness/src/extensions/posthog-mcp-policy/exec-permission.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/posthog-mcp-policy/exec-permission.test.ts rename to packages/agent/packages/harness/src/extensions/posthog-mcp-policy/exec-permission.test.ts diff --git a/products/desktop/packages/harness/src/extensions/posthog-mcp-policy/exec-permission.ts b/packages/agent/packages/harness/src/extensions/posthog-mcp-policy/exec-permission.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/posthog-mcp-policy/exec-permission.ts rename to packages/agent/packages/harness/src/extensions/posthog-mcp-policy/exec-permission.ts diff --git a/products/desktop/packages/harness/src/extensions/posthog-mcp-policy/extension.test.ts b/packages/agent/packages/harness/src/extensions/posthog-mcp-policy/extension.test.ts similarity index 97% rename from products/desktop/packages/harness/src/extensions/posthog-mcp-policy/extension.test.ts rename to packages/agent/packages/harness/src/extensions/posthog-mcp-policy/extension.test.ts index 2e76152c1d56..e3539006da09 100644 --- a/products/desktop/packages/harness/src/extensions/posthog-mcp-policy/extension.test.ts +++ b/packages/agent/packages/harness/src/extensions/posthog-mcp-policy/extension.test.ts @@ -2,7 +2,7 @@ import type { ExtensionAPI, ToolCallEvent, } from "@earendil-works/pi-coding-agent"; -import type { McpToolPermissionDecision } from "@posthog/shared"; +import type { McpToolPermissionDecision } from "@posthog/agent-contracts"; import { describe, expect, it, vi } from "vitest"; import { createPosthogMcpPolicyExtension } from "./extension"; diff --git a/products/desktop/packages/harness/src/extensions/posthog-mcp-policy/extension.ts b/packages/agent/packages/harness/src/extensions/posthog-mcp-policy/extension.ts similarity index 98% rename from products/desktop/packages/harness/src/extensions/posthog-mcp-policy/extension.ts rename to packages/agent/packages/harness/src/extensions/posthog-mcp-policy/extension.ts index b0ee9ab59daf..635fdf0ef422 100644 --- a/products/desktop/packages/harness/src/extensions/posthog-mcp-policy/extension.ts +++ b/packages/agent/packages/harness/src/extensions/posthog-mcp-policy/extension.ts @@ -7,7 +7,7 @@ import type { McpToolPermissionDecision, McpToolPermissionRequest, McpToolPolicy, -} from "@posthog/shared"; +} from "@posthog/agent-contracts"; import { buildToolName } from "../mcp/tool-bridge"; export interface PosthogMcpPolicyOptions { diff --git a/products/desktop/packages/harness/src/extensions/posthog-mcp-policy/index.ts b/packages/agent/packages/harness/src/extensions/posthog-mcp-policy/index.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/posthog-mcp-policy/index.ts rename to packages/agent/packages/harness/src/extensions/posthog-mcp-policy/index.ts diff --git a/products/desktop/packages/harness/src/extensions/posthog-mcp-policy/products.test.ts b/packages/agent/packages/harness/src/extensions/posthog-mcp-policy/products.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/posthog-mcp-policy/products.test.ts rename to packages/agent/packages/harness/src/extensions/posthog-mcp-policy/products.test.ts diff --git a/products/desktop/packages/harness/src/extensions/posthog-mcp-policy/products.ts b/packages/agent/packages/harness/src/extensions/posthog-mcp-policy/products.ts similarity index 99% rename from products/desktop/packages/harness/src/extensions/posthog-mcp-policy/products.ts rename to packages/agent/packages/harness/src/extensions/posthog-mcp-policy/products.ts index 559c9cc96a5c..8a101fb15353 100644 --- a/products/desktop/packages/harness/src/extensions/posthog-mcp-policy/products.ts +++ b/packages/agent/packages/harness/src/extensions/posthog-mcp-policy/products.ts @@ -12,7 +12,10 @@ * the single source of truth for the product id → label set; the renderer maps * ids to icons/styling for display. */ -import { POSTHOG_PRODUCTS, type PostHogProductId } from "@posthog/shared"; +import { + POSTHOG_PRODUCTS, + type PostHogProductId, +} from "@posthog/agent-contracts"; export { POSTHOG_PRODUCTS, type PostHogProductId }; diff --git a/products/desktop/packages/harness/src/extensions/posthog-provider/extension.test.ts b/packages/agent/packages/harness/src/extensions/posthog-provider/extension.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/posthog-provider/extension.test.ts rename to packages/agent/packages/harness/src/extensions/posthog-provider/extension.test.ts diff --git a/products/desktop/packages/harness/src/extensions/posthog-provider/extension.ts b/packages/agent/packages/harness/src/extensions/posthog-provider/extension.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/posthog-provider/extension.ts rename to packages/agent/packages/harness/src/extensions/posthog-provider/extension.ts diff --git a/products/desktop/packages/harness/src/extensions/posthog-provider/gateway-auth.test.ts b/packages/agent/packages/harness/src/extensions/posthog-provider/gateway-auth.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/posthog-provider/gateway-auth.test.ts rename to packages/agent/packages/harness/src/extensions/posthog-provider/gateway-auth.test.ts diff --git a/products/desktop/packages/harness/src/extensions/posthog-provider/gateway-auth.ts b/packages/agent/packages/harness/src/extensions/posthog-provider/gateway-auth.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/posthog-provider/gateway-auth.ts rename to packages/agent/packages/harness/src/extensions/posthog-provider/gateway-auth.ts diff --git a/products/desktop/packages/harness/src/extensions/posthog-provider/gateway.test.ts b/packages/agent/packages/harness/src/extensions/posthog-provider/gateway.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/posthog-provider/gateway.test.ts rename to packages/agent/packages/harness/src/extensions/posthog-provider/gateway.test.ts diff --git a/products/desktop/packages/harness/src/extensions/posthog-provider/gateway.ts b/packages/agent/packages/harness/src/extensions/posthog-provider/gateway.ts similarity index 95% rename from products/desktop/packages/harness/src/extensions/posthog-provider/gateway.ts rename to packages/agent/packages/harness/src/extensions/posthog-provider/gateway.ts index ac846ec8e7c1..ab476ddb7117 100644 --- a/products/desktop/packages/harness/src/extensions/posthog-provider/gateway.ts +++ b/packages/agent/packages/harness/src/extensions/posthog-provider/gateway.ts @@ -1,4 +1,4 @@ -import { type CloudRegion, getCustomCloud } from "@posthog/shared"; +import { type CloudRegion, getCustomCloud } from "@posthog/agent-contracts"; export const GATEWAY_PRODUCT = "posthog_code"; diff --git a/products/desktop/packages/harness/src/extensions/posthog-provider/index.ts b/packages/agent/packages/harness/src/extensions/posthog-provider/index.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/posthog-provider/index.ts rename to packages/agent/packages/harness/src/extensions/posthog-provider/index.ts diff --git a/products/desktop/packages/harness/src/extensions/posthog-provider/model-catalog.test.ts b/packages/agent/packages/harness/src/extensions/posthog-provider/model-catalog.test.ts similarity index 98% rename from products/desktop/packages/harness/src/extensions/posthog-provider/model-catalog.test.ts rename to packages/agent/packages/harness/src/extensions/posthog-provider/model-catalog.test.ts index f51a6e163655..a30b16f993e0 100644 --- a/products/desktop/packages/harness/src/extensions/posthog-provider/model-catalog.test.ts +++ b/packages/agent/packages/harness/src/extensions/posthog-provider/model-catalog.test.ts @@ -148,7 +148,7 @@ describe("resolvePosthogPiModelCatalog", () => { }); // One retired model and one the catalog never listed. `isOfferedModel` owns the full table, - // in packages/shared/src/model-catalog.test.ts; these two prove the filter is wired up here. + // in packages/agent-contracts/src/model-catalog.test.ts; these two prove the filter is wired up here. it.each(["claude-opus-4-7", "gpt-5.4"])( "excludes %s from the Pi catalog", (id) => { diff --git a/products/desktop/packages/harness/src/extensions/posthog-provider/model-catalog.ts b/packages/agent/packages/harness/src/extensions/posthog-provider/model-catalog.ts similarity index 92% rename from products/desktop/packages/harness/src/extensions/posthog-provider/model-catalog.ts rename to packages/agent/packages/harness/src/extensions/posthog-provider/model-catalog.ts index 5fe3e60e53ea..803e7a6254ef 100644 --- a/products/desktop/packages/harness/src/extensions/posthog-provider/model-catalog.ts +++ b/packages/agent/packages/harness/src/extensions/posthog-provider/model-catalog.ts @@ -3,8 +3,14 @@ import { type ModelThinkingLevel, } from "@earendil-works/pi-ai"; import type { ModelInfo } from "@earendil-works/pi-coding-agent"; -import { type CloudRegion, formatGatewayModelName } from "@posthog/shared"; -import { isOfferedModel, labelForModel } from "@posthog/shared/model-catalog"; +import { + type CloudRegion, + formatGatewayModelName, +} from "@posthog/agent-contracts"; +import { + isOfferedModel, + labelForModel, +} from "@posthog/agent-contracts/model-catalog"; import { fetchPosthogGatewayModels, type GatewayModel, diff --git a/products/desktop/packages/harness/src/extensions/posthog-provider/models.test.ts b/packages/agent/packages/harness/src/extensions/posthog-provider/models.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/posthog-provider/models.test.ts rename to packages/agent/packages/harness/src/extensions/posthog-provider/models.test.ts diff --git a/products/desktop/packages/harness/src/extensions/posthog-provider/models.ts b/packages/agent/packages/harness/src/extensions/posthog-provider/models.ts similarity index 98% rename from products/desktop/packages/harness/src/extensions/posthog-provider/models.ts rename to packages/agent/packages/harness/src/extensions/posthog-provider/models.ts index bb60e1fb2f8d..f676cb42f9e6 100644 --- a/products/desktop/packages/harness/src/extensions/posthog-provider/models.ts +++ b/packages/agent/packages/harness/src/extensions/posthog-provider/models.ts @@ -1,8 +1,8 @@ import type { ThinkingLevelMap } from "@earendil-works/pi-ai"; import { getBuiltinModels } from "@earendil-works/pi-ai/providers/all"; import type { ProviderModelConfig } from "@earendil-works/pi-coding-agent"; -import type { CloudRegion } from "@posthog/shared"; -import { buildPosthogProjectHeaderRecord } from "@posthog/shared/posthog-property-headers"; +import type { CloudRegion } from "@posthog/agent-contracts"; +import { buildPosthogProjectHeaderRecord } from "@posthog/agent-contracts/posthog-property-headers"; import { getLlmGatewayUrl } from "./gateway"; export const DEFAULT_MODEL = "claude-opus-5-5"; diff --git a/products/desktop/packages/harness/src/extensions/posthog-provider/oauth.test.ts b/packages/agent/packages/harness/src/extensions/posthog-provider/oauth.test.ts similarity index 99% rename from products/desktop/packages/harness/src/extensions/posthog-provider/oauth.test.ts rename to packages/agent/packages/harness/src/extensions/posthog-provider/oauth.test.ts index 80d3fa43700e..a8cbcb1eace6 100644 --- a/products/desktop/packages/harness/src/extensions/posthog-provider/oauth.test.ts +++ b/packages/agent/packages/harness/src/extensions/posthog-provider/oauth.test.ts @@ -4,7 +4,7 @@ import { getCloudUrlFromRegion, getOauthClientIdFromRegion, OAUTH_SCOPES, -} from "@posthog/shared"; +} from "@posthog/agent-contracts"; import { afterEach, beforeEach, diff --git a/products/desktop/packages/harness/src/extensions/posthog-provider/oauth.ts b/packages/agent/packages/harness/src/extensions/posthog-provider/oauth.ts similarity index 99% rename from products/desktop/packages/harness/src/extensions/posthog-provider/oauth.ts rename to packages/agent/packages/harness/src/extensions/posthog-provider/oauth.ts index 35a8e11bc443..f53577473518 100644 --- a/products/desktop/packages/harness/src/extensions/posthog-provider/oauth.ts +++ b/packages/agent/packages/harness/src/extensions/posthog-provider/oauth.ts @@ -11,7 +11,7 @@ import { getCustomCloud, getOauthClientIdFromRegion, OAUTH_SCOPES, -} from "@posthog/shared"; +} from "@posthog/agent-contracts"; const OAUTH_TIMEOUT_MS = 180_000; const TOKEN_FETCH_TIMEOUT_MS = 30_000; diff --git a/products/desktop/packages/harness/src/extensions/posthog-provider/provider.test.ts b/packages/agent/packages/harness/src/extensions/posthog-provider/provider.test.ts similarity index 99% rename from products/desktop/packages/harness/src/extensions/posthog-provider/provider.test.ts rename to packages/agent/packages/harness/src/extensions/posthog-provider/provider.test.ts index 0b1838a1f53b..7aa7feee8796 100644 --- a/products/desktop/packages/harness/src/extensions/posthog-provider/provider.test.ts +++ b/packages/agent/packages/harness/src/extensions/posthog-provider/provider.test.ts @@ -1,5 +1,5 @@ import type { Api, Model } from "@earendil-works/pi-ai"; -import type { CloudRegion } from "@posthog/shared"; +import type { CloudRegion } from "@posthog/agent-contracts"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import { getLlmGatewayUrl } from "./gateway"; import { diff --git a/products/desktop/packages/harness/src/extensions/posthog-provider/provider.ts b/packages/agent/packages/harness/src/extensions/posthog-provider/provider.ts similarity index 98% rename from products/desktop/packages/harness/src/extensions/posthog-provider/provider.ts rename to packages/agent/packages/harness/src/extensions/posthog-provider/provider.ts index f53ecfbddfc1..62324e3d5b98 100644 --- a/products/desktop/packages/harness/src/extensions/posthog-provider/provider.ts +++ b/packages/agent/packages/harness/src/extensions/posthog-provider/provider.ts @@ -8,7 +8,7 @@ import type { ProviderConfig, ProviderModelConfig, } from "@earendil-works/pi-coding-agent"; -import type { CloudRegion } from "@posthog/shared"; +import type { CloudRegion } from "@posthog/agent-contracts"; import { getLlmGatewayUrl, resolveExplicitRegion, diff --git a/products/desktop/packages/harness/src/extensions/product-engineer/extension.test.ts b/packages/agent/packages/harness/src/extensions/product-engineer/extension.test.ts similarity index 95% rename from products/desktop/packages/harness/src/extensions/product-engineer/extension.test.ts rename to packages/agent/packages/harness/src/extensions/product-engineer/extension.test.ts index 26f08966d0b8..36593d12c5af 100644 --- a/products/desktop/packages/harness/src/extensions/product-engineer/extension.test.ts +++ b/packages/agent/packages/harness/src/extensions/product-engineer/extension.test.ts @@ -1,6 +1,6 @@ import { fileURLToPath } from "node:url"; import type { ExtensionAPI } from "@earendil-works/pi-coding-agent"; -import { PRODUCT_ENGINEER_PROMPT } from "@posthog/shared/product-engineer-prompt"; +import { PRODUCT_ENGINEER_PROMPT } from "@posthog/agent-contracts/product-engineer-prompt"; import { describe, expect, it } from "vitest"; import { createProductEngineerExtension } from "./extension"; diff --git a/products/desktop/packages/harness/src/extensions/product-engineer/extension.ts b/packages/agent/packages/harness/src/extensions/product-engineer/extension.ts similarity index 91% rename from products/desktop/packages/harness/src/extensions/product-engineer/extension.ts rename to packages/agent/packages/harness/src/extensions/product-engineer/extension.ts index b9521562ad9f..733c010505fc 100644 --- a/products/desktop/packages/harness/src/extensions/product-engineer/extension.ts +++ b/packages/agent/packages/harness/src/extensions/product-engineer/extension.ts @@ -4,7 +4,7 @@ import type { ExtensionAPI, ExtensionFactory, } from "@earendil-works/pi-coding-agent"; -import { prependProductEngineerPrompt } from "@posthog/shared/product-engineer-prompt"; +import { prependProductEngineerPrompt } from "@posthog/agent-contracts/product-engineer-prompt"; function resolveProductEngineerResource(relativePath: string): string { const adjacentPath = fileURLToPath(new URL(relativePath, import.meta.url)); diff --git a/products/desktop/packages/harness/src/extensions/product-engineer/index.ts b/packages/agent/packages/harness/src/extensions/product-engineer/index.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/product-engineer/index.ts rename to packages/agent/packages/harness/src/extensions/product-engineer/index.ts diff --git a/products/desktop/packages/harness/src/extensions/registry.ts b/packages/agent/packages/harness/src/extensions/registry.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/registry.ts rename to packages/agent/packages/harness/src/extensions/registry.ts diff --git a/products/desktop/packages/harness/src/extensions/rtk/commands.test.ts b/packages/agent/packages/harness/src/extensions/rtk/commands.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/rtk/commands.test.ts rename to packages/agent/packages/harness/src/extensions/rtk/commands.test.ts diff --git a/products/desktop/packages/harness/src/extensions/rtk/commands.ts b/packages/agent/packages/harness/src/extensions/rtk/commands.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/rtk/commands.ts rename to packages/agent/packages/harness/src/extensions/rtk/commands.ts diff --git a/products/desktop/packages/harness/src/extensions/rtk/extension.test.ts b/packages/agent/packages/harness/src/extensions/rtk/extension.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/rtk/extension.test.ts rename to packages/agent/packages/harness/src/extensions/rtk/extension.test.ts diff --git a/products/desktop/packages/harness/src/extensions/rtk/extension.ts b/packages/agent/packages/harness/src/extensions/rtk/extension.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/rtk/extension.ts rename to packages/agent/packages/harness/src/extensions/rtk/extension.ts diff --git a/products/desktop/packages/harness/src/extensions/rtk/git-command.ts b/packages/agent/packages/harness/src/extensions/rtk/git-command.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/rtk/git-command.ts rename to packages/agent/packages/harness/src/extensions/rtk/git-command.ts diff --git a/products/desktop/packages/harness/src/extensions/rtk/guidance.test.ts b/packages/agent/packages/harness/src/extensions/rtk/guidance.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/rtk/guidance.test.ts rename to packages/agent/packages/harness/src/extensions/rtk/guidance.test.ts diff --git a/products/desktop/packages/harness/src/extensions/rtk/guidance.ts b/packages/agent/packages/harness/src/extensions/rtk/guidance.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/rtk/guidance.ts rename to packages/agent/packages/harness/src/extensions/rtk/guidance.ts diff --git a/products/desktop/packages/harness/src/extensions/rtk/index.ts b/packages/agent/packages/harness/src/extensions/rtk/index.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/rtk/index.ts rename to packages/agent/packages/harness/src/extensions/rtk/index.ts diff --git a/products/desktop/packages/harness/src/extensions/skills-store/index.ts b/packages/agent/packages/harness/src/extensions/skills-store/index.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/skills-store/index.ts rename to packages/agent/packages/harness/src/extensions/skills-store/index.ts diff --git a/products/desktop/packages/harness/src/extensions/skills-store/store-skills.test.ts b/packages/agent/packages/harness/src/extensions/skills-store/store-skills.test.ts similarity index 99% rename from products/desktop/packages/harness/src/extensions/skills-store/store-skills.test.ts rename to packages/agent/packages/harness/src/extensions/skills-store/store-skills.test.ts index e596b7744bc0..de3359b73d31 100644 --- a/products/desktop/packages/harness/src/extensions/skills-store/store-skills.test.ts +++ b/packages/agent/packages/harness/src/extensions/skills-store/store-skills.test.ts @@ -8,7 +8,7 @@ import { } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; -import type { StoreSkillStub } from "@posthog/shared"; +import type { StoreSkillStub } from "@posthog/agent-contracts"; import { afterEach, describe, expect, it, vi } from "vitest"; import { buildStoreSkillsInstructions, diff --git a/products/desktop/packages/harness/src/extensions/skills-store/store-skills.ts b/packages/agent/packages/harness/src/extensions/skills-store/store-skills.ts similarity index 99% rename from products/desktop/packages/harness/src/extensions/skills-store/store-skills.ts rename to packages/agent/packages/harness/src/extensions/skills-store/store-skills.ts index c5785e270a0c..377ec88b7272 100644 --- a/products/desktop/packages/harness/src/extensions/skills-store/store-skills.ts +++ b/packages/agent/packages/harness/src/extensions/skills-store/store-skills.ts @@ -9,7 +9,7 @@ import { } from "node:fs/promises"; import { homedir } from "node:os"; import { join } from "node:path"; -import type { StoreSkillStub, TaskRunState } from "@posthog/shared"; +import type { StoreSkillStub, TaskRunState } from "@posthog/agent-contracts"; /** * The store stamps every stub's frontmatter with `metadata.source`. Only a diff --git a/products/desktop/packages/harness/src/extensions/task-system-prompt/cloud.ts b/packages/agent/packages/harness/src/extensions/task-system-prompt/cloud.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/task-system-prompt/cloud.ts rename to packages/agent/packages/harness/src/extensions/task-system-prompt/cloud.ts diff --git a/products/desktop/packages/harness/src/extensions/task-system-prompt/extension.test.ts b/packages/agent/packages/harness/src/extensions/task-system-prompt/extension.test.ts similarity index 97% rename from products/desktop/packages/harness/src/extensions/task-system-prompt/extension.test.ts rename to packages/agent/packages/harness/src/extensions/task-system-prompt/extension.test.ts index e5fa36f13c0a..4dcb0282b05f 100644 --- a/products/desktop/packages/harness/src/extensions/task-system-prompt/extension.test.ts +++ b/packages/agent/packages/harness/src/extensions/task-system-prompt/extension.test.ts @@ -3,7 +3,7 @@ import type { SessionEntry, SessionManager, } from "@earendil-works/pi-coding-agent"; -import type { TaskContext } from "@posthog/shared/task-context"; +import type { TaskContext } from "@posthog/agent-contracts/task-context"; import { describe, expect, it, vi } from "vitest"; import { createPiTaskSystemPromptExtension, diff --git a/products/desktop/packages/harness/src/extensions/task-system-prompt/extension.ts b/packages/agent/packages/harness/src/extensions/task-system-prompt/extension.ts similarity index 97% rename from products/desktop/packages/harness/src/extensions/task-system-prompt/extension.ts rename to packages/agent/packages/harness/src/extensions/task-system-prompt/extension.ts index 139ebf7890e9..11d354a3408c 100644 --- a/products/desktop/packages/harness/src/extensions/task-system-prompt/extension.ts +++ b/packages/agent/packages/harness/src/extensions/task-system-prompt/extension.ts @@ -4,7 +4,7 @@ import type { SessionEntry, SessionManager, } from "@earendil-works/pi-coding-agent"; -import type { TaskContext } from "@posthog/shared/task-context"; +import type { TaskContext } from "@posthog/agent-contracts/task-context"; import { buildTaskSystemPrompt, type TaskPromptCapabilities } from "./prompt"; export const POSTHOG_PI_TASK_CONTEXT_ENTRY_TYPE = "posthog.pi.task-context"; diff --git a/products/desktop/packages/harness/src/extensions/task-system-prompt/index.ts b/packages/agent/packages/harness/src/extensions/task-system-prompt/index.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/task-system-prompt/index.ts rename to packages/agent/packages/harness/src/extensions/task-system-prompt/index.ts diff --git a/products/desktop/packages/harness/src/extensions/task-system-prompt/prompt.test.ts b/packages/agent/packages/harness/src/extensions/task-system-prompt/prompt.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/task-system-prompt/prompt.test.ts rename to packages/agent/packages/harness/src/extensions/task-system-prompt/prompt.test.ts diff --git a/products/desktop/packages/harness/src/extensions/task-system-prompt/prompt.ts b/packages/agent/packages/harness/src/extensions/task-system-prompt/prompt.ts similarity index 98% rename from products/desktop/packages/harness/src/extensions/task-system-prompt/prompt.ts rename to packages/agent/packages/harness/src/extensions/task-system-prompt/prompt.ts index e87808a747d6..e43ccca99749 100644 --- a/products/desktop/packages/harness/src/extensions/task-system-prompt/prompt.ts +++ b/packages/agent/packages/harness/src/extensions/task-system-prompt/prompt.ts @@ -1,4 +1,4 @@ -import type { TaskContext } from "@posthog/shared/task-context"; +import type { TaskContext } from "@posthog/agent-contracts/task-context"; import { buildTaskSummaryInstructions } from "./task-summary"; export interface TaskPromptCapabilities { diff --git a/products/desktop/packages/harness/src/extensions/task-system-prompt/skills.ts b/packages/agent/packages/harness/src/extensions/task-system-prompt/skills.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/task-system-prompt/skills.ts rename to packages/agent/packages/harness/src/extensions/task-system-prompt/skills.ts diff --git a/products/desktop/packages/harness/src/extensions/task-system-prompt/task-summary.ts b/packages/agent/packages/harness/src/extensions/task-system-prompt/task-summary.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/task-system-prompt/task-summary.ts rename to packages/agent/packages/harness/src/extensions/task-system-prompt/task-summary.ts diff --git a/products/desktop/packages/harness/src/extensions/web-access/extension.ts b/packages/agent/packages/harness/src/extensions/web-access/extension.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/web-access/extension.ts rename to packages/agent/packages/harness/src/extensions/web-access/extension.ts diff --git a/products/desktop/packages/harness/src/extensions/web-access/index.ts b/packages/agent/packages/harness/src/extensions/web-access/index.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/web-access/index.ts rename to packages/agent/packages/harness/src/extensions/web-access/index.ts diff --git a/products/desktop/packages/harness/src/extensions/web-access/render.test.ts b/packages/agent/packages/harness/src/extensions/web-access/render.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/web-access/render.test.ts rename to packages/agent/packages/harness/src/extensions/web-access/render.test.ts diff --git a/products/desktop/packages/harness/src/extensions/web-access/render.ts b/packages/agent/packages/harness/src/extensions/web-access/render.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/web-access/render.ts rename to packages/agent/packages/harness/src/extensions/web-access/render.ts diff --git a/products/desktop/packages/harness/src/extensions/web-access/web-fetch.test.ts b/packages/agent/packages/harness/src/extensions/web-access/web-fetch.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/web-access/web-fetch.test.ts rename to packages/agent/packages/harness/src/extensions/web-access/web-fetch.test.ts diff --git a/products/desktop/packages/harness/src/extensions/web-access/web-fetch.ts b/packages/agent/packages/harness/src/extensions/web-access/web-fetch.ts similarity index 99% rename from products/desktop/packages/harness/src/extensions/web-access/web-fetch.ts rename to packages/agent/packages/harness/src/extensions/web-access/web-fetch.ts index 7cacd7db584c..d12a6aeb06bb 100644 --- a/products/desktop/packages/harness/src/extensions/web-access/web-fetch.ts +++ b/packages/agent/packages/harness/src/extensions/web-access/web-fetch.ts @@ -1,6 +1,9 @@ import { isIP } from "node:net"; import { defineTool } from "@earendil-works/pi-coding-agent"; -import { isPrivateIpv4Octets, isPrivateIpv6Literal } from "@posthog/shared"; +import { + isPrivateIpv4Octets, + isPrivateIpv6Literal, +} from "@posthog/agent-contracts"; import { LRUCache } from "lru-cache"; import TurndownService from "turndown"; import { Type } from "typebox"; @@ -41,7 +44,7 @@ function ipv4Octets(hostname: string): number[] | undefined { * That would require enforcing the check at connection time, not URL-parse * time — out of scope here, but worth remembering as a residual gap. The * IPv4-range and IPv6-literal kernels are shared with the other private-host - * classifiers via `@posthog/shared`. + * classifiers via `@posthog/agent-contracts`. */ function isBlockedHost(rawHostname: string): boolean { // `URL#hostname` keeps IPv6 literals bracketed ("[::1]"); `net.isIP`/our diff --git a/products/desktop/packages/harness/src/extensions/web-access/web-search.test.ts b/packages/agent/packages/harness/src/extensions/web-access/web-search.test.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/web-access/web-search.test.ts rename to packages/agent/packages/harness/src/extensions/web-access/web-search.test.ts diff --git a/products/desktop/packages/harness/src/extensions/web-access/web-search.ts b/packages/agent/packages/harness/src/extensions/web-access/web-search.ts similarity index 100% rename from products/desktop/packages/harness/src/extensions/web-access/web-search.ts rename to packages/agent/packages/harness/src/extensions/web-access/web-search.ts diff --git a/products/desktop/packages/harness/src/index.ts b/packages/agent/packages/harness/src/index.ts similarity index 100% rename from products/desktop/packages/harness/src/index.ts rename to packages/agent/packages/harness/src/index.ts diff --git a/products/desktop/packages/harness/src/project-trust.test.ts b/packages/agent/packages/harness/src/project-trust.test.ts similarity index 100% rename from products/desktop/packages/harness/src/project-trust.test.ts rename to packages/agent/packages/harness/src/project-trust.test.ts diff --git a/products/desktop/packages/harness/src/project-trust.ts b/packages/agent/packages/harness/src/project-trust.ts similarity index 100% rename from products/desktop/packages/harness/src/project-trust.ts rename to packages/agent/packages/harness/src/project-trust.ts diff --git a/products/desktop/packages/harness/src/runtime.test.ts b/packages/agent/packages/harness/src/runtime.test.ts similarity index 100% rename from products/desktop/packages/harness/src/runtime.test.ts rename to packages/agent/packages/harness/src/runtime.test.ts diff --git a/products/desktop/packages/harness/src/runtime.ts b/packages/agent/packages/harness/src/runtime.ts similarity index 100% rename from products/desktop/packages/harness/src/runtime.ts rename to packages/agent/packages/harness/src/runtime.ts diff --git a/products/desktop/packages/harness/tsconfig.json b/packages/agent/packages/harness/tsconfig.json similarity index 100% rename from products/desktop/packages/harness/tsconfig.json rename to packages/agent/packages/harness/tsconfig.json diff --git a/products/desktop/packages/harness/tsup.config.ts b/packages/agent/packages/harness/tsup.config.ts similarity index 100% rename from products/desktop/packages/harness/tsup.config.ts rename to packages/agent/packages/harness/tsup.config.ts diff --git a/products/desktop/packages/agent/pnpm-lock.yaml b/packages/agent/pnpm-lock.yaml similarity index 50% rename from products/desktop/packages/agent/pnpm-lock.yaml rename to packages/agent/pnpm-lock.yaml index b0194c7540b8..ac1e94467c4e 100644 --- a/products/desktop/packages/agent/pnpm-lock.yaml +++ b/packages/agent/pnpm-lock.yaml @@ -15,46 +15,82 @@ catalogs: '@earendil-works/pi-coding-agent': specifier: 0.84.1 version: 0.84.1 + '@earendil-works/pi-tui': + specifier: 0.84.1 + version: 0.84.1 overrides: - '@modelcontextprotocol/sdk': 1.29.0 - '@isaacs/brace-expansion': 5.0.1 - path-to-regexp: 8.4.2 + node-abi: ^3.92.0 + zod@^4.0.0: 4.4.3 + react: 19.2.6 + react-dom: 19.2.6 + react-test-renderer: 19.2.6 + '@types/react': ^19.2.15 + '@types/react-dom': ^19.2.3 + '@posthog/quill>@base-ui/react': ^1.3.0 + node-gyp>undici: 8.5.0 + vite: npm:rolldown-vite@7.3.1 + protobufjs: 7.6.5 + axios: 1.18.1 + hono: 4.12.28 + '@xmldom/xmldom': 0.8.13 + node-forge: 1.4.0 + simple-git: 3.36.0 + drizzle-orm: 0.45.2 fast-uri: 3.1.4 '@hono/node-server': 1.19.13 + lodash: 4.18.0 + serialize-javascript: 7.0.5 + '@electron/get>undici': 7.28.0 + rollup: 4.59.0 + brace-expansion@1: 1.1.16 + brace-expansion@2: 2.1.2 + ws@7: 7.5.11 + ws@8: 8.21.0 + path-to-regexp@8: 8.4.2 qs: 6.15.3 + smol-toml: 1.6.1 importers: .: + devDependencies: + '@biomejs/biome': + specifier: 2.2.4 + version: 2.2.4 + turbo: + specifier: ^2.9.16 + version: 2.9.18 + + packages/agent: dependencies: '@agentclientprotocol/sdk': specifier: 1.1.0 version: 1.1.0(zod@4.4.3) '@anthropic-ai/claude-agent-sdk': - specifier: 0.3.197 - version: 0.3.197(@anthropic-ai/sdk@0.109.0(zod@4.4.3))(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(zod@4.4.3) + specifier: 0.3.280 + version: 0.3.280(@anthropic-ai/sdk@0.109.0(zod@4.4.3))(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(zod@4.4.3) '@anthropic-ai/sdk': specifier: 0.109.0 version: 0.109.0(zod@4.4.3) '@earendil-works/pi-agent-core': specifier: 'catalog:' - version: 0.84.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.21.1)(zod@4.4.3) + version: 0.84.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.21.0)(zod@4.4.3) '@earendil-works/pi-ai': specifier: 'catalog:' - version: 0.84.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.21.1)(zod@4.4.3) + version: 0.84.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.21.0)(zod@4.4.3) '@earendil-works/pi-coding-agent': specifier: 'catalog:' - version: 0.84.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.21.1)(zod@4.4.3) + version: 0.84.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.21.0)(zod@4.4.3) '@hono/node-server': specifier: 1.19.13 - version: 1.19.13(hono@4.12.31) + version: 1.19.13(hono@4.12.28) '@modelcontextprotocol/sdk': specifier: 1.29.0 version: 1.29.0(zod@4.4.3) '@openai/codex': - specifier: 0.144.0 - version: 0.144.0 + specifier: 0.154.0 + version: 0.154.0 '@opentelemetry/api': specifier: ^1.9.1 version: 1.9.1 @@ -69,16 +105,16 @@ importers: version: 0.208.0(@opentelemetry/api@1.9.1) '@opentelemetry/resources': specifier: ^2.0.0 - version: 2.10.0(@opentelemetry/api@1.9.1) + version: 2.5.0(@opentelemetry/api@1.9.1) '@opentelemetry/sdk-logs': specifier: ^0.208.0 version: 0.208.0(@opentelemetry/api@1.9.1) '@opentelemetry/sdk-trace-base': specifier: ^2.8.0 - version: 2.10.0(@opentelemetry/api@1.9.1) + version: 2.8.0(@opentelemetry/api@1.9.1) '@opentelemetry/semantic-conventions': specifier: ^1.28.0 - version: 1.43.0 + version: 1.39.0 '@types/jsonwebtoken': specifier: ^9.0.10 version: 9.0.10 @@ -87,19 +123,19 @@ importers: version: 14.0.3 fflate: specifier: ^0.8.2 - version: 0.8.3 + version: 0.8.2 hono: - specifier: ^4.11.7 - version: 4.12.31 + specifier: 4.12.28 + version: 4.12.28 jsonwebtoken: specifier: ^9.0.2 version: 9.0.3 + lru-cache: + specifier: ^11.1.0 + version: 11.2.5 minimatch: specifier: ^10.0.3 - version: 10.1.1 - tar: - specifier: ^7.5.19 - version: 7.5.21 + version: 10.1.2 uuid: specifier: 13.0.0 version: 13.0.0 @@ -107,91 +143,218 @@ importers: specifier: ^0.3.3 version: 0.3.3 zod: - specifier: ^4.2.0 + specifier: 4.4.3 version: 4.4.3 devDependencies: + '@posthog/agent-contracts': + specifier: workspace:* + version: link:../agent-contracts + '@posthog/git': + specifier: workspace:* + version: link:../git + '@posthog/harness': + specifier: workspace:* + version: link:../harness '@types/bun': - specifier: latest + specifier: 1.3.14 version: 1.3.14 - '@types/tar': - specifier: ^6.1.13 - version: 6.1.13 msw: specifier: ^2.12.7 - version: 2.15.0(@types/node@24.10.1)(typescript@5.9.3) + version: 2.12.8(@types/node@25.2.0)(typescript@5.9.3) tsup: specifier: ^8.5.1 - version: 8.5.1(jiti@2.7.0)(postcss@8.5.22)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.9.0) - tsx: - specifier: ^4.20.6 - version: 4.21.0 + version: 8.5.1(@swc/core@1.15.43)(jiti@2.7.0)(postcss@8.5.23)(tsx@4.22.4)(typescript@5.9.3)(yaml@2.9.0) + typescript: + specifier: ^5.5.0 + version: 5.9.3 + vitest: + specifier: ^4.1.8 + version: 4.1.8(@opentelemetry/api@1.9.1)(@types/node@25.2.0)(@vitest/ui@4.1.8)(jsdom@26.1.0)(msw@2.12.8(@types/node@25.2.0)(typescript@5.9.3))(vite@7.3.5(@types/node@25.2.0)(jiti@2.7.0)(lightningcss@1.33.0)(terser@5.46.0)(tsx@4.22.4)(yaml@2.9.0)) + + packages/agent-contracts: + dependencies: + zod: + specifier: 4.4.3 + version: 4.4.3 + devDependencies: + '@agentclientprotocol/sdk': + specifier: 0.19.0 + version: 0.19.0(zod@4.4.3) + tsup: + specifier: ^8.5.1 + version: 8.5.1(@swc/core@1.15.43)(jiti@2.7.0)(postcss@8.5.23)(tsx@4.22.4)(typescript@5.9.3)(yaml@2.9.0) + typescript: + specifier: ^5.5.0 + version: 5.9.3 + vitest: + specifier: ^4.1.8 + version: 4.1.8(@opentelemetry/api@1.9.1)(@types/node@25.2.0)(@vitest/ui@4.1.8)(jsdom@26.1.0)(msw@2.12.8(@types/node@25.2.0)(typescript@5.9.3))(vite@7.3.5(@types/node@25.2.0)(jiti@2.7.0)(lightningcss@1.33.0)(terser@5.46.0)(tsx@4.22.4)(yaml@2.9.0)) + + packages/enricher: + dependencies: + '@posthog/agent-contracts': + specifier: workspace:* + version: link:../agent-contracts + web-tree-sitter: + specifier: ^0.24.7 + version: 0.24.7 + devDependencies: + tree-sitter-cli: + specifier: ^0.26.6 + version: 0.26.8 + tsup: + specifier: ^8.5.1 + version: 8.5.1(@swc/core@1.15.43)(jiti@2.7.0)(postcss@8.5.23)(tsx@4.22.4)(typescript@5.9.3)(yaml@2.9.0) typescript: specifier: ^5.5.0 version: 5.9.3 vitest: specifier: ^4.1.8 - version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@24.10.1)(msw@2.15.0(@types/node@24.10.1)(typescript@5.9.3))(vite@8.1.5(@types/node@24.10.1)(esbuild@0.27.1)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)) + version: 4.1.8(@opentelemetry/api@1.9.1)(@types/node@25.2.0)(@vitest/ui@4.1.8)(jsdom@26.1.0)(msw@2.12.8(@types/node@25.2.0)(typescript@5.9.3))(vite@7.3.5(@types/node@25.2.0)(jiti@2.7.0)(lightningcss@1.33.0)(terser@5.46.0)(tsx@4.22.4)(yaml@2.9.0)) + + packages/git: + dependencies: + '@posthog/agent-contracts': + specifier: workspace:* + version: link:../agent-contracts + git-url-parse: + specifier: ^16.1.0 + version: 16.1.0 + simple-git: + specifier: 3.36.0 + version: 3.36.0 + devDependencies: + typescript: + specifier: ^5.5.0 + version: 5.9.3 + vitest: + specifier: ^4.1.8 + version: 4.1.8(@opentelemetry/api@1.9.1)(@types/node@25.2.0)(@vitest/ui@4.1.8)(jsdom@26.1.0)(msw@2.12.8(@types/node@25.2.0)(typescript@5.9.3))(vite@7.3.5(@types/node@25.2.0)(jiti@2.7.0)(lightningcss@1.33.0)(terser@5.46.0)(tsx@4.22.4)(yaml@2.9.0)) + + packages/harness: + dependencies: + '@earendil-works/pi-ai': + specifier: 'catalog:' + version: 0.84.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.21.0)(zod@4.4.3) + '@earendil-works/pi-coding-agent': + specifier: 'catalog:' + version: 0.84.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.21.0)(zod@4.4.3) + '@earendil-works/pi-tui': + specifier: 'catalog:' + version: 0.84.1 + '@modelcontextprotocol/sdk': + specifier: ^1.29.0 + version: 1.29.0(zod@4.4.3) + '@posthog/agent-contracts': + specifier: workspace:* + version: link:../agent-contracts + '@posthog/enricher': + specifier: workspace:* + version: link:../enricher + '@posthog/git': + specifier: workspace:* + version: link:../git + fflate: + specifier: ^0.8.2 + version: 0.8.3 + lru-cache: + specifier: ^11.1.0 + version: 11.2.5 + turndown: + specifier: ^7.2.4 + version: 7.2.4 + typebox: + specifier: 1.3.7 + version: 1.3.7 + zod: + specifier: 4.4.3 + version: 4.4.3 + devDependencies: + '@types/node': + specifier: ^22.0.0 + version: 22.20.0 + '@types/turndown': + specifier: ^5.0.6 + version: 5.0.6 + tsup: + specifier: ^8.5.1 + version: 8.5.1(@swc/core@1.15.43)(jiti@2.7.0)(postcss@8.5.23)(tsx@4.22.4)(typescript@5.9.3)(yaml@2.9.0) + typescript: + specifier: ^5.5.0 + version: 5.9.3 + vitest: + specifier: ^4.1.8 + version: 4.1.8(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(@vitest/ui@4.1.8)(jsdom@26.1.0)(msw@2.12.8(@types/node@22.20.0)(typescript@5.9.3))(vite@7.3.5(@types/node@22.20.0)(jiti@2.7.0)(lightningcss@1.33.0)(terser@5.46.0)(tsx@4.22.4)(yaml@2.9.0)) packages: + '@agentclientprotocol/sdk@0.19.0': + resolution: {integrity: sha512-U9I8ws9WTOk6jCBAWpXefGSDgVXn14/kV6HFzwWGcstQ02mOQgClMAROHmoIn9GqZbDBDEOkdIbP4P4TEMQdug==} + peerDependencies: + zod: 4.4.3 + '@agentclientprotocol/sdk@1.1.0': resolution: {integrity: sha512-NT2KqphUJ3w6EksUL51ZhJgIYgq/ZLGcBPkyMKgRSO5PMVwe9DnKKX+Htnvk6KHh6dUuh34UHK4gKp+4te1Mdg==} peerDependencies: - zod: ^3.25.0 || ^4.0.0 + zod: 4.4.3 - '@anthropic-ai/claude-agent-sdk-darwin-arm64@0.3.197': - resolution: {integrity: sha512-jC6WvH5Hr6APTfbMjo4nC6LlyMMqbpCMwiHXIw7/AsQXIHQhZ+cRRMesQlV6UFI1l3O53gLZHzsG9cXwfrPHKw==} + '@anthropic-ai/claude-agent-sdk-darwin-arm64@0.3.280': + resolution: {integrity: sha512-Yws14X5g5hgDtF565Tld/+dILAhH9QZpundjKMyO3dFasq9miXZlhU0NwXqwTO2xP0jDjJ54zduIiJwkcfcvGw==} cpu: [arm64] os: [darwin] - '@anthropic-ai/claude-agent-sdk-darwin-x64@0.3.197': - resolution: {integrity: sha512-ZQNvGkMrTyatBlHTIQ4w2i2aLBuvq355UP/FDLnVXIH8l23RsL1x/0w9P+dqB7EmY9OZi/cPxSrpskpo+dZWLA==} + '@anthropic-ai/claude-agent-sdk-darwin-x64@0.3.280': + resolution: {integrity: sha512-B1eLx/oZ5RL1c3a13nQ4cRUksWyhGcVNS5vbCHnOVu4Pz+dH0moZ+iY8VaE6FvikVAQwFEW6VDU00b6m3tYdsQ==} cpu: [x64] os: [darwin] - '@anthropic-ai/claude-agent-sdk-linux-arm64-musl@0.3.197': - resolution: {integrity: sha512-VuIGXsLGK/aqSQ0tTBqqPVNzjefWS5SWnK8mlYyQitT4s5UDzHXJm0UZBTGxRtlcS0e2+QAHKwbGBCq1ZKSXjg==} + '@anthropic-ai/claude-agent-sdk-linux-arm64-musl@0.3.280': + resolution: {integrity: sha512-uDh+Ggjb36l+jcVgaYxSziGHmBSSR3clqvGlQ0Bgc1v5dLF4igwqZ6ZPW/hS9dArG27fislIOetH1waEgIr+GA==} cpu: [arm64] os: [linux] + libc: [musl] - '@anthropic-ai/claude-agent-sdk-linux-arm64@0.3.197': - resolution: {integrity: sha512-pWhQgCtAft4EGM4Zn24HRad1a/k2u6oA+2uM/KCdjehfKtooDiHfMNd1yzXY/n9AEBWP0RHB2Vz3mJ30X2pVAg==} + '@anthropic-ai/claude-agent-sdk-linux-arm64@0.3.280': + resolution: {integrity: sha512-6s96OIvBHT2817hCFLIZ421JBpQnvrmZucpjlWsyCODKmwGsSxiEhlWqK2h5Q7lwS6F7bzeAhqjGvC7FzDl9Rw==} cpu: [arm64] os: [linux] + libc: [glibc] - '@anthropic-ai/claude-agent-sdk-linux-x64-musl@0.3.197': - resolution: {integrity: sha512-3Tuy7XhD4UIKE4A4RPmKJcbL7Q/3dcB1hEWQt2lKP7c/DlixeEv+tRzvpnFZKhFX2hy0tkBk3QjkozSAacMC/w==} + '@anthropic-ai/claude-agent-sdk-linux-x64-musl@0.3.280': + resolution: {integrity: sha512-IVbIgvi5C0sdLg/p9hpiVvAQ/ikvTKwOOEy5C1aT7w8XLqBgfpJbzzVuk06df1Q0HlILUmf63EKPmq48lbxtqA==} cpu: [x64] os: [linux] + libc: [musl] - '@anthropic-ai/claude-agent-sdk-linux-x64@0.3.197': - resolution: {integrity: sha512-AUccrbdcv4Hy/GteP/gYLjG/zDP+fe2BFtDMctEfRFVz40DazYDcOyW1+nIgSTQtxf5jSTAVVf3cNuXB2CZwlw==} + '@anthropic-ai/claude-agent-sdk-linux-x64@0.3.280': + resolution: {integrity: sha512-vpPyxYLy+zNc7LwQDWsZf0GZtTYa0PJLxzuv2vK9iV2dG+hrbRNTl35NSKKRR9rMj6RpKz0i2NLyVQ+D4mREgw==} cpu: [x64] os: [linux] + libc: [glibc] - '@anthropic-ai/claude-agent-sdk-win32-arm64@0.3.197': - resolution: {integrity: sha512-Wx8uiAKBenDuL8lWQmrqnX5ppljaH5unQ9cKiCz2/9Kgf09dgnrwbX8n/FhndCZR8PmYw539eWwYVrSVc/bl6w==} + '@anthropic-ai/claude-agent-sdk-win32-arm64@0.3.280': + resolution: {integrity: sha512-heTflHwciJF+Hrf7v0J53QBzD+9mxN9gt2VVmEJAN0+ejbPcOcqnGGZHvyc9aZUuGh5INN0ECaiL4Fn1X2vXQQ==} cpu: [arm64] os: [win32] - '@anthropic-ai/claude-agent-sdk-win32-x64@0.3.197': - resolution: {integrity: sha512-ZXJO/VvR3SI4G0gwthWeFXWdHB5RXPu3rtfGRcKZ/YgtDeW17rQ+LZIJTk2ywzbLb8EvlghR5JPgn293hC179Q==} + '@anthropic-ai/claude-agent-sdk-win32-x64@0.3.280': + resolution: {integrity: sha512-N+Y1zJb19nx0oPTvzkl/E3ng9AtWGW+K4hySmSHCgYSsgIwfs1YzDj/F5eHDMrxgklTuzFp76TvL3S75z5ge+g==} cpu: [x64] os: [win32] - '@anthropic-ai/claude-agent-sdk@0.3.197': - resolution: {integrity: sha512-XNIi8W1tb+QfMkcK+5kepOC6BsxG8wtupd72H+pIPzIJypVQhHy7FoX+KBMtTRYwtl+5dsjKyABhjWXebeUilw==} + '@anthropic-ai/claude-agent-sdk@0.3.280': + resolution: {integrity: sha512-aIQSTKcCJcOgi125GAGQaNZUYgxbEBQwV2Ac+Utp0+gGUjIEWjTqz4B8kXr9XjkcCTYiRUMTDsXPAUfIcBDjnw==} engines: {node: '>=18.0.0'} peerDependencies: '@anthropic-ai/sdk': '>=0.93.0' - '@modelcontextprotocol/sdk': 1.29.0 - zod: ^4.0.0 + '@modelcontextprotocol/sdk': ^1.29.0 + zod: 4.4.3 '@anthropic-ai/sdk@0.109.0': resolution: {integrity: sha512-y7P4eLyW5uNut4fXpOUEHqhJwx7dnxrWAfCQE4Lcgm0hSFQuIeHa7CWEKE5dFolEjQJE/RFKkppjri05r2OK/Q==} hasBin: true peerDependencies: - zod: ^3.25.0 || ^4.0.0 + zod: 4.4.3 peerDependenciesMeta: zod: optional: true @@ -200,11 +363,18 @@ packages: resolution: {integrity: sha512-LAmu761tSN9r66ixvmciswUj/ZC+1Q4iAfpedTfSVLeswRwnY3n2Nb6Tsk+cLPP28aLOPWeMgIuTuCcMC6W/iw==} hasBin: true peerDependencies: - zod: ^3.25.0 || ^4.0.0 + zod: 4.4.3 peerDependenciesMeta: zod: optional: true + '@asamuzakjp/css-color@3.2.0': + resolution: {integrity: sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==} + + '@aws-crypto/crc32@5.2.0': + resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==} + engines: {node: '>=16.0.0'} + '@aws-crypto/sha256-browser@5.2.0': resolution: {integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==} @@ -222,90 +392,175 @@ packages: resolution: {integrity: sha512-u+NT61JZEkRFtpL0CAw1N1dwxnaLgwVXQl/zjJxTGgLyS/jTIdg2SdoEoCTHxgDyCnqa1HEi9QOoE9/pYRNpOQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/core@3.976.0': - resolution: {integrity: sha512-0cjRaEdlVoOrsNb9pP5q1Syyc8pXw5xSj2Np2ryReRTr9FppIIRVSdZK4lbnfmc2Hvgux/xBOUU6baB7z8//uA==} + '@aws-sdk/core@3.974.23': + resolution: {integrity: sha512-MiWR/uWjxjFXGzrE0Ghc5lWxUxzHsUWFhV+OX7M4cR9SrmrnZs6TXavnCWnzzdwJeFri34xQo81rvGNzK3c4BQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-env@3.972.60': - resolution: {integrity: sha512-BAkxdoe7tpDDqCghGpuOeHQRbm/2znVvOQm0AvpQbA2tbfMN46doN4zx65fv85ImP3KADwc2zQPmbrlI9MPfMg==} + '@aws-sdk/credential-provider-env@3.972.49': + resolution: {integrity: sha512-liB3yQNHCM9k/gu/w36XHMKPluT7HTlnGUhRbBGSISDQkcr/Sy1zsZabiuvQj8WG5yW573u9RehrBvvnIQ9OEQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-http@3.972.62': - resolution: {integrity: sha512-g/0fGqKTb9xpKdd9AtpmV5Eo3DFKbnkpA2+w0peISSlu7NfAoWOuYBFxsu+yWBtxU89ka55ezoZBCbFaS8pjYQ==} + '@aws-sdk/credential-provider-http@3.972.51': + resolution: {integrity: sha512-XET0H2oofciJ5lMRWNIvRjAP7Q3wv2XT+JtJJEdhPWUMwe3TvQ9qcxonpu7vXmNngncvFpi4E2It+Tamas/naA==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-ini@3.973.5': - resolution: {integrity: sha512-ylubazcRfq2TVus/qXucSXeC42Qdjp5HQxTu68K/BsdMiZlcSLD1zkpoCgApXZX1Y6YJhtGGs7ZHhO/GuIgBlw==} + '@aws-sdk/credential-provider-ini@3.972.56': + resolution: {integrity: sha512-IAmc61hbgQiHht9U3x0tnRwz0lzdwOwD/i9voRgdJrKamF+JtmrBOsW9GwB7mfFonNWOWL4qARWYrF8veEMe3w==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-login@3.972.67': - resolution: {integrity: sha512-CCygIKJ9YbI3n84OClSaSppkgKKHVj2TGT33c6FRORZrYNZQ1POmD+ip0FLYokiJAK7sSdc3YVkOsBm90oxWMQ==} + '@aws-sdk/credential-provider-login@3.972.55': + resolution: {integrity: sha512-hBBkANo3cDn+h2qxxzER4a+J8JCO9o9Z/YYmU7iky6AcaarX5RRdRcHNC6SLdwY0vAXQygn6soUbDqPn3GghaA==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-node@3.972.71': - resolution: {integrity: sha512-HIg7Q2osBzajQwL+1Vkyh2E7Gim3eTNb9RHIsOxDGjW0eZg4oEKtRs5sioCnc73ilhaOm4gX2lHVF8J7+nt2rg==} + '@aws-sdk/credential-provider-node@3.972.58': + resolution: {integrity: sha512-OyCLVmSI7pZO8hxwNVX6pXhTVlJqRBTp+ijdEfJSUj0RyjHnF602OfAarOzGq6wkGodeFkYBt8MmJ6A6ycRgWw==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-process@3.972.60': - resolution: {integrity: sha512-YIo3f99hM43QdYG8hDzwGemnR/pU95b0kramqSJUTleCqaB7+HwKf7YZFHqvOgTqZTPx/mRmNIqoDRr3U0Z3Tw==} + '@aws-sdk/credential-provider-process@3.972.49': + resolution: {integrity: sha512-C8h36lBuC/RnBSsjlO+dn6xZm3KbAl5vpJaVPAfQnMmz2/OISmKOc8XZcqMQgO2ADwBYNRMM6Kf3vz9G/TulMQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-sso@3.973.4': - resolution: {integrity: sha512-BPdmL8sSBOCv4ngZ+3LHxyc3CNqDCEK37CHioCk7zGrTMY5sUtkH8q+o6qA80nn6w3/fyBPGNE7OIRlmoOxRQA==} + '@aws-sdk/credential-provider-sso@3.972.55': + resolution: {integrity: sha512-1FkOz74Ea5QGS9jtIoXp55T/IkSS3spv+nLTT07fRY/+T5xmEOqaYBVIaEmX4zTNvbV6g2lrtlaVKWEoNyJt3w==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-web-identity@3.972.66': - resolution: {integrity: sha512-kSAziJboOmZmsR9/MTbiNjowl2BPes1bQuJpne4qAZ62ubi8fjfr/aupJSQje6udBoYxXTQbsL0e0kby2la3ng==} + '@aws-sdk/credential-provider-web-identity@3.972.55': + resolution: {integrity: sha512-g2BoECD1q01kTPByi56+VLVvdWDzMkKIcr77qixpqH0okw2t0U5CoPv+6S8v/D1Y2Wa6QKKtn6XAtDzP+Kfpvg==} engines: {node: '>=20.0.0'} - '@aws-sdk/eventstream-handler-node@3.972.29': - resolution: {integrity: sha512-t3tKQRTVXsI2QNPE3CaNjHl0wRO9Xi3acZkAyti2RQsiFmZ9Gi0kArX2ighlRJ1BtDVuul413gThAgzyTfgmWA==} + '@aws-sdk/eventstream-handler-node@3.972.22': + resolution: {integrity: sha512-tqPJv0dz4+O0hWGm1a6YekcMZyPhDFs/zH73Von7icaVT5n0Jqvm86typ3jRrG+qoUdPhALOnboRLTmnWQTlYQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-eventstream@3.972.24': - resolution: {integrity: sha512-oykin4mDWxNOuYQ7SF1cHzgYeuFEkF4cdRwgvjFFbIklkx09qIFBiOgsORafG9sXZFO3TayMmQuAQYgADXhI8w==} + '@aws-sdk/middleware-eventstream@3.972.18': + resolution: {integrity: sha512-OHpk8YoZi3yexPq8aFt1vN1IxA2zLKvsIR5GpWYylX/ve6kQmY7wxHNSFy/D3t2apMZ16rs76Co4dJWcDyIk3A==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-websocket@3.972.42': - resolution: {integrity: sha512-dw+GP8DC7QC2C8tUoK7DI8BnrNAjz8tb+uBHSrD2qJvxkCf58kTtFr98pljSrk+umU4n4HDW4eU2k7C2dWMzsg==} + '@aws-sdk/middleware-websocket@3.972.31': + resolution: {integrity: sha512-ps1rumU1LybSFHaW9dTDgkhCMJLVaedEY78kKSzUDDY+b9974/g6aiaYYA0U9WV0oL4CJCJrVWG+EZ/qr4or7g==} engines: {node: '>= 14.0.0'} - '@aws-sdk/nested-clients@3.997.34': - resolution: {integrity: sha512-Y9REVrSwmLM+Qy6sZJ7ofMC2S3Hr3tPP/4CzL5U1olPP7OGoF+6+Px0E49cVQBtSxJtyeLJMf0UaBErfeSahAA==} + '@aws-sdk/nested-clients@3.997.23': + resolution: {integrity: sha512-gO93ZPsI2bxeFZD42f1/qjDw6FAZkNZcKRO94LIiT03fzOmcJ9e/tunxjVjA1Rl69ClmVJzz8H3G9CdKef10PA==} engines: {node: '>=20.0.0'} - '@aws-sdk/signature-v4-multi-region@3.996.41': - resolution: {integrity: sha512-QMUytg+FQMGouc8gHS00KoYih3+N6cqmVI/pQGOIo7Nr7OpQaiXjSYOuL+vsPZ1tymY4LAQ8MYcHJmws5LRxng==} + '@aws-sdk/signature-v4-multi-region@3.996.35': + resolution: {integrity: sha512-6L/VWs+Wch2stHemCGTmUNqKLMzURxQDK5boNG3Jn3kAOp71meDUuS5sbObpEvFxHDq0uWeSLFDNSYsjNt+Dlg==} engines: {node: '>=20.0.0'} '@aws-sdk/token-providers@3.1048.0': resolution: {integrity: sha512-k0y/GcuesuSfWyUM0WamrGyeZmltRYaPbHO82UDA6mZ/doB+FOHKutikPAtSXMn/hDz970cF+iRuuiYO9VEbAA==} engines: {node: '>=20.0.0'} - '@aws-sdk/token-providers@3.1092.0': - resolution: {integrity: sha512-hBYUAr6iBLNFcsiWTgtBb0stdSw39VOUq4Sp4A5caCNf66BAZplWN4FleKrVpJx5li2YgdnK2DqoFSMWC642FQ==} + '@aws-sdk/token-providers@3.1074.0': + resolution: {integrity: sha512-pv80IzgGW4RnXWtft692chZOM9i6PhebVsLCcnaM4dBEPZva2fE6FXAHs76G7Rc7s3yGyX/68G0nZMrUy+Vmpg==} engines: {node: '>=20.0.0'} - '@aws-sdk/types@3.974.2': - resolution: {integrity: sha512-3W6IUtSxFbH6X7Wb7DzGCV5QiFQsd0g8bOfntpmDxQlzBoKWUMBu/JPQR0DwkE+Hpnxd6db1tXbOwdeHddG6cA==} + '@aws-sdk/types@3.973.13': + resolution: {integrity: sha512-pEHZqRkAlHfnfAU9tK+WpKv/gBNjGJrHMgA3A0iYRGyswBS2t0pfez+lWlwktb3Bqa0ovh7w/QJTFwp3fDxLNg==} engines: {node: '>=20.0.0'} '@aws-sdk/util-locate-window@3.965.8': resolution: {integrity: sha512-uUbMs1cBZPafD0ohUj6EwNf0fPZ534NvBxHox4hjX+0Rxq5paSYUem7+hi833pYrzrcnBATKIYpR02MDXT5M9g==} engines: {node: '>=20.0.0'} - '@aws-sdk/xml-builder@3.972.36': - resolution: {integrity: sha512-RdGmS1GLrtaTOLE1ElSluMldNrpk9Emq6uYs8SS8iHlu5xTAmM9rRkM91o48+rIRryBtyO9t+uLYCoMG6jVMVA==} + '@aws-sdk/xml-builder@3.972.31': + resolution: {integrity: sha512-SzE4Pgyl+hDF+BuyuzxUSpwnuUu9lJuO1YGgteG89/4Qv0+2IQiVQqdbPV32IozLvXWQChPQcdkk/sKvb1QHiQ==} engines: {node: '>=20.0.0'} - '@aws/lambda-invoke-store@0.3.0': - resolution: {integrity: sha512-sl4Bm6yiMNYrZKkqqDFWN0UfnWhlS8ivKxrYl+6t0gCLrqr8y3B2IqZZbFRkfaVVp7C/baApyh71P+LeE1A2sQ==} + '@aws/lambda-invoke-store@0.2.4': + resolution: {integrity: sha512-iY8yvjE0y651BixKNPgmv1WrQc+GZ142sb0z4gYnChDDY2YqI4P/jsSopBWrKfAt7LOJAkOXt7rC/hms+WclQQ==} engines: {node: '>=18.0.0'} - '@babel/runtime@7.28.4': - resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} + '@babel/runtime@7.29.2': + resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==} engines: {node: '>=6.9.0'} + '@biomejs/biome@2.2.4': + resolution: {integrity: sha512-TBHU5bUy/Ok6m8c0y3pZiuO/BZoY/OcGxoLlrfQof5s8ISVwbVBdFINPQZyFfKwil8XibYWb7JMwnT8wT4WVPg==} + engines: {node: '>=14.21.3'} + hasBin: true + + '@biomejs/cli-darwin-arm64@2.2.4': + resolution: {integrity: sha512-RJe2uiyaloN4hne4d2+qVj3d3gFJFbmrr5PYtkkjei1O9c+BjGXgpUPVbi8Pl8syumhzJjFsSIYkcLt2VlVLMA==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [darwin] + + '@biomejs/cli-darwin-x64@2.2.4': + resolution: {integrity: sha512-cFsdB4ePanVWfTnPVaUX+yr8qV8ifxjBKMkZwN7gKb20qXPxd/PmwqUH8mY5wnM9+U0QwM76CxFyBRJhC9tQwg==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [darwin] + + '@biomejs/cli-linux-arm64-musl@2.2.4': + resolution: {integrity: sha512-7TNPkMQEWfjvJDaZRSkDCPT/2r5ESFPKx+TEev+I2BXDGIjfCZk2+b88FOhnJNHtksbOZv8ZWnxrA5gyTYhSsQ==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@biomejs/cli-linux-arm64@2.2.4': + resolution: {integrity: sha512-M/Iz48p4NAzMXOuH+tsn5BvG/Jb07KOMTdSVwJpicmhN309BeEyRyQX+n1XDF0JVSlu28+hiTQ2L4rZPvu7nMw==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@biomejs/cli-linux-x64-musl@2.2.4': + resolution: {integrity: sha512-m41nFDS0ksXK2gwXL6W6yZTYPMH0LughqbsxInSKetoH6morVj43szqKx79Iudkp8WRT5SxSh7qVb8KCUiewGg==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@biomejs/cli-linux-x64@2.2.4': + resolution: {integrity: sha512-orr3nnf2Dpb2ssl6aihQtvcKtLySLta4E2UcXdp7+RTa7mfJjBgIsbS0B9GC8gVu0hjOu021aU8b3/I1tn+pVQ==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@biomejs/cli-win32-arm64@2.2.4': + resolution: {integrity: sha512-NXnfTeKHDFUWfxAefa57DiGmu9VyKi0cDqFpdI+1hJWQjGJhJutHPX0b5m+eXvTKOaf+brU+P0JrQAZMb5yYaQ==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [win32] + + '@biomejs/cli-win32-x64@2.2.4': + resolution: {integrity: sha512-3Y4V4zVRarVh/B/eSHczR4LYoSVyv3Dfuvm3cWs5w/HScccS0+Wt/lHOcDTRYeHjQmMYVC3rIRWqyN2EI52+zg==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [win32] + + '@csstools/color-helpers@5.1.0': + resolution: {integrity: sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==} + engines: {node: '>=18'} + + '@csstools/css-calc@2.1.4': + resolution: {integrity: sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-parser-algorithms': ^3.0.5 + '@csstools/css-tokenizer': ^3.0.4 + + '@csstools/css-color-parser@3.1.0': + resolution: {integrity: sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-parser-algorithms': ^3.0.5 + '@csstools/css-tokenizer': ^3.0.4 + + '@csstools/css-parser-algorithms@3.0.5': + resolution: {integrity: sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-tokenizer': ^3.0.4 + + '@csstools/css-tokenizer@3.0.4': + resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==} + engines: {node: '>=18'} + '@earendil-works/pi-agent-core@0.84.1': resolution: {integrity: sha512-evyzXYWCLQGmcaBYHlmSku02r8qoN4SGI60GZABo6iV+H+nqX+P9ud8fEZ4GmRq9mUSREvvfX+w9dA9ThF9C6w==} engines: {node: '>=22.19.0'} @@ -336,167 +591,470 @@ packages: resolution: {integrity: sha512-udeXFbgEhJ6JiB0uguwNVNkDy2FENfmtQwPcY+/iJ8GWeq18wkal1tKqa5YyeH0IqtX1vG0cGh8zfSYzyzVuLA==} engines: {node: '>=22.19.0'} - '@emnapi/core@1.11.1': - resolution: {integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==} - - '@emnapi/runtime@1.11.1': - resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==} + '@esbuild/aix-ppc64@0.27.2': + resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] - '@emnapi/wasi-threads@1.2.2': - resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==} + '@esbuild/aix-ppc64@0.27.7': + resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] - '@esbuild/aix-ppc64@0.27.1': - resolution: {integrity: sha512-HHB50pdsBX6k47S4u5g/CaLjqS3qwaOVE5ILsq64jyzgMhLuCuZ8rGzM9yhsAjfjkbgUPMzZEPa7DAp7yz6vuA==} + '@esbuild/aix-ppc64@0.28.1': + resolution: {integrity: sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.27.1': - resolution: {integrity: sha512-45fuKmAJpxnQWixOGCrS+ro4Uvb4Re9+UTieUY2f8AEc+t7d4AaZ6eUJ3Hva7dtrxAAWHtlEFsXFMAgNnGU9uQ==} + '@esbuild/android-arm64@0.27.2': + resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.27.1': - resolution: {integrity: sha512-kFqa6/UcaTbGm/NncN9kzVOODjhZW8e+FRdSeypWe6j33gzclHtwlANs26JrupOntlcWmB0u8+8HZo8s7thHvg==} + '@esbuild/android-arm64@0.27.7': + resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm64@0.28.1': + resolution: {integrity: sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.27.2': + resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.27.1': - resolution: {integrity: sha512-LBEpOz0BsgMEeHgenf5aqmn/lLNTFXVfoWMUox8CtWWYK9X4jmQzWjoGoNb8lmAYml/tQ/Ysvm8q7szu7BoxRQ==} + '@esbuild/android-arm@0.27.7': + resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-arm@0.28.1': + resolution: {integrity: sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.27.2': + resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.27.1': - resolution: {integrity: sha512-veg7fL8eMSCVKL7IW4pxb54QERtedFDfY/ASrumK/SbFsXnRazxY4YykN/THYqFnFwJ0aVjiUrVG2PwcdAEqQQ==} + '@esbuild/android-x64@0.27.7': + resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/android-x64@0.28.1': + resolution: {integrity: sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.27.2': + resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==} + 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-arm64@0.28.1': + resolution: {integrity: sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.27.1': - resolution: {integrity: sha512-+3ELd+nTzhfWb07Vol7EZ+5PTbJ/u74nC6iv4/lwIU99Ip5uuY6QoIf0Hn4m2HoV0qcnRivN3KSqc+FyCHjoVQ==} + '@esbuild/darwin-x64@0.27.2': + resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.27.1': - resolution: {integrity: sha512-/8Rfgns4XD9XOSXlzUDepG8PX+AVWHliYlUkFI3K3GB6tqbdjYqdhcb4BKRd7C0BhZSoaCxhv8kTcBrcZWP+xg==} + '@esbuild/darwin-x64@0.27.7': + resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/darwin-x64@0.28.1': + resolution: {integrity: sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.27.2': + resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==} + 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-arm64@0.28.1': + resolution: {integrity: sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.27.1': - resolution: {integrity: sha512-GITpD8dK9C+r+5yRT/UKVT36h/DQLOHdwGVwwoHidlnA168oD3uxA878XloXebK4Ul3gDBBIvEdL7go9gCUFzQ==} + '@esbuild/freebsd-x64@0.27.2': + resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==} + 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.27.1': - resolution: {integrity: sha512-W9//kCrh/6in9rWIBdKaMtuTTzNj6jSeG/haWBADqLLa9P8O5YSRDzgD5y9QBok4AYlzS6ARHifAb75V6G670Q==} + '@esbuild/freebsd-x64@0.28.1': + resolution: {integrity: sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.27.2': + resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.27.1': - resolution: {integrity: sha512-ieMID0JRZY/ZeCrsFQ3Y3NlHNCqIhTprJfDgSB3/lv5jJZ8FX3hqPyXWhe+gvS5ARMBJ242PM+VNz/ctNj//eA==} + '@esbuild/linux-arm64@0.27.7': + resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.28.1': + resolution: {integrity: sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.27.2': + resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==} + 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.27.1': - resolution: {integrity: sha512-VIUV4z8GD8rtSVMfAj1aXFahsi/+tcoXXNYmXgzISL+KB381vbSTNdeZHHHIYqFyXcoEhu9n5cT+05tRv13rlw==} + '@esbuild/linux-arm@0.28.1': + resolution: {integrity: sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.27.2': + resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==} + 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.27.1': - resolution: {integrity: sha512-l4rfiiJRN7sTNI//ff65zJ9z8U+k6zcCg0LALU5iEWzY+a1mVZ8iWC1k5EsNKThZ7XCQ6YWtsZ8EWYm7r1UEsg==} + '@esbuild/linux-ia32@0.28.1': + resolution: {integrity: sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.27.2': + resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==} + 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.27.1': - resolution: {integrity: sha512-U0bEuAOLvO/DWFdygTHWY8C067FXz+UbzKgxYhXC0fDieFa0kDIra1FAhsAARRJbvEyso8aAqvPdNxzWuStBnA==} + '@esbuild/linux-loong64@0.28.1': + resolution: {integrity: sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.27.2': + resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==} + 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.27.1': - resolution: {integrity: sha512-NzdQ/Xwu6vPSf/GkdmRNsOfIeSGnh7muundsWItmBsVpMoNPVpM61qNzAVY3pZ1glzzAxLR40UyYM23eaDDbYQ==} + '@esbuild/linux-mips64el@0.28.1': + resolution: {integrity: sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.27.2': + resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==} + 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.27.1': - resolution: {integrity: sha512-7zlw8p3IApcsN7mFw0O1Z1PyEk6PlKMu18roImfl3iQHTnr/yAfYv6s4hXPidbDoI2Q0pW+5xeoM4eTCC0UdrQ==} + '@esbuild/linux-ppc64@0.28.1': + resolution: {integrity: sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.27.2': + resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.27.1': - resolution: {integrity: sha512-cGj5wli+G+nkVQdZo3+7FDKC25Uh4ZVwOAK6A06Hsvgr8WqBBuOy/1s+PUEd/6Je+vjfm6stX0kmib5b/O2Ykw==} + '@esbuild/linux-riscv64@0.27.7': + resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.28.1': + resolution: {integrity: sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.27.2': + resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.27.1': - resolution: {integrity: sha512-z3H/HYI9MM0HTv3hQZ81f+AKb+yEoCRlUby1F80vbQ5XdzEMyY/9iNlAmhqiBKw4MJXwfgsh7ERGEOhrM1niMA==} + '@esbuild/linux-s390x@0.27.7': + resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-s390x@0.28.1': + resolution: {integrity: sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.27.2': + resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==} + 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/linux-x64@0.28.1': + resolution: {integrity: sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.27.1': - resolution: {integrity: sha512-wzC24DxAvk8Em01YmVXyjl96Mr+ecTPyOuADAvjGg+fyBpGmxmcr2E5ttf7Im8D0sXZihpxzO1isus8MdjMCXQ==} + '@esbuild/netbsd-arm64@0.27.2': + resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==} + 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.27.1': - resolution: {integrity: sha512-1YQ8ybGi2yIXswu6eNzJsrYIGFpnlzEWRl6iR5gMgmsrR0FcNoV1m9k9sc3PuP5rUBLshOZylc9nqSgymI+TYg==} + '@esbuild/netbsd-arm64@0.28.1': + resolution: {integrity: sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.27.2': + resolution: {integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==} + 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.27.1': - resolution: {integrity: sha512-5Z+DzLCrq5wmU7RDaMDe2DVXMRm2tTDvX2KU14JJVBN2CT/qov7XVix85QoJqHltpvAOZUAc3ndU56HSMWrv8g==} + '@esbuild/netbsd-x64@0.28.1': + resolution: {integrity: sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.27.2': + resolution: {integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.27.1': - resolution: {integrity: sha512-Q73ENzIdPF5jap4wqLtsfh8YbYSZ8Q0wnxplOlZUOyZy7B4ZKW8DXGWgTCZmF8VWD7Tciwv5F4NsRf6vYlZtqg==} + '@esbuild/openbsd-arm64@0.27.7': + resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-arm64@0.28.1': + resolution: {integrity: sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.27.2': + resolution: {integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==} + 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.27.1': - resolution: {integrity: sha512-ajbHrGM/XiK+sXM0JzEbJAen+0E+JMQZ2l4RR4VFwvV9JEERx+oxtgkpoKv1SevhjavK2z2ReHk32pjzktWbGg==} + '@esbuild/openbsd-x64@0.28.1': + resolution: {integrity: sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.27.2': + resolution: {integrity: sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==} + 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/openharmony-arm64@0.28.1': + resolution: {integrity: sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] - '@esbuild/sunos-x64@0.27.1': - resolution: {integrity: sha512-IPUW+y4VIjuDVn+OMzHc5FV4GubIwPnsz6ubkvN8cuhEqH81NovB53IUlrlBkPMEPxvNnf79MGBoz8rZ2iW8HA==} + '@esbuild/sunos-x64@0.27.2': + resolution: {integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==} + 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/sunos-x64@0.28.1': + resolution: {integrity: sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.27.1': - resolution: {integrity: sha512-RIVRWiljWA6CdVu8zkWcRmGP7iRRIIwvhDKem8UMBjPql2TXM5PkDVvvrzMtj1V+WFPB4K7zkIGM7VzRtFkjdg==} + '@esbuild/win32-arm64@0.27.2': + resolution: {integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.27.1': - resolution: {integrity: sha512-2BR5M8CPbptC1AK5JbJT1fWrHLvejwZidKx3UMSF0ecHMa+smhi16drIrCEggkgviBwLYd5nwrFLSl5Kho96RQ==} + '@esbuild/win32-arm64@0.27.7': + resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-arm64@0.28.1': + resolution: {integrity: sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.27.2': + resolution: {integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.27.1': - resolution: {integrity: sha512-d5X6RMYv6taIymSk8JBP+nxv8DQAMY6A51GPgusqLdK9wBz5wWIXy1KjTck6HnjE9hqJzJRdk+1p/t5soSbCtw==} + '@esbuild/win32-ia32@0.27.7': + resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.28.1': + resolution: {integrity: sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.27.2': + resolution: {integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.27.7': + resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.28.1': + resolution: {integrity: sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -505,7 +1063,7 @@ packages: resolution: {integrity: sha512-gwSvbpiN/17O9TbsqSsE/OzZcpv5Fo4RQjdngGgogtuB9RsyJ8ZHhX5KjHj1bp5N9snN2eK8LDGXSaWW2hof8Q==} engines: {node: '>=20.0.0'} peerDependencies: - '@modelcontextprotocol/sdk': 1.29.0 + '@modelcontextprotocol/sdk': ^1.25.2 peerDependenciesMeta: '@modelcontextprotocol/sdk': optional: true @@ -514,37 +1072,37 @@ packages: resolution: {integrity: sha512-TsQLe4i2gvoTtrHje625ngThGBySOgSK3Xo2XRYOdqGN1teR8+I7vchQC46uLJi8OF62YTYA3AhSpumtkhsaKQ==} engines: {node: '>=18.14.1'} peerDependencies: - hono: ^4 + hono: 4.12.28 - '@inquirer/ansi@2.0.7': - resolution: {integrity: sha512-3eTuUO1vH2cZm2ZKHeQxnOqlTi9EfZDGgIe3BL3I4u+rJHocr9Fz86M4fjYABPvFnQG/gGK551HqDiIcETwU6Q==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} + '@inquirer/ansi@1.0.2': + resolution: {integrity: sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==} + engines: {node: '>=18'} - '@inquirer/confirm@6.1.1': - resolution: {integrity: sha512-eb8DBZcz/2qHWQda4rk2JiQk5h9QV/cVHi1yjt0f69WFZMRFn0sJTye3EAP8icut8UDMjQPsaH5KbcOogefrFQ==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} + '@inquirer/confirm@5.1.21': + resolution: {integrity: sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==} + engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/core@11.2.1': - resolution: {integrity: sha512-Qd6GJT1yVyrZZCfN8W2qKF5ApmqryXRhRKCuip8h01x2w/esJQ2XIYc6f9abMIHgKQdBfFTSOdbHRLAhuM09UA==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} + '@inquirer/core@10.3.2': + resolution: {integrity: sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==} + engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/figures@2.0.7': - resolution: {integrity: sha512-aJ8TBPOGB6f/2qziPfElISTCEd5XOYTFckA2SGjhNmiKzfK/u4ot3v0DUzGVdUnKjN10EqnnEPck36BkyfLnJw==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} + '@inquirer/figures@1.0.15': + resolution: {integrity: sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==} + engines: {node: '>=18'} - '@inquirer/type@4.0.7': - resolution: {integrity: sha512-t28inv14nMQ1PhKpsJPY+kEs/c00qzeCOS2gTNRyTjG5d6qsVA2fItxW4hkvGZ5lvanGLdtCzVIx5dwdRpN1+g==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} + '@inquirer/type@3.0.10': + resolution: {integrity: sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==} + engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: @@ -559,10 +1117,6 @@ packages: resolution: {integrity: sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ==} engines: {node: 20 || >=22} - '@isaacs/fs-minipass@4.0.1': - resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} - engines: {node: '>=18.0.0'} - '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -570,12 +1124,21 @@ packages: resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} + '@jridgewell/source-map@0.3.11': + resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==} + '@jridgewell/sourcemap-codec@1.5.5': resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + '@kwsites/file-exists@1.1.1': + resolution: {integrity: sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==} + + '@kwsites/promise-deferred@1.1.1': + resolution: {integrity: sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==} + '@mariozechner/clipboard-darwin-arm64@0.3.9': resolution: {integrity: sha512-BfgV7vCEWZwJwZJw03r6bP5+tf0iI/ANuQYCxi9RNn7FrWB3yzGuMKCrNLRl6V761vXRdL8+OqZ0wd4TqlsNOQ==} engines: {node: '>= 10'} @@ -598,30 +1161,35 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [glibc] '@mariozechner/clipboard-linux-arm64-musl@0.3.9': resolution: {integrity: sha512-AGuJdgKsmJdm4Pych7kv3sqe591ERRaAHW3xjLooiFzn8J+PxUyof++7YZrB5Y5tpnTO+K18Og3taj2NpluCRQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [musl] '@mariozechner/clipboard-linux-riscv64-gnu@0.3.9': resolution: {integrity: sha512-DXBEAiuMpk7dhS1a9NzNxVAFi1vaKoPu7rQNgY8LIDLGrK3lnIp3nT10DUum+PKVJoJppIP+NAA8IZe4DMNDPw==} engines: {node: '>= 10'} cpu: [riscv64] os: [linux] + libc: [glibc] '@mariozechner/clipboard-linux-x64-gnu@0.3.9': resolution: {integrity: sha512-WORrMLd6EpElEME7JRKfSaY34nW1P5LbdgK5YNCS1ncG2LqmITsSMEJ8nh2mpvxb3TxqbOOKgY7k9eMJYlW9Mw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] '@mariozechner/clipboard-linux-x64-musl@0.3.9': resolution: {integrity: sha512-/DHn+1DrfL6oRaPPWXaOKvonFFrni666fxd+zFqiQEfvBH0tsHVWjq9iqBk0oDp0qaPA72lIMy5BptxISBEhZQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [musl] '@mariozechner/clipboard-win32-arm64-msvc@0.3.9': resolution: {integrity: sha512-O5FHD3ErkMwMhNzAfu3ggy0ug4z7btZuoQgwwxlzPrwV2bxlD6WDpqBY4NCgICAgZdDKdp+loUEKVAVt8aYnhQ==} @@ -647,75 +1215,69 @@ packages: '@opentelemetry/api': optional: true + '@mixmark-io/domino@2.2.0': + resolution: {integrity: sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw==} + '@modelcontextprotocol/sdk@1.29.0': resolution: {integrity: sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ==} engines: {node: '>=18'} peerDependencies: '@cfworker/json-schema': ^4.1.1 - zod: ^3.25 || ^4.0 + zod: 4.4.3 peerDependenciesMeta: '@cfworker/json-schema': optional: true - '@mswjs/interceptors@0.41.9': - resolution: {integrity: sha512-VVPPgHyQ6ShqnrmDWuxjmUIsO9gWyOZFmuOfLd9LfBGQJwZfy0gvv9pbHSJuoFNIYC7ZDX9aoFwowjcdSC4E8w==} + '@mswjs/interceptors@0.41.0': + resolution: {integrity: sha512-edAo9bW53BLYeSK+UPRr2Iz1Fj9DeGMjytvVM0HXRoo750ElWUgPsZPAOTQa12EUiwgDErH2PsFNTLvk1jBxjQ==} engines: {node: '>=18'} - '@napi-rs/wasm-runtime@1.1.6': - resolution: {integrity: sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==} - peerDependencies: - '@emnapi/core': ^1.7.1 - '@emnapi/runtime': ^1.7.1 - '@open-draft/deferred-promise@2.2.0': resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==} - '@open-draft/deferred-promise@3.0.0': - resolution: {integrity: sha512-XW375UK8/9SqUVNVa6M0yEy8+iTi4QN5VZ7aZuRFQmy76LRwI9wy5F4YIBU6T+eTe2/DNDo8tqu8RHlwLHM6RA==} - '@open-draft/logger@0.3.0': resolution: {integrity: sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==} '@open-draft/until@2.1.0': resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} - '@openai/codex@0.144.0': - resolution: {integrity: sha512-QFh6f+v5QUx/Vg0HjIl9HB94p7aDLBDkZjc4IXX5RXUcXHPVCZNb6Hl2R49Og/fqW7orgZkeDcgWfRANUa1WoQ==} + '@openai/codex@0.154.0': + resolution: {integrity: sha512-FV/x1OHXYv/ifjf3mXj9ThTTAWcUZN6cGIRQRhRxkKNOPuImu1WW0c8ev1vUkE9XGH90dEnYG1tBjIkxRikg0w==} engines: {node: '>=16'} hasBin: true - '@openai/codex@0.144.0-darwin-arm64': - resolution: {integrity: sha512-rqFAJdOa2I0VRgepVsSZeLxs96+Y+LXTjccOOvH6894FyaFAYPZ/o+6hgpB1iGHxxdoY/DsGa8jrJC8Leqn9Kg==} + '@openai/codex@0.154.0-darwin-arm64': + resolution: {integrity: sha512-HP/vJCH/t2hB9Kg6hotN9UglClJ6/z584fal5lEP14C9gNAgAQS4/kTQC7l5V+BA3TqwDPwINSjul28cX8AYXg==} engines: {node: '>=16'} cpu: [arm64] os: [darwin] - '@openai/codex@0.144.0-darwin-x64': - resolution: {integrity: sha512-4p2jxRbN+Khg5UQzpkzT9upFj+qkEF/abmdvrtflkkWmVKP6Nt+yi8ospdqv9PDqvQ9SotPvX7iXaFaeUTrtmA==} + '@openai/codex@0.154.0-darwin-x64': + resolution: {integrity: sha512-2aqz+72Hop8PF2RYglQ4JnGjm3OlRIrTykJIT0hyLeUgM6NCFy09RgTmqRCoWliKQZjEn9jjZqUEp7QujAj77g==} engines: {node: '>=16'} cpu: [x64] os: [darwin] - '@openai/codex@0.144.0-linux-arm64': - resolution: {integrity: sha512-k++xhZrn9P3laO00Q92APG6mdOFDD66nUBo+8ExCa1NXi2pjLEMLC4+UNJTUUtUT1PEflOZ5pDKxPXgzaiFFFg==} + '@openai/codex@0.154.0-linux-arm64': + resolution: {integrity: sha512-KmTCB6ST484zeYlPpKP/K5P/gRaYmt6TihVD+zotoe6O9q0JSBP+FYvCz4A/zZXR7xDOHURTSjHp0sD8wWS0YQ==} engines: {node: '>=16'} cpu: [arm64] os: [linux] - '@openai/codex@0.144.0-linux-x64': - resolution: {integrity: sha512-GmKtQeX+cO9lN7mQD1FEVcXYEMLMgMByHwZdvlluH0bj/+c2ind3hwbRtE3eECFDekNhEiB80Ez0FfbkyFQqoA==} + '@openai/codex@0.154.0-linux-x64': + resolution: {integrity: sha512-a4FI3A8sGtwGrOqltrPbrS2hajrHQG591EwmRfiRoLMb10VxdBtUGW4gu6IJVYENiYGA7k3P4jlRHEoCZU/s9Q==} engines: {node: '>=16'} cpu: [x64] os: [linux] - '@openai/codex@0.144.0-win32-arm64': - resolution: {integrity: sha512-e2yGSgwdzrT1SoJMoOzWD58WBEsIaAMZpEchuV2VGkE2T955SG7dn7EyVQTQcy7/rdpE8aEDktZ/1eQQfjkdtQ==} + '@openai/codex@0.154.0-win32-arm64': + resolution: {integrity: sha512-CRUmZnE0Y/a8aLMrrA681EytOGaPaF659wJAiI4I3hsbQjaeYBSPV7PkCjy4Qn5LR/fmwIUORVH+6JaBNQL+tw==} engines: {node: '>=16'} cpu: [arm64] os: [win32] - '@openai/codex@0.144.0-win32-x64': - resolution: {integrity: sha512-QiholLCYqNeYvNM77HOmPtrOFrY0rQc/N9nXt+sQGXO3rEGmcWjpLzujY4Oegl3CLRHoieWqlep3EqEvFBjoIA==} + '@openai/codex@0.154.0-win32-x64': + resolution: {integrity: sha512-Stg2KEJPIKVqPPR1wCverGOR4ey3RR3cvakR07w7FNKQUMzmHaOZomRsP2bR1qOT/67yHsks9rB+MCMfIWXcRA==} engines: {node: '>=16'} cpu: [x64] os: [win32] @@ -732,14 +1294,20 @@ packages: resolution: {integrity: sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q==} engines: {node: '>=8.0.0'} - '@opentelemetry/core@2.10.0': - resolution: {integrity: sha512-/wNZ8twnEQQA4HoHu22+vcsdru6pWPWxW+7w+FlxT6Id7PE/WIbZmVKkte+PF72e0F2dnImFeHD2syyE1Mw6MQ==} + '@opentelemetry/core@2.2.0': + resolution: {integrity: sha512-FuabnnUm8LflnieVxs6eP7Z383hgQU4W1e3KJS6aOG3RxWxcHyBxH8fDMHNgu/gFx/M2jvTOW/4/PHhLz6bjWw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/core@2.5.0': + resolution: {integrity: sha512-ka4H8OM6+DlUhSAZpONu0cPBtPPTQKxbxVzC4CzVx5+K4JnroJVBtDzLAMx4/3CDTJXRvVFhpFjtl4SaiTNoyQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/core@2.2.0': - resolution: {integrity: sha512-FuabnnUm8LflnieVxs6eP7Z383hgQU4W1e3KJS6aOG3RxWxcHyBxH8fDMHNgu/gFx/M2jvTOW/4/PHhLz6bjWw==} + '@opentelemetry/core@2.8.0': + resolution: {integrity: sha512-hd1Lfh8p545nNz+jq1Ejfz+Mn1hyLuxYn1YzTfFNrxr8urEWMNQLPf1Th8kjOH+HxwawCrtgBp8JpBUR4ZSgww==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' @@ -768,14 +1336,20 @@ packages: peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/resources@2.10.0': - resolution: {integrity: sha512-q6MMm2zhggzsHVNbabYwut+a6nbuQQe3URUoxaojM/8K1IBfwwPzvxIjNi2/lI1TFe+fMHMW9MWhrtDLEXEnkA==} + '@opentelemetry/resources@2.2.0': + resolution: {integrity: sha512-1pNQf/JazQTMA0BiO5NINUzH0cbLbbl7mntLa4aJNmCCXSj0q03T5ZXXL0zw4G55TjdL9Tz32cznGClf+8zr5A==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/resources@2.5.0': + resolution: {integrity: sha512-F8W52ApePshpoSrfsSk1H2yJn9aKjCrbpQF1M9Qii0GHzbfVeFUB+rc3X4aggyZD8x9Gu3Slua+s6krmq6Dt8g==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.3.0 <1.10.0' - '@opentelemetry/resources@2.2.0': - resolution: {integrity: sha512-1pNQf/JazQTMA0BiO5NINUzH0cbLbbl7mntLa4aJNmCCXSj0q03T5ZXXL0zw4G55TjdL9Tz32cznGClf+8zr5A==} + '@opentelemetry/resources@2.8.0': + resolution: {integrity: sha512-qmXQ27ilDbUK/vGMqwL8D4/rhn76C+sherM4wTbjlfknR8Nvfc/hCxjRJPhkzZzUsPiNg16SA31NxMabwttRjg==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.3.0 <1.10.0' @@ -792,30 +1366,28 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.9.0 <1.10.0' - '@opentelemetry/sdk-trace-base@2.10.0': - resolution: {integrity: sha512-GuYQQT7QD2EeO8lcZLRQzcbOyhqAzL+6WWTKTU9mSUBYBazkEDl+VrQcXQhbB08OWM9anD1aHleVadzulpOaUQ==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': '>=1.3.0 <1.10.0' - '@opentelemetry/sdk-trace-base@2.2.0': resolution: {integrity: sha512-xWQgL0Bmctsalg6PaXExmzdedSp3gyKV8mQBwK/j9VGdCDu2fmXIb2gAehBKbkXCpJ4HPkgv3QfoJWRT4dHWbw==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.3.0 <1.10.0' - '@opentelemetry/sdk-trace@2.10.0': - resolution: {integrity: sha512-MfQGq3GRmTh5fM/y+OjaO0vj6+luCB1XO2gfXCalKCfgKw0eHL++sm75DNweC6ohlp+aFvACqeE0fYayqdRaoQ==} + '@opentelemetry/sdk-trace-base@2.8.0': + resolution: {integrity: sha512-mhU4jp+vW0mGbFRd+GeXHvmfA4aDqWjBjLC3pE5XMpLs0IE2ryYb019Ts2AQrOq67gaTF25D91+fgvEHDZEnuQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.3.0 <1.10.0' - '@opentelemetry/semantic-conventions@1.43.0': - resolution: {integrity: sha512-eSYWTm620tTk45EKSedaUL8MFYI8hW164hIXsgIHyxu3VobUB3fFCu5t0hQby6OoWRPsG1KkKUG2M5UadiLiVg==} + '@opentelemetry/semantic-conventions@1.39.0': + resolution: {integrity: sha512-R5R9tb2AXs2IRLNKLBJDynhkfmx7mX0vi8NkhZb3gUkPWHn6HXk5J8iQ/dql0U3ApfWym4kXXmBDRGO+oeOfjg==} + engines: {node: '>=14'} + + '@opentelemetry/semantic-conventions@1.41.1': + resolution: {integrity: sha512-/UhIkaZgPutTFmQ7RnIJGgDXZmtEJ7Dvi86xNTFWcnRxVRNk/aotsqDJYeEvDP+FSMB2SdW+pQzNMcWP0rwuNA==} engines: {node: '>=14'} - '@oxc-project/types@0.139.0': - resolution: {integrity: sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==} + '@polka/url@1.0.0-next.29': + resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} '@protobufjs/aspromise@1.1.2': resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} @@ -844,221 +1416,163 @@ packages: '@protobufjs/utf8@1.1.2': resolution: {integrity: sha512-b1UQwcEZ4yCnMCD8DAL1VlbvBJE9/IX4FTIp7BG1xYpf29SLazLSrqUkj4w7Y5y7cCVP6E5tcqqcI0xemPkHug==} - '@rolldown/binding-android-arm64@1.1.5': - resolution: {integrity: sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [android] - - '@rolldown/binding-darwin-arm64@1.1.5': - resolution: {integrity: sha512-51Bnx9pNiMRKSUNtBfySkNJ9vMU9Hh3I1ozDd6gyPPYzaXCfnptUcEZxXGYFn+ul2dtcMUiqGR1Yai2K10uoTw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [darwin] - - '@rolldown/binding-darwin-x64@1.1.5': - resolution: {integrity: sha512-Tm+gbfC0aHu1tBA/JvKQh32S0K6YgCHkiAF4/W6xX0K0RmNuc94VeK419dJoE65R5aRxmo+noZQSWrAMF6yb6g==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [darwin] - - '@rolldown/binding-freebsd-x64@1.1.5': - resolution: {integrity: sha512-JMzDKCCXq93YccG5gz3hvOs1oXRKAf0XYpfOS88e+wZrC8Iugj6j68867vrYZkvpDDpKn/KoKORThmchMpF6TA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [freebsd] - - '@rolldown/binding-linux-arm-gnueabihf@1.1.5': - resolution: {integrity: sha512-uML21j2K5TfPGutKxub+M+nLjZIrWjXQ5Grx4lCe/nimTj9B4L63zHpjXLl4y0L3mcm2htEQIb06oCG/szerNw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [linux] - - '@rolldown/binding-linux-arm64-gnu@1.1.5': - resolution: {integrity: sha512-navSiuTMogvnQoZoM/v+l3ZWo50/NTwSHSzheABx/RCnmUPaKwq9qSo4Br2OYRs21+Fz8uFqITZM3H4opOB0/Q==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - - '@rolldown/binding-linux-arm64-musl@1.1.5': - resolution: {integrity: sha512-lAryqH7IteztmCXQXk0etKj4wBQ7Gx5S6LjKhsgp9zb8I5bsuvU/2llH1hDQcjsFeqIsovMVN339/8pUDDBXxA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - - '@rolldown/binding-linux-ppc64-gnu@1.1.5': - resolution: {integrity: sha512-fsK/sNBnxzBlL4O1JNrZakVQxPspqpED5dLtNsZS9oOKmtSpdNIzxH2kkol5HYTWJN47sE20ztMJPxfZ89qGOg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [ppc64] - os: [linux] - - '@rolldown/binding-linux-s390x-gnu@1.1.5': - resolution: {integrity: sha512-gLYb4BIadlfTOYT5gO503n8zQjXflgzpD0FcyKh0Mzx3rqCZKnHoJWV9xe1KXUJ5lx2JfcSHr/mhzS0PC/McAA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [s390x] - os: [linux] - - '@rolldown/binding-linux-x64-gnu@1.1.5': - resolution: {integrity: sha512-FjcpEKUyJygHgs1o50VYNvkt5+7Le/VEdYt0AkRpkL33MnyQfwr8l5mXwMmfmTbyMPr5vJLC+8/Gd9gXnwU1QQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - - '@rolldown/binding-linux-x64-musl@1.1.5': - resolution: {integrity: sha512-Me+PfPI2TMeOQk0gYWfLQZtTktrmzbr8cDboqX83XKc7UrgAi55gF+2dUkWdxd19n55Essp2yeca+O9N5rBxHg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - - '@rolldown/binding-openharmony-arm64@1.1.5': - resolution: {integrity: sha512-yc5WrLzXks6zCQfn9Oxr8pORKyl/pF+QjHmW/Qx3qu0oyrrNC+y2JLTU1E2rcWYAmzlnqngWXHQjy51VzW70Vw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [openharmony] - - '@rolldown/binding-wasm32-wasi@1.1.5': - resolution: {integrity: sha512-VbQGPX2b4r48TAMIM2cjgluIM1HYutm4pcTEJsle7iEP7sB1dFqtPLBVbdLAZCxy1txCcPxf4QFf4v8uvltPqA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [wasm32] - - '@rolldown/binding-win32-arm64-msvc@1.1.5': - resolution: {integrity: sha512-gHv82k63z4qpV5+Q1y/12KrK0ltWBukVDI8nZcbT7Tt/ZlOIVwppazneq0F93oDxTo3IgAMEDIoQh3E2n6mVsw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [win32] - - '@rolldown/binding-win32-x64-msvc@1.1.5': - resolution: {integrity: sha512-tTZuDBPw85tEN5PQi1pnEBzDy0Z49HtScLAbD5t6hyeU92A95pRWaSMw1GZZi/RwgSgUIl0xrSlXIT/9QzvYSA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [win32] - - '@rolldown/pluginutils@1.0.1': - resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} - - '@rollup/rollup-android-arm-eabi@4.53.3': - resolution: {integrity: sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==} + '@rollup/rollup-android-arm-eabi@4.59.0': + resolution: {integrity: sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.53.3': - resolution: {integrity: sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==} + '@rollup/rollup-android-arm64@4.59.0': + resolution: {integrity: sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.53.3': - resolution: {integrity: sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==} + '@rollup/rollup-darwin-arm64@4.59.0': + resolution: {integrity: sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.53.3': - resolution: {integrity: sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==} + '@rollup/rollup-darwin-x64@4.59.0': + resolution: {integrity: sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.53.3': - resolution: {integrity: sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==} + '@rollup/rollup-freebsd-arm64@4.59.0': + resolution: {integrity: sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.53.3': - resolution: {integrity: sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==} + '@rollup/rollup-freebsd-x64@4.59.0': + resolution: {integrity: sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.53.3': - resolution: {integrity: sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==} + '@rollup/rollup-linux-arm-gnueabihf@4.59.0': + resolution: {integrity: sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==} cpu: [arm] os: [linux] + libc: [glibc] - '@rollup/rollup-linux-arm-musleabihf@4.53.3': - resolution: {integrity: sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==} + '@rollup/rollup-linux-arm-musleabihf@4.59.0': + resolution: {integrity: sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==} cpu: [arm] os: [linux] + libc: [musl] - '@rollup/rollup-linux-arm64-gnu@4.53.3': - resolution: {integrity: sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==} + '@rollup/rollup-linux-arm64-gnu@4.59.0': + resolution: {integrity: sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==} cpu: [arm64] os: [linux] + libc: [glibc] - '@rollup/rollup-linux-arm64-musl@4.53.3': - resolution: {integrity: sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==} + '@rollup/rollup-linux-arm64-musl@4.59.0': + resolution: {integrity: sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==} cpu: [arm64] os: [linux] + libc: [musl] + + '@rollup/rollup-linux-loong64-gnu@4.59.0': + resolution: {integrity: sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==} + cpu: [loong64] + os: [linux] + libc: [glibc] - '@rollup/rollup-linux-loong64-gnu@4.53.3': - resolution: {integrity: sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==} + '@rollup/rollup-linux-loong64-musl@4.59.0': + resolution: {integrity: sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==} cpu: [loong64] os: [linux] + libc: [musl] + + '@rollup/rollup-linux-ppc64-gnu@4.59.0': + resolution: {integrity: sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==} + cpu: [ppc64] + os: [linux] + libc: [glibc] - '@rollup/rollup-linux-ppc64-gnu@4.53.3': - resolution: {integrity: sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==} + '@rollup/rollup-linux-ppc64-musl@4.59.0': + resolution: {integrity: sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==} cpu: [ppc64] os: [linux] + libc: [musl] - '@rollup/rollup-linux-riscv64-gnu@4.53.3': - resolution: {integrity: sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==} + '@rollup/rollup-linux-riscv64-gnu@4.59.0': + resolution: {integrity: sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==} cpu: [riscv64] os: [linux] + libc: [glibc] - '@rollup/rollup-linux-riscv64-musl@4.53.3': - resolution: {integrity: sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==} + '@rollup/rollup-linux-riscv64-musl@4.59.0': + resolution: {integrity: sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==} cpu: [riscv64] os: [linux] + libc: [musl] - '@rollup/rollup-linux-s390x-gnu@4.53.3': - resolution: {integrity: sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==} + '@rollup/rollup-linux-s390x-gnu@4.59.0': + resolution: {integrity: sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==} cpu: [s390x] os: [linux] + libc: [glibc] - '@rollup/rollup-linux-x64-gnu@4.53.3': - resolution: {integrity: sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==} + '@rollup/rollup-linux-x64-gnu@4.59.0': + resolution: {integrity: sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==} cpu: [x64] os: [linux] + libc: [glibc] - '@rollup/rollup-linux-x64-musl@4.53.3': - resolution: {integrity: sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==} + '@rollup/rollup-linux-x64-musl@4.59.0': + resolution: {integrity: sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==} cpu: [x64] os: [linux] + libc: [musl] + + '@rollup/rollup-openbsd-x64@4.59.0': + resolution: {integrity: sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==} + cpu: [x64] + os: [openbsd] - '@rollup/rollup-openharmony-arm64@4.53.3': - resolution: {integrity: sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==} + '@rollup/rollup-openharmony-arm64@4.59.0': + resolution: {integrity: sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.53.3': - resolution: {integrity: sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==} + '@rollup/rollup-win32-arm64-msvc@4.59.0': + resolution: {integrity: sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.53.3': - resolution: {integrity: sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==} + '@rollup/rollup-win32-ia32-msvc@4.59.0': + resolution: {integrity: sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.53.3': - resolution: {integrity: sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==} + '@rollup/rollup-win32-x64-gnu@4.59.0': + resolution: {integrity: sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.53.3': - resolution: {integrity: sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==} + '@rollup/rollup-win32-x64-msvc@4.59.0': + resolution: {integrity: sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==} cpu: [x64] os: [win32] '@silvia-odwyer/photon-node@0.3.4': resolution: {integrity: sha512-bnly4BKB3KDTFxrUIcgCLbaeVVS8lrAkri1pEzskpmxu9MdfGQTy8b8EgcD83ywD3RPMsIulY8xJH5Awa+t9fA==} - '@smithy/core@3.29.8': - resolution: {integrity: sha512-rpCbCV+TimOBi3VLNBMmtTvgfOWcFIEAru3+TFlG87SL2F+te4jOnnNR+cf3uR4eJ5Qf4LnT80fqnBKgPRS6zA==} + '@simple-git/args-pathspec@1.0.3': + resolution: {integrity: sha512-ngJMaHlsWDTfjyq9F3VIQ8b7NXbBLq5j9i5bJ6XLYtD6qlDXT7fdKY2KscWWUF8t18xx052Y/PUO1K1TRc9yKA==} + + '@simple-git/argv-parser@1.1.1': + resolution: {integrity: sha512-Q9lBcfQ+VQCpQqGJFHe5yooOS5hGdLFFbJ5R+R5aDsnkPCahtn1hSkMcORX65J2Z5lxSkD0lQorMsncuBQxYUw==} + + '@smithy/core@3.26.0': + resolution: {integrity: sha512-mLUktFAn+Pa2agl1J7VgtYNFWCX8/b4GMJSK1hCu4YCvtBfM6F8Os3EP4ry+DFFlXOf3wyvlgXhuUdFoy52D3g==} engines: {node: '>=18.0.0'} - '@smithy/credential-provider-imds@4.4.13': - resolution: {integrity: sha512-X+2HNZhWi5i3rJsCas0LPf6fTQUaKyJ40zd8aTO/bwpRfpU3biYaqLr7C1WMibL7PVKJalpi1PyybjGPNoHC8Q==} + '@smithy/credential-provider-imds@4.4.2': + resolution: {integrity: sha512-18UMDMyrAbDcpmL1gLUA7ww0fRTcdCrSjSJOi2Sbld+tVjwD/pW+OAwjlScFLR7vvBnhZrIPQ7kVuTf1mnJLug==} engines: {node: '>=18.0.0'} - '@smithy/fetch-http-handler@5.6.10': - resolution: {integrity: sha512-5/Yj9mS2JjTsB3B8ZX7euh77mrY9aXW23ag1yAmFykSRmA6vldqBrgqmSeQ50EjY+5SB8+aE4w14B6LKbBVEhQ==} + '@smithy/fetch-http-handler@5.5.2': + resolution: {integrity: sha512-Ei/UK/QMhq0rKaMqGPlOAkE2yS9DZeYmZdk1RAKc3vp3zxgleZHZyBLlZv8yLsxljX4svCRuMTD6u3LLIcU4Bg==} engines: {node: '>=18.0.0'} '@smithy/is-array-buffer@2.2.0': @@ -1069,16 +1583,16 @@ packages: resolution: {integrity: sha512-/jPhevcTFPMVl6KNjbaI47iOg1zxC7IsnX4PQDGVZKMFceOXtB8IEYaB7a9VvkP/3oC60WzTeKocvSI7vLT0vA==} engines: {node: '>=18.0.0'} - '@smithy/node-http-handler@4.9.10': - resolution: {integrity: sha512-ETQz9v/Z+nTQc6fRWTXxUpxJqwpmzB3Tn3WKAdHwWkeT+m+HE5czs6GNG8vW+4vyxXSls65RVcvOZwk7Q/PS/Q==} + '@smithy/node-http-handler@4.8.2': + resolution: {integrity: sha512-wfl1uwrAqMH9/pi4kqBo5LBcFwrJLxuDLqL7p7qNcJIFcyZDUc6pzhYk4CYv+DP7fIUpQCZumwNnkhPKS52osQ==} engines: {node: '>=18.0.0'} - '@smithy/signature-v4@5.6.9': - resolution: {integrity: sha512-g5rnEii/mkT0mjVJmlsaOfyNBtHNTecD9Lo4NP8D5HzMUEnZNpz7/FbvBCjNcV4vteHFAxOGiLUYNxPkDZZAPw==} + '@smithy/signature-v4@5.5.2': + resolution: {integrity: sha512-7xHpmPY4rt0IOmeAA8EfjgEH8isT+587TCdy9H6a7d4OMi5CQ0oEHhWllunvPu4j4Cq0vTFwdxXN/kABWPjdyA==} engines: {node: '>=18.0.0'} - '@smithy/types@4.16.1': - resolution: {integrity: sha512-0JFs3V2y2M9tKW5na/qxe69Zv+uxLMO7QBbhxF/FHu/Gp2NFZAAL9tWl9PU02xxo07pb3G9FTyjNc6D5uZrJIg==} + '@smithy/types@4.15.0': + resolution: {integrity: sha512-Z5TAOxygoFvybJV3igo5SloFflSokHx2hu1eFA+DxDTcn+FtKxUSui+rbTRG1pAafMA888Z3MVvCWUuvCrTXjg==} engines: {node: '>=18.0.0'} '@smithy/util-buffer-from@2.2.0': @@ -1095,8 +1609,128 @@ packages: '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} - '@tybys/wasm-util@0.10.3': - resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==} + '@swc/core-darwin-arm64@1.15.43': + resolution: {integrity: sha512-v1aVuvXdo/BHxJzco9V2xpHrvwWmhfS8t6gziY5wJxd+Z2h8AeJRnAwPD8itCDaGXVBwJ/CaKfxEzTkG0Va0OA==} + engines: {node: '>=10'} + cpu: [arm64] + os: [darwin] + + '@swc/core-darwin-x64@1.15.43': + resolution: {integrity: sha512-lp3d4Lamc8dt5huYdGLSR+9hLxmfr1jb0l+4XXG2zPqZwYWRN9R0U2qYoTrggiU2RWW0oV9VbWM3kBnqIc2kdQ==} + engines: {node: '>=10'} + cpu: [x64] + os: [darwin] + + '@swc/core-linux-arm-gnueabihf@1.15.43': + resolution: {integrity: sha512-JWTQQELtsG5GgphDrr/XqqmM2pDN3cZqbMS0Mrg+iTiXL3F74sn/S2IyYE/5u4h2KLkTf9qQ7dXyxsbx7YzkeA==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux] + + '@swc/core-linux-arm64-gnu@1.15.43': + resolution: {integrity: sha512-B4otJRdPWIsmiSBf0uG7Z/+vMWmkufjz5MmYxubwKuZazDW14Zd3symga1N62QR4RT+kEFeHEgsXfZGyn/w0hw==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@swc/core-linux-arm64-musl@1.15.43': + resolution: {integrity: sha512-6zB6OnpViBxYy4tgY3v2i6AZY9fwkcHZ032UOwtwUuW1d19sdT07qF0kZe6/3UR1tUaK6jjg2rmVcUIBCEYVjQ==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@swc/core-linux-ppc64-gnu@1.15.43': + resolution: {integrity: sha512-coxE1ZWdB3uSDVNoEtYNrRi/1epvckZx9cTJ8ICUxTMTxGk+yvQ/Twacp3ruZSaMPGCriUjP86C37VhaT6nyRg==} + engines: {node: '>=10'} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@swc/core-linux-s390x-gnu@1.15.43': + resolution: {integrity: sha512-lXfLhs+LpBsD5inuYx+YDH5WsPPBQ95KPUiy8P5wq9ob9xKDZFqwNfU2QW6bGO8NqRO/H9JQomTSt5Yyh+FGfA==} + engines: {node: '>=10'} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@swc/core-linux-x64-gnu@1.15.43': + resolution: {integrity: sha512-07XnKwTmKy8TGOZG3D9fRnLWGynxPjwQnZLVmBFbo6F+7vHYzBIOuwXEhemrChBWb6yDNZsVCcMWCPX6FDD2xg==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@swc/core-linux-x64-musl@1.15.43': + resolution: {integrity: sha512-TJc+bsSIaBh+hZvZ5GRtW/K1bw66TJ9vsUwvVIsZdiWxU5ObLwZvfcnZ3UpgVfMnFibRes9uriJrQNBHEEogRQ==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@swc/core-win32-arm64-msvc@1.15.43': + resolution: {integrity: sha512-jfd7s2/bUQYkOHLs+LWQNKZdmDa8+sufKLllhpWAhVQ2GDCwsHe3vR/j+OSiItZNtkzFuaawa3+SAKz9y5gYfw==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] + + '@swc/core-win32-ia32-msvc@1.15.43': + resolution: {integrity: sha512-rLAE8JvucqEW1ZGohxPQrQWPBQeJG4+ypKbWfdlU/qmKScvCkxf9/Jxnzki1dkUQCQ7P5Enp13RlvqOlvx/32g==} + engines: {node: '>=10'} + cpu: [ia32] + os: [win32] + + '@swc/core-win32-x64-msvc@1.15.43': + resolution: {integrity: sha512-h8MLDHZcfIukwQWj03rIJZx1I0E81AYj2X7J/nGErG4nz+QAv6G1Z+peotvinL3lqpbo32tLYSMFo32/ySzxKg==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + + '@swc/core@1.15.43': + resolution: {integrity: sha512-1CuKjFkPxIgGdeHVuNbkxmBxkcbdc08u0aiI43pFq6yY1tTVKmXT9hFEooyyKs/sJ3xf1GPHyEwTtk9Xl8dvQw==} + engines: {node: '>=10'} + peerDependencies: + '@swc/helpers': '>=0.5.17' + peerDependenciesMeta: + '@swc/helpers': + optional: true + + '@swc/counter@0.1.3': + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + + '@swc/types@0.1.27': + resolution: {integrity: sha512-K6h3iUlqeM946U4sXFYeahefR1YBbXJvko+hv8WS8/0BNJ4OHiHRywMnQUJCqkR7Y9+hqQ1TvEpiKqUhz7NEFg==} + + '@turbo/darwin-64@2.9.18': + resolution: {integrity: sha512-9f27peFu16ur8c0v9nUFUEyBnbKuuFsUTjHFWfmwGfzySBXbHwzU44QhZon6Mznz0cHsIr3984NQj/bVrnGSRw==} + cpu: [x64] + os: [darwin] + + '@turbo/darwin-arm64@2.9.18': + resolution: {integrity: sha512-9A6TMRq/Ib+QnbhLlgkhOm+624wO4pzSQ/yQviQfWHOlFvaYxdnIAYmu2H6TS6y7kSVL0DvzNe04NbESTOzFVQ==} + cpu: [arm64] + os: [darwin] + + '@turbo/linux-64@2.9.18': + resolution: {integrity: sha512-zCdIDtz69AnbYh913elJRRoF3QY5aa2HNnf+4rAkc7bQ+tWujiDkCNV7stazOUPggaDvhKIf2Z87qHftTeXSkw==} + cpu: [x64] + os: [linux] + + '@turbo/linux-arm64@2.9.18': + resolution: {integrity: sha512-Va1kXI04naMgYwqv/5Dfa36dTDx8015U7oaQAjrXa45ua9OoFjSV4OmvkML4EmXvUclQHCiBRbY8bvd0jV7eAg==} + cpu: [arm64] + os: [linux] + + '@turbo/windows-64@2.9.18': + resolution: {integrity: sha512-m0kDhZANxSNz9ck1ybogFscHabriAsp4eDFNrN/1H5WrgTF7b3VlcPZnhuO3v2+E2KnCbeAc+UUT10BZZHdDKw==} + cpu: [x64] + os: [win32] + + '@turbo/windows-arm64@2.9.18': + resolution: {integrity: sha512-nUdR8WqoomUys9iIQmG45TMiizJ+5BV8egSeLLZba/AWblyp3fVBcIH1kSE58OtK4g2YzbMJEth6Ttv9w5rqMA==} + cpu: [arm64] + os: [win32] '@types/bun@1.3.14': resolution: {integrity: sha512-h1hFqFVcvAvD9j9K7ZW7vd82aSA+rTdznZa+5bwvCwqSB1jmmfLcbIWhOLx1/+boy/xmjgCs/OMUL8hRJSmnPw==} @@ -1116,26 +1750,36 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node@24.10.1': - resolution: {integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==} + '@types/node@22.20.0': + resolution: {integrity: sha512-QWlFW2wf3nTjC13/DqRnBpR4ZO36VJH/JVBkA/vcnmbTBNQIlnObqyqZE1tUR7+Ni23Lda8R1BxMfbXRpCUx5g==} + + '@types/node@24.12.0': + resolution: {integrity: sha512-GYDxsZi3ChgmckRT9HPU0WEhKLP08ev/Yfcq2AstjrDASOYCSXeyjDsHg4v5t4jOj7cyDX3vmprafKlWIG9MXQ==} + + '@types/node@24.13.3': + resolution: {integrity: sha512-Dh8vAsV36ig5wa9OX4pXvMc9D3Veibfw2wix0CUwYODLD8nkj9UsLjASr49nPg+2eKzxhBV+v7L8pXvT4e639Q==} + + '@types/node@25.2.0': + resolution: {integrity: sha512-DZ8VwRFUNzuqJ5khrvwMXHmvPe+zGayJhr2CDNiKB1WBE1ST8Djl00D0IC4vvNmHMdj6DlbYRIaFE7WHjlDl5w==} + + '@types/parse-path@7.1.0': + resolution: {integrity: sha512-EULJ8LApcVEPbrfND0cRQqutIOdiIgJ1Mgrhpy755r14xMohPTEpkV/k28SJvuOs9bHRFW8x+KeDAEPiGQPB9Q==} + deprecated: This is a stub types definition. parse-path provides its own type definitions, so you do not need this installed. '@types/retry@0.12.0': resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} - '@types/set-cookie-parser@2.4.10': - resolution: {integrity: sha512-GGmQVGpQWUe5qglJozEjZV/5dyxbOOZ0LHe/lqyWssB88Y4svNfst0uqBVscdDeIKl5Jy5+aPSvy7mI9tYRguw==} - '@types/statuses@2.0.6': resolution: {integrity: sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA==} - '@types/tar@6.1.13': - resolution: {integrity: sha512-IznnlmU5f4WcGTh2ltRu/Ijpmk8wiWXfF0VA4s+HPjHZgvFggk1YaIkbo5krX/zUCzWF8N/l4+W/LNxnvAJ8nw==} + '@types/turndown@5.0.6': + resolution: {integrity: sha512-ru00MoyeeouE5BX4gRL+6m/BsDfbRayOskWqUvh7CLGW+UXxHQItqALa38kKnOiZPqJrtzJUgAC2+F0rL1S4Pg==} - '@vitest/expect@4.1.10': - resolution: {integrity: sha512-YsCn+qAk1GWjQOWFEsEcL2gNQ0zmVmQu3T03qP6UyjhtmdtwtbuI+DASn/7iQB3HGTXkdBwGddzxPlmiql5vlA==} + '@vitest/expect@4.1.8': + resolution: {integrity: sha512-h3nDO677RDLEGlBxyQ5CW8RlMThSKSRLUePLOx09gNIWRL40edgA1GCZSZgf1W55MFAG6/Sw14KeaAnqv0NKdQ==} - '@vitest/mocker@4.1.10': - resolution: {integrity: sha512-v0xaezt+DKEmKfaxg133ldzADrwLGd7Ze1MfQQTYfvs8OqZIwbxyxaYURivwV7sWy5fqn3rH5uOrSp07bp44Ow==} + '@vitest/mocker@4.1.8': + resolution: {integrity: sha512-LEiN/xe4OSIbKe9HQIp5OC24agGD9J5CnmMgsLohVVoOPWL9a2sBoR6VBx43jQZb7Kr1l4RCuyCJzcAa0+dojw==} peerDependencies: msw: ^2.4.9 vite: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -1145,20 +1789,25 @@ packages: vite: optional: true - '@vitest/pretty-format@4.1.10': - resolution: {integrity: sha512-W1HsjSH4MXQ9YfmmhLAoIYf1HRfekQCGngeIgcei6MP5QQGWUe0gkopdZQaVCFO+JDJMrAJGwa5pRpNpvy4P8Q==} + '@vitest/pretty-format@4.1.8': + resolution: {integrity: sha512-9GasEBxpZ1VYIpqHf/0+YGg121uSNwCKOJqIrTwWP/TB7DmFCiaBpNl3aPZzoLWfWkuqhbH8vJIVobZkvdo2cA==} + + '@vitest/runner@4.1.8': + resolution: {integrity: sha512-EmVxeBAfMJvycdjd6Hm+RbFBbA9fKvo0Kx37hNpBYoYeavH3RNsBXWDooR1mgD52dCrxIIuP7UotpfiwOikvcg==} - '@vitest/runner@4.1.10': - resolution: {integrity: sha512-IKI6kpIH+LmpROplyLwBBaCfMgOZOMsygVa6BARD6ahA04VRuJSa6OaVG7kRvSEMD870Vd91rSSw0eegtWyLGg==} + '@vitest/snapshot@4.1.8': + resolution: {integrity: sha512-acfZboRmAIf05DEKcBQy33VXojFJjtUdLyo7oOmV9kebb2xdU01UknNiPuPZoJZQyO7DF0gZdTGTpeAzET9QPQ==} - '@vitest/snapshot@4.1.10': - resolution: {integrity: sha512-xRkfOT1qpTAi/Ti4Y1LtfRc3kEuqxGw59eN2jN9pRWMtS/XDevekhcFSqvQqjUNGksfjMJu3Y+oJ+4Ypn2OaJw==} + '@vitest/spy@4.1.8': + resolution: {integrity: sha512-6EevtBp6OZOPF7bmz36HrGMeP3txgVSrgebWxHOafDXGkhIzfXK14f8KF6MuFfgXXUeHxmpD3BQxkV00/3s5mA==} - '@vitest/spy@4.1.10': - resolution: {integrity: sha512-PLf/Ugvoq5wO/b4rwYCR1h2PSIdXz7wnkQFMiUpLdtM7l6pqVFcQIBEHyT1+l+cj7mNwAfZHzqXqDyjvOuwbDw==} + '@vitest/ui@4.1.8': + resolution: {integrity: sha512-RUS2ZU2TsduVrI+9c12uTNaKrNUTsm6yFt3fueEUB9iKvyC2UP83F+sqIz00HQIah4UOL1TMoDAki8K0NjGvsA==} + peerDependencies: + vitest: 4.1.8 - '@vitest/utils@4.1.10': - resolution: {integrity: sha512-fy9am/HWxbaGt/Sawrp90vt6Y6jQwf1RX77cz3uwoJwJVMli/e1IEwRPnMNJ7vKfPTwo0diXifkpPvwH9v7nGA==} + '@vitest/utils@4.1.8': + resolution: {integrity: sha512-uOJamYALNhfJ6iolExyQM40yIQwDqYnkKtQ5VCiSe17E33H0aQ/u+1GlRuz4LZBk6Mm3sg90G9hEbmEt37C1Zg==} accepts@2.0.0: resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} @@ -1169,6 +1818,11 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + acorn@8.17.0: + resolution: {integrity: sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==} + engines: {node: '>=0.4.0'} + hasBin: true + agent-base@7.1.4: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} @@ -1181,8 +1835,8 @@ packages: ajv: optional: true - ajv@8.17.1: - resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + ajv@8.20.0: + resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} @@ -1209,20 +1863,23 @@ packages: bignumber.js@9.3.1: resolution: {integrity: sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==} - body-parser@2.2.1: - resolution: {integrity: sha512-nfDwkulwiZYQIGwxdy0RUmowMhKcFVcYXUU7m4QlKYim1rUtg83xm2yjZ40QjDuc291AJjjeSc9b++AWHSgSHw==} + body-parser@2.2.2: + resolution: {integrity: sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==} engines: {node: '>=18'} bowser@2.14.1: resolution: {integrity: sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==} - brace-expansion@5.0.8: - resolution: {integrity: sha512-JZyDyq3D4AUifKTPOB7DELf6XsB3WdPuNxCtob1vFXPsSXhdAiHBWJ/tJ8HAc9aH84BK+5JFZLNkJKx3G9kzQg==} - engines: {node: 20 || >=22} + brace-expansion@5.0.5: + resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} + engines: {node: 18 || 20 || >=22} buffer-equal-constant-time@1.0.1: resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + bun-types@1.3.14: resolution: {integrity: sha512-4N0ig0fEomHt5R0KCFWjovxow98rIoRwKolrYdCcknNwMekCXRnWEUvgu5soYV8QXtVsrUD8B95MBOZGPvr6KQ==} @@ -1260,10 +1917,6 @@ packages: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} - chownr@3.0.0: - resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} - engines: {node: '>=18'} - cli-width@4.1.0: resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} engines: {node: '>= 12'} @@ -1283,6 +1936,9 @@ packages: resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==} engines: {node: '>=20'} + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} @@ -1317,18 +1973,26 @@ packages: resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} engines: {node: '>=18'} - cors@2.8.5: - resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} + cors@2.8.6: + resolution: {integrity: sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==} engines: {node: '>= 0.10'} cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} + cssstyle@4.6.0: + resolution: {integrity: sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==} + engines: {node: '>=18'} + data-uri-to-buffer@4.0.1: resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} engines: {node: '>= 12'} + data-urls@5.0.0: + resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} + engines: {node: '>=18'} + debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} @@ -1338,6 +2002,9 @@ packages: supports-color: optional: true + decimal.js@10.6.0: + resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} + depd@2.0.0: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} @@ -1367,6 +2034,10 @@ packages: resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} engines: {node: '>= 0.8'} + entities@6.0.1: + resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} + engines: {node: '>=0.12'} + es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} @@ -1375,15 +2046,25 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-module-lexer@2.3.1: - resolution: {integrity: sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA==} + es-module-lexer@2.0.0: + resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==} es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} - esbuild@0.27.1: - resolution: {integrity: sha512-yY35KZckJJuVVPXpvjgxiCuVEJT67F6zDeVTv4rizyPrfGBUpZQsvmxnN+C371c2esD/hNMjj4tpBhuueLN7aA==} + esbuild@0.27.2: + resolution: {integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==} + engines: {node: '>=18'} + hasBin: true + + esbuild@0.27.7: + resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==} + engines: {node: '>=18'} + hasBin: true + + esbuild@0.28.1: + resolution: {integrity: sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==} engines: {node: '>=18'} hasBin: true @@ -1409,12 +2090,12 @@ packages: resolution: {integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==} engines: {node: '>=18.0.0'} - expect-type@1.4.0: - resolution: {integrity: sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==} + expect-type@1.3.0: + resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} engines: {node: '>=12.0.0'} - express-rate-limit@8.6.0: - resolution: {integrity: sha512-XKJXDsASUOo0LLtFwW5hCcQGH0N4WQc/Rn8/Pvoia+TJFOkkFPvrtW9lZOeeNcxQJspvOIERMwiRLsVFlhHEkA==} + express-rate-limit@8.3.1: + resolution: {integrity: sha512-D1dKN+cmyPWuvB+G2SREQDzPY1agpBIcTa9sJxOPMCNeH3gwzhqJRDWCXW3gg0y//+LQ/8j52JbMROWyrKdMdw==} engines: {node: '>= 16'} peerDependencies: express: '>= 4.11' @@ -1432,18 +2113,9 @@ packages: fast-sha256@1.3.0: resolution: {integrity: sha512-n11RGP/lrWEFI/bWdygLxhI+pVeo1ZYIVwvvPkW7azl/rOy+F3HYRZ2K5zeE9mmkhQppyv9sQFx0JM9UabnpPQ==} - fast-string-truncated-width@3.0.3: - resolution: {integrity: sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==} - - fast-string-width@3.0.2: - resolution: {integrity: sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==} - fast-uri@3.1.4: resolution: {integrity: sha512-8JnbkQ4juDyvYs4mgFGQqg4yCYtFDtUtmp2QIQq11ZZe5CFQ5wcqm1rqDgAh/QdMySuBnPzMUiJUNZG5N/AiQw==} - fast-wrap-ansi@0.2.2: - resolution: {integrity: sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==} - fdir@6.5.0: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} engines: {node: '>=12.0.0'} @@ -1457,6 +2129,9 @@ packages: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} engines: {node: ^12.20 || >= 14.13} + fflate@0.8.2: + resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} + fflate@0.8.3: resolution: {integrity: sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA==} @@ -1467,6 +2142,9 @@ packages: fix-dts-default-cjs-exports@1.0.1: resolution: {integrity: sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==} + flatted@3.4.3: + resolution: {integrity: sha512-/zipXxyO6rGvuNGDiULY9MvEGSkb2gaG4GGH4ygMi0ZZzyMHdUZBmntJmx5x1G2VuPytCwGN4xsJP6cw+sK+vQ==} + formdata-polyfill@4.0.10: resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} engines: {node: '>=12.20.0'} @@ -1487,8 +2165,8 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - gaxios@7.3.0: - resolution: {integrity: sha512-RB5vLV+vvQeoFPCX4QMK6/hjVkbIamPp1QSUD0CiZcnj12qbpiL+pLbYtgD+oZkWl0tl9z+o2Utp+MpM3QRhBA==} + gaxios@7.1.5: + resolution: {integrity: sha512-5FZy72Rh8LhtjmvDrKkI+lVhrsQrVKVsItxMoDm5mNQE+xR0WVIIs+jzPSJgBvKVsLi24fZhXJIsNI0bihDzFg==} engines: {node: '>=18'} gcp-metadata@8.1.2: @@ -1511,15 +2189,18 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} - get-tsconfig@4.13.0: - resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==} + git-up@8.1.1: + resolution: {integrity: sha512-FDenSF3fVqBYSaJoYy1KSc2wosx0gCvKP+c+PRBht7cAaiCeQlBtfBDX9vgnNOHmdePlSFITVcn4pFfcgNvx3g==} + + git-url-parse@16.1.0: + resolution: {integrity: sha512-cPLz4HuK86wClEW7iDdeAKcCVlWXmrLpb2L+G9goW0Z1dtpNS6BXXSOckUTlJT/LDQViE1QZKstNORzHsLnobw==} glob@13.0.6: resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==} engines: {node: 18 || 20 || >=22} - google-auth-library@10.9.1: - resolution: {integrity: sha512-i1ydyHrqcIxXkWh/uBmVkzCvIuq5yiK2ATndIe5XxKholrG/MTYP9xGYka4sQhrbIAgGjL2B6NOE7rFaiF3fXw==} + google-auth-library@10.9.0: + resolution: {integrity: sha512-xtvUqvINPhTaBm7nXqlYPcrMHJPm1lCNdSovxnKKhTm+4JsvQ+KGVYJViLoH9Yxu8w+T0Qv5HubzYT9BLrppJg==} engines: {node: '>=18'} google-logging-utils@1.1.3: @@ -1533,8 +2214,8 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - graphql@16.14.2: - resolution: {integrity: sha512-Chq1s4CY7jmh8gO2qvLIJyfCDIN+EHLFW/9iShnp1z8FjBQMoodWP1kDC36VAMXXIvAjj4ARa7ntfAV2BrjsbA==} + graphql@16.12.0: + resolution: {integrity: sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} grok-mermaid@0.2.2: @@ -1545,24 +2226,28 @@ packages: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + hasown@2.0.4: + resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} engines: {node: '>= 0.4'} - headers-polyfill@5.0.1: - resolution: {integrity: sha512-1TJ6Fih/b8h5TIcv+1+Hw0PDQWJTKDKzFZzcKOiW1wJza3XoAQlkCuXLbymPYB8+ZQyw8mHvdw560e8zVFIWyA==} + headers-polyfill@4.0.3: + resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==} highlight.js@10.7.3: resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} - hono@4.12.31: - resolution: {integrity: sha512-zJIHFrl6bq3RDd2YusFNCDlM8qUprxKswyi/OPzPyzKDdyBXDqWx8bZlZ7R+saTdSTatUmb3O7K4SspGPaEOQg==} + hono@4.12.28: + resolution: {integrity: sha512-YwUvVpSF7m1yOblFPrU3Hbo8XhPheBoiyfGuII6z19LnOr6JpDnyyp7LFNrfV56wS8tpvtBFGRISHN02pDdLOA==} engines: {node: '>=16.9.0'} hosted-git-info@9.0.3: resolution: {integrity: sha512-Hc+ghLoSt6QaYZUv0WBiIvmMDZuZZ7oaDvdH8MbfOO4lOsxdXLEvuC6ePoGs9H1X9oCLyq6+NVN0MKqD+ydxyg==} engines: {node: ^20.17.0 || >=22.9.0} + html-encoding-sniffer@4.0.0: + resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} + engines: {node: '>=18'} + http-errors@2.0.1: resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} engines: {node: '>= 0.8'} @@ -1575,8 +2260,12 @@ packages: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} - iconv-lite@0.7.0: - resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==} + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + iconv-lite@0.7.2: + resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} engines: {node: '>=0.10.0'} ignore@7.0.5: @@ -1586,8 +2275,8 @@ packages: inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - ip-address@10.2.0: - resolution: {integrity: sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==} + ip-address@10.1.0: + resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==} engines: {node: '>= 12'} ipaddr.js@1.9.1: @@ -1601,9 +2290,15 @@ packages: is-node-process@1.2.0: resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} + is-potential-custom-element-name@1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + is-promise@4.0.0: resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} + is-ssh@1.4.1: + resolution: {integrity: sha512-JNeu1wQsHjyHgn9NcWTaXq6zWSR6hqE0++zhfZlkFBbScNkyvxCdeV8sRkSBaeLKxmbpR21brail63ACNxJ0Tg==} + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -1611,13 +2306,22 @@ packages: resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} hasBin: true - jose@6.1.3: - resolution: {integrity: sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==} + jose@6.2.1: + resolution: {integrity: sha512-jUaKr1yrbfaImV7R2TN/b3IcZzsw38/chqMpo2XJ7i2F8AfM/lA4G1goC3JVEwg0H7UldTmSt3P68nt31W7/mw==} joycon@3.1.1: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} + jsdom@26.1.0: + resolution: {integrity: sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==} + engines: {node: '>=18'} + peerDependencies: + canvas: ^3.0.0 + peerDependenciesMeta: + canvas: + optional: true + json-bigint@1.0.0: resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} @@ -1676,24 +2380,28 @@ packages: engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] lightningcss-linux-arm64-musl@1.33.0: resolution: {integrity: sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [musl] lightningcss-linux-x64-gnu@1.33.0: resolution: {integrity: sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [glibc] lightningcss-linux-x64-musl@1.33.0: resolution: {integrity: sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [musl] lightningcss-win32-arm64-msvc@1.33.0: resolution: {integrity: sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==} @@ -1746,8 +2454,11 @@ packages: long@5.3.2: resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} - lru-cache@11.5.2: - resolution: {integrity: sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==} + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + lru-cache@11.2.5: + resolution: {integrity: sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==} engines: {node: 20 || >=22} magic-string@0.30.21: @@ -1778,34 +2489,30 @@ packages: resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} engines: {node: '>=18'} - minimatch@10.1.1: - resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==} + minimatch@10.1.2: + resolution: {integrity: sha512-fu656aJ0n2kcXwsnwnv9g24tkU5uSmOlTjd6WyyaKm2Z+h1qmY6bAjrcaIxF/BslFqbZ8UBtbJi7KgQOZD2PTw==} engines: {node: 20 || >=22} minimatch@10.2.5: resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} engines: {node: 18 || 20 || >=22} - minipass@4.2.8: - resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==} - engines: {node: '>=8'} - minipass@7.1.3: resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} engines: {node: '>=16 || 14 >=14.17'} - minizlib@3.1.0: - resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==} - engines: {node: '>= 18'} - mlly@1.8.0: resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==} + mrmime@2.0.1: + resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} + engines: {node: '>=10'} + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - msw@2.15.0: - resolution: {integrity: sha512-2wQAmKkQKxRuXvYJxVhPGG0wZNBQyD06oJvxqw90XqLvptdqxdlHrFUfEteKkpaNORX3Xzc+HtEl/q0nfmN2wQ==} + msw@2.12.8: + resolution: {integrity: sha512-KOriJUhjefCO+liF7Ie1KlSXcBAQEzuLhPZ4EKuEUSEmAR4YhuuzT9YuGxTipjqDrg6eWQ6oMoGVhvEnqukFGg==} engines: {node: '>=18'} hasBin: true peerDependencies: @@ -1814,9 +2521,9 @@ packages: typescript: optional: true - mute-stream@3.0.0: - resolution: {integrity: sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw==} - engines: {node: ^20.17.0 || >=22.9.0} + mute-stream@2.0.0: + resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} + engines: {node: ^18.17.0 || >=20.5.0} mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} @@ -1839,6 +2546,9 @@ packages: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + nwsapi@2.2.23: + resolution: {integrity: sha512-7wfH4sLbt4M0gCDzGE6vzQBo0bfTKjU7Sfpqy/7gs1qBfYz2vEJH6vXcBKpO3+6Yu1telwd0t9HpyOoLEQQbIQ==} + object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -1847,9 +2557,8 @@ packages: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} - obug@2.1.4: - resolution: {integrity: sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==} - engines: {node: '>=12.20.0'} + obug@2.1.1: + resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} on-finished@2.4.1: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} @@ -1862,8 +2571,8 @@ packages: resolution: {integrity: sha512-zd23dbWTjiJ6sSAX6s0HrCZi41JwTA1bQVs0wLQPZ2/5o2gxOJA5wh7yOAUgwYybfhDXyhwlpeQf7Mlgx8EOCA==} hasBin: true peerDependencies: - ws: ^8.18.0 - zod: ^3.25 || ^4.0 + ws: 8.21.0 + zod: 4.4.3 peerDependenciesMeta: ws: optional: true @@ -1877,6 +2586,16 @@ packages: resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} engines: {node: '>=8'} + parse-path@7.1.0: + resolution: {integrity: sha512-EuCycjZtfPcjWk7KTksnJ5xPMvWGA/6i4zrLYhRG0hGvC3GPU/jGUj3Cy+ZR0v30duV3e23R95T1lE2+lsndSw==} + + parse-url@9.2.0: + resolution: {integrity: sha512-bCgsFI+GeGWPAvAiUv63ZorMeif3/U0zaXABGJbOWt5OH2KCaPHF6S+0ok4aqM9RuIPGyZdx9tR9l13PsW4AYQ==} + engines: {node: '>=14.13.0'} + + parse5@7.3.0: + resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} @@ -1892,6 +2611,9 @@ packages: resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==} engines: {node: 18 || 20 || >=22} + path-to-regexp@6.3.0: + resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} + path-to-regexp@8.4.2: resolution: {integrity: sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==} @@ -1938,8 +2660,8 @@ packages: yaml: optional: true - postcss@8.5.22: - resolution: {integrity: sha512-KBDEIpLrvpv16pp3K0Fw+UCoZfopFjjgeB+0tA/aaThfEE74kKDLrgg603YvOWJyg3+WYtyq3xYsQWsIyZlPqQ==} + postcss@8.5.23: + resolution: {integrity: sha512-g50586zr4bZmwFiTlflMu8E0bDTb5I5gertgwAKmsdUlTQIhZtunzUlD1WSzwcVWPoAVpsrA6vlfCD7oXvRwgg==} engines: {node: ^10 || ^12 || >=14} proper-lockfile@4.1.2: @@ -1949,10 +2671,17 @@ packages: resolution: {integrity: sha512-/FPD0nUc9jH6rfFjji9IBqOz4pcSE3CsT1m7Ep6Mdb0LxSUMj8hgl6GomOvZzpNpAqqGaXA0P3VSrZLFzIhQrw==} engines: {node: '>=12.0.0'} + protocols@2.0.2: + resolution: {integrity: sha512-hHVTzba3wboROl0/aWRRG9dMytgH6ow//STBZh43l/wQgmMhYhOFi0EHWAPtoCz9IAUymsyP0TSBHkhgMEGNnQ==} + proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + qs@6.15.3: resolution: {integrity: sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==} engines: {node: '>=0.6'} @@ -1981,9 +2710,6 @@ packages: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} - resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - retry@0.12.0: resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} engines: {node: '>= 4'} @@ -1992,16 +2718,11 @@ packages: resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} engines: {node: '>= 4'} - rettime@0.11.11: - resolution: {integrity: sha512-ILJRqVWBCTlg9r42fFgwVZx1gnFAcQF8mRoMkbgQfIrjEDf9nbBFDFx00oloOa+Q869FUtaYDXZvEfnecQSCoQ==} - - rolldown@1.1.5: - resolution: {integrity: sha512-t9z29cJjXf/vxQ8dyhCSpt6H6aSwHTk8cT5I3iy6SMXuFpk5mB6PL6XfC8PCwrPTx93udwKUm9HRteAlTGBLiA==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true + rettime@0.10.1: + resolution: {integrity: sha512-uyDrIlUEH37cinabq0AX4QbgV4HbFZ/gqoiunWQ1UqBtRvTTytwhNYjE++pO/MjPTZL5KQCf2bEoJ/BJNVQ5Kw==} - rollup@4.53.3: - resolution: {integrity: sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==} + rollup@4.59.0: + resolution: {integrity: sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -2009,32 +2730,36 @@ packages: resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} engines: {node: '>= 18'} + rrweb-cssom@0.8.0: + resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==} + safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - semver@7.7.3: - resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} - engines: {node: '>=10'} - hasBin: true + saxes@6.0.0: + resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} + engines: {node: '>=v12.22.7'} semver@7.8.0: resolution: {integrity: sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==} engines: {node: '>=10'} hasBin: true - send@1.2.0: - resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==} - engines: {node: '>= 18'} + semver@7.8.4: + resolution: {integrity: sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==} + engines: {node: '>=10'} + hasBin: true - serve-static@2.2.0: - resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==} + send@1.2.1: + resolution: {integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==} engines: {node: '>= 18'} - set-cookie-parser@3.1.2: - resolution: {integrity: sha512-5/r/lTwbJ3zQ+qwdUFZYeRNqda7P5HD8zQKqlSjdGt1/S0cjLAphHusj4Y58ahDtWn/g32xrIS58/ikOvwl0Lw==} + serve-static@2.2.1: + resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==} + engines: {node: '>= 18'} setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} @@ -2073,10 +2798,24 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} + simple-git@3.36.0: + resolution: {integrity: sha512-cGQjLjK8bxJw4QuYT7gxHw3/IouVESbhahSsHrX97MzCL1gu2u7oy38W6L2ZIGECEfIBG4BabsWDPjBxJENv9Q==} + + sirv@3.0.2: + resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} + engines: {node: '>=18'} + 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'} + source-map@0.7.6: resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} engines: {node: '>= 12'} @@ -2091,8 +2830,8 @@ packages: resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} engines: {node: '>= 0.8'} - std-env@4.2.0: - resolution: {integrity: sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw==} + std-env@4.1.0: + resolution: {integrity: sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==} strict-event-emitter@0.5.1: resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==} @@ -2110,13 +2849,17 @@ packages: engines: {node: '>=16 || 14 >=14.17'} hasBin: true + symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + tagged-tag@1.0.0: resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} engines: {node: '>=20'} - tar@7.5.21: - resolution: {integrity: sha512-XdhtCvlMywwxpCW8YEq3lOXBJpUPTR2OHHcwLPO3HwsJqOHa2Ok/oJ7ruGzp+JrKoRPVCzJwAdEjqLW/vNRPHA==} - engines: {node: '>=18'} + terser@5.46.0: + resolution: {integrity: sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==} + engines: {node: '>=10'} + hasBin: true thenify-all@1.6.0: resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} @@ -2131,8 +2874,8 @@ packages: tinyexec@0.3.2: resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} - tinyexec@1.2.4: - resolution: {integrity: sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==} + tinyexec@1.0.2: + resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} engines: {node: '>=18'} tinyglobby@0.2.15: @@ -2147,25 +2890,49 @@ packages: resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} engines: {node: '>=14.0.0'} - tldts-core@7.4.9: - resolution: {integrity: sha512-DxKfPBI52p2msTEu7MPhdpdDTBhhVQg1a/8PjQckeyAvO13eMYElX545grIp6nnTGIMZlRvFZPvFhvI/WIz2Vg==} + tldts-core@6.1.86: + resolution: {integrity: sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==} + + tldts-core@7.0.22: + resolution: {integrity: sha512-KgbTDC5wzlL6j/x6np6wCnDSMUq4kucHNm00KXPbfNzmllCmtmvtykJHfmgdHntwIeupW04y8s1N/43S1PkQDw==} + + tldts@6.1.86: + resolution: {integrity: sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==} + hasBin: true - tldts@7.4.9: - resolution: {integrity: sha512-3kZ8wQQ/k5DrChD4X4FVvr2D7E5uoRgAqkPyLpSCGUvqOvqu+JEdr3mwMUaVWb+vMHZaKhF5fp2PBigKsui7hA==} + tldts@7.0.22: + resolution: {integrity: sha512-nqpKFC53CgopKPjT6Wfb6tpIcZXHcI6G37hesvikhx0EmUGPkZrujRyAjgnmp1SHNgpQfKVanZ+KfpANFt2Hxw==} hasBin: true toidentifier@1.0.1: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} - tough-cookie@6.0.2: - resolution: {integrity: sha512-exgYmnmL/sJpR3upZfXG5PoatXQii55xAiXGXzY+sROLZ/Y+SLcp9PgJNI9Vz37HpQ74WvDcLT8eqm+kV3FzrA==} + totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} + + tough-cookie@5.1.2: + resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==} + engines: {node: '>=16'} + + tough-cookie@6.0.0: + resolution: {integrity: sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==} engines: {node: '>=16'} + tr46@5.1.1: + resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==} + engines: {node: '>=18'} + tree-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true + tree-sitter-cli@0.26.8: + resolution: {integrity: sha512-teQFMF5V/g8aIdakZ0M/eZoedCM3MuBt1JuDOICLloA2hy7QfeOInb99U6wiML4qXcBHWREwf0U1TWzw7p67YA==} + engines: {node: '>=12.0.0'} + hasBin: true + ts-algebra@2.0.0: resolution: {integrity: sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw==} @@ -2194,13 +2961,21 @@ packages: typescript: optional: true - tsx@4.21.0: - resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==} + tsx@4.22.4: + resolution: {integrity: sha512-X8EX+XV4QR5xCsrgxaED954zTDfY8KqlDtskKEL0cHhyS/P8b4IFOvGDQpsC9Q1XnLq915wEfwwY/zzskCtmhg==} engines: {node: '>=18.0.0'} hasBin: true - type-fest@5.8.0: - resolution: {integrity: sha512-YGYEVz3Fm5iy/AybuA0oyNFq7H4CgQNfRp/qfe8nurE1kuCeNm3/vfm9X4Mtl+qLyaKJUh5xrFZwogr41SMjYA==} + turbo@2.9.18: + resolution: {integrity: sha512-bwabv6PupzeavybzEoArBAkwq5fnzwf8OFnRtpHwnviFWuwJPFxtyH+aVp36TmIqK3aYYgtTJ3J0m2ysxxSzQg==} + hasBin: true + + turndown@7.2.4: + resolution: {integrity: sha512-I8yFsfRzmzK0WV1pNNOA4A7y4RDfFxPRxb3t+e3ui14qSGOxGtiSP6GjeX+Y6CHb7HYaFj7ECUD7VE5kQMZWGQ==} + engines: {node: '>=18', npm: '>=9'} + + type-fest@5.4.3: + resolution: {integrity: sha512-AXSAQJu79WGc79/3e9/CR77I/KQgeY1AhNvcShIH4PTcGYyC4xv6H4R4AUOwkPS5799KlVDAu8zExeCrkGquiA==} engines: {node: '>=20'} type-is@2.0.1: @@ -2215,12 +2990,18 @@ packages: engines: {node: '>=14.17'} hasBin: true - ufo@1.6.1: - resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} + ufo@1.6.3: + resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==} + + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} undici-types@7.16.0: resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + undici-types@7.18.2: + resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} + undici@8.9.0: resolution: {integrity: sha512-aWZpUj7XoGonMClx4gdDRfgBjqeA+F473aDmROQQbM9n6PRfK/u1q/a0X4wMTgcHfT8H6fpbt98PFuDUwFg2YA==} engines: {node: '>=22.19.0'} @@ -2240,16 +3021,15 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} - vite@8.1.5: - resolution: {integrity: sha512-7ULLwsCdYx/nRyrpiEwvqb5TFHrMVZyBt+rg/OAXT7rgj/z+DtTDyKFeLAdDkubDVDKD8jOsndmy7m55XcfUsw==} + vite@7.3.5: + resolution: {integrity: sha512-KuOaNhcnGFN2zIPGA7wRmzF+lJA1sea7rHq17aiJ++9lzY1WWG6Jpwqwe1KNbRVPIqHmr8GLYx7jbrQcN/7/ww==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: '@types/node': ^20.19.0 || >=22.12.0 - '@vitejs/devtools': ^0.3.0 - esbuild: ^0.27.0 || ^0.28.0 jiti: '>=1.21.0' less: ^4.0.0 + lightningcss: ^1.21.0 sass: ^1.70.0 sass-embedded: ^1.70.0 stylus: '>=0.54.8' @@ -2260,14 +3040,12 @@ packages: peerDependenciesMeta: '@types/node': optional: true - '@vitejs/devtools': - optional: true - esbuild: - optional: true jiti: optional: true less: optional: true + lightningcss: + optional: true sass: optional: true sass-embedded: @@ -2283,20 +3061,20 @@ packages: yaml: optional: true - vitest@4.1.10: - resolution: {integrity: sha512-R9jUTe5S4Qb0HCd4TNqpC7oGcrMssMRGXLW80ubjWsW9VH5GF8y1Y0SFLY9AbqSk6nt0PnOx4H4WNJYZ13GUPw==} + vitest@4.1.8: + resolution: {integrity: sha512-flY6ScbCIt9HThs+C5HS7jvGOB560DJtk/Z15IQROTA6zEy49Nh8T/dofWTQL+n3vswqn87sbJNiuqw1SDp5Ig==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@opentelemetry/api': ^1.9.0 '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.1.10 - '@vitest/browser-preview': 4.1.10 - '@vitest/browser-webdriverio': 4.1.10 - '@vitest/coverage-istanbul': 4.1.10 - '@vitest/coverage-v8': 4.1.10 - '@vitest/ui': 4.1.10 + '@vitest/browser-playwright': 4.1.8 + '@vitest/browser-preview': 4.1.8 + '@vitest/browser-webdriverio': 4.1.8 + '@vitest/coverage-istanbul': 4.1.8 + '@vitest/coverage-v8': 4.1.8 + '@vitest/ui': 4.1.8 happy-dom: '*' jsdom: '*' vite: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -2324,10 +3102,34 @@ packages: jsdom: optional: true + w3c-xmlserializer@5.0.0: + resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} + engines: {node: '>=18'} + web-streams-polyfill@3.3.3: resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} engines: {node: '>= 8'} + web-tree-sitter@0.24.7: + resolution: {integrity: sha512-CdC/TqVFbXqR+C51v38hv6wOPatKEUGxa39scAeFSm98wIhZxAYonhRQPSMmfZ2w7JDI0zQDdzdmgtNk06/krQ==} + + webidl-conversions@7.0.0: + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} + engines: {node: '>=12'} + + whatwg-encoding@3.1.1: + resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} + engines: {node: '>=18'} + deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation + + whatwg-mimetype@4.0.0: + resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} + engines: {node: '>=18'} + + whatwg-url@14.2.0: + resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==} + engines: {node: '>=18'} + which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -2338,6 +3140,10 @@ packages: engines: {node: '>=8'} hasBin: true + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -2345,8 +3151,8 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - ws@8.21.1: - resolution: {integrity: sha512-+0NTnW77fFN/DjQi6k/Sq/Yvk4Sgajw7urW8V+asjXnRgDs9gyGkdb7EzgfhA4goXsRIZKE28fzIXBHEzhuiWw==} + ws@8.21.0: + resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -2357,14 +3163,17 @@ packages: utf-8-validate: optional: true + xml-name-validator@5.0.0: + resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} + engines: {node: '>=18'} + + xmlchars@2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - yallist@5.0.0: - resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} - engines: {node: '>=18'} - yaml@2.9.0: resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} engines: {node: '>= 14.6'} @@ -2374,65 +3183,73 @@ packages: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} - yargs@17.7.3: - resolution: {integrity: sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==} + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} + yoctocolors-cjs@2.1.3: + resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} + engines: {node: '>=18'} + yoga-wasm-web@0.3.3: resolution: {integrity: sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA==} - zod-to-json-schema@3.25.2: - resolution: {integrity: sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==} + zod-to-json-schema@3.25.1: + resolution: {integrity: sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==} peerDependencies: - zod: ^3.25.28 || ^4 + zod: 4.4.3 zod@4.4.3: resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==} snapshots: + '@agentclientprotocol/sdk@0.19.0(zod@4.4.3)': + dependencies: + zod: 4.4.3 + '@agentclientprotocol/sdk@1.1.0(zod@4.4.3)': dependencies: zod: 4.4.3 - '@anthropic-ai/claude-agent-sdk-darwin-arm64@0.3.197': + '@anthropic-ai/claude-agent-sdk-darwin-arm64@0.3.280': optional: true - '@anthropic-ai/claude-agent-sdk-darwin-x64@0.3.197': + '@anthropic-ai/claude-agent-sdk-darwin-x64@0.3.280': optional: true - '@anthropic-ai/claude-agent-sdk-linux-arm64-musl@0.3.197': + '@anthropic-ai/claude-agent-sdk-linux-arm64-musl@0.3.280': optional: true - '@anthropic-ai/claude-agent-sdk-linux-arm64@0.3.197': + '@anthropic-ai/claude-agent-sdk-linux-arm64@0.3.280': optional: true - '@anthropic-ai/claude-agent-sdk-linux-x64-musl@0.3.197': + '@anthropic-ai/claude-agent-sdk-linux-x64-musl@0.3.280': optional: true - '@anthropic-ai/claude-agent-sdk-linux-x64@0.3.197': + '@anthropic-ai/claude-agent-sdk-linux-x64@0.3.280': optional: true - '@anthropic-ai/claude-agent-sdk-win32-arm64@0.3.197': + '@anthropic-ai/claude-agent-sdk-win32-arm64@0.3.280': optional: true - '@anthropic-ai/claude-agent-sdk-win32-x64@0.3.197': + '@anthropic-ai/claude-agent-sdk-win32-x64@0.3.280': optional: true - '@anthropic-ai/claude-agent-sdk@0.3.197(@anthropic-ai/sdk@0.109.0(zod@4.4.3))(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(zod@4.4.3)': + '@anthropic-ai/claude-agent-sdk@0.3.280(@anthropic-ai/sdk@0.109.0(zod@4.4.3))(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(zod@4.4.3)': dependencies: '@anthropic-ai/sdk': 0.109.0(zod@4.4.3) '@modelcontextprotocol/sdk': 1.29.0(zod@4.4.3) zod: 4.4.3 optionalDependencies: - '@anthropic-ai/claude-agent-sdk-darwin-arm64': 0.3.197 - '@anthropic-ai/claude-agent-sdk-darwin-x64': 0.3.197 - '@anthropic-ai/claude-agent-sdk-linux-arm64': 0.3.197 - '@anthropic-ai/claude-agent-sdk-linux-arm64-musl': 0.3.197 - '@anthropic-ai/claude-agent-sdk-linux-x64': 0.3.197 - '@anthropic-ai/claude-agent-sdk-linux-x64-musl': 0.3.197 - '@anthropic-ai/claude-agent-sdk-win32-arm64': 0.3.197 - '@anthropic-ai/claude-agent-sdk-win32-x64': 0.3.197 + '@anthropic-ai/claude-agent-sdk-darwin-arm64': 0.3.280 + '@anthropic-ai/claude-agent-sdk-darwin-x64': 0.3.280 + '@anthropic-ai/claude-agent-sdk-linux-arm64': 0.3.280 + '@anthropic-ai/claude-agent-sdk-linux-arm64-musl': 0.3.280 + '@anthropic-ai/claude-agent-sdk-linux-x64': 0.3.280 + '@anthropic-ai/claude-agent-sdk-linux-x64-musl': 0.3.280 + '@anthropic-ai/claude-agent-sdk-win32-arm64': 0.3.280 + '@anthropic-ai/claude-agent-sdk-win32-x64': 0.3.280 '@anthropic-ai/sdk@0.109.0(zod@4.4.3)': dependencies: @@ -2447,12 +3264,27 @@ snapshots: optionalDependencies: zod: 4.4.3 + '@asamuzakjp/css-color@3.2.0': + dependencies: + '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + lru-cache: 10.4.3 + optional: true + + '@aws-crypto/crc32@5.2.0': + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.973.13 + tslib: 2.8.1 + '@aws-crypto/sha256-browser@5.2.0': dependencies: '@aws-crypto/sha256-js': 5.2.0 '@aws-crypto/supports-web-crypto': 5.2.0 '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.974.2 + '@aws-sdk/types': 3.973.13 '@aws-sdk/util-locate-window': 3.965.8 '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 @@ -2460,7 +3292,7 @@ snapshots: '@aws-crypto/sha256-js@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.974.2 + '@aws-sdk/types': 3.973.13 tslib: 2.8.1 '@aws-crypto/supports-web-crypto@5.2.0': @@ -2469,7 +3301,7 @@ snapshots: '@aws-crypto/util@5.2.0': dependencies: - '@aws-sdk/types': 3.974.2 + '@aws-sdk/types': 3.973.13 '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 @@ -2477,195 +3309,257 @@ snapshots: dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.976.0 - '@aws-sdk/credential-provider-node': 3.972.71 - '@aws-sdk/eventstream-handler-node': 3.972.29 - '@aws-sdk/middleware-eventstream': 3.972.24 - '@aws-sdk/middleware-websocket': 3.972.42 + '@aws-sdk/core': 3.974.23 + '@aws-sdk/credential-provider-node': 3.972.58 + '@aws-sdk/eventstream-handler-node': 3.972.22 + '@aws-sdk/middleware-eventstream': 3.972.18 + '@aws-sdk/middleware-websocket': 3.972.31 '@aws-sdk/token-providers': 3.1048.0 - '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.29.8 - '@smithy/fetch-http-handler': 5.6.10 - '@smithy/node-http-handler': 4.9.10 - '@smithy/types': 4.16.1 + '@aws-sdk/types': 3.973.13 + '@smithy/core': 3.26.0 + '@smithy/fetch-http-handler': 5.5.2 + '@smithy/node-http-handler': 4.8.2 + '@smithy/types': 4.15.0 tslib: 2.8.1 - '@aws-sdk/core@3.976.0': + '@aws-sdk/core@3.974.23': dependencies: - '@aws-sdk/types': 3.974.2 - '@aws-sdk/xml-builder': 3.972.36 - '@aws/lambda-invoke-store': 0.3.0 - '@smithy/core': 3.29.8 - '@smithy/signature-v4': 5.6.9 - '@smithy/types': 4.16.1 + '@aws-sdk/types': 3.973.13 + '@aws-sdk/xml-builder': 3.972.31 + '@aws/lambda-invoke-store': 0.2.4 + '@smithy/core': 3.26.0 + '@smithy/signature-v4': 5.5.2 + '@smithy/types': 4.15.0 bowser: 2.14.1 tslib: 2.8.1 - '@aws-sdk/credential-provider-env@3.972.60': + '@aws-sdk/credential-provider-env@3.972.49': dependencies: - '@aws-sdk/core': 3.976.0 - '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.29.8 - '@smithy/types': 4.16.1 + '@aws-sdk/core': 3.974.23 + '@aws-sdk/types': 3.973.13 + '@smithy/core': 3.26.0 + '@smithy/types': 4.15.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-http@3.972.62': + '@aws-sdk/credential-provider-http@3.972.51': dependencies: - '@aws-sdk/core': 3.976.0 - '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.29.8 - '@smithy/fetch-http-handler': 5.6.10 - '@smithy/node-http-handler': 4.9.10 - '@smithy/types': 4.16.1 + '@aws-sdk/core': 3.974.23 + '@aws-sdk/types': 3.973.13 + '@smithy/core': 3.26.0 + '@smithy/fetch-http-handler': 5.5.2 + '@smithy/node-http-handler': 4.8.2 + '@smithy/types': 4.15.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-ini@3.973.5': - dependencies: - '@aws-sdk/core': 3.976.0 - '@aws-sdk/credential-provider-env': 3.972.60 - '@aws-sdk/credential-provider-http': 3.972.62 - '@aws-sdk/credential-provider-login': 3.972.67 - '@aws-sdk/credential-provider-process': 3.972.60 - '@aws-sdk/credential-provider-sso': 3.973.4 - '@aws-sdk/credential-provider-web-identity': 3.972.66 - '@aws-sdk/nested-clients': 3.997.34 - '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.29.8 - '@smithy/credential-provider-imds': 4.4.13 - '@smithy/types': 4.16.1 + '@aws-sdk/credential-provider-ini@3.972.56': + dependencies: + '@aws-sdk/core': 3.974.23 + '@aws-sdk/credential-provider-env': 3.972.49 + '@aws-sdk/credential-provider-http': 3.972.51 + '@aws-sdk/credential-provider-login': 3.972.55 + '@aws-sdk/credential-provider-process': 3.972.49 + '@aws-sdk/credential-provider-sso': 3.972.55 + '@aws-sdk/credential-provider-web-identity': 3.972.55 + '@aws-sdk/nested-clients': 3.997.23 + '@aws-sdk/types': 3.973.13 + '@smithy/core': 3.26.0 + '@smithy/credential-provider-imds': 4.4.2 + '@smithy/types': 4.15.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-login@3.972.67': + '@aws-sdk/credential-provider-login@3.972.55': dependencies: - '@aws-sdk/core': 3.976.0 - '@aws-sdk/nested-clients': 3.997.34 - '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.29.8 - '@smithy/types': 4.16.1 + '@aws-sdk/core': 3.974.23 + '@aws-sdk/nested-clients': 3.997.23 + '@aws-sdk/types': 3.973.13 + '@smithy/core': 3.26.0 + '@smithy/types': 4.15.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-node@3.972.71': - dependencies: - '@aws-sdk/credential-provider-env': 3.972.60 - '@aws-sdk/credential-provider-http': 3.972.62 - '@aws-sdk/credential-provider-ini': 3.973.5 - '@aws-sdk/credential-provider-process': 3.972.60 - '@aws-sdk/credential-provider-sso': 3.973.4 - '@aws-sdk/credential-provider-web-identity': 3.972.66 - '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.29.8 - '@smithy/credential-provider-imds': 4.4.13 - '@smithy/types': 4.16.1 + '@aws-sdk/credential-provider-node@3.972.58': + dependencies: + '@aws-sdk/credential-provider-env': 3.972.49 + '@aws-sdk/credential-provider-http': 3.972.51 + '@aws-sdk/credential-provider-ini': 3.972.56 + '@aws-sdk/credential-provider-process': 3.972.49 + '@aws-sdk/credential-provider-sso': 3.972.55 + '@aws-sdk/credential-provider-web-identity': 3.972.55 + '@aws-sdk/types': 3.973.13 + '@smithy/core': 3.26.0 + '@smithy/credential-provider-imds': 4.4.2 + '@smithy/types': 4.15.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-process@3.972.60': + '@aws-sdk/credential-provider-process@3.972.49': dependencies: - '@aws-sdk/core': 3.976.0 - '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.29.8 - '@smithy/types': 4.16.1 + '@aws-sdk/core': 3.974.23 + '@aws-sdk/types': 3.973.13 + '@smithy/core': 3.26.0 + '@smithy/types': 4.15.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-sso@3.973.4': + '@aws-sdk/credential-provider-sso@3.972.55': dependencies: - '@aws-sdk/core': 3.976.0 - '@aws-sdk/nested-clients': 3.997.34 - '@aws-sdk/token-providers': 3.1092.0 - '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.29.8 - '@smithy/types': 4.16.1 + '@aws-sdk/core': 3.974.23 + '@aws-sdk/nested-clients': 3.997.23 + '@aws-sdk/token-providers': 3.1074.0 + '@aws-sdk/types': 3.973.13 + '@smithy/core': 3.26.0 + '@smithy/types': 4.15.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-web-identity@3.972.66': + '@aws-sdk/credential-provider-web-identity@3.972.55': dependencies: - '@aws-sdk/core': 3.976.0 - '@aws-sdk/nested-clients': 3.997.34 - '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.29.8 - '@smithy/types': 4.16.1 + '@aws-sdk/core': 3.974.23 + '@aws-sdk/nested-clients': 3.997.23 + '@aws-sdk/types': 3.973.13 + '@smithy/core': 3.26.0 + '@smithy/types': 4.15.0 tslib: 2.8.1 - '@aws-sdk/eventstream-handler-node@3.972.29': + '@aws-sdk/eventstream-handler-node@3.972.22': dependencies: - '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.29.8 - '@smithy/types': 4.16.1 + '@aws-sdk/types': 3.973.13 + '@smithy/core': 3.26.0 + '@smithy/types': 4.15.0 tslib: 2.8.1 - '@aws-sdk/middleware-eventstream@3.972.24': + '@aws-sdk/middleware-eventstream@3.972.18': dependencies: - '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.29.8 - '@smithy/types': 4.16.1 + '@aws-sdk/types': 3.973.13 + '@smithy/core': 3.26.0 + '@smithy/types': 4.15.0 tslib: 2.8.1 - '@aws-sdk/middleware-websocket@3.972.42': + '@aws-sdk/middleware-websocket@3.972.31': dependencies: - '@aws-sdk/core': 3.976.0 - '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.29.8 - '@smithy/fetch-http-handler': 5.6.10 - '@smithy/signature-v4': 5.6.9 - '@smithy/types': 4.16.1 + '@aws-sdk/core': 3.974.23 + '@aws-sdk/types': 3.973.13 + '@smithy/core': 3.26.0 + '@smithy/fetch-http-handler': 5.5.2 + '@smithy/signature-v4': 5.5.2 + '@smithy/types': 4.15.0 tslib: 2.8.1 - '@aws-sdk/nested-clients@3.997.34': + '@aws-sdk/nested-clients@3.997.23': dependencies: - '@aws-sdk/core': 3.976.0 - '@aws-sdk/signature-v4-multi-region': 3.996.41 - '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.29.8 - '@smithy/fetch-http-handler': 5.6.10 - '@smithy/node-http-handler': 4.9.10 - '@smithy/types': 4.16.1 + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.974.23 + '@aws-sdk/signature-v4-multi-region': 3.996.35 + '@aws-sdk/types': 3.973.13 + '@smithy/core': 3.26.0 + '@smithy/fetch-http-handler': 5.5.2 + '@smithy/node-http-handler': 4.8.2 + '@smithy/types': 4.15.0 tslib: 2.8.1 - '@aws-sdk/signature-v4-multi-region@3.996.41': + '@aws-sdk/signature-v4-multi-region@3.996.35': dependencies: - '@aws-sdk/types': 3.974.2 - '@smithy/signature-v4': 5.6.9 - '@smithy/types': 4.16.1 + '@aws-sdk/types': 3.973.13 + '@smithy/signature-v4': 5.5.2 + '@smithy/types': 4.15.0 tslib: 2.8.1 '@aws-sdk/token-providers@3.1048.0': dependencies: - '@aws-sdk/core': 3.976.0 - '@aws-sdk/nested-clients': 3.997.34 - '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.29.8 - '@smithy/types': 4.16.1 + '@aws-sdk/core': 3.974.23 + '@aws-sdk/nested-clients': 3.997.23 + '@aws-sdk/types': 3.973.13 + '@smithy/core': 3.26.0 + '@smithy/types': 4.15.0 tslib: 2.8.1 - '@aws-sdk/token-providers@3.1092.0': + '@aws-sdk/token-providers@3.1074.0': dependencies: - '@aws-sdk/core': 3.976.0 - '@aws-sdk/nested-clients': 3.997.34 - '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.29.8 - '@smithy/types': 4.16.1 + '@aws-sdk/core': 3.974.23 + '@aws-sdk/nested-clients': 3.997.23 + '@aws-sdk/types': 3.973.13 + '@smithy/core': 3.26.0 + '@smithy/types': 4.15.0 tslib: 2.8.1 - '@aws-sdk/types@3.974.2': + '@aws-sdk/types@3.973.13': dependencies: - '@smithy/types': 4.16.1 + '@smithy/types': 4.15.0 tslib: 2.8.1 '@aws-sdk/util-locate-window@3.965.8': dependencies: tslib: 2.8.1 - '@aws-sdk/xml-builder@3.972.36': + '@aws-sdk/xml-builder@3.972.31': dependencies: - '@smithy/types': 4.16.1 + '@smithy/types': 4.15.0 tslib: 2.8.1 - '@aws/lambda-invoke-store@0.3.0': {} + '@aws/lambda-invoke-store@0.2.4': {} + + '@babel/runtime@7.29.2': {} + + '@biomejs/biome@2.2.4': + optionalDependencies: + '@biomejs/cli-darwin-arm64': 2.2.4 + '@biomejs/cli-darwin-x64': 2.2.4 + '@biomejs/cli-linux-arm64': 2.2.4 + '@biomejs/cli-linux-arm64-musl': 2.2.4 + '@biomejs/cli-linux-x64': 2.2.4 + '@biomejs/cli-linux-x64-musl': 2.2.4 + '@biomejs/cli-win32-arm64': 2.2.4 + '@biomejs/cli-win32-x64': 2.2.4 + + '@biomejs/cli-darwin-arm64@2.2.4': + optional: true + + '@biomejs/cli-darwin-x64@2.2.4': + optional: true + + '@biomejs/cli-linux-arm64-musl@2.2.4': + optional: true + + '@biomejs/cli-linux-arm64@2.2.4': + optional: true + + '@biomejs/cli-linux-x64-musl@2.2.4': + optional: true + + '@biomejs/cli-linux-x64@2.2.4': + optional: true + + '@biomejs/cli-win32-arm64@2.2.4': + optional: true + + '@biomejs/cli-win32-x64@2.2.4': + optional: true + + '@csstools/color-helpers@5.1.0': + optional: true + + '@csstools/css-calc@2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': + dependencies: + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + optional: true + + '@csstools/css-color-parser@3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': + dependencies: + '@csstools/color-helpers': 5.1.0 + '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + optional: true + + '@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4)': + dependencies: + '@csstools/css-tokenizer': 3.0.4 + optional: true - '@babel/runtime@7.28.4': {} + '@csstools/css-tokenizer@3.0.4': + optional: true - '@earendil-works/pi-agent-core@0.84.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.21.1)(zod@4.4.3)': + '@earendil-works/pi-agent-core@0.84.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.21.0)(zod@4.4.3)': dependencies: - '@earendil-works/pi-ai': 0.84.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.21.1)(zod@4.4.3) + '@earendil-works/pi-ai': 0.84.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.21.0)(zod@4.4.3) '@earendil-works/pi-telemetry': 0.84.1 diff: 8.0.4 ignore: 7.0.5 @@ -2679,7 +3573,7 @@ snapshots: - ws - zod - '@earendil-works/pi-ai@0.84.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.21.1)(zod@4.4.3)': + '@earendil-works/pi-ai@0.84.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.21.0)(zod@4.4.3)': dependencies: '@anthropic-ai/sdk': 0.91.1(zod@4.4.3) '@aws-sdk/client-bedrock-runtime': 3.1048.0 @@ -2690,7 +3584,7 @@ snapshots: '@smithy/node-http-handler': 4.7.3 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 - openai: 6.26.0(ws@8.21.1)(zod@4.4.3) + openai: 6.26.0(ws@8.21.0)(zod@4.4.3) partial-json: 0.1.7 typebox: 1.3.7 transitivePeerDependencies: @@ -2705,10 +3599,10 @@ snapshots: dependencies: '@earendil-works/pi-protocol': 0.84.1 - '@earendil-works/pi-coding-agent@0.84.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.21.1)(zod@4.4.3)': + '@earendil-works/pi-coding-agent@0.84.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.21.0)(zod@4.4.3)': dependencies: - '@earendil-works/pi-agent-core': 0.84.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.21.1)(zod@4.4.3) - '@earendil-works/pi-ai': 0.84.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.21.1)(zod@4.4.3) + '@earendil-works/pi-agent-core': 0.84.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.21.0)(zod@4.4.3) + '@earendil-works/pi-ai': 0.84.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.21.0)(zod@4.4.3) '@earendil-works/pi-client': 0.84.1 '@earendil-works/pi-protocol': 0.84.1 '@earendil-works/pi-tui': 0.84.1 @@ -2749,106 +3643,246 @@ snapshots: get-east-asian-width: 1.6.0 marked: 18.0.5 - '@emnapi/core@1.11.1': - dependencies: - '@emnapi/wasi-threads': 1.2.2 - tslib: 2.8.1 + '@esbuild/aix-ppc64@0.27.2': optional: true - '@emnapi/runtime@1.11.1': - dependencies: - tslib: 2.8.1 + '@esbuild/aix-ppc64@0.27.7': optional: true - '@emnapi/wasi-threads@1.2.2': - dependencies: - tslib: 2.8.1 + '@esbuild/aix-ppc64@0.28.1': + optional: true + + '@esbuild/android-arm64@0.27.2': + optional: true + + '@esbuild/android-arm64@0.27.7': + optional: true + + '@esbuild/android-arm64@0.28.1': + optional: true + + '@esbuild/android-arm@0.27.2': + optional: true + + '@esbuild/android-arm@0.27.7': + optional: true + + '@esbuild/android-arm@0.28.1': + optional: true + + '@esbuild/android-x64@0.27.2': + optional: true + + '@esbuild/android-x64@0.27.7': + optional: true + + '@esbuild/android-x64@0.28.1': + optional: true + + '@esbuild/darwin-arm64@0.27.2': + optional: true + + '@esbuild/darwin-arm64@0.27.7': + optional: true + + '@esbuild/darwin-arm64@0.28.1': + optional: true + + '@esbuild/darwin-x64@0.27.2': + optional: true + + '@esbuild/darwin-x64@0.27.7': + optional: true + + '@esbuild/darwin-x64@0.28.1': + optional: true + + '@esbuild/freebsd-arm64@0.27.2': + optional: true + + '@esbuild/freebsd-arm64@0.27.7': + optional: true + + '@esbuild/freebsd-arm64@0.28.1': + optional: true + + '@esbuild/freebsd-x64@0.27.2': + optional: true + + '@esbuild/freebsd-x64@0.27.7': + optional: true + + '@esbuild/freebsd-x64@0.28.1': + optional: true + + '@esbuild/linux-arm64@0.27.2': + optional: true + + '@esbuild/linux-arm64@0.27.7': + optional: true + + '@esbuild/linux-arm64@0.28.1': + optional: true + + '@esbuild/linux-arm@0.27.2': + optional: true + + '@esbuild/linux-arm@0.27.7': + optional: true + + '@esbuild/linux-arm@0.28.1': + optional: true + + '@esbuild/linux-ia32@0.27.2': + optional: true + + '@esbuild/linux-ia32@0.27.7': + optional: true + + '@esbuild/linux-ia32@0.28.1': + optional: true + + '@esbuild/linux-loong64@0.27.2': + optional: true + + '@esbuild/linux-loong64@0.27.7': + optional: true + + '@esbuild/linux-loong64@0.28.1': + optional: true + + '@esbuild/linux-mips64el@0.27.2': + optional: true + + '@esbuild/linux-mips64el@0.27.7': + optional: true + + '@esbuild/linux-mips64el@0.28.1': + optional: true + + '@esbuild/linux-ppc64@0.27.2': + optional: true + + '@esbuild/linux-ppc64@0.27.7': + optional: true + + '@esbuild/linux-ppc64@0.28.1': + optional: true + + '@esbuild/linux-riscv64@0.27.2': + optional: true + + '@esbuild/linux-riscv64@0.27.7': + optional: true + + '@esbuild/linux-riscv64@0.28.1': + optional: true + + '@esbuild/linux-s390x@0.27.2': + optional: true + + '@esbuild/linux-s390x@0.27.7': + optional: true + + '@esbuild/linux-s390x@0.28.1': + optional: true + + '@esbuild/linux-x64@0.27.2': + optional: true + + '@esbuild/linux-x64@0.27.7': + optional: true + + '@esbuild/linux-x64@0.28.1': + optional: true + + '@esbuild/netbsd-arm64@0.27.2': optional: true - '@esbuild/aix-ppc64@0.27.1': + '@esbuild/netbsd-arm64@0.27.7': optional: true - '@esbuild/android-arm64@0.27.1': + '@esbuild/netbsd-arm64@0.28.1': optional: true - '@esbuild/android-arm@0.27.1': + '@esbuild/netbsd-x64@0.27.2': optional: true - '@esbuild/android-x64@0.27.1': + '@esbuild/netbsd-x64@0.27.7': optional: true - '@esbuild/darwin-arm64@0.27.1': + '@esbuild/netbsd-x64@0.28.1': optional: true - '@esbuild/darwin-x64@0.27.1': + '@esbuild/openbsd-arm64@0.27.2': optional: true - '@esbuild/freebsd-arm64@0.27.1': + '@esbuild/openbsd-arm64@0.27.7': optional: true - '@esbuild/freebsd-x64@0.27.1': + '@esbuild/openbsd-arm64@0.28.1': optional: true - '@esbuild/linux-arm64@0.27.1': + '@esbuild/openbsd-x64@0.27.2': optional: true - '@esbuild/linux-arm@0.27.1': + '@esbuild/openbsd-x64@0.27.7': optional: true - '@esbuild/linux-ia32@0.27.1': + '@esbuild/openbsd-x64@0.28.1': optional: true - '@esbuild/linux-loong64@0.27.1': + '@esbuild/openharmony-arm64@0.27.2': optional: true - '@esbuild/linux-mips64el@0.27.1': + '@esbuild/openharmony-arm64@0.27.7': optional: true - '@esbuild/linux-ppc64@0.27.1': + '@esbuild/openharmony-arm64@0.28.1': optional: true - '@esbuild/linux-riscv64@0.27.1': + '@esbuild/sunos-x64@0.27.2': optional: true - '@esbuild/linux-s390x@0.27.1': + '@esbuild/sunos-x64@0.27.7': optional: true - '@esbuild/linux-x64@0.27.1': + '@esbuild/sunos-x64@0.28.1': optional: true - '@esbuild/netbsd-arm64@0.27.1': + '@esbuild/win32-arm64@0.27.2': optional: true - '@esbuild/netbsd-x64@0.27.1': + '@esbuild/win32-arm64@0.27.7': optional: true - '@esbuild/openbsd-arm64@0.27.1': + '@esbuild/win32-arm64@0.28.1': optional: true - '@esbuild/openbsd-x64@0.27.1': + '@esbuild/win32-ia32@0.27.2': optional: true - '@esbuild/openharmony-arm64@0.27.1': + '@esbuild/win32-ia32@0.27.7': optional: true - '@esbuild/sunos-x64@0.27.1': + '@esbuild/win32-ia32@0.28.1': optional: true - '@esbuild/win32-arm64@0.27.1': + '@esbuild/win32-x64@0.27.2': optional: true - '@esbuild/win32-ia32@0.27.1': + '@esbuild/win32-x64@0.27.7': optional: true - '@esbuild/win32-x64@0.27.1': + '@esbuild/win32-x64@0.28.1': optional: true '@google/genai@1.52.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))': dependencies: - google-auth-library: 10.9.1 + google-auth-library: 10.9.0 p-retry: 4.6.2 protobufjs: 7.6.5 - ws: 8.21.1 + ws: 8.21.0 optionalDependencies: '@modelcontextprotocol/sdk': 1.29.0(zod@4.4.3) transitivePeerDependencies: @@ -2856,36 +3890,64 @@ snapshots: - supports-color - utf-8-validate - '@hono/node-server@1.19.13(hono@4.12.31)': + '@hono/node-server@1.19.13(hono@4.12.28)': + dependencies: + hono: 4.12.28 + + '@inquirer/ansi@1.0.2': {} + + '@inquirer/confirm@5.1.21(@types/node@22.20.0)': dependencies: - hono: 4.12.31 + '@inquirer/core': 10.3.2(@types/node@22.20.0) + '@inquirer/type': 3.0.10(@types/node@22.20.0) + optionalDependencies: + '@types/node': 22.20.0 + optional: true - '@inquirer/ansi@2.0.7': {} + '@inquirer/confirm@5.1.21(@types/node@25.2.0)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@25.2.0) + '@inquirer/type': 3.0.10(@types/node@25.2.0) + optionalDependencies: + '@types/node': 25.2.0 - '@inquirer/confirm@6.1.1(@types/node@24.10.1)': + '@inquirer/core@10.3.2(@types/node@22.20.0)': dependencies: - '@inquirer/core': 11.2.1(@types/node@24.10.1) - '@inquirer/type': 4.0.7(@types/node@24.10.1) + '@inquirer/ansi': 1.0.2 + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@22.20.0) + cli-width: 4.1.0 + mute-stream: 2.0.0 + signal-exit: 4.1.0 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 24.10.1 + '@types/node': 22.20.0 + optional: true - '@inquirer/core@11.2.1(@types/node@24.10.1)': + '@inquirer/core@10.3.2(@types/node@25.2.0)': dependencies: - '@inquirer/ansi': 2.0.7 - '@inquirer/figures': 2.0.7 - '@inquirer/type': 4.0.7(@types/node@24.10.1) + '@inquirer/ansi': 1.0.2 + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@25.2.0) cli-width: 4.1.0 - fast-wrap-ansi: 0.2.2 - mute-stream: 3.0.0 + mute-stream: 2.0.0 signal-exit: 4.1.0 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 24.10.1 + '@types/node': 25.2.0 + + '@inquirer/figures@1.0.15': {} - '@inquirer/figures@2.0.7': {} + '@inquirer/type@3.0.10(@types/node@22.20.0)': + optionalDependencies: + '@types/node': 22.20.0 + optional: true - '@inquirer/type@4.0.7(@types/node@24.10.1)': + '@inquirer/type@3.0.10(@types/node@25.2.0)': optionalDependencies: - '@types/node': 24.10.1 + '@types/node': 25.2.0 '@isaacs/balanced-match@4.0.1': {} @@ -2893,10 +3955,6 @@ snapshots: dependencies: '@isaacs/balanced-match': 4.0.1 - '@isaacs/fs-minipass@4.0.1': - dependencies: - minipass: 7.1.3 - '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -2904,6 +3962,12 @@ snapshots: '@jridgewell/resolve-uri@3.1.2': {} + '@jridgewell/source-map@0.3.11': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + optional: true + '@jridgewell/sourcemap-codec@1.5.5': {} '@jridgewell/trace-mapping@0.3.31': @@ -2911,6 +3975,14 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 + '@kwsites/file-exists@1.1.1': + dependencies: + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + '@kwsites/promise-deferred@1.1.1': {} + '@mariozechner/clipboard-darwin-arm64@0.3.9': optional: true @@ -2957,39 +4029,41 @@ snapshots: '@mistralai/mistralai@2.2.6(@opentelemetry/api@1.9.0)': dependencies: - '@opentelemetry/semantic-conventions': 1.43.0 - ws: 8.21.1 + '@opentelemetry/semantic-conventions': 1.41.1 + ws: 8.21.0 zod: 4.4.3 - zod-to-json-schema: 3.25.2(zod@4.4.3) + zod-to-json-schema: 3.25.1(zod@4.4.3) optionalDependencies: '@opentelemetry/api': 1.9.0 transitivePeerDependencies: - bufferutil - utf-8-validate + '@mixmark-io/domino@2.2.0': {} + '@modelcontextprotocol/sdk@1.29.0(zod@4.4.3)': dependencies: - '@hono/node-server': 1.19.13(hono@4.12.31) - ajv: 8.17.1 - ajv-formats: 3.0.1(ajv@8.17.1) + '@hono/node-server': 1.19.13(hono@4.12.28) + ajv: 8.20.0 + ajv-formats: 3.0.1(ajv@8.20.0) content-type: 1.0.5 - cors: 2.8.5 + cors: 2.8.6 cross-spawn: 7.0.6 eventsource: 3.0.7 eventsource-parser: 3.0.6 express: 5.2.1 - express-rate-limit: 8.6.0(express@5.2.1) - hono: 4.12.31 - jose: 6.1.3 + express-rate-limit: 8.3.1(express@5.2.1) + hono: 4.12.28 + jose: 6.2.1 json-schema-typed: 8.0.2 pkce-challenge: 5.0.1 raw-body: 3.0.2 zod: 4.4.3 - zod-to-json-schema: 3.25.2(zod@4.4.3) + zod-to-json-schema: 3.25.1(zod@4.4.3) transitivePeerDependencies: - supports-color - '@mswjs/interceptors@0.41.9': + '@mswjs/interceptors@0.41.0': dependencies: '@open-draft/deferred-promise': 2.2.0 '@open-draft/logger': 0.3.0 @@ -2998,17 +4072,8 @@ snapshots: outvariant: 1.4.3 strict-event-emitter: 0.5.1 - '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': - dependencies: - '@emnapi/core': 1.11.1 - '@emnapi/runtime': 1.11.1 - '@tybys/wasm-util': 0.10.3 - optional: true - '@open-draft/deferred-promise@2.2.0': {} - '@open-draft/deferred-promise@3.0.0': {} - '@open-draft/logger@0.3.0': dependencies: is-node-process: 1.2.0 @@ -3016,50 +4081,55 @@ snapshots: '@open-draft/until@2.1.0': {} - '@openai/codex@0.144.0': + '@openai/codex@0.154.0': optionalDependencies: - '@openai/codex-darwin-arm64': '@openai/codex@0.144.0-darwin-arm64' - '@openai/codex-darwin-x64': '@openai/codex@0.144.0-darwin-x64' - '@openai/codex-linux-arm64': '@openai/codex@0.144.0-linux-arm64' - '@openai/codex-linux-x64': '@openai/codex@0.144.0-linux-x64' - '@openai/codex-win32-arm64': '@openai/codex@0.144.0-win32-arm64' - '@openai/codex-win32-x64': '@openai/codex@0.144.0-win32-x64' - - '@openai/codex@0.144.0-darwin-arm64': + '@openai/codex-darwin-arm64': '@openai/codex@0.154.0-darwin-arm64' + '@openai/codex-darwin-x64': '@openai/codex@0.154.0-darwin-x64' + '@openai/codex-linux-arm64': '@openai/codex@0.154.0-linux-arm64' + '@openai/codex-linux-x64': '@openai/codex@0.154.0-linux-x64' + '@openai/codex-win32-arm64': '@openai/codex@0.154.0-win32-arm64' + '@openai/codex-win32-x64': '@openai/codex@0.154.0-win32-x64' + + '@openai/codex@0.154.0-darwin-arm64': optional: true - '@openai/codex@0.144.0-darwin-x64': + '@openai/codex@0.154.0-darwin-x64': optional: true - '@openai/codex@0.144.0-linux-arm64': + '@openai/codex@0.154.0-linux-arm64': optional: true - '@openai/codex@0.144.0-linux-x64': + '@openai/codex@0.154.0-linux-x64': optional: true - '@openai/codex@0.144.0-win32-arm64': + '@openai/codex@0.154.0-win32-arm64': optional: true - '@openai/codex@0.144.0-win32-x64': + '@openai/codex@0.154.0-win32-x64': optional: true '@opentelemetry/api-logs@0.208.0': dependencies: - '@opentelemetry/api': 1.9.1 + '@opentelemetry/api': 1.9.0 '@opentelemetry/api@1.9.0': {} '@opentelemetry/api@1.9.1': {} - '@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1)': + '@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 - '@opentelemetry/semantic-conventions': 1.43.0 + '@opentelemetry/semantic-conventions': 1.39.0 - '@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.1)': + '@opentelemetry/core@2.5.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/semantic-conventions': 1.39.0 + + '@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 - '@opentelemetry/semantic-conventions': 1.43.0 + '@opentelemetry/semantic-conventions': 1.41.1 '@opentelemetry/exporter-logs-otlp-http@0.208.0(@opentelemetry/api@1.9.1)': dependencies: @@ -3096,17 +4166,23 @@ snapshots: '@opentelemetry/sdk-trace-base': 2.2.0(@opentelemetry/api@1.9.1) protobufjs: 7.6.5 - '@opentelemetry/resources@2.10.0(@opentelemetry/api@1.9.1)': + '@opentelemetry/resources@2.2.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 - '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.1) - '@opentelemetry/semantic-conventions': 1.43.0 + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.39.0 - '@opentelemetry/resources@2.2.0(@opentelemetry/api@1.9.1)': + '@opentelemetry/resources@2.5.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 - '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.1) - '@opentelemetry/semantic-conventions': 1.43.0 + '@opentelemetry/core': 2.5.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.39.0 + + '@opentelemetry/resources@2.8.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.8.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.41.1 '@opentelemetry/sdk-logs@0.208.0(@opentelemetry/api@1.9.1)': dependencies: @@ -3121,31 +4197,26 @@ snapshots: '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.1) '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.1) - '@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1)': - dependencies: - '@opentelemetry/api': 1.9.1 - '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.1) - '@opentelemetry/resources': 2.10.0(@opentelemetry/api@1.9.1) - '@opentelemetry/sdk-trace': 2.10.0(@opentelemetry/api@1.9.1) - '@opentelemetry/semantic-conventions': 1.43.0 - '@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.1) '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.1) - '@opentelemetry/semantic-conventions': 1.43.0 + '@opentelemetry/semantic-conventions': 1.41.1 - '@opentelemetry/sdk-trace@2.10.0(@opentelemetry/api@1.9.1)': + '@opentelemetry/sdk-trace-base@2.8.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 - '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.1) - '@opentelemetry/resources': 2.10.0(@opentelemetry/api@1.9.1) - '@opentelemetry/semantic-conventions': 1.43.0 + '@opentelemetry/core': 2.8.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.8.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.41.1 + + '@opentelemetry/semantic-conventions@1.39.0': {} - '@opentelemetry/semantic-conventions@1.43.0': {} + '@opentelemetry/semantic-conventions@1.41.1': {} - '@oxc-project/types@0.139.0': {} + '@polka/url@1.0.0-next.29': + optional: true '@protobufjs/aspromise@1.1.2': {} @@ -3167,140 +4238,105 @@ snapshots: '@protobufjs/utf8@1.1.2': {} - '@rolldown/binding-android-arm64@1.1.5': - optional: true - - '@rolldown/binding-darwin-arm64@1.1.5': - optional: true - - '@rolldown/binding-darwin-x64@1.1.5': - optional: true - - '@rolldown/binding-freebsd-x64@1.1.5': - optional: true - - '@rolldown/binding-linux-arm-gnueabihf@1.1.5': - optional: true - - '@rolldown/binding-linux-arm64-gnu@1.1.5': - optional: true - - '@rolldown/binding-linux-arm64-musl@1.1.5': - optional: true - - '@rolldown/binding-linux-ppc64-gnu@1.1.5': - optional: true - - '@rolldown/binding-linux-s390x-gnu@1.1.5': - optional: true - - '@rolldown/binding-linux-x64-gnu@1.1.5': - optional: true - - '@rolldown/binding-linux-x64-musl@1.1.5': + '@rollup/rollup-android-arm-eabi@4.59.0': optional: true - '@rolldown/binding-openharmony-arm64@1.1.5': + '@rollup/rollup-android-arm64@4.59.0': optional: true - '@rolldown/binding-wasm32-wasi@1.1.5': - dependencies: - '@emnapi/core': 1.11.1 - '@emnapi/runtime': 1.11.1 - '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) + '@rollup/rollup-darwin-arm64@4.59.0': optional: true - '@rolldown/binding-win32-arm64-msvc@1.1.5': + '@rollup/rollup-darwin-x64@4.59.0': optional: true - '@rolldown/binding-win32-x64-msvc@1.1.5': + '@rollup/rollup-freebsd-arm64@4.59.0': optional: true - '@rolldown/pluginutils@1.0.1': {} - - '@rollup/rollup-android-arm-eabi@4.53.3': + '@rollup/rollup-freebsd-x64@4.59.0': optional: true - '@rollup/rollup-android-arm64@4.53.3': + '@rollup/rollup-linux-arm-gnueabihf@4.59.0': optional: true - '@rollup/rollup-darwin-arm64@4.53.3': + '@rollup/rollup-linux-arm-musleabihf@4.59.0': optional: true - '@rollup/rollup-darwin-x64@4.53.3': + '@rollup/rollup-linux-arm64-gnu@4.59.0': optional: true - '@rollup/rollup-freebsd-arm64@4.53.3': + '@rollup/rollup-linux-arm64-musl@4.59.0': optional: true - '@rollup/rollup-freebsd-x64@4.53.3': + '@rollup/rollup-linux-loong64-gnu@4.59.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.53.3': + '@rollup/rollup-linux-loong64-musl@4.59.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.53.3': + '@rollup/rollup-linux-ppc64-gnu@4.59.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.53.3': + '@rollup/rollup-linux-ppc64-musl@4.59.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.53.3': + '@rollup/rollup-linux-riscv64-gnu@4.59.0': optional: true - '@rollup/rollup-linux-loong64-gnu@4.53.3': + '@rollup/rollup-linux-riscv64-musl@4.59.0': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.53.3': + '@rollup/rollup-linux-s390x-gnu@4.59.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.53.3': + '@rollup/rollup-linux-x64-gnu@4.59.0': optional: true - '@rollup/rollup-linux-riscv64-musl@4.53.3': + '@rollup/rollup-linux-x64-musl@4.59.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.53.3': + '@rollup/rollup-openbsd-x64@4.59.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.53.3': + '@rollup/rollup-openharmony-arm64@4.59.0': optional: true - '@rollup/rollup-linux-x64-musl@4.53.3': + '@rollup/rollup-win32-arm64-msvc@4.59.0': optional: true - '@rollup/rollup-openharmony-arm64@4.53.3': + '@rollup/rollup-win32-ia32-msvc@4.59.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.53.3': + '@rollup/rollup-win32-x64-gnu@4.59.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.53.3': + '@rollup/rollup-win32-x64-msvc@4.59.0': optional: true - '@rollup/rollup-win32-x64-gnu@4.53.3': - optional: true + '@silvia-odwyer/photon-node@0.3.4': {} - '@rollup/rollup-win32-x64-msvc@4.53.3': - optional: true + '@simple-git/args-pathspec@1.0.3': {} - '@silvia-odwyer/photon-node@0.3.4': {} + '@simple-git/argv-parser@1.1.1': + dependencies: + '@simple-git/args-pathspec': 1.0.3 - '@smithy/core@3.29.8': + '@smithy/core@3.26.0': dependencies: - '@smithy/types': 4.16.1 + '@aws-crypto/crc32': 5.2.0 + '@smithy/types': 4.15.0 tslib: 2.8.1 - '@smithy/credential-provider-imds@4.4.13': + '@smithy/credential-provider-imds@4.4.2': dependencies: - '@smithy/core': 3.29.8 - '@smithy/types': 4.16.1 + '@smithy/core': 3.26.0 + '@smithy/types': 4.15.0 tslib: 2.8.1 - '@smithy/fetch-http-handler@5.6.10': + '@smithy/fetch-http-handler@5.5.2': dependencies: - '@smithy/core': 3.29.8 - '@smithy/types': 4.16.1 + '@smithy/core': 3.26.0 + '@smithy/types': 4.15.0 tslib: 2.8.1 '@smithy/is-array-buffer@2.2.0': @@ -3309,23 +4345,23 @@ snapshots: '@smithy/node-http-handler@4.7.3': dependencies: - '@smithy/core': 3.29.8 - '@smithy/types': 4.16.1 + '@smithy/core': 3.26.0 + '@smithy/types': 4.15.0 tslib: 2.8.1 - '@smithy/node-http-handler@4.9.10': + '@smithy/node-http-handler@4.8.2': dependencies: - '@smithy/core': 3.29.8 - '@smithy/types': 4.16.1 + '@smithy/core': 3.26.0 + '@smithy/types': 4.15.0 tslib: 2.8.1 - '@smithy/signature-v4@5.6.9': + '@smithy/signature-v4@5.5.2': dependencies: - '@smithy/core': 3.29.8 - '@smithy/types': 4.16.1 + '@smithy/core': 3.26.0 + '@smithy/types': 4.15.0 tslib: 2.8.1 - '@smithy/types@4.16.1': + '@smithy/types@4.15.0': dependencies: tslib: 2.8.1 @@ -3343,9 +4379,85 @@ snapshots: '@standard-schema/spec@1.1.0': {} - '@tybys/wasm-util@0.10.3': + '@swc/core-darwin-arm64@1.15.43': + optional: true + + '@swc/core-darwin-x64@1.15.43': + optional: true + + '@swc/core-linux-arm-gnueabihf@1.15.43': + optional: true + + '@swc/core-linux-arm64-gnu@1.15.43': + optional: true + + '@swc/core-linux-arm64-musl@1.15.43': + optional: true + + '@swc/core-linux-ppc64-gnu@1.15.43': + optional: true + + '@swc/core-linux-s390x-gnu@1.15.43': + optional: true + + '@swc/core-linux-x64-gnu@1.15.43': + optional: true + + '@swc/core-linux-x64-musl@1.15.43': + optional: true + + '@swc/core-win32-arm64-msvc@1.15.43': + optional: true + + '@swc/core-win32-ia32-msvc@1.15.43': + optional: true + + '@swc/core-win32-x64-msvc@1.15.43': + optional: true + + '@swc/core@1.15.43': dependencies: - tslib: 2.8.1 + '@swc/counter': 0.1.3 + '@swc/types': 0.1.27 + optionalDependencies: + '@swc/core-darwin-arm64': 1.15.43 + '@swc/core-darwin-x64': 1.15.43 + '@swc/core-linux-arm-gnueabihf': 1.15.43 + '@swc/core-linux-arm64-gnu': 1.15.43 + '@swc/core-linux-arm64-musl': 1.15.43 + '@swc/core-linux-ppc64-gnu': 1.15.43 + '@swc/core-linux-s390x-gnu': 1.15.43 + '@swc/core-linux-x64-gnu': 1.15.43 + '@swc/core-linux-x64-musl': 1.15.43 + '@swc/core-win32-arm64-msvc': 1.15.43 + '@swc/core-win32-ia32-msvc': 1.15.43 + '@swc/core-win32-x64-msvc': 1.15.43 + optional: true + + '@swc/counter@0.1.3': + optional: true + + '@swc/types@0.1.27': + dependencies: + '@swc/counter': 0.1.3 + optional: true + + '@turbo/darwin-64@2.9.18': + optional: true + + '@turbo/darwin-arm64@2.9.18': + optional: true + + '@turbo/linux-64@2.9.18': + optional: true + + '@turbo/linux-arm64@2.9.18': + optional: true + + '@turbo/windows-64@2.9.18': + optional: true + + '@turbo/windows-arm64@2.9.18': optional: true '@types/bun@1.3.14': @@ -3364,66 +4476,97 @@ snapshots: '@types/jsonwebtoken@9.0.10': dependencies: '@types/ms': 2.1.0 - '@types/node': 24.10.1 + '@types/node': 24.12.0 '@types/ms@2.1.0': {} - '@types/node@24.10.1': + '@types/node@22.20.0': + dependencies: + undici-types: 6.21.0 + + '@types/node@24.12.0': dependencies: undici-types: 7.16.0 - '@types/retry@0.12.0': {} + '@types/node@24.13.3': + dependencies: + undici-types: 7.18.2 + + '@types/node@25.2.0': + dependencies: + undici-types: 7.16.0 + optional: true - '@types/set-cookie-parser@2.4.10': + '@types/parse-path@7.1.0': dependencies: - '@types/node': 24.10.1 + parse-path: 7.1.0 + + '@types/retry@0.12.0': {} '@types/statuses@2.0.6': {} - '@types/tar@6.1.13': - dependencies: - '@types/node': 24.10.1 - minipass: 4.2.8 + '@types/turndown@5.0.6': {} - '@vitest/expect@4.1.10': + '@vitest/expect@4.1.8': dependencies: '@standard-schema/spec': 1.1.0 '@types/chai': 5.2.3 - '@vitest/spy': 4.1.10 - '@vitest/utils': 4.1.10 + '@vitest/spy': 4.1.8 + '@vitest/utils': 4.1.8 chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.10(msw@2.15.0(@types/node@24.10.1)(typescript@5.9.3))(vite@8.1.5(@types/node@24.10.1)(esbuild@0.27.1)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0))': + '@vitest/mocker@4.1.8(msw@2.12.8(@types/node@22.20.0)(typescript@5.9.3))(vite@7.3.5(@types/node@22.20.0)(jiti@2.7.0)(lightningcss@1.33.0)(terser@5.46.0)(tsx@4.22.4)(yaml@2.9.0))': + dependencies: + '@vitest/spy': 4.1.8 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + msw: 2.12.8(@types/node@22.20.0)(typescript@5.9.3) + vite: 7.3.5(@types/node@22.20.0)(jiti@2.7.0)(lightningcss@1.33.0)(terser@5.46.0)(tsx@4.22.4)(yaml@2.9.0) + + '@vitest/mocker@4.1.8(msw@2.12.8(@types/node@25.2.0)(typescript@5.9.3))(vite@7.3.5(@types/node@25.2.0)(jiti@2.7.0)(lightningcss@1.33.0)(terser@5.46.0)(tsx@4.22.4)(yaml@2.9.0))': dependencies: - '@vitest/spy': 4.1.10 + '@vitest/spy': 4.1.8 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - msw: 2.15.0(@types/node@24.10.1)(typescript@5.9.3) - vite: 8.1.5(@types/node@24.10.1)(esbuild@0.27.1)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0) + msw: 2.12.8(@types/node@25.2.0)(typescript@5.9.3) + vite: 7.3.5(@types/node@25.2.0)(jiti@2.7.0)(lightningcss@1.33.0)(terser@5.46.0)(tsx@4.22.4)(yaml@2.9.0) - '@vitest/pretty-format@4.1.10': + '@vitest/pretty-format@4.1.8': dependencies: tinyrainbow: 3.1.0 - '@vitest/runner@4.1.10': + '@vitest/runner@4.1.8': dependencies: - '@vitest/utils': 4.1.10 + '@vitest/utils': 4.1.8 pathe: 2.0.3 - '@vitest/snapshot@4.1.10': + '@vitest/snapshot@4.1.8': dependencies: - '@vitest/pretty-format': 4.1.10 - '@vitest/utils': 4.1.10 + '@vitest/pretty-format': 4.1.8 + '@vitest/utils': 4.1.8 magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/spy@4.1.10': {} + '@vitest/spy@4.1.8': {} + + '@vitest/ui@4.1.8(vitest@4.1.8)': + dependencies: + '@vitest/utils': 4.1.8 + fflate: 0.8.3 + flatted: 3.4.3 + pathe: 2.0.3 + sirv: 3.0.2 + tinyglobby: 0.2.17 + tinyrainbow: 3.1.0 + vitest: 4.1.8(@opentelemetry/api@1.9.1)(@types/node@25.2.0)(@vitest/ui@4.1.8)(jsdom@26.1.0)(msw@2.12.8(@types/node@25.2.0)(typescript@5.9.3))(vite@7.3.5(@types/node@25.2.0)(jiti@2.7.0)(lightningcss@1.33.0)(terser@5.46.0)(tsx@4.22.4)(yaml@2.9.0)) + optional: true - '@vitest/utils@4.1.10': + '@vitest/utils@4.1.8': dependencies: - '@vitest/pretty-format': 4.1.10 + '@vitest/pretty-format': 4.1.8 convert-source-map: 2.0.0 tinyrainbow: 3.1.0 @@ -3434,13 +4577,16 @@ snapshots: acorn@8.15.0: {} + acorn@8.17.0: + optional: true + agent-base@7.1.4: {} - ajv-formats@3.0.1(ajv@8.17.1): + ajv-formats@3.0.1(ajv@8.20.0): optionalDependencies: - ajv: 8.17.1 + ajv: 8.20.0 - ajv@8.17.1: + ajv@8.20.0: dependencies: fast-deep-equal: 3.1.3 fast-uri: 3.1.4 @@ -3463,13 +4609,13 @@ snapshots: bignumber.js@9.3.1: {} - body-parser@2.2.1: + body-parser@2.2.2: dependencies: bytes: 3.1.2 content-type: 1.0.5 debug: 4.4.3 http-errors: 2.0.1 - iconv-lite: 0.7.0 + iconv-lite: 0.7.2 on-finished: 2.4.1 qs: 6.15.3 raw-body: 3.0.2 @@ -3479,19 +4625,22 @@ snapshots: bowser@2.14.1: {} - brace-expansion@5.0.8: + brace-expansion@5.0.5: dependencies: balanced-match: 4.0.4 buffer-equal-constant-time@1.0.1: {} + buffer-from@1.1.2: + optional: true + bun-types@1.3.14: dependencies: - '@types/node': 24.10.1 + '@types/node': 24.12.0 - bundle-require@5.1.0(esbuild@0.27.1): + bundle-require@5.1.0(esbuild@0.27.2): dependencies: - esbuild: 0.27.1 + esbuild: 0.27.2 load-tsconfig: 0.2.5 bytes@3.1.2: {} @@ -3516,8 +4665,6 @@ snapshots: dependencies: readdirp: 4.1.2 - chownr@3.0.0: {} - cli-width@4.1.0: {} cliui@8.0.1: @@ -3534,6 +4681,9 @@ snapshots: commander@14.0.3: {} + commander@2.20.3: + optional: true + commander@4.1.1: {} confbox@0.1.8: {} @@ -3552,7 +4702,7 @@ snapshots: cookie@1.1.1: {} - cors@2.8.5: + cors@2.8.6: dependencies: object-assign: 4.1.1 vary: 1.1.2 @@ -3563,15 +4713,31 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 + cssstyle@4.6.0: + dependencies: + '@asamuzakjp/css-color': 3.2.0 + rrweb-cssom: 0.8.0 + optional: true + data-uri-to-buffer@4.0.1: {} + data-urls@5.0.0: + dependencies: + whatwg-mimetype: 4.0.0 + whatwg-url: 14.2.0 + optional: true + debug@4.4.3: dependencies: ms: 2.1.3 + decimal.js@10.6.0: + optional: true + depd@2.0.0: {} - detect-libc@2.1.2: {} + detect-libc@2.1.2: + optional: true diff@8.0.4: {} @@ -3591,44 +4757,106 @@ snapshots: encodeurl@2.0.0: {} + entities@6.0.1: + optional: true + es-define-property@1.0.1: {} es-errors@1.3.0: {} - es-module-lexer@2.3.1: {} + es-module-lexer@2.0.0: {} es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 - esbuild@0.27.1: + esbuild@0.27.2: optionalDependencies: - '@esbuild/aix-ppc64': 0.27.1 - '@esbuild/android-arm': 0.27.1 - '@esbuild/android-arm64': 0.27.1 - '@esbuild/android-x64': 0.27.1 - '@esbuild/darwin-arm64': 0.27.1 - '@esbuild/darwin-x64': 0.27.1 - '@esbuild/freebsd-arm64': 0.27.1 - '@esbuild/freebsd-x64': 0.27.1 - '@esbuild/linux-arm': 0.27.1 - '@esbuild/linux-arm64': 0.27.1 - '@esbuild/linux-ia32': 0.27.1 - '@esbuild/linux-loong64': 0.27.1 - '@esbuild/linux-mips64el': 0.27.1 - '@esbuild/linux-ppc64': 0.27.1 - '@esbuild/linux-riscv64': 0.27.1 - '@esbuild/linux-s390x': 0.27.1 - '@esbuild/linux-x64': 0.27.1 - '@esbuild/netbsd-arm64': 0.27.1 - '@esbuild/netbsd-x64': 0.27.1 - '@esbuild/openbsd-arm64': 0.27.1 - '@esbuild/openbsd-x64': 0.27.1 - '@esbuild/openharmony-arm64': 0.27.1 - '@esbuild/sunos-x64': 0.27.1 - '@esbuild/win32-arm64': 0.27.1 - '@esbuild/win32-ia32': 0.27.1 - '@esbuild/win32-x64': 0.27.1 + '@esbuild/aix-ppc64': 0.27.2 + '@esbuild/android-arm': 0.27.2 + '@esbuild/android-arm64': 0.27.2 + '@esbuild/android-x64': 0.27.2 + '@esbuild/darwin-arm64': 0.27.2 + '@esbuild/darwin-x64': 0.27.2 + '@esbuild/freebsd-arm64': 0.27.2 + '@esbuild/freebsd-x64': 0.27.2 + '@esbuild/linux-arm': 0.27.2 + '@esbuild/linux-arm64': 0.27.2 + '@esbuild/linux-ia32': 0.27.2 + '@esbuild/linux-loong64': 0.27.2 + '@esbuild/linux-mips64el': 0.27.2 + '@esbuild/linux-ppc64': 0.27.2 + '@esbuild/linux-riscv64': 0.27.2 + '@esbuild/linux-s390x': 0.27.2 + '@esbuild/linux-x64': 0.27.2 + '@esbuild/netbsd-arm64': 0.27.2 + '@esbuild/netbsd-x64': 0.27.2 + '@esbuild/openbsd-arm64': 0.27.2 + '@esbuild/openbsd-x64': 0.27.2 + '@esbuild/openharmony-arm64': 0.27.2 + '@esbuild/sunos-x64': 0.27.2 + '@esbuild/win32-arm64': 0.27.2 + '@esbuild/win32-ia32': 0.27.2 + '@esbuild/win32-x64': 0.27.2 + + esbuild@0.27.7: + optionalDependencies: + '@esbuild/aix-ppc64': 0.27.7 + '@esbuild/android-arm': 0.27.7 + '@esbuild/android-arm64': 0.27.7 + '@esbuild/android-x64': 0.27.7 + '@esbuild/darwin-arm64': 0.27.7 + '@esbuild/darwin-x64': 0.27.7 + '@esbuild/freebsd-arm64': 0.27.7 + '@esbuild/freebsd-x64': 0.27.7 + '@esbuild/linux-arm': 0.27.7 + '@esbuild/linux-arm64': 0.27.7 + '@esbuild/linux-ia32': 0.27.7 + '@esbuild/linux-loong64': 0.27.7 + '@esbuild/linux-mips64el': 0.27.7 + '@esbuild/linux-ppc64': 0.27.7 + '@esbuild/linux-riscv64': 0.27.7 + '@esbuild/linux-s390x': 0.27.7 + '@esbuild/linux-x64': 0.27.7 + '@esbuild/netbsd-arm64': 0.27.7 + '@esbuild/netbsd-x64': 0.27.7 + '@esbuild/openbsd-arm64': 0.27.7 + '@esbuild/openbsd-x64': 0.27.7 + '@esbuild/openharmony-arm64': 0.27.7 + '@esbuild/sunos-x64': 0.27.7 + '@esbuild/win32-arm64': 0.27.7 + '@esbuild/win32-ia32': 0.27.7 + '@esbuild/win32-x64': 0.27.7 + + esbuild@0.28.1: + optionalDependencies: + '@esbuild/aix-ppc64': 0.28.1 + '@esbuild/android-arm': 0.28.1 + '@esbuild/android-arm64': 0.28.1 + '@esbuild/android-x64': 0.28.1 + '@esbuild/darwin-arm64': 0.28.1 + '@esbuild/darwin-x64': 0.28.1 + '@esbuild/freebsd-arm64': 0.28.1 + '@esbuild/freebsd-x64': 0.28.1 + '@esbuild/linux-arm': 0.28.1 + '@esbuild/linux-arm64': 0.28.1 + '@esbuild/linux-ia32': 0.28.1 + '@esbuild/linux-loong64': 0.28.1 + '@esbuild/linux-mips64el': 0.28.1 + '@esbuild/linux-ppc64': 0.28.1 + '@esbuild/linux-riscv64': 0.28.1 + '@esbuild/linux-s390x': 0.28.1 + '@esbuild/linux-x64': 0.28.1 + '@esbuild/netbsd-arm64': 0.28.1 + '@esbuild/netbsd-x64': 0.28.1 + '@esbuild/openbsd-arm64': 0.28.1 + '@esbuild/openbsd-x64': 0.28.1 + '@esbuild/openharmony-arm64': 0.28.1 + '@esbuild/sunos-x64': 0.28.1 + '@esbuild/win32-arm64': 0.28.1 + '@esbuild/win32-ia32': 0.28.1 + '@esbuild/win32-x64': 0.28.1 + optional: true escalade@3.2.0: {} @@ -3646,20 +4874,17 @@ snapshots: dependencies: eventsource-parser: 3.0.6 - expect-type@1.4.0: {} + expect-type@1.3.0: {} - express-rate-limit@8.6.0(express@5.2.1): + express-rate-limit@8.3.1(express@5.2.1): dependencies: - debug: 4.4.3 express: 5.2.1 - ip-address: 10.2.0 - transitivePeerDependencies: - - supports-color + ip-address: 10.1.0 express@5.2.1: dependencies: accepts: 2.0.0 - body-parser: 2.2.1 + body-parser: 2.2.2 content-disposition: 1.0.1 content-type: 1.0.5 cookie: 0.7.2 @@ -3681,8 +4906,8 @@ snapshots: qs: 6.15.3 range-parser: 1.2.1 router: 2.2.0 - send: 1.2.0 - serve-static: 2.2.0 + send: 1.2.1 + serve-static: 2.2.1 statuses: 2.0.2 type-is: 2.0.1 vary: 1.1.2 @@ -3695,18 +4920,8 @@ snapshots: fast-sha256@1.3.0: {} - fast-string-truncated-width@3.0.3: {} - - fast-string-width@3.0.2: - dependencies: - fast-string-truncated-width: 3.0.3 - fast-uri@3.1.4: {} - fast-wrap-ansi@0.2.2: - dependencies: - fast-string-width: 3.0.2 - fdir@6.5.0(picomatch@4.0.3): optionalDependencies: picomatch: 4.0.3 @@ -3720,6 +4935,8 @@ snapshots: node-domexception: 1.0.0 web-streams-polyfill: 3.3.3 + fflate@0.8.2: {} + fflate@0.8.3: {} finalhandler@2.1.1: @@ -3737,7 +4954,10 @@ snapshots: dependencies: magic-string: 0.30.21 mlly: 1.8.0 - rollup: 4.53.3 + rollup: 4.59.0 + + flatted@3.4.3: + optional: true formdata-polyfill@4.0.10: dependencies: @@ -3752,7 +4972,7 @@ snapshots: function-bind@1.1.2: {} - gaxios@7.3.0: + gaxios@7.1.5: dependencies: extend: 3.0.2 https-proxy-agent: 7.0.6 @@ -3762,7 +4982,7 @@ snapshots: gcp-metadata@8.1.2: dependencies: - gaxios: 7.3.0 + gaxios: 7.1.5 google-logging-utils: 1.1.3 json-bigint: 1.0.0 transitivePeerDependencies: @@ -3782,7 +5002,7 @@ snapshots: get-proto: 1.0.1 gopd: 1.2.0 has-symbols: 1.1.0 - hasown: 2.0.2 + hasown: 2.0.4 math-intrinsics: 1.1.0 get-proto@1.0.1: @@ -3790,9 +5010,14 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 - get-tsconfig@4.13.0: + git-up@8.1.1: + dependencies: + is-ssh: 1.4.1 + parse-url: 9.2.0 + + git-url-parse@16.1.0: dependencies: - resolve-pkg-maps: 1.0.0 + git-up: 8.1.1 glob@13.0.6: dependencies: @@ -3800,11 +5025,11 @@ snapshots: minipass: 7.1.3 path-scurry: 2.0.2 - google-auth-library@10.9.1: + google-auth-library@10.9.0: dependencies: base64-js: 1.5.1 ecdsa-sig-formatter: 1.0.11 - gaxios: 7.3.0 + gaxios: 7.1.5 gcp-metadata: 8.1.2 google-logging-utils: 1.1.3 jws: 4.0.1 @@ -3817,28 +5042,30 @@ snapshots: graceful-fs@4.2.11: {} - graphql@16.14.2: {} + graphql@16.12.0: {} grok-mermaid@0.2.2: {} has-symbols@1.1.0: {} - hasown@2.0.2: + hasown@2.0.4: dependencies: function-bind: 1.1.2 - headers-polyfill@5.0.1: - dependencies: - '@types/set-cookie-parser': 2.4.10 - set-cookie-parser: 3.1.2 + headers-polyfill@4.0.3: {} highlight.js@10.7.3: {} - hono@4.12.31: {} + hono@4.12.28: {} hosted-git-info@9.0.3: dependencies: - lru-cache: 11.5.2 + lru-cache: 11.2.5 + + html-encoding-sniffer@4.0.0: + dependencies: + whatwg-encoding: 3.1.1 + optional: true http-errors@2.0.1: dependencies: @@ -3862,7 +5089,12 @@ snapshots: transitivePeerDependencies: - supports-color - iconv-lite@0.7.0: + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + optional: true + + iconv-lite@0.7.2: dependencies: safer-buffer: 2.1.2 @@ -3870,7 +5102,7 @@ snapshots: inherits@2.0.4: {} - ip-address@10.2.0: {} + ip-address@10.1.0: {} ipaddr.js@1.9.1: {} @@ -3878,23 +5110,58 @@ snapshots: is-node-process@1.2.0: {} + is-potential-custom-element-name@1.0.1: + optional: true + is-promise@4.0.0: {} + is-ssh@1.4.1: + dependencies: + protocols: 2.0.2 + isexe@2.0.0: {} jiti@2.7.0: {} - jose@6.1.3: {} + jose@6.2.1: {} joycon@3.1.1: {} + jsdom@26.1.0: + dependencies: + cssstyle: 4.6.0 + data-urls: 5.0.0 + decimal.js: 10.6.0 + html-encoding-sniffer: 4.0.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.23 + parse5: 7.3.0 + rrweb-cssom: 0.8.0 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 5.1.2 + w3c-xmlserializer: 5.0.0 + webidl-conversions: 7.0.0 + whatwg-encoding: 3.1.1 + whatwg-mimetype: 4.0.0 + whatwg-url: 14.2.0 + ws: 8.21.0 + xml-name-validator: 5.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + optional: true + json-bigint@1.0.0: dependencies: bignumber.js: 9.3.1 json-schema-to-ts@3.1.1: dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.29.2 ts-algebra: 2.0.0 json-schema-traverse@1.0.0: {} @@ -3912,7 +5179,7 @@ snapshots: lodash.isstring: 4.0.1 lodash.once: 4.1.1 ms: 2.1.3 - semver: 7.7.3 + semver: 7.8.4 jwa@2.0.1: dependencies: @@ -3973,6 +5240,7 @@ snapshots: lightningcss-linux-x64-musl: 1.33.0 lightningcss-win32-arm64-msvc: 1.33.0 lightningcss-win32-x64-msvc: 1.33.0 + optional: true lilconfig@3.1.3: {} @@ -3996,7 +5264,10 @@ snapshots: long@5.3.2: {} - lru-cache@11.5.2: {} + lru-cache@10.4.3: + optional: true + + lru-cache@11.2.5: {} magic-string@0.30.21: dependencies: @@ -4016,57 +5287,80 @@ snapshots: dependencies: mime-db: 1.54.0 - minimatch@10.1.1: + minimatch@10.1.2: dependencies: '@isaacs/brace-expansion': 5.0.1 minimatch@10.2.5: dependencies: - brace-expansion: 5.0.8 - - minipass@4.2.8: {} + brace-expansion: 5.0.5 minipass@7.1.3: {} - minizlib@3.1.0: - dependencies: - minipass: 7.1.3 - mlly@1.8.0: dependencies: acorn: 8.15.0 pathe: 2.0.3 pkg-types: 1.3.1 - ufo: 1.6.1 + ufo: 1.6.3 + + mrmime@2.0.1: + optional: true ms@2.1.3: {} - msw@2.15.0(@types/node@24.10.1)(typescript@5.9.3): + msw@2.12.8(@types/node@22.20.0)(typescript@5.9.3): dependencies: - '@inquirer/confirm': 6.1.1(@types/node@24.10.1) - '@mswjs/interceptors': 0.41.9 - '@open-draft/deferred-promise': 3.0.0 + '@inquirer/confirm': 5.1.21(@types/node@22.20.0) + '@mswjs/interceptors': 0.41.0 + '@open-draft/deferred-promise': 2.2.0 '@types/statuses': 2.0.6 cookie: 1.1.1 - graphql: 16.14.2 - headers-polyfill: 5.0.1 + graphql: 16.12.0 + headers-polyfill: 4.0.3 is-node-process: 1.2.0 outvariant: 1.4.3 - path-to-regexp: 8.4.2 + path-to-regexp: 6.3.0 + picocolors: 1.1.1 + rettime: 0.10.1 + statuses: 2.0.2 + strict-event-emitter: 0.5.1 + tough-cookie: 6.0.0 + type-fest: 5.4.3 + until-async: 3.0.2 + yargs: 17.7.2 + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - '@types/node' + optional: true + + msw@2.12.8(@types/node@25.2.0)(typescript@5.9.3): + dependencies: + '@inquirer/confirm': 5.1.21(@types/node@25.2.0) + '@mswjs/interceptors': 0.41.0 + '@open-draft/deferred-promise': 2.2.0 + '@types/statuses': 2.0.6 + cookie: 1.1.1 + graphql: 16.12.0 + headers-polyfill: 4.0.3 + is-node-process: 1.2.0 + outvariant: 1.4.3 + path-to-regexp: 6.3.0 picocolors: 1.1.1 - rettime: 0.11.11 + rettime: 0.10.1 statuses: 2.0.2 strict-event-emitter: 0.5.1 - tough-cookie: 6.0.2 - type-fest: 5.8.0 + tough-cookie: 6.0.0 + type-fest: 5.4.3 until-async: 3.0.2 - yargs: 17.7.3 + yargs: 17.7.2 optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: - '@types/node' - mute-stream@3.0.0: {} + mute-stream@2.0.0: {} mz@2.7.0: dependencies: @@ -4086,11 +5380,14 @@ snapshots: fetch-blob: 3.2.0 formdata-polyfill: 4.0.10 + nwsapi@2.2.23: + optional: true + object-assign@4.1.1: {} object-inspect@1.13.4: {} - obug@2.1.4: {} + obug@2.1.1: {} on-finished@2.4.1: dependencies: @@ -4100,9 +5397,9 @@ snapshots: dependencies: wrappy: 1.0.2 - openai@6.26.0(ws@8.21.1)(zod@4.4.3): + openai@6.26.0(ws@8.21.0)(zod@4.4.3): optionalDependencies: - ws: 8.21.1 + ws: 8.21.0 zod: 4.4.3 outvariant@1.4.3: {} @@ -4112,6 +5409,20 @@ snapshots: '@types/retry': 0.12.0 retry: 0.13.1 + parse-path@7.1.0: + dependencies: + protocols: 2.0.2 + + parse-url@9.2.0: + dependencies: + '@types/parse-path': 7.1.0 + parse-path: 7.1.0 + + parse5@7.3.0: + dependencies: + entities: 6.0.1 + optional: true + parseurl@1.3.3: {} partial-json@0.1.7: {} @@ -4120,9 +5431,11 @@ snapshots: path-scurry@2.0.2: dependencies: - lru-cache: 11.5.2 + lru-cache: 11.2.5 minipass: 7.1.3 + path-to-regexp@6.3.0: {} + path-to-regexp@8.4.2: {} pathe@2.0.3: {} @@ -4143,16 +5456,16 @@ snapshots: mlly: 1.8.0 pathe: 2.0.3 - postcss-load-config@6.0.1(jiti@2.7.0)(postcss@8.5.22)(tsx@4.21.0)(yaml@2.9.0): + postcss-load-config@6.0.1(jiti@2.7.0)(postcss@8.5.23)(tsx@4.22.4)(yaml@2.9.0): dependencies: lilconfig: 3.1.3 optionalDependencies: jiti: 2.7.0 - postcss: 8.5.22 - tsx: 4.21.0 + postcss: 8.5.23 + tsx: 4.22.4 yaml: 2.9.0 - postcss@8.5.22: + postcss@8.5.23: dependencies: nanoid: 3.3.16 picocolors: 1.1.1 @@ -4175,14 +5488,19 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.2 - '@types/node': 24.10.1 + '@types/node': 24.13.3 long: 5.3.2 + protocols@2.0.2: {} + proxy-addr@2.0.7: dependencies: forwarded: 0.2.0 ipaddr.js: 1.9.1 + punycode@2.3.1: + optional: true + qs@6.15.3: dependencies: es-define-property: 1.0.1 @@ -4194,7 +5512,7 @@ snapshots: dependencies: bytes: 3.1.2 http-errors: 2.0.1 - iconv-lite: 0.7.0 + iconv-lite: 0.7.2 unpipe: 1.0.0 readdirp@4.1.2: {} @@ -4205,61 +5523,41 @@ snapshots: resolve-from@5.0.0: {} - resolve-pkg-maps@1.0.0: {} - retry@0.12.0: {} retry@0.13.1: {} - rettime@0.11.11: {} + rettime@0.10.1: {} - rolldown@1.1.5: - dependencies: - '@oxc-project/types': 0.139.0 - '@rolldown/pluginutils': 1.0.1 - optionalDependencies: - '@rolldown/binding-android-arm64': 1.1.5 - '@rolldown/binding-darwin-arm64': 1.1.5 - '@rolldown/binding-darwin-x64': 1.1.5 - '@rolldown/binding-freebsd-x64': 1.1.5 - '@rolldown/binding-linux-arm-gnueabihf': 1.1.5 - '@rolldown/binding-linux-arm64-gnu': 1.1.5 - '@rolldown/binding-linux-arm64-musl': 1.1.5 - '@rolldown/binding-linux-ppc64-gnu': 1.1.5 - '@rolldown/binding-linux-s390x-gnu': 1.1.5 - '@rolldown/binding-linux-x64-gnu': 1.1.5 - '@rolldown/binding-linux-x64-musl': 1.1.5 - '@rolldown/binding-openharmony-arm64': 1.1.5 - '@rolldown/binding-wasm32-wasi': 1.1.5 - '@rolldown/binding-win32-arm64-msvc': 1.1.5 - '@rolldown/binding-win32-x64-msvc': 1.1.5 - - rollup@4.53.3: + rollup@4.59.0: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.53.3 - '@rollup/rollup-android-arm64': 4.53.3 - '@rollup/rollup-darwin-arm64': 4.53.3 - '@rollup/rollup-darwin-x64': 4.53.3 - '@rollup/rollup-freebsd-arm64': 4.53.3 - '@rollup/rollup-freebsd-x64': 4.53.3 - '@rollup/rollup-linux-arm-gnueabihf': 4.53.3 - '@rollup/rollup-linux-arm-musleabihf': 4.53.3 - '@rollup/rollup-linux-arm64-gnu': 4.53.3 - '@rollup/rollup-linux-arm64-musl': 4.53.3 - '@rollup/rollup-linux-loong64-gnu': 4.53.3 - '@rollup/rollup-linux-ppc64-gnu': 4.53.3 - '@rollup/rollup-linux-riscv64-gnu': 4.53.3 - '@rollup/rollup-linux-riscv64-musl': 4.53.3 - '@rollup/rollup-linux-s390x-gnu': 4.53.3 - '@rollup/rollup-linux-x64-gnu': 4.53.3 - '@rollup/rollup-linux-x64-musl': 4.53.3 - '@rollup/rollup-openharmony-arm64': 4.53.3 - '@rollup/rollup-win32-arm64-msvc': 4.53.3 - '@rollup/rollup-win32-ia32-msvc': 4.53.3 - '@rollup/rollup-win32-x64-gnu': 4.53.3 - '@rollup/rollup-win32-x64-msvc': 4.53.3 + '@rollup/rollup-android-arm-eabi': 4.59.0 + '@rollup/rollup-android-arm64': 4.59.0 + '@rollup/rollup-darwin-arm64': 4.59.0 + '@rollup/rollup-darwin-x64': 4.59.0 + '@rollup/rollup-freebsd-arm64': 4.59.0 + '@rollup/rollup-freebsd-x64': 4.59.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.59.0 + '@rollup/rollup-linux-arm-musleabihf': 4.59.0 + '@rollup/rollup-linux-arm64-gnu': 4.59.0 + '@rollup/rollup-linux-arm64-musl': 4.59.0 + '@rollup/rollup-linux-loong64-gnu': 4.59.0 + '@rollup/rollup-linux-loong64-musl': 4.59.0 + '@rollup/rollup-linux-ppc64-gnu': 4.59.0 + '@rollup/rollup-linux-ppc64-musl': 4.59.0 + '@rollup/rollup-linux-riscv64-gnu': 4.59.0 + '@rollup/rollup-linux-riscv64-musl': 4.59.0 + '@rollup/rollup-linux-s390x-gnu': 4.59.0 + '@rollup/rollup-linux-x64-gnu': 4.59.0 + '@rollup/rollup-linux-x64-musl': 4.59.0 + '@rollup/rollup-openbsd-x64': 4.59.0 + '@rollup/rollup-openharmony-arm64': 4.59.0 + '@rollup/rollup-win32-arm64-msvc': 4.59.0 + '@rollup/rollup-win32-ia32-msvc': 4.59.0 + '@rollup/rollup-win32-x64-gnu': 4.59.0 + '@rollup/rollup-win32-x64-msvc': 4.59.0 fsevents: 2.3.3 router@2.2.0: @@ -4272,15 +5570,23 @@ snapshots: transitivePeerDependencies: - supports-color + rrweb-cssom@0.8.0: + optional: true + safe-buffer@5.2.1: {} safer-buffer@2.1.2: {} - semver@7.7.3: {} + saxes@6.0.0: + dependencies: + xmlchars: 2.2.0 + optional: true semver@7.8.0: {} - send@1.2.0: + semver@7.8.4: {} + + send@1.2.1: dependencies: debug: 4.4.3 encodeurl: 2.0.0 @@ -4296,17 +5602,15 @@ snapshots: transitivePeerDependencies: - supports-color - serve-static@2.2.0: + serve-static@2.2.1: dependencies: encodeurl: 2.0.0 escape-html: 1.0.3 parseurl: 1.3.3 - send: 1.2.0 + send: 1.2.1 transitivePeerDependencies: - supports-color - set-cookie-parser@3.1.2: {} - setprototypeof@1.2.0: {} shebang-command@2.0.0: @@ -4349,8 +5653,34 @@ snapshots: signal-exit@4.1.0: {} + simple-git@3.36.0: + dependencies: + '@kwsites/file-exists': 1.1.1 + '@kwsites/promise-deferred': 1.1.1 + '@simple-git/args-pathspec': 1.0.3 + '@simple-git/argv-parser': 1.1.1 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + sirv@3.0.2: + dependencies: + '@polka/url': 1.0.0-next.29 + mrmime: 2.0.1 + totalist: 3.0.1 + optional: true + source-map-js@1.2.1: {} + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + optional: true + + source-map@0.6.1: + optional: true + source-map@0.7.6: {} stackback@0.0.2: {} @@ -4362,7 +5692,7 @@ snapshots: statuses@2.0.2: {} - std-env@4.2.0: {} + std-env@4.1.0: {} strict-event-emitter@0.5.1: {} @@ -4386,15 +5716,18 @@ snapshots: tinyglobby: 0.2.15 ts-interface-checker: 0.1.13 + symbol-tree@3.2.4: + optional: true + tagged-tag@1.0.0: {} - tar@7.5.21: + terser@5.46.0: dependencies: - '@isaacs/fs-minipass': 4.0.1 - chownr: 3.0.0 - minipass: 7.1.3 - minizlib: 3.1.0 - yallist: 5.0.0 + '@jridgewell/source-map': 0.3.11 + acorn: 8.17.0 + commander: 2.20.3 + source-map-support: 0.5.21 + optional: true thenify-all@1.6.0: dependencies: @@ -4408,7 +5741,7 @@ snapshots: tinyexec@0.3.2: {} - tinyexec@1.2.4: {} + tinyexec@1.0.2: {} tinyglobby@0.2.15: dependencies: @@ -4422,47 +5755,71 @@ snapshots: tinyrainbow@3.1.0: {} - tldts-core@7.4.9: {} + tldts-core@6.1.86: + optional: true + + tldts-core@7.0.22: {} + + tldts@6.1.86: + dependencies: + tldts-core: 6.1.86 + optional: true - tldts@7.4.9: + tldts@7.0.22: dependencies: - tldts-core: 7.4.9 + tldts-core: 7.0.22 toidentifier@1.0.1: {} - tough-cookie@6.0.2: + totalist@3.0.1: + optional: true + + tough-cookie@5.1.2: + dependencies: + tldts: 6.1.86 + optional: true + + tough-cookie@6.0.0: + dependencies: + tldts: 7.0.22 + + tr46@5.1.1: dependencies: - tldts: 7.4.9 + punycode: 2.3.1 + optional: true tree-kill@1.2.2: {} + tree-sitter-cli@0.26.8: {} + ts-algebra@2.0.0: {} ts-interface-checker@0.1.13: {} tslib@2.8.1: {} - tsup@8.5.1(jiti@2.7.0)(postcss@8.5.22)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.9.0): + tsup@8.5.1(@swc/core@1.15.43)(jiti@2.7.0)(postcss@8.5.23)(tsx@4.22.4)(typescript@5.9.3)(yaml@2.9.0): dependencies: - bundle-require: 5.1.0(esbuild@0.27.1) + bundle-require: 5.1.0(esbuild@0.27.2) cac: 6.7.14 chokidar: 4.0.3 consola: 3.4.2 debug: 4.4.3 - esbuild: 0.27.1 + esbuild: 0.27.2 fix-dts-default-cjs-exports: 1.0.1 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1(jiti@2.7.0)(postcss@8.5.22)(tsx@4.21.0)(yaml@2.9.0) + postcss-load-config: 6.0.1(jiti@2.7.0)(postcss@8.5.23)(tsx@4.22.4)(yaml@2.9.0) resolve-from: 5.0.0 - rollup: 4.53.3 + rollup: 4.59.0 source-map: 0.7.6 sucrase: 3.35.1 tinyexec: 0.3.2 tinyglobby: 0.2.15 tree-kill: 1.2.2 optionalDependencies: - postcss: 8.5.22 + '@swc/core': 1.15.43 + postcss: 8.5.23 typescript: 5.9.3 transitivePeerDependencies: - jiti @@ -4470,14 +5827,27 @@ snapshots: - tsx - yaml - tsx@4.21.0: + tsx@4.22.4: dependencies: - esbuild: 0.27.1 - get-tsconfig: 4.13.0 + esbuild: 0.28.1 optionalDependencies: fsevents: 2.3.3 + optional: true + + turbo@2.9.18: + optionalDependencies: + '@turbo/darwin-64': 2.9.18 + '@turbo/darwin-arm64': 2.9.18 + '@turbo/linux-64': 2.9.18 + '@turbo/linux-arm64': 2.9.18 + '@turbo/windows-64': 2.9.18 + '@turbo/windows-arm64': 2.9.18 - type-fest@5.8.0: + turndown@7.2.4: + dependencies: + '@mixmark-io/domino': 2.2.0 + + type-fest@5.4.3: dependencies: tagged-tag: 1.0.0 @@ -4491,10 +5861,14 @@ snapshots: typescript@5.9.3: {} - ufo@1.6.1: {} + ufo@1.6.3: {} + + undici-types@6.21.0: {} undici-types@7.16.0: {} + undici-types@7.18.2: {} + undici@8.9.0: {} unpipe@1.0.0: {} @@ -4505,51 +5879,126 @@ snapshots: vary@1.1.2: {} - vite@8.1.5(@types/node@24.10.1)(esbuild@0.27.1)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0): + vite@7.3.5(@types/node@22.20.0)(jiti@2.7.0)(lightningcss@1.33.0)(terser@5.46.0)(tsx@4.22.4)(yaml@2.9.0): dependencies: + esbuild: 0.27.7 + fdir: 6.5.0(picomatch@4.0.5) + picomatch: 4.0.5 + postcss: 8.5.23 + rollup: 4.59.0 + tinyglobby: 0.2.17 + optionalDependencies: + '@types/node': 22.20.0 + fsevents: 2.3.3 + jiti: 2.7.0 lightningcss: 1.33.0 + terser: 5.46.0 + tsx: 4.22.4 + yaml: 2.9.0 + + vite@7.3.5(@types/node@25.2.0)(jiti@2.7.0)(lightningcss@1.33.0)(terser@5.46.0)(tsx@4.22.4)(yaml@2.9.0): + dependencies: + esbuild: 0.27.7 + fdir: 6.5.0(picomatch@4.0.5) picomatch: 4.0.5 - postcss: 8.5.22 - rolldown: 1.1.5 + postcss: 8.5.23 + rollup: 4.59.0 tinyglobby: 0.2.17 optionalDependencies: - '@types/node': 24.10.1 - esbuild: 0.27.1 + '@types/node': 25.2.0 fsevents: 2.3.3 jiti: 2.7.0 - tsx: 4.21.0 + lightningcss: 1.33.0 + terser: 5.46.0 + tsx: 4.22.4 yaml: 2.9.0 - vitest@4.1.10(@opentelemetry/api@1.9.1)(@types/node@24.10.1)(msw@2.15.0(@types/node@24.10.1)(typescript@5.9.3))(vite@8.1.5(@types/node@24.10.1)(esbuild@0.27.1)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)): - dependencies: - '@vitest/expect': 4.1.10 - '@vitest/mocker': 4.1.10(msw@2.15.0(@types/node@24.10.1)(typescript@5.9.3))(vite@8.1.5(@types/node@24.10.1)(esbuild@0.27.1)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)) - '@vitest/pretty-format': 4.1.10 - '@vitest/runner': 4.1.10 - '@vitest/snapshot': 4.1.10 - '@vitest/spy': 4.1.10 - '@vitest/utils': 4.1.10 - es-module-lexer: 2.3.1 - expect-type: 1.4.0 + vitest@4.1.8(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(@vitest/ui@4.1.8)(jsdom@26.1.0)(msw@2.12.8(@types/node@22.20.0)(typescript@5.9.3))(vite@7.3.5(@types/node@22.20.0)(jiti@2.7.0)(lightningcss@1.33.0)(terser@5.46.0)(tsx@4.22.4)(yaml@2.9.0)): + dependencies: + '@vitest/expect': 4.1.8 + '@vitest/mocker': 4.1.8(msw@2.12.8(@types/node@22.20.0)(typescript@5.9.3))(vite@7.3.5(@types/node@22.20.0)(jiti@2.7.0)(lightningcss@1.33.0)(terser@5.46.0)(tsx@4.22.4)(yaml@2.9.0)) + '@vitest/pretty-format': 4.1.8 + '@vitest/runner': 4.1.8 + '@vitest/snapshot': 4.1.8 + '@vitest/spy': 4.1.8 + '@vitest/utils': 4.1.8 + es-module-lexer: 2.0.0 + expect-type: 1.3.0 + magic-string: 0.30.21 + obug: 2.1.1 + pathe: 2.0.3 + picomatch: 4.0.3 + std-env: 4.1.0 + tinybench: 2.9.0 + tinyexec: 1.0.2 + tinyglobby: 0.2.15 + tinyrainbow: 3.1.0 + vite: 7.3.5(@types/node@22.20.0)(jiti@2.7.0)(lightningcss@1.33.0)(terser@5.46.0)(tsx@4.22.4)(yaml@2.9.0) + why-is-node-running: 2.3.0 + optionalDependencies: + '@opentelemetry/api': 1.9.1 + '@types/node': 22.20.0 + '@vitest/ui': 4.1.8(vitest@4.1.8) + jsdom: 26.1.0 + transitivePeerDependencies: + - msw + + vitest@4.1.8(@opentelemetry/api@1.9.1)(@types/node@25.2.0)(@vitest/ui@4.1.8)(jsdom@26.1.0)(msw@2.12.8(@types/node@25.2.0)(typescript@5.9.3))(vite@7.3.5(@types/node@25.2.0)(jiti@2.7.0)(lightningcss@1.33.0)(terser@5.46.0)(tsx@4.22.4)(yaml@2.9.0)): + dependencies: + '@vitest/expect': 4.1.8 + '@vitest/mocker': 4.1.8(msw@2.12.8(@types/node@25.2.0)(typescript@5.9.3))(vite@7.3.5(@types/node@25.2.0)(jiti@2.7.0)(lightningcss@1.33.0)(terser@5.46.0)(tsx@4.22.4)(yaml@2.9.0)) + '@vitest/pretty-format': 4.1.8 + '@vitest/runner': 4.1.8 + '@vitest/snapshot': 4.1.8 + '@vitest/spy': 4.1.8 + '@vitest/utils': 4.1.8 + es-module-lexer: 2.0.0 + expect-type: 1.3.0 magic-string: 0.30.21 - obug: 2.1.4 + obug: 2.1.1 pathe: 2.0.3 picomatch: 4.0.3 - std-env: 4.2.0 + std-env: 4.1.0 tinybench: 2.9.0 - tinyexec: 1.2.4 + tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.1.0 - vite: 8.1.5(@types/node@24.10.1)(esbuild@0.27.1)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0) + vite: 7.3.5(@types/node@25.2.0)(jiti@2.7.0)(lightningcss@1.33.0)(terser@5.46.0)(tsx@4.22.4)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.1 - '@types/node': 24.10.1 + '@types/node': 25.2.0 + '@vitest/ui': 4.1.8(vitest@4.1.8) + jsdom: 26.1.0 transitivePeerDependencies: - msw + w3c-xmlserializer@5.0.0: + dependencies: + xml-name-validator: 5.0.0 + optional: true + web-streams-polyfill@3.3.3: {} + web-tree-sitter@0.24.7: {} + + webidl-conversions@7.0.0: + optional: true + + whatwg-encoding@3.1.1: + dependencies: + iconv-lite: 0.6.3 + optional: true + + whatwg-mimetype@4.0.0: + optional: true + + whatwg-url@14.2.0: + dependencies: + tr46: 5.1.1 + webidl-conversions: 7.0.0 + optional: true + which@2.0.2: dependencies: isexe: 2.0.0 @@ -4559,6 +6008,12 @@ snapshots: siginfo: 2.0.0 stackback: 0.0.2 + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 @@ -4567,17 +6022,21 @@ snapshots: wrappy@1.0.2: {} - ws@8.21.1: {} + ws@8.21.0: {} - y18n@5.0.8: {} + xml-name-validator@5.0.0: + optional: true - yallist@5.0.0: {} + xmlchars@2.2.0: + optional: true + + y18n@5.0.8: {} yaml@2.9.0: {} yargs-parser@21.1.1: {} - yargs@17.7.3: + yargs@17.7.2: dependencies: cliui: 8.0.1 escalade: 3.2.0 @@ -4587,9 +6046,11 @@ snapshots: y18n: 5.0.8 yargs-parser: 21.1.1 + yoctocolors-cjs@2.1.3: {} + yoga-wasm-web@0.3.3: {} - zod-to-json-schema@3.25.2(zod@4.4.3): + zod-to-json-schema@3.25.1(zod@4.4.3): dependencies: zod: 4.4.3 diff --git a/packages/agent/pnpm-workspace.yaml b/packages/agent/pnpm-workspace.yaml new file mode 100644 index 000000000000..7acfec9aab59 --- /dev/null +++ b/packages/agent/pnpm-workspace.yaml @@ -0,0 +1,147 @@ +# The catalog and overrides mirror products/desktop/pnpm-workspace.yaml: the desktop app +# bundles these packages, so both workspaces must resolve the same versions. +packages: + - packages/* + +blockExoticSubdeps: true +trustPolicy: no-downgrade + +catalog: + '@hono/node-server': ^1.13.7 + '@hono/trpc-server': ^0.3.4 + '@earendil-works/pi-agent-core': 0.84.1 + '@earendil-works/pi-ai': 0.84.1 + '@earendil-works/pi-coding-agent': 0.84.1 + '@earendil-works/pi-tui': 0.84.1 + '@parcel/watcher': ^2.5.6 + '@phosphor-icons/react': ^2.1.10 + '@posthog/brand': 0.11.0 + '@posthog/quill': 0.3.0-beta.29 + '@radix-ui/themes': ^3.2.1 + '@tanstack/react-query': ^5.100.14 + '@tanstack/react-router': ^1.170.10 + '@tanstack/react-router-devtools': ^1.167.0 + '@tanstack/router-generator': ^1.167.17 + '@tanstack/router-plugin': ^1.168.13 + '@trpc/client': ^11.17.0 + '@trpc/server': ^11.17.0 + '@trpc/tanstack-react-query': ^11.17.0 + '@types/node': ^20.0.0 + '@types/react': ^19.2.15 + '@types/react-dom': ^19.2.3 + hono: ^4.6.14 + inversify: ^7.10.6 + react: 19.2.6 + react-dom: 19.2.6 + reflect-metadata: ^0.2.2 + superjson: ^2.2.2 + tsup: ^8.5.1 + typescript: ^5.5.0 + +ignoredBuiltDependencies: + # koffi's loader uses the prebuilt @koromix/koffi-- package, never the install-script build + - koffi + - msw + - protobufjs + +minimumReleaseAge: 10080 + +minimumReleaseAgeExclude: + - '@agentclientprotocol/sdk' + - '@anthropic-ai/claude-agent-sdk' + - '@anthropic-ai/claude-agent-sdk-darwin-arm64' + - '@anthropic-ai/claude-agent-sdk-darwin-x64' + - '@anthropic-ai/claude-agent-sdk-linux-arm64' + - '@anthropic-ai/claude-agent-sdk-linux-arm64-musl' + - '@anthropic-ai/claude-agent-sdk-linux-x64' + - '@anthropic-ai/claude-agent-sdk-linux-x64-musl' + - '@anthropic-ai/claude-agent-sdk-win32-arm64' + - '@anthropic-ai/claude-agent-sdk-win32-x64' + - '@anthropic-ai/sdk' + - '@earendil-works/pi-agent-core' + - '@earendil-works/pi-ai' + - '@earendil-works/pi-coding-agent' + - '@earendil-works/pi-tui' + - '@pierre/diffs' + - '@pierre/theming' + - '@posthog/quill' + - '@posthog/quill-charts' + - '@posthog/quill-tokens' + - '@tanstack/devtools-core' + - '@tanstack/history' + - '@tanstack/react-router' + - '@tanstack/react-router-devtools' + - '@tanstack/react-store' + - '@tanstack/react-virtual' + - '@tanstack/router-core' + - '@tanstack/router-devtools-core' + - '@tanstack/router-generator' + - '@tanstack/router-plugin' + - '@tanstack/router-utils' + - '@tanstack/store' + - '@tanstack/virtual-core' + - '@tanstack/virtual-file-routes' + +overrides: + # node-abi predates Electron 42; ^3.92.0 is the first release that knows its ABI + # (146), needed when rebuilding native modules against Electron 42. + node-abi: ^3.92.0 + # Dedupe the zod 4.x line to one version so cross-package schema types stay + # nameable (TS2742). Scoped to 4.x; 3.x consumers are untouched. + 'zod@^4.0.0': 4.4.3 + # Keep one React across the monorepo so shared packages resolve one runtime. + react: 19.2.6 + react-dom: 19.2.6 + react-test-renderer: 19.2.6 + # Dedupe @types/react so shared UI Ref types unify across apps (a second copy + # makes nominally-distinct Ref types and breaks ref props in packages/ui). + '@types/react': ^19.2.15 + '@types/react-dom': ^19.2.3 + # quill 0.3.0-beta.14 ships a broken `@base-ui/react: catalog:` dependency (the + # catalog protocol leaked into the published package and can't resolve for an + # external dep); pin it to a real version so installs of quill succeed. + '@posthog/quill>@base-ui/react': ^1.3.0 + # node-gyp 12 downloads Node headers via undici (^6.25.0). undici through 7.27.2 + # crashes intermittently with `assert(!this.paused)` in the H1 parser's finish() + # when the socket ends while the body stream is paused, which happens when a + # native module compiles from source under backpressure (e.g. node-pty in CI). + # undici 8.4.1 dropped that assertion and handles the paused case gracefully; + # node-gyp only uses stable public exports (fetch/Agent), so 8.x is safe. + 'node-gyp>undici': 8.5.0 + # Swap vite for the rolldown-based fork for faster dev boot times (#3027). + vite: npm:rolldown-vite@7.3.1 + # Security: force patched versions for advisory-flagged packages (each pin is over the + # 7-day minimumReleaseAge and clears the package's advisories). Drop a pin once the + # dependents require a patched version on their own. + protobufjs: 7.6.5 + axios: 1.18.1 + hono: 4.12.28 + '@xmldom/xmldom': 0.8.13 + node-forge: 1.4.0 + simple-git: 3.36.0 + # Additional HIGH transitive fixes (low-risk patch/minor bumps within range). + drizzle-orm: 0.45.2 + fast-uri: 3.1.4 + '@hono/node-server': 1.19.13 + lodash: 4.18.0 + serialize-javascript: 7.0.5 + '@electron/get>undici': 7.28.0 + rollup: 4.59.0 + 'brace-expansion@1': 1.1.16 + 'brace-expansion@2': 2.1.2 + 'ws@7': 7.5.11 + 'ws@8': 8.21.0 + 'path-to-regexp@8': 8.4.2 + qs: 6.15.3 + smol-toml: 1.6.1 + +onlyBuiltDependencies: + - '@parcel/watcher' + - '@posthog/cli' + - better-sqlite3 + - core-js + - electron + - electron-winstaller + - esbuild + - node-pty + - tree-sitter-cli diff --git a/packages/agent/scripts/rimraf.mjs b/packages/agent/scripts/rimraf.mjs new file mode 100644 index 000000000000..82e83f931175 --- /dev/null +++ b/packages/agent/scripts/rimraf.mjs @@ -0,0 +1,5 @@ +import { rmSync } from "node:fs"; + +for (const dir of process.argv.slice(2)) { + rmSync(dir, { recursive: true, force: true }); +} diff --git a/products/desktop/scripts/sync-benjamin.mts b/packages/agent/scripts/sync-benjamin.mts similarity index 100% rename from products/desktop/scripts/sync-benjamin.mts rename to packages/agent/scripts/sync-benjamin.mts diff --git a/packages/agent/turbo.json b/packages/agent/turbo.json new file mode 100644 index 000000000000..3a9e48325221 --- /dev/null +++ b/packages/agent/turbo.json @@ -0,0 +1,26 @@ +{ + "$schema": "https://turbo.build/schema.json", + "tasks": { + "build": { + "dependsOn": ["^build"], + "env": ["SKIP_PRODUCT_ENGINEER_SKILLS_DOWNLOAD"], + "outputs": ["dist/**"] + }, + "typecheck": { + "dependsOn": ["^build"] + }, + "lint": {}, + "test": { + "dependsOn": ["^build"] + }, + "test:e2e": { + "dependsOn": ["^build"], + "cache": false + }, + "dev": { + "dependsOn": ["^build"], + "cache": false, + "persistent": true + } + } +} diff --git a/packages/agent/vitest.config.base.ts b/packages/agent/vitest.config.base.ts new file mode 100644 index 000000000000..de8684a38a7b --- /dev/null +++ b/packages/agent/vitest.config.base.ts @@ -0,0 +1,19 @@ +// Shared Vitest test options for Trunk Flaky Tests uploads. Imported and spread +// into each package's `test` block so the junit reporter and retry policy stay +// defined in one place. See the upload steps in the monorepo root's +// .github/workflows/desktop-test.yml. +// +// `outputFile` is relative, so each config writes ./junit.xml next to itself; +// CI globs apps/*/junit.xml and packages/*/junit.xml. The explicit type keeps +// the reporter tuple assignable across the Vitest 2.x and 4.x versions in use. +export const trunkTestOptions: { + retry: number; + reporters: (string | [string, Record])[]; +} = { + // Disable retries so flaky-test detection sees raw pass/fail results. + retry: 0, + reporters: [ + "default", + ["junit", { outputFile: "./junit.xml", addFileAttribute: true }], + ], +}; diff --git a/posthog/object_tags/kinds.py b/posthog/object_tags/kinds.py index d2de02d5f0ab..7f98b300e24b 100644 --- a/posthog/object_tags/kinds.py +++ b/posthog/object_tags/kinds.py @@ -12,7 +12,7 @@ the regenerated files: - ``products/desktop/packages/core/src/inbox/objectKinds.generated.ts`` -- ``products/desktop/packages/shared/src/objectTagKinds.generated.ts`` +- ``packages/agent/packages/agent-contracts/src/objectTagKinds.generated.ts`` - ``frontend/src/lib/components/AgentObjectTags/objectKinds.generated.ts`` Python consumers import this module directly. diff --git a/posthog/object_tags/projection.py b/posthog/object_tags/projection.py index 8f21ef7d95d7..9c752812b0b5 100755 --- a/posthog/object_tags/projection.py +++ b/posthog/object_tags/projection.py @@ -98,6 +98,6 @@ def render() -> dict[str, str]: registry = render_registry_ts() return { "products/desktop/packages/core/src/inbox/objectKinds.generated.ts": registry, - "products/desktop/packages/shared/src/objectTagKinds.generated.ts": render_prompt_kinds_ts(), + "packages/agent/packages/agent-contracts/src/objectTagKinds.generated.ts": render_prompt_kinds_ts(), "frontend/src/lib/components/AgentObjectTags/objectKinds.generated.ts": registry, } diff --git a/products/desktop/.gitignore b/products/desktop/.gitignore index e111d90241c3..e36fac71d813 100644 --- a/products/desktop/.gitignore +++ b/products/desktop/.gitignore @@ -3,6 +3,7 @@ node_modules/ .pnpm-store/ # Build outputs +.agent-workspace-stamp dist/ release/ out/ diff --git a/products/desktop/.vscode/tasks.json b/products/desktop/.vscode/tasks.json index 92e359ce4dea..a7217715793b 100644 --- a/products/desktop/.vscode/tasks.json +++ b/products/desktop/.vscode/tasks.json @@ -14,7 +14,7 @@ { "label": "start-agent-watch", "type": "shell", - "command": "pnpm --filter agent dev", + "command": "pnpm --dir ../../packages/agent --filter agent dev", "isBackground": true, "problemMatcher": { "pattern": { diff --git a/products/desktop/AGENTS.md b/products/desktop/AGENTS.md index 80912c5d00bd..028866779f8d 100644 --- a/products/desktop/AGENTS.md +++ b/products/desktop/AGENTS.md @@ -22,7 +22,8 @@ Principle: logic is portable; hosts are thin. | Package | Owns | Must not contain | | --- | --- | --- | | `@posthog/platform` | Host-capability interfaces and DI tokens. Host-neutral, zero runtime dependencies. | Implementations, Node, DOM, tRPC, Electron | -| `@posthog/shared` | Host-neutral primitives, types, Saga pattern, cloud-prompt encoding. Depends on published packages only. | Internal package imports, I/O | +| `@posthog/agent-contracts` | Types, schemas and helpers the agent runtime shares with its hosts: task and run domain types, model catalog, Saga pattern, cloud-prompt encoding. Depends on published packages only. | Internal package imports, I/O, desktop-only code | +| `@posthog/shared` | Host-neutral desktop primitives and types. Re-exports `@posthog/agent-contracts`, so desktop code imports both through `@posthog/shared`. | Internal package imports other than `agent-contracts`, I/O | | `@posthog/api-client` | PostHog/Django HTTPS client. Constructed by factory, not DI. | UI, Node-only host syscalls | | `@posthog/workspace-client` | Thin tRPC client for local or sandbox workspace-server. Runs in any JS environment. | Business logic, UI | | `@posthog/workspace-server` | Node backend services and colocated tRPC routers for git, fs, watchers, processes. | UI, core, Electron | @@ -34,6 +35,10 @@ Principle: logic is portable; hosts are thin. | `@posthog/electron-trpc` | tRPC-over-Electron-IPC transport. | Feature code | | `@posthog/git`, `@posthog/enricher`, `@posthog/agent` | Reusable domain implementation packages. | Host-specific code | +`@posthog/agent`, `@posthog/agent-contracts`, `@posthog/enricher`, `@posthog/git` and `@posthog/harness` live in their own workspace at `packages/agent` in the repo root, because cloud sandboxes boot the agent without the desktop app. +This workspace links them by path, so turbo cannot see their files: `pnpm build`, `pnpm typecheck` and `pnpm test` build that workspace first and write `.agent-workspace-stamp`, which turbo hashes. +After changing that workspace, run `pnpm build:agent` before calling `turbo` directly, or turbo serves stale cached results. + Hosts: - `apps/code`: Electron desktop host. @@ -64,7 +69,8 @@ Hard boundary: no new `@radix-ui/*` imports anywhere in the repo. Enforced by Biome `noRestrictedImports`. -- `platform` and `shared` import no internal packages. +- `platform` and `agent-contracts` import no internal packages. `shared` imports `agent-contracts` only. +- `agent`, `harness`, `git`, and `enricher` import `agent-contracts`, never `shared`, so the agent runtime does not depend on desktop code. - `api-client` and `workspace-client` may import `shared` and relevant `platform` contracts. No UI or Node host syscalls. - `workspace-server` may import `shared`, `platform` contracts, Node modules, and workspace-server code. Never `core` or `ui`. - `core` may import `shared`, `platform`, `workspace-client`, `api-client`, and other core code. Never `ui`, `workspace-server`, `electron`, `node:*`, `trpcClient`, or host-router runtime. @@ -210,8 +216,9 @@ await boot(container); - `pnpm bootstrap:cloud-task`: link dependencies from the prebaked pnpm store without running unrelated app install hooks, then build the packages required before scoped typechecks in cloud tasks. - `pnpm bootstrap:cloud-task:wait`: in a cloud task, the backend already started `bootstrap:cloud-task` in the background. Run this before any other `pnpm` command here, so a second install does not race it. Exit code 2 means nothing was started, so run `pnpm bootstrap:cloud-task` yourself. - `pnpm dev`: run agent watch and desktop app. +- `pnpm build:agent`: install if needed and build the agent workspace at `packages/agent`, then refresh the turbo stamp. - `pnpm build`: build all packages. -- `pnpm typecheck`: typecheck all packages. +- `pnpm typecheck`: typecheck all packages, including the agent workspace. - `pnpm lint`: run Biome lint and autofix. - `pnpm format`: run Biome format. - `pnpm test`: run unit tests. diff --git a/products/desktop/apps/code/.storybook/main.ts b/products/desktop/apps/code/.storybook/main.ts index ce9cc4764b41..a7d76ff2d977 100644 --- a/products/desktop/apps/code/.storybook/main.ts +++ b/products/desktop/apps/code/.storybook/main.ts @@ -83,35 +83,35 @@ const config: StorybookConfig = { find: "@posthog/agent/adapters/claude/permissions/permission-options", replacement: path.resolve( __dirname, - "../../../packages/agent/dist/adapters/claude/permissions/permission-options.js", + "../../../../../packages/agent/packages/agent/dist/adapters/claude/permissions/permission-options.js", ), }, { find: "@posthog/agent/adapters/claude/conversion/tool-use-to-acp", replacement: path.resolve( __dirname, - "../../../packages/agent/dist/adapters/claude/conversion/tool-use-to-acp.js", + "../../../../../packages/agent/packages/agent/dist/adapters/claude/conversion/tool-use-to-acp.js", ), }, { find: "@posthog/agent/adapters/claude/questions/utils", replacement: path.resolve( __dirname, - "../../../packages/agent/dist/adapters/claude/questions/utils.js", + "../../../../../packages/agent/packages/agent/dist/adapters/claude/questions/utils.js", ), }, { find: "@posthog/agent/adapters/reasoning-effort", replacement: path.resolve( __dirname, - "../../../packages/agent/dist/adapters/reasoning-effort.js", + "../../../../../packages/agent/packages/agent/dist/adapters/reasoning-effort.js", ), }, { find: "@posthog/agent/gateway-models", replacement: path.resolve( __dirname, - "../../../packages/agent/dist/gateway-models.js", + "../../../../../packages/agent/packages/agent/dist/gateway-models.js", ), }, { diff --git a/products/desktop/apps/code/package.json b/products/desktop/apps/code/package.json index a0e0df2a81c6..aa881161e7be 100644 --- a/products/desktop/apps/code/package.json +++ b/products/desktop/apps/code/package.json @@ -89,13 +89,13 @@ "@parcel/watcher": "^2.5.6", "@phosphor-icons/react": "^2.1.10", "@pierre/diffs": "^1.2.10", - "@posthog/agent": "workspace:*", + "@posthog/agent": "link:../../../../packages/agent/packages/agent", "@posthog/api-client": "workspace:*", "@posthog/core": "workspace:*", "@posthog/di": "workspace:*", "@posthog/electron-trpc": "workspace:*", - "@posthog/enricher": "workspace:*", - "@posthog/git": "workspace:*", + "@posthog/enricher": "link:../../../../packages/agent/packages/enricher", + "@posthog/git": "link:../../../../packages/agent/packages/git", "@posthog/hedgehog-mode": "^0.0.53", "@posthog/host-router": "workspace:*", "@posthog/host-trpc": "workspace:*", diff --git a/products/desktop/apps/code/scripts/build-linux-docker.sh b/products/desktop/apps/code/scripts/build-linux-docker.sh index 2f5e7d29714d..56c2f949eb7b 100755 --- a/products/desktop/apps/code/scripts/build-linux-docker.sh +++ b/products/desktop/apps/code/scripts/build-linux-docker.sh @@ -50,11 +50,10 @@ HOST_COMMIT="$(git -C "$REPO_ROOT" rev-parse --short HEAD 2>/dev/null || echo un # Stream the repo source (no node_modules / build artifacts) into the container # so node_modules lives on the container's overlayfs, not a slow FUSE bind mount. # Only the output dir is bind-mounted so artifacts come back to the host. -cd "$REPO_ROOT" +cd "$REPO_ROOT/../.." # COPYFILE_DISABLE stops bsdtar from embedding macOS extended attrs as ._ files. COPYFILE_DISABLE=1 tar -cf - \ - --exclude='./.git' \ - --exclude='./.pnpm-store' \ + --exclude='.pnpm-store' \ --exclude='node_modules' \ --exclude='.turbo' \ --exclude='.vite' \ @@ -63,7 +62,7 @@ COPYFILE_DISABLE=1 tar -cf - \ --exclude='playwright-results' \ --exclude='._*' \ --exclude='.DS_Store' \ - . | exec docker run --rm -i \ + products/desktop packages/agent | exec docker run --rm -i \ --platform "$DOCKER_PLATFORM" \ --name build-linux \ -e CI=true \ @@ -85,13 +84,12 @@ COPYFILE_DISABLE=1 tar -cf - \ git config --global --add safe.directory /work # Postinstall scripts call `git rev-parse` — give them a repo to find. git init -q && git add -A && git -c user.email=x@x -c user.name=x commit -q -m init + cd /work/products/desktop pnpm install --frozen-lockfile + node scripts/build-agent-workspace.mjs pnpm --filter @posthog/electron-trpc build pnpm --filter @posthog/platform build pnpm --filter @posthog/shared build - pnpm --filter @posthog/git build - pnpm --filter @posthog/enricher build - pnpm --filter @posthog/agent build cd apps/code pnpm exec electron-vite build if [ -n "${MAKE_TARGETS:-}" ]; then diff --git a/products/desktop/apps/code/vite-main-plugins.mts b/products/desktop/apps/code/vite-main-plugins.mts index 9023ba54c110..53dd6694f9c7 100644 --- a/products/desktop/apps/code/vite-main-plugins.mts +++ b/products/desktop/apps/code/vite-main-plugins.mts @@ -26,7 +26,7 @@ import { claudeExecutableCandidates as sdkClaudeExecutableCandidates, targetArch, targetPlatform, -} from "../../packages/agent/build/native-binary.mjs"; +} from "../../../../packages/agent/packages/agent/build/native-binary.mjs"; export function getGitCommit(): string { if (process.env.BUILD_COMMIT) return process.env.BUILD_COMMIT; @@ -173,7 +173,10 @@ export function copyPiRpcHost(): Plugin { __dirname, "../../node_modules/@posthog/agent/dist/pi/rpc-host.js", ), - join(__dirname, "../../packages/agent/dist/pi/rpc-host.js"), + join( + __dirname, + "../../../../packages/agent/packages/agent/dist/pi/rpc-host.js", + ), ]; const source = candidates.find((candidate) => existsSync(candidate)); if (!source) { @@ -262,7 +265,11 @@ export function copyClaudeExecutable(): Plugin { "../../node_modules/@posthog/agent/dist/claude-cli", binName, ), - join(__dirname, "../../packages/agent/dist/claude-cli", binName), + join( + __dirname, + "../../../../packages/agent/packages/agent/dist/claude-cli", + binName, + ), ...sdkClaudeExecutableCandidates(join(__dirname, "node_modules")), ...sdkClaudeExecutableCandidates(join(__dirname, "../../node_modules")), ]; @@ -630,7 +637,10 @@ export function copyEnricherGrammars(): Plugin { const candidates = [ join(__dirname, "node_modules/@posthog/enricher/grammars"), join(__dirname, "../../node_modules/@posthog/enricher/grammars"), - join(__dirname, "../../packages/enricher/grammars"), + join( + __dirname, + "../../../../packages/agent/packages/enricher/grammars", + ), ]; const sourceDir = candidates.find((p) => existsSync(p)); diff --git a/products/desktop/apps/code/vite.main.config.mts b/products/desktop/apps/code/vite.main.config.mts index 6d52ac569b6e..dbd50c7c7bfa 100644 --- a/products/desktop/apps/code/vite.main.config.mts +++ b/products/desktop/apps/code/vite.main.config.mts @@ -27,7 +27,7 @@ import { claudeExecutableCandidates as sdkClaudeExecutableCandidates, targetArch, targetPlatform, -} from "../../packages/agent/build/native-binary.mjs"; +} from "../../../../packages/agent/packages/agent/build/native-binary.mjs"; import { createForceDevModeDefine, createPosthogPlugin, @@ -189,7 +189,11 @@ function copyClaudeExecutable(): Plugin { "../../node_modules/@posthog/agent/dist/claude-cli", binName, ), - join(__dirname, "../../packages/agent/dist/claude-cli", binName), + join( + __dirname, + "../../../../packages/agent/packages/agent/dist/claude-cli", + binName, + ), ...sdkClaudeExecutableCandidates(join(__dirname, "node_modules")), ...sdkClaudeExecutableCandidates(join(__dirname, "../../node_modules")), ]; @@ -552,7 +556,10 @@ function copyEnricherGrammars(): Plugin { const candidates = [ join(__dirname, "node_modules/@posthog/enricher/grammars"), join(__dirname, "../../node_modules/@posthog/enricher/grammars"), - join(__dirname, "../../packages/enricher/grammars"), + join( + __dirname, + "../../../../packages/agent/packages/enricher/grammars", + ), ]; const sourceDir = candidates.find((p) => existsSync(p)); diff --git a/products/desktop/apps/code/vite.shared.mts b/products/desktop/apps/code/vite.shared.mts index 3e47350c99df..560012bf4b9d 100644 --- a/products/desktop/apps/code/vite.shared.mts +++ b/products/desktop/apps/code/vite.shared.mts @@ -56,13 +56,33 @@ const baseAliases: Alias[] = [ ]; export const workspaceAliases: Alias[] = [ + { + find: /^@posthog\/agent-contracts\/(.+)$/, + replacement: path.resolve( + __dirname, + "../../../../packages/agent/packages/agent-contracts/src/$1", + ), + }, + { + find: /^@posthog\/agent-contracts$/, + replacement: path.resolve( + __dirname, + "../../../../packages/agent/packages/agent-contracts/src/index.ts", + ), + }, { find: /^@posthog\/agent\/(.+)$/, - replacement: path.resolve(__dirname, "../../packages/agent/src/$1.ts"), + replacement: path.resolve( + __dirname, + "../../../../packages/agent/packages/agent/src/$1.ts", + ), }, { find: "@posthog/agent", - replacement: path.resolve(__dirname, "../../packages/agent/src/index.ts"), + replacement: path.resolve( + __dirname, + "../../../../packages/agent/packages/agent/src/index.ts", + ), }, { find: /^@posthog\/shared\/(.+)$/, @@ -76,7 +96,7 @@ export const workspaceAliases: Alias[] = [ find: "@posthog/enricher", replacement: path.resolve( __dirname, - "../../packages/enricher/src/index.ts", + "../../../../packages/agent/packages/enricher/src/index.ts", ), }, { @@ -134,7 +154,10 @@ export const mainAliases: Alias[] = [ }, { find: /^@posthog\/git\/(.+)$/, - replacement: path.resolve(__dirname, "../../packages/git/src/$1"), + replacement: path.resolve( + __dirname, + "../../../../packages/agent/packages/git/src/$1", + ), }, ...workspaceAliases, ]; diff --git a/products/desktop/apps/mobile/README.md b/products/desktop/apps/mobile/README.md index 3d9eb1e12a0c..56fde82a45f8 100644 --- a/products/desktop/apps/mobile/README.md +++ b/products/desktop/apps/mobile/README.md @@ -61,7 +61,7 @@ src/features/ Mobile and desktop use the same cloud-task architecture. New work must preserve these ownership rules: -- `@posthog/shared` owns runtime contracts and Zod schemas. +- `@posthog/agent-contracts` owns runtime contracts and Zod schemas; `@posthog/shared` re-exports them for desktop code. - `@posthog/api-client` owns authenticated PostHog HTTPS transport and its request/response types. - `@posthog/core` owns cloud-task orchestration and headless presentation decisions, including sessions, queues, permissions, models, repositories, and inbox rules. - `apps/mobile` owns Expo lifecycle, React Native rendering, gestures, sheets, notifications, audio, secure storage, and small persisted view-state stores. diff --git a/products/desktop/apps/mobile/metro.config.js b/products/desktop/apps/mobile/metro.config.js index 5d98b33ee23c..f50070c98b71 100644 --- a/products/desktop/apps/mobile/metro.config.js +++ b/products/desktop/apps/mobile/metro.config.js @@ -4,11 +4,15 @@ const path = require("node:path"); const projectRoot = __dirname; const monorepoRoot = path.resolve(projectRoot, "../.."); +const agentContractsRoot = path.resolve( + monorepoRoot, + "../../packages/agent/packages/agent-contracts", +); const config = getDefaultConfig(projectRoot); -// Watch monorepo root for changes -config.watchFolders = [monorepoRoot]; +// Metro only bundles files under a watched folder, so agent-contracts is listed too. +config.watchFolders = [monorepoRoot, agentContractsRoot]; // Let Metro find modules in both locations config.resolver.nodeModulesPaths = [ @@ -39,28 +43,29 @@ nativeWindConfig.resolver = { sourceExts: [...nativeWindConfig.resolver.sourceExts, "svg"], }; -// Resolve @posthog/shared to its TypeScript source so Babel transpiles it. -// Its package.json `exports` point at `dist/`, which is only present after a +// Resolve @posthog/shared, and the @posthog/agent-contracts package it +// re-exports, to their TypeScript source so Babel transpiles them. +// Their package.json `exports` point at `dist/`, which is only present after a // `pnpm build` -- EAS Build never runs one, so bundling there fails outright. // This must be a resolveRequest hook rather than an `extraNodeModules` alias: // pnpm symlinks the package into node_modules, so Metro resolves it there // first and never consults the alias, and an alias also cannot map subpath // imports like `@posthog/shared/domain-types`. -const SHARED_PACKAGE = "@posthog/shared"; -const sharedSrc = path.resolve(monorepoRoot, "packages/shared/src"); +const SOURCE_RESOLVED_PACKAGES = { + "@posthog/shared": path.resolve(monorepoRoot, "packages/shared/src"), + "@posthog/agent-contracts": path.resolve(agentContractsRoot, "src"), +}; const upstreamResolveRequest = nativeWindConfig.resolver.resolveRequest; nativeWindConfig.resolver.resolveRequest = (context, moduleName, platform) => { - if ( - moduleName === SHARED_PACKAGE || - moduleName.startsWith(`${SHARED_PACKAGE}/`) - ) { - const subpath = moduleName.slice(SHARED_PACKAGE.length + 1) || "index"; - return context.resolveRequest( - context, - path.join(sharedSrc, subpath), - platform, - ); + for (const [packageName, src] of Object.entries(SOURCE_RESOLVED_PACKAGES)) { + if ( + moduleName === packageName || + moduleName.startsWith(`${packageName}/`) + ) { + const subpath = moduleName.slice(packageName.length + 1) || "index"; + return context.resolveRequest(context, path.join(src, subpath), platform); + } } return (upstreamResolveRequest ?? context.resolveRequest)( diff --git a/products/desktop/apps/web/README.md b/products/desktop/apps/web/README.md index 1c6db5ea2344..a820fec323a9 100644 --- a/products/desktop/apps/web/README.md +++ b/products/desktop/apps/web/README.md @@ -98,7 +98,7 @@ gated to non-dev (production) builds (`capture_exceptions` in ### OAuth redirect URI registration — required for sign-in The web host reuses the Code ("Array") OAuth application client ids -(`packages/shared/src/oauth.ts`). Each region stores its app's `redirect_uris` +(`packages/agent/packages/agent-contracts/src/oauth.ts`). Each region stores its app's `redirect_uris` as database rows (Django admin → OAuth applications), and they must include: - `https:///callback` for the deployed host. `http` is rejected for diff --git a/products/desktop/apps/web/package.json b/products/desktop/apps/web/package.json index 85eacc428c79..78efa4aedf81 100644 --- a/products/desktop/apps/web/package.json +++ b/products/desktop/apps/web/package.json @@ -15,10 +15,10 @@ "@agentclientprotocol/sdk": "0.22.1", "@inversifyjs/strongly-typed": "2.2.0", "@pierre/diffs": "^1.2.10", - "@posthog/agent": "workspace:*", + "@posthog/agent": "link:../../../../packages/agent/packages/agent", "@posthog/core": "workspace:*", "@posthog/di": "workspace:*", - "@posthog/harness": "workspace:*", + "@posthog/harness": "link:../../../../packages/agent/packages/harness", "@posthog/host-router": "workspace:*", "@posthog/host-trpc": "workspace:*", "@posthog/platform": "workspace:*", diff --git a/products/desktop/apps/web/vite.aliases.ts b/products/desktop/apps/web/vite.aliases.ts index 5a528dde85c8..0624013f6f4e 100644 --- a/products/desktop/apps/web/vite.aliases.ts +++ b/products/desktop/apps/web/vite.aliases.ts @@ -3,14 +3,16 @@ import { fileURLToPath } from "node:url"; const dir = path.dirname(fileURLToPath(import.meta.url)); const src = (name: string) => path.resolve(dir, `../../packages/${name}/src`); +const agentWorkspaceSrc = (name: string) => + path.resolve(dir, `../../../../packages/agent/packages/${name}/src`); // Mirror apps/code's vite.shared.mts: resolve @posthog// to package // src, since the packages' array-fallback `exports` don't resolve under Rollup. // Shared by vite.config.ts (build/dev) and vitest.config.ts (tests) so the two // can't drift. -const subpath = (name: string) => ({ +const subpath = (name: string, resolveSrc = src) => ({ find: new RegExp(`^@posthog/${name}/(.+)$`), - replacement: `${src(name)}/$1`, + replacement: `${resolveSrc(name)}/$1`, }); export const posthogSrcAliases = [ @@ -18,12 +20,13 @@ export const posthogSrcAliases = [ subpath("ui"), subpath("core"), subpath("shared"), + subpath("agent-contracts", agentWorkspaceSrc), subpath("host-router"), subpath("host-trpc"), subpath("platform"), subpath("workspace-client"), subpath("api-client"), - subpath("agent"), - subpath("enricher"), - subpath("git"), + subpath("agent", agentWorkspaceSrc), + subpath("enricher", agentWorkspaceSrc), + subpath("git", agentWorkspaceSrc), ]; diff --git a/products/desktop/biome.jsonc b/products/desktop/biome.jsonc index 0be06e4bf375..27d792a871cf 100644 --- a/products/desktop/biome.jsonc +++ b/products/desktop/biome.jsonc @@ -126,10 +126,7 @@ // Object-tag kind registry generated from posthog/object_tags/kinds.py; the // renderer's byte-stable output is what `hogli build:projections --check` // compares against, so no formatter may touch it. - "includes": [ - "packages/core/src/inbox/objectKinds.generated.ts", - "packages/shared/src/objectTagKinds.generated.ts" - ], + "includes": ["packages/core/src/inbox/objectKinds.generated.ts"], "formatter": { "enabled": false } @@ -149,12 +146,8 @@ } }, { - // Disallow console.* in Code and agent source code - use logger instead - "includes": [ - "apps/code/src/**/*.ts", - "apps/code/src/**/*.tsx", - "packages/agent/src/**/*.ts" - ], + // Disallow console.* in Code source code - use logger instead + "includes": ["apps/code/src/**/*.ts", "apps/code/src/**/*.tsx"], "linter": { "rules": { "suspicious": { @@ -166,7 +159,6 @@ { // Logger implementations intentionally wrap console "includes": [ - "packages/agent/src/utils/logger.ts", "apps/code/src/main/lib/logger.ts", "apps/code/src/renderer/lib/logger.ts" ], diff --git a/products/desktop/docs/CLOUD-MCP-IMPORT.md b/products/desktop/docs/CLOUD-MCP-IMPORT.md index 98d8185637f9..12d1bc44ffda 100644 --- a/products/desktop/docs/CLOUD-MCP-IMPORT.md +++ b/products/desktop/docs/CLOUD-MCP-IMPORT.md @@ -12,11 +12,11 @@ A local task run gets all of the user's MCP servers: the PostHog MCP plus `packages/workspace-server/src/services/agent/auth-adapter.ts`), and — for the Claude adapter — the user's own servers from `~/.claude.json` (`loadUserClaudeJsonMcpServers` in -`packages/agent/src/adapters/claude/session/mcp-config.ts`). +`packages/agent/packages/agent/src/adapters/claude/session/mcp-config.ts`). A cloud run's sandbox only gets what the backend bakes into the agent server's `--mcpServers` flag at spawn (`remoteMcpServerSchema` in -`packages/agent/src/server/schemas.ts`: `http`/`sse` + `url` + `headers`). The +`packages/agent/packages/agent/src/server/schemas.ts`: `http`/`sse` + `url` + `headers`). The sandbox never reads `~/.claude.json`, so tasks that need the user's own MCP servers (Grafana, Sentry, internal tools, ...) force the user back to local runs. @@ -135,10 +135,10 @@ of importables when the cap bites, since they have no other transport. Headers are captured at launch. For servers whose tokens expire mid-run, the rotation mechanism already exists on the sandbox side: the `refresh_session` command (`refreshSessionParamsSchema`, -`packages/agent/src/server/schemas.ts`) pushes a fresh `mcpServers` list into +`packages/agent/packages/agent/src/server/schemas.ts`) pushes a fresh `mcpServers` list into a running session, and the Claude adapter tears down and rebuilds the query with the new list (`refreshSession` in -`packages/agent/src/adapters/claude/claude-agent.ts`). +`packages/agent/packages/agent/src/adapters/claude/claude-agent.ts`). What's missing is the client half — today the desktop never sends `refresh_session` for cloud runs (`sendCommandInput` in diff --git a/products/desktop/docs/CLOUD-MCP-RELAY.md b/products/desktop/docs/CLOUD-MCP-RELAY.md index 5125e7c51171..ed18cb878166 100644 --- a/products/desktop/docs/CLOUD-MCP-RELAY.md +++ b/products/desktop/docs/CLOUD-MCP-RELAY.md @@ -5,7 +5,7 @@ Status: **implemented** (same PR as the import work), behind the same Follows [CLOUD-MCP-IMPORT.md](./CLOUD-MCP-IMPORT.md) (which handles the easy case: url-based servers on public hosts). Sandbox side: `McpRelayServer` -(`packages/agent/src/server/mcp-relay-server.ts`). Desktop execution: +(`packages/agent/packages/agent/src/server/mcp-relay-server.ts`). Desktop execution: `McpRelayService` (`packages/workspace-server/src/services/mcp-relay/`). Client coordination: `CloudTaskService.handleMcpRelayRequest` (`packages/core/src/cloud-task/cloud-task.ts`). Django broker: PR #68954. @@ -35,7 +35,7 @@ executes each request against the real server and returns the result. ## Prior art: the question relay The exact shape already exists for permission requests / questions -(`packages/agent/src/server/agent-server.ts`): +(`packages/agent/packages/agent/src/server/agent-server.ts`): - Sandbox → client: a `permission_request` **event** with a `requestId = crypto.randomUUID()` correlation id, broadcast over both the @@ -68,7 +68,7 @@ sandbox desktop └──────────────────────────────┘ ``` -### Sandbox side (`packages/agent/src/server/`) +### Sandbox side (`packages/agent/packages/agent/src/server/`) A new `McpRelayServer` starts one loopback HTTP MCP endpoint per relay-designated server @@ -150,7 +150,7 @@ A new `McpRelayService`: ### Schemas -Zod, in `packages/agent/src/server/schemas.ts` (sandbox) and +Zod, in `packages/agent/packages/agent/src/server/schemas.ts` (sandbox) and `packages/core/src/cloud-task/schemas.ts` (client): ```ts diff --git a/products/desktop/docs/LOCAL-DEVELOPMENT.md b/products/desktop/docs/LOCAL-DEVELOPMENT.md index e0004b91a2ed..4b4d983c6bab 100644 --- a/products/desktop/docs/LOCAL-DEVELOPMENT.md +++ b/products/desktop/docs/LOCAL-DEVELOPMENT.md @@ -48,7 +48,7 @@ This creates an OAuth application with: - **Algorithm**: `RS256` 4. Save -> **Important**: The client ID must be exactly `DC5uRLVbGI02YQ82grxgnK6Qn12SXWpCqdPb60oZ`. The value is defined in `packages/shared/src/oauth.ts`. +> **Important**: The client ID must be exactly `DC5uRLVbGI02YQ82grxgnK6Qn12SXWpCqdPb60oZ`. The value is defined in `packages/agent/packages/agent-contracts/src/oauth.ts`. ### 2. Configure RSA keys in PostHog @@ -74,11 +74,11 @@ The desktop app bundles Codex 0.154.0 and Claude Code 2.1.280 from Claude Agent Codex 0.154.0 includes GPT-6-Astra support. Updating a separately installed CLI does not update the app's bundled agents. -When changing Codex versions, update both `packages/agent/package.json` and `apps/code/scripts/download-binaries.mjs` so Codex and its code-mode host stay on the same release. +When changing Codex versions, update both `packages/agent/packages/agent/package.json` (agent workspace, from the repo root) and `apps/code/scripts/download-binaries.mjs` so Codex and its code-mode host stay on the same release. The downloader skips existing binaries, so remove `apps/code/resources/codex-acp/codex` and `apps/code/resources/codex-acp/codex-code-mode-host` before running it again after a version change (use the `.exe` filenames on Windows). -For Claude Code, keep the Claude Agent SDK versions in `packages/agent/package.json` and `packages/workspace-server/package.json` aligned and regenerate the desktop lockfile. +For Claude Code, keep the Claude Agent SDK versions in `packages/agent/packages/agent/package.json` (agent workspace, from the repo root) and `packages/workspace-server/package.json` aligned and regenerate the desktop lockfile. -The agent bundles `@posthog/harness` through `noExternal` in `packages/agent/tsup.config.ts` and copies its runtime assets during the build. +The agent bundles `@posthog/harness` through `noExternal` in `packages/agent/packages/agent/tsup.config.ts` and copies its runtime assets during the build. Keep it in the agent's `devDependencies`, alongside the other bundled workspace packages. Adding it to production dependencies makes Electron packaging expand the harness dependency tree repeatedly and fail with `Invalid string length`. @@ -261,7 +261,7 @@ The OAuth application in your local PostHog must have the client ID `DC5uRLVbGI0 ### "OAuth error: invalid_scope" or "Couldn't check Desktop access" -PostHog Desktop requests an explicit scope list (`OAUTH_SCOPES` in `packages/shared/src/oauth.ts`), +PostHog Desktop requests an explicit scope list (`OAUTH_SCOPES` in `packages/agent/packages/agent-contracts/src/oauth.ts`), which includes the privileged scope `llm_gateway:read`. `/authorize` never rejects a request over scopes: it clamps the request to the application's scope ceiling (`OAuthApplication.scopes`) and grants whatever falls inside diff --git a/products/desktop/docs/README.md b/products/desktop/docs/README.md index b7368a68f17f..226214330dca 100644 --- a/products/desktop/docs/README.md +++ b/products/desktop/docs/README.md @@ -48,5 +48,5 @@ These documents capture design intent at a point in time. Check the current code - [Electron desktop app](../apps/code/README.md) - [Mobile app](../apps/mobile/README.md) - [Web app](../apps/web/README.md) -- [Agent framework](../packages/agent/README.md) -- [Harness](../packages/harness/README.md) +- [Agent framework](../../../packages/agent/packages/agent/README.md) +- [Harness](../../../packages/agent/packages/harness/README.md) diff --git a/products/desktop/docs/UPDATES.md b/products/desktop/docs/UPDATES.md index 79605243eca9..b9d600efbd5b 100644 --- a/products/desktop/docs/UPDATES.md +++ b/products/desktop/docs/UPDATES.md @@ -67,7 +67,7 @@ Only a repository admin can push a base tag. ## Agent package releases -Agent releases are separate from desktop app releases. Changes to `products/desktop/packages/agent` or `products/desktop/packages/harness` on `master` trigger an agent release. +Agent releases are separate from desktop app releases. Changes to `packages/agent/packages/agent` or `packages/agent/packages/harness` on `master` trigger an agent release. The patch version counts commits that change either package since the agent base tag. A commit that changes both packages counts once. See the [agent release process](../packages/agent/README.md#releasing) for the tag and publish steps. diff --git a/products/desktop/knip.json b/products/desktop/knip.json index 813b6199f34c..306210f37313 100644 --- a/products/desktop/knip.json +++ b/products/desktop/knip.json @@ -37,17 +37,6 @@ "@posthog/enricher" ] }, - "packages/agent": { - "project": ["src/**/*.ts"], - "ignore": ["src/templates/**"], - "ignoreDependencies": [ - "yoga-wasm-web", - "@vitest/coverage-v8", - "@openai/codex" - ], - "includeEntryExports": false, - "entry": ["src/**/*.bench.ts"] - }, "packages/api-client": { "entry": ["src/**/*.test.ts"], "project": ["src/**/*.{ts,tsx}"], @@ -72,17 +61,6 @@ ], "project": ["src/**/*.ts"] }, - "packages/enricher": { - "entry": ["src/**/*.test.ts", "scripts/*.cjs"], - "project": ["src/**/*.ts"], - "ignoreDependencies": ["tree-sitter-cli"], - "includeEntryExports": true - }, - "packages/git": { - "entry": ["src/*.ts", "src/**/*.test.ts"], - "project": ["src/**/*.ts"], - "includeEntryExports": true - }, "packages/host-router": { "project": ["src/**/*.{ts,tsx}"], "includeEntryExports": true diff --git a/products/desktop/mprocs.yaml b/products/desktop/mprocs.yaml index 83caba5f234f..aaf8be36c790 100644 --- a/products/desktop/mprocs.yaml +++ b/products/desktop/mprocs.yaml @@ -12,12 +12,12 @@ procs: layer: Application agent: - shell: 'node scripts/pnpm-run.mjs --filter agent run dev' + shell: 'node scripts/pnpm-run.mjs --dir ../../packages/agent --filter agent run dev' groups: layer: Packages git: - shell: 'node scripts/pnpm-run.mjs --filter @posthog/git run dev' + shell: 'node scripts/pnpm-run.mjs --dir ../../packages/agent --filter @posthog/git run dev' groups: layer: Packages @@ -27,7 +27,7 @@ procs: layer: Packages enricher: - shell: 'node scripts/pnpm-run.mjs --filter @posthog/enricher run dev' + shell: 'node scripts/pnpm-run.mjs --dir ../../packages/agent --filter @posthog/enricher run dev' groups: layer: Packages diff --git a/products/desktop/package.json b/products/desktop/package.json index 072b608b1113..3e4eff31fc61 100644 --- a/products/desktop/package.json +++ b/products/desktop/package.json @@ -16,14 +16,15 @@ "dev:app": "pnpm build:deps && bash scripts/ensure-phrocs.sh && bin/phrocs --config mprocs.yaml", "dev:mprocs": "node scripts/dev-with-skills.mjs pnpm dev:app:mprocs", "dev:app:mprocs": "pnpm build:deps && mprocs", - "dev:agent": "pnpm --filter agent dev", - "dev:git": "pnpm --filter @posthog/git dev", + "dev:agent": "pnpm --dir ../../packages/agent --filter agent dev", + "dev:git": "pnpm --dir ../../packages/agent --filter @posthog/git dev", "dev:code": "node scripts/dev-with-skills.mjs pnpm --filter code start", "app:cdp": "node scripts/electron-cdp.mjs", - "build": "turbo build", - "build:deps": "turbo build --filter=@posthog/code^...", - "package": "turbo build && pnpm --filter code package", - "test": "turbo test --concurrency=2", + "build:agent": "node scripts/build-agent-workspace.mjs", + "build": "pnpm build:agent && turbo build", + "build:deps": "pnpm build:agent && turbo build --filter=@posthog/code^...", + "package": "pnpm build && pnpm --filter code package", + "test": "pnpm build:agent && pnpm --dir ../../packages/agent test && turbo test --concurrency=2", "test:bun": "turbo test --filter=@posthog/core --filter=@posthog/cli", "test:vitest": "pnpm --filter code --filter @posthog/electron-trpc test", "test:e2e": "pnpm --filter code test:e2e", @@ -32,13 +33,12 @@ "test:e2e:web:ui": "pnpm --filter @posthog/web test:e2e:ui", "rebuild:sqlite-node": "node scripts/rebuild-better-sqlite3-node.mjs", "rebuild:sqlite-electron": "node scripts/rebuild-better-sqlite3-electron.mjs", - "typecheck": "turbo typecheck", + "typecheck": "pnpm build:agent && pnpm --dir ../../packages/agent typecheck && turbo typecheck", "boundaries": "node scripts/check-host-boundaries.mjs", "lint": "biome check --write --unsafe", "format": "biome format --write", "clean": "pnpm -r clean", "knip": "knip", - "benjamin:sync": "node scripts/sync-benjamin.mts", "skills:pull": "node scripts/pull-skills.mjs", "hosthog:build": "pnpm install --frozen-lockfile --ignore-scripts --filter @posthog/web... && SKIP_PRODUCT_ENGINEER_SKILLS_DOWNLOAD=1 pnpm exec turbo build --filter=@posthog/web && ln -sfn apps/web/dist dist" }, diff --git a/products/desktop/packages/core/package.json b/products/desktop/packages/core/package.json index cc34bbd7bcc7..d0b4dea1a15f 100644 --- a/products/desktop/packages/core/package.json +++ b/products/desktop/packages/core/package.json @@ -19,7 +19,7 @@ "@modelcontextprotocol/ext-apps": "^1.1.2", "@modelcontextprotocol/sdk": "^1.12.1", "@pierre/diffs": "^1.2.10", - "@posthog/agent": "workspace:*", + "@posthog/agent": "link:../../../../packages/agent/packages/agent", "@posthog/api-client": "workspace:*", "@posthog/di": "workspace:*", "@posthog/platform": "workspace:*", diff --git a/products/desktop/packages/host-router/package.json b/products/desktop/packages/host-router/package.json index 957499cc2d1e..bbf20ff9e816 100644 --- a/products/desktop/packages/host-router/package.json +++ b/products/desktop/packages/host-router/package.json @@ -16,7 +16,7 @@ }, "dependencies": { "@agentclientprotocol/sdk": "0.22.1", - "@posthog/agent": "workspace:*", + "@posthog/agent": "link:../../../../packages/agent/packages/agent", "@posthog/core": "workspace:*", "@posthog/host-trpc": "workspace:*", "@posthog/platform": "workspace:*", diff --git a/products/desktop/packages/owners.yaml b/products/desktop/packages/owners.yaml deleted file mode 100644 index 071cf104d327..000000000000 --- a/products/desktop/packages/owners.yaml +++ /dev/null @@ -1,5 +0,0 @@ -version: 1 -owners: [] -rules: - - match: '/agent/' - owners: team-agent-infrastructure diff --git a/products/desktop/packages/shared/package.json b/products/desktop/packages/shared/package.json index 942b00ffe5cb..49b02d62b183 100644 --- a/products/desktop/packages/shared/package.json +++ b/products/desktop/packages/shared/package.json @@ -81,6 +81,7 @@ "clean": "node ../../scripts/rimraf.mjs dist .turbo" }, "dependencies": { + "@posthog/agent-contracts": "link:../../../../packages/agent/packages/agent-contracts", "@posthog/brand": "catalog:", "zod": "^4.1.12" }, diff --git a/products/desktop/packages/shared/src/analytics-events.ts b/products/desktop/packages/shared/src/analytics-events.ts index 1852b7881d25..a5553bbcb9d9 100644 --- a/products/desktop/packages/shared/src/analytics-events.ts +++ b/products/desktop/packages/shared/src/analytics-events.ts @@ -1,8 +1,8 @@ // Analytics event types and properties -import type { Adapter, ModelAccess } from "./adapter"; -import type { EffortLevel } from "./domain-types"; -import type { SourceProduct } from "./inbox-types"; +import type { Adapter, ModelAccess } from "@posthog/agent-contracts/adapter"; +import type { EffortLevel } from "@posthog/agent-contracts/domain-types"; +import type { SourceProduct } from "@posthog/agent-contracts/inbox-types"; export interface PromptHistoryOpenedProperties { entry_count: number; diff --git a/products/desktop/packages/shared/src/constants.ts b/products/desktop/packages/shared/src/constants.ts index 200ca0426c88..d09705809a1c 100644 --- a/products/desktop/packages/shared/src/constants.ts +++ b/products/desktop/packages/shared/src/constants.ts @@ -4,12 +4,7 @@ export const SELF_DRIVING_SETUP_TASK_FLAG = featureFlagKeys.SELF_DRIVING_SETUP_TASK_FLAG; export const POSTHOG_CODE_INTERNAL_CHILD_ENV = "POSTHOG_CODE_INTERNAL_CHILD"; -/** - * Names the tools a custom sandbox image carries. The image spec builder - * writes it into the image's env; the agent reads it at session start, since - * nothing else tells it what was installed. - */ -export const IMAGE_TOOLS_ENV_KEY = "POSTHOG_IMAGE_TOOLS"; +export { IMAGE_TOOLS_ENV_KEY } from "@posthog/agent-contracts/sandbox-env"; // Mirrors --color-background (dark) in packages/ui globals.css, for surfaces // that cannot read CSS variables: the Electron window and the boot error screen. diff --git a/products/desktop/packages/shared/src/dismissalReasons.ts b/products/desktop/packages/shared/src/dismissalReasons.ts index a01b6b13b9ab..d0703e89bdfd 100644 --- a/products/desktop/packages/shared/src/dismissalReasons.ts +++ b/products/desktop/packages/shared/src/dismissalReasons.ts @@ -6,4 +6,4 @@ export { RESOLVE_REASON_OPTIONS, type ReportStateReason, type ResolveReasonOptionValue, -} from "./dismissal-reasons"; +} from "@posthog/agent-contracts/dismissal-reasons"; diff --git a/products/desktop/packages/shared/src/domain-types.ts b/products/desktop/packages/shared/src/domain-types.ts index 32009619ec85..928a1c5a8532 100644 --- a/products/desktop/packages/shared/src/domain-types.ts +++ b/products/desktop/packages/shared/src/domain-types.ts @@ -1,1221 +1 @@ -import { z } from "zod"; -import type { Adapter } from "./adapter"; -import type { AgentRuntime } from "./agent-runtime"; -import type { ReportStateReason } from "./dismissal-reasons"; -import { REASONING_EFFORT_LABELS } from "./model-catalog.generated"; -import type { StoredLogEntry } from "./session-events"; -import type { UploadableSkillSource } from "./skills"; - -// Execution mode schema and type - shared between main and renderer -const executionModeSchema = z.enum([ - "default", - "acceptEdits", - "plan", - "bypassPermissions", - "auto", - "read-only", - "full-access", -]); - -import type { ExecutionMode } from "./exec-types"; -export type { ExecutionMode }; - -// Effort level schema and type - shared between main and renderer -export const effortLevelSchema = z.enum([ - "low", - "medium", - "high", - "xhigh", - "max", - "ultracode", -]); -export type EffortLevel = z.infer; - -/** All effort levels in ascending order of depth. */ -export const EFFORT_LEVELS = effortLevelSchema.options; - -/** - * OpenAI service tiers a Codex run can request. "flex" is the cheaper, slower - * queue; "priority" the faster one; "default" pins standard routing explicitly. - * Codex only sends a tier its model catalogue advertises for the model in use. - */ -export const serviceTierSchema = z.enum(["default", "priority", "flex"]); -export type ServiceTier = z.infer; - -export const SERVICE_TIERS = serviceTierSchema.options; - -// The annotation is the check: a depth added to `EffortLevel` but not to the catalog (or -// the reverse) fails to compile here. -export const EFFORT_LEVEL_LABELS: Record = - REASONING_EFFORT_LABELS; - -/** Claude Code docs for the tiers that need explaining. */ -export const EFFORT_LEVEL_DOCS_URLS: Partial> = { - ultracode: "https://code.claude.com/docs/en/workflows", -}; - -/** Adapter-specific docs for the fast mode toggle. */ -export const FAST_MODE_DOCS_URLS: Record = { - claude: "https://code.claude.com/docs/en/model-config", - codex: "https://developers.openai.com/codex", -}; - -export interface UserBasic { - id: number; - uuid: string; - distinct_id?: string | null; - first_name?: string; - last_name?: string; - email: string; - is_email_verified?: boolean | null; -} - -/** One row from the org members list; trimmed to what mention pickers need. */ -export interface OrganizationMemberBasic { - id: string; - user: UserBasic; -} - -export interface Task { - id: string; - task_number: number | null; - slug: string; - title: string; - title_manually_set?: boolean; - description: string; - // First characters of the description, present instead of the full body when the - // list was fetched with basic=true. Absent on the full and single-task responses. - description_preview?: string; - created_at: string; - updated_at: string; - /** - * When something last happened in the session, as opposed to `updated_at` (when the row was - * last written). The timestamp a "recent activity" sort reads. Empty on older responses. - */ - last_activity_at?: string; - created_by?: UserBasic | null; - origin_product: string; - repository?: string | null; // Format: "organization/repository" (e.g., "posthog/posthog-js") - repositories?: string[]; - github_integration?: number | null; - github_user_integration?: string | null; - json_schema?: Record | null; - signal_report?: string | null; - internal?: boolean; - /** Key of the server-side flow that created the task, e.g. `desktop_onboarding_session:`. */ - origin_key?: string | null; - runtime?: AgentRuntime; - /** Backend channel (tasks product Channel UUID) this task is owned by. */ - channel?: string | null; - latest_run?: TaskRun; -} - -export interface TaskSearchResult { - id: string; - kind: "task" | "pull_request" | "artifact" | "channel" | "canvas"; - title: string; - subtitle: string; - task_id: string | null; - task_run_id: string | null; - channel_id: string | null; - created_by?: UserBasic | null; - /** What created the containing task, e.g. "slack". */ - origin_product?: string | null; - latest_run?: TaskSearchResultRun | null; - updated_at: string; - metadata: Record; -} - -export interface TaskSearchResultRun { - id: string; - status: TaskRunStatus | null; - environment: TaskRunEnvironment | null; -} - -/** - * A backend task channel — the single channel identity: it owns the task feed, - * threads, instructions (CONTEXT.md) and filed canvases. `personal` is the - * user's private "#me" channel. `starred` is per-user. - */ -export interface ProvisionedTaskChannels { - channels: TaskChannel[]; - personal_created: boolean; - general_created: boolean; -} - -export interface TaskChannel { - id: string; - name: string; - channel_type: "public" | "personal" | "private"; - starred: boolean; - github_integration?: number | null; - repositories?: string[]; - auto_archive_after_days?: number | null; - created_at: string; - created_by?: UserBasic | null; - system_role?: "personal" | "general" | null; -} - -/** Lifecycle events a client may post into a channel's feed. */ -export type ChannelFeedMessageEvent = "context_md_building"; - -export type { - SpaceFeatureInput, - SpaceGoalDirection, - SpaceGoalInput, - SpaceGoalPeriod, - SpaceSetupInput, - SpaceSetupKind, - SpaceSetupStarted, -} from "./schemas"; - -/** - * A durable, team-visible "PostHog agent" announcement in a channel's feed — - * rendered alongside task cards (e.g. "Adam created this context"). `author` is - * the user whose action produced the row; `author_kind` says who authored it. - * `payload` carries structured event data (e.g. `{ context_name }`) so rendering - * survives renames. - */ -export interface ChannelFeedMessage { - id: string; - channel: string; - author?: UserBasic | null; - author_kind: "human" | "system" | "agent"; - event: ChannelFeedMessageEvent | string; - payload: Record; - content: string; - created_at: string; -} - -/** - * One human message in a task's thread. Thread messages never reach the agent - * unless the task author forwards one, which stamps the forwarded_* fields. - */ -export interface TaskThreadMessage { - id: string; - task: string; - /** Who authored the row; agent rows are server-emitted announcements. Absent on older backends. */ - author_kind?: "human" | "system" | "agent"; - /** Stable event key for non-human rows (e.g. "canvas_created", "turn_complete"). */ - event?: string; - /** Structured event payload; turn_complete carries `{ run_id }` so a client rendering a run's live agent turns can dedupe the durable row. */ - payload?: Record; - content: string; - created_at: string; - author?: UserBasic | null; - forwarded_to_agent_at?: string | null; - forwarded_by?: UserBasic | null; - /** Users mentioned in the row, indexed at write time. Absent on older backends. */ - mentioned_user_ids?: number[]; -} - -/** The latest resolve or reopen on a comment thread. */ -export interface TaskCommentStateEvent { - state: "resolved" | "open"; - author?: UserBasic | null; - created_at: string; -} - -/** - * One comment thread on a task, collapsed the way the activity timeline shows it - * (`/thread_messages/comment_activity/`). Mirrors `TaskCommentActivityDTO`. - */ -export interface TaskCommentThreadSummary { - id: string; - target: { id: string; type: string; name: string }; - content: string; - content_truncated: boolean; - selected_text: string | null; - author?: UserBasic | null; - created_at: string; - last_activity_at: string; - reply_count: number; - participants: UserBasic[]; - mentioned_user_ids: number[]; - resolved: boolean; - state_event: TaskCommentStateEvent | null; - latest_reply: { - author?: UserBasic | null; - content: string; - /** The excerpt is bounded, so a long reply comes back cut. */ - content_truncated: boolean; - created_at: string; - } | null; -} - -/** - * One @-mention of the current user in a task's thread, from the backend - * mentions index (`/task_mentions/`). Mirrors `TaskMentionDTO`. - */ -export interface TaskMention { - id: string; - message_id: string; - task_id: string; - task_title: string; - channel_id?: string | null; - channel_name?: string | null; - author?: UserBasic | null; - content: string; - created_at: string; -} - -/** Which signal produced an activity row; mirrors the backend `activity_kind`. */ -export type TaskActivityKind = - | "awaiting_input" - | "completed" - | "message" - | "mention" - | "thread_reply" - | "owned_item_comment" - | "created"; - -/** - * One task the current user is involved in, from the backend task-activity feed - * (`/task_activity/`). One row per task, newest activity first. Mirrors - * `TaskActivityDTO`. - */ -export interface TaskActivity { - id: string; - task_id: string; - task_title: string; - channel_id?: string | null; - channel_name?: string | null; - activity_at: string; - activity_kind: TaskActivityKind; - snippet: string; - latest_author?: UserBasic | null; - latest_message_id?: string | null; - latest_comment_id?: string | null; - latest_comment_scope?: string | null; - latest_comment_item_id?: string | null; - is_unread: boolean; -} - -export interface TaskActivityPage { - results: TaskActivity[]; - /** Unread tasks across the whole feed, not just this page. Backs the sidebar badge. */ - unread_count: number; - next_before?: string | null; - next_before_id?: string | null; -} - -export interface TaskActivityReadMarker { - task_id: string; - seen_before: string; - activity_id?: string; -} - -export interface TaskActivityMarkReadResult { - marked_read: number; - unread_count: number; -} - -export type TaskRunStatus = - | "not_started" - | "queued" - | "in_progress" - | "completed" - | "failed" - | "cancelled"; - -export type TaskRunEnvironment = "local" | "cloud"; - -const optionalField = ( - field: T, -): z.ZodCatch> => field.optional().catch(undefined); - -const pendingFollowupMessageSchema = z.object({ - id: z.string(), - content: z.string(), - ts: z.string().optional(), -}); - -export type PendingFollowupMessage = z.infer< - typeof pendingFollowupMessageSchema ->; - -export function readPendingFollowupMessages( - state: Record | undefined, -): PendingFollowupMessage[] { - const parsed = z - .array(pendingFollowupMessageSchema) - .safeParse(state?.pending_followup_messages); - return parsed.success ? parsed.data : []; -} - -/** - * One skills-store skill the sandbox agent lists as a local skill. The task - * worker resolves the list into run state; the agent renders a pointer - * SKILL.md per entry and fetches the body over MCP only when it is invoked. - */ -const storeSkillStubSchema = z.object({ - name: z.string(), - description: z.string(), - version: z.number(), -}); - -export type StoreSkillStub = z.infer; - -const taskRunStateFields = { - ai_agent_name: optionalField(z.string()), - ai_stage: optionalField(z.string()), - auto_publish: optionalField(z.boolean()), - benjamin_version: optionalField(z.string()), - initial_permission_mode: optionalField(executionModeSchema), - initial_prompt_override: optionalField(z.string()), - pending_followup_messages: optionalField( - z.array(pendingFollowupMessageSchema), - ), - pending_user_artifact_ids: optionalField(z.array(z.string())), - pending_user_message: optionalField(z.string()), - pending_user_message_id: optionalField(z.string()), - prewarmed: optionalField(z.boolean()), - reasoning_effort: optionalField( - z.union([effortLevelSchema, z.enum(["off", "minimal"])]), - ), - resume_from_run_id: optionalField(z.string()), - sandbox_environment_id: optionalField(z.string()), - slack_artifact_delivery: optionalField( - z.enum(["none", "message", "canvas_file"]), - ), - slack_chart_delivery: optionalField(z.boolean()), - slack_notified_pr_url: optionalField(z.string()), - slack_thread_url: optionalField(z.string()), - snapshot_kind: optionalField(z.string()), - store_skills: optionalField(z.array(storeSkillStubSchema)), - token_usage: optionalField(z.record(z.string(), z.unknown())), -} satisfies z.ZodRawShape; - -export const taskRunStateSchema = z.looseObject(taskRunStateFields).catch({}); - -export type TaskRunState = z.infer; -export type TaskRunStateField = keyof typeof taskRunStateFields; - -export type ArtifactType = - | "plan" - | "context" - | "reference" - | "output" - | "artifact" - | "user_attachment" - | "skill_bundle"; - -export type ArtifactSource = - | "agent_output" - | "user_attachment" - | "posthog_code_skill" - | "posthog_object"; - -export interface SkillBundleArtifactMetadata { - skill_name: string; - skill_source: UploadableSkillSource; - content_sha256: string; - bundle_format: "zip"; - schema_version: number; -} - -export interface PostHogObjectArtifactMetadata { - reference_type: "posthog_object"; - object_kind: string; - object_id: string; - source_message_ids: string[]; - occurrence_count: number; -} - -export type TaskRunArtifactMetadata = - | SkillBundleArtifactMetadata - | PostHogObjectArtifactMetadata; - -export function isSkillBundleArtifactMetadata( - metadata: TaskRunArtifactMetadata | undefined, -): metadata is SkillBundleArtifactMetadata { - return metadata !== undefined && "skill_name" in metadata; -} - -export interface TaskRunArtifact { - id?: string; - name: string; - type: ArtifactType; - source?: ArtifactSource; - size?: number; - content_type?: string; - metadata?: TaskRunArtifactMetadata; - storage_path?: string; - uploaded_at?: string; - uploaded_by?: "agent" | "user"; - uploaded_by_user_id?: number; - dismissed_at?: string | null; -} - -export const TERMINAL_STATUSES = ["completed", "failed", "cancelled"] as const; - -export function isTerminalStatus( - status: TaskRunStatus | string | null | undefined, -): boolean { - return ( - status !== null && - status !== undefined && - TERMINAL_STATUSES.includes(status as (typeof TERMINAL_STATUSES)[number]) - ); -} - -export function isContentlessTask(task: { - title?: string | null; - description?: string | null; -}): boolean { - return !task.title?.trim() && !task.description?.trim(); -} - -export interface TaskRun { - id: string; - task: string; // Task ID - team: number; - branch: string | null; - runtime_adapter?: Adapter | null; - model?: string | null; - reasoning_effort?: EffortLevel | null; - stage?: string | null; // Current stage (e.g., 'research', 'plan', 'build') - environment?: TaskRunEnvironment; - status: TaskRunStatus; - log_url: string; - error_message: string | null; - output: Record | null; // Structured output (PR URL, commit SHA, etc.) - state: TaskRunState; - artifacts?: TaskRunArtifact[]; - created_at: string; - updated_at: string; - completed_at: string | null; -} - -export type NetworkAccessLevel = "trusted" | "full" | "custom"; - -export interface SandboxEnvironment { - id: string; - name: string; - network_access_level: NetworkAccessLevel; - allowed_domains: string[]; - include_default_domains: boolean; - repositories: string[]; - has_environment_variables: boolean; - /** - * Names of the variables that are set. Values are write-only and never returned. - * Optional because desktop releases are not orchestrated with backend deploys, so a - * client can reach an API that predates this field. - */ - environment_variable_keys?: string[]; - private: boolean; - effective_domains: string[]; - custom_image_id: string | null; - custom_image_name: string | null; - custom_image_status: string | null; - created_by?: UserBasic | null; - created_at: string; - updated_at: string; -} - -export interface SandboxEnvironmentInput { - name: string; - network_access_level: NetworkAccessLevel; - allowed_domains?: string[]; - include_default_domains?: boolean; - repositories?: string[]; - environment_variables?: Record; - private?: boolean; - custom_image_id?: string | null; -} - -export type SandboxCustomImageStatus = - | "draft" - | "scanning" - | "scan_failed" - | "building" - | "build_failed" - | "ready" - | "archived"; - -export function isImageBuildInProgress( - status: SandboxCustomImageStatus, -): boolean { - return status === "scanning" || status === "building"; -} - -export function isImageBuildFailed(status: SandboxCustomImageStatus): boolean { - return status === "scan_failed" || status === "build_failed"; -} - -export interface SandboxCustomImageScanFinding { - severity: string; - detail: string; -} - -export interface SandboxCustomImage { - id: string; - name: string; - description: string; - status: SandboxCustomImageStatus; - version: number; - modal_image_name: string; - repository: string; - private: boolean; - spec: Record; - spec_yaml: string; - scan_result: { - passed?: boolean; - findings?: SandboxCustomImageScanFinding[]; - }; - error: string; - build_log: string; - builder_task_id: string | null; - created_by?: UserBasic | null; - created_at: string; - updated_at: string; -} - -interface CloudTaskUpdateBase { - taskId: string; - runId: string; -} - -export interface CloudTaskLogsUpdate extends CloudTaskUpdateBase { - kind: "logs"; - newEntries: StoredLogEntry[]; - totalEntryCount: number; -} - -export interface CloudTaskStatusUpdate extends CloudTaskUpdateBase { - kind: "status"; - status?: TaskRunStatus; - stage?: string | null; - output?: Record | null; - errorMessage?: string | null; - branch?: string | null; - sandboxAlive?: boolean | null; -} - -export interface CloudTaskSnapshotUpdate extends CloudTaskUpdateBase { - kind: "snapshot"; - newEntries: StoredLogEntry[]; - totalEntryCount: number; - /** Chain index of newEntries[0] when the snapshot is a tail window rather - * than the full history; older entries page in on demand. Absent means - * the snapshot starts at the head of the chain. */ - windowStart?: number; - rebuilt?: boolean; - status?: TaskRunStatus; - stage?: string | null; - output?: Record | null; - errorMessage?: string | null; - branch?: string | null; - sandboxAlive?: boolean | null; -} - -export interface CloudTaskErrorUpdate extends CloudTaskUpdateBase { - kind: "error"; - errorTitle: string; - errorMessage: string; - retryable: boolean; -} - -export interface CloudPermissionOption { - kind: string; - optionId: string; - name: string; - _meta?: Record; -} - -export interface CloudTaskPermissionRequestUpdate extends CloudTaskUpdateBase { - kind: "permission_request"; - requestId: string; - toolCall: { - toolCallId: string; - title: string; - kind: string; - content?: unknown[]; - rawInput?: Record; - _meta?: Record; - }; - options: CloudPermissionOption[]; -} - -export type CloudTaskUpdatePayload = - | CloudTaskLogsUpdate - | CloudTaskStatusUpdate - | CloudTaskSnapshotUpdate - | CloudTaskErrorUpdate - | CloudTaskPermissionRequestUpdate; - -// Mention types for editors -type MentionType = - | "file" - | "folder" - | "error" - | "experiment" - | "insight" - | "feature_flag" - | "generic"; - -export interface MentionItem { - // File items - path?: string; - name?: string; - kind?: "file" | "directory"; - // URL items - url?: string; - type?: MentionType; - label?: string; - id?: string; - urlId?: string; -} - -// Git file status types -import type { GitFileStatus } from "./git-types"; -export type { GitFileStatus }; - -export type GitBusyOperation = "rebase" | "merge" | "cherry-pick" | "revert"; - -export type GitBusyState = - | { busy: false } - | { busy: true; operation: GitBusyOperation }; - -export interface ChangedFile { - path: string; - status: GitFileStatus; - originalPath?: string; // For renames: the old path - linesAdded?: number; - linesRemoved?: number; - staged?: boolean; - patch?: string; // Unified diff patch from GitHub API - sha?: string; -} - -// External apps detection types -export type ExternalAppType = - | "editor" - | "terminal" - | "file-manager" - | "git-client"; - -export interface DetectedApplication { - id: string; // "vscode", "cursor", "iterm" - name: string; // "Visual Studio Code" - type: ExternalAppType; - path: string; // "/Applications/Visual Studio Code.app" - command: string; // Launch command - icon?: string; // Base64 data URL -} - -import type { SignalReportStatus } from "./signal-types"; -export type { SignalReportStatus }; - -/** Actionability priority from the researched report (actionability judgment artefact). */ -export type SignalReportPriority = "P0" | "P1" | "P2" | "P3" | "P4"; - -/** Latest known state of a report's implementation PR. */ -export type SignalReportPrState = - | "unknown" - | "draft" - | "open" - | "closed" - | "merged"; - -/** Actionability choice from the researched report. */ -export type SignalReportActionability = - | "immediately_actionable" - | "requires_human_input" - | "not_actionable"; - -/** - * One or more `SignalReportStatus` values joined by commas, e.g. `potential` or `potential,candidate,ready`. - * This looks horrendous but it's superb, trust me bro. - */ -export type CommaSeparatedSignalReportStatuses = - | SignalReportStatus - | `${SignalReportStatus},${SignalReportStatus}` - | `${SignalReportStatus},${SignalReportStatus},${SignalReportStatus}` - | `${SignalReportStatus},${SignalReportStatus},${SignalReportStatus},${SignalReportStatus}` - | `${SignalReportStatus},${SignalReportStatus},${SignalReportStatus},${SignalReportStatus},${SignalReportStatus}`; - -export type SignalReportChartSize = "small" | "medium" | "large"; - -/** - * One chart attached to a report (`SignalReport.charts` on the backend serializer). - * `query` is stored unparsed; the backend only guarantees `kind` is one of - * InsightVizNode, DataVisualizationNode, or SavedInsightNode. - */ -export interface SignalReportChart { - chart_id: string; - title: string; - query: unknown; - caption?: string | null; - size?: SignalReportChartSize | null; -} - -export interface SignalReport { - id: string; - title: string | null; - summary: string | null; - status: SignalReportStatus; - total_weight: number; - signal_count: number; - signals_at_run?: number; - created_at: string; - updated_at: string; - artefact_count: number; - collapsed_note_count?: number; - /** P0–P4 from priority judgment when the report is researched */ - priority?: SignalReportPriority | null; - /** Actionability choice from the actionability judgment artefact. */ - actionability?: SignalReportActionability | null; - /** Whether the issue appears already fixed, from the actionability judgment artefact. */ - already_addressed?: boolean | null; - /** Reason code from the latest dismiss or resolve artefact. */ - dismissal_reason?: ReportStateReason | null; - /** Free-form note captured alongside the dismissal reason. */ - dismissal_note?: string | null; - /** Whether the current user is a suggested reviewer for this report (server-annotated). */ - is_suggested_reviewer?: boolean; - /** Distinct source products contributing signals to this report. */ - source_products?: string[]; - /** PR URL from the latest implementation task run, if available. */ - implementation_pr_url?: string | null; - work_state?: "unclaimed" | "working" | "in_review" | "done"; - assignee?: { - kind: "user" | "task" | "agent" | "system"; - task_id: string | null; - } | null; - /** - * Whether that PR merged (GitHub webhook). A merged PR is history, not work - * in flight: a report can outlive its fix when evidence keeps arriving, and - * its old PR must not read as reviewable or continuable. - */ - implementation_pr_merged?: boolean; - /** Latest known state of that PR, per the GitHub webhook. */ - implementation_pr_state?: SignalReportPrState | null; - /** Link to the tracker issue self-driving opened for this report's PR, when the project tracks issues. */ - tracker_issue_url?: string | null; - /** How that issue reads in its provider, for example '#12' or 'ENG-123'. */ - tracker_issue_reference?: string | null; - /** Why the tracker issue could not be opened, for a project that wants one. Null when it exists. */ - tracker_issue_error?: string | null; - /** Charts the report shows, placed by `[label](chart:)` links in the summary. */ - charts?: SignalReportChart[]; - /** The report's PR refund, when one exists (one refund per report, ever). */ - refund?: SignalReportRefund | null; - /** Marks reports that were never billable ("Free"), so there is nothing to refund. */ - billing_exempt_reason?: string | null; - /** Backend-owned refund eligibility: why a refund would be rejected right now, null when it would be accepted. */ - refund_ineligibility_reason?: string | null; - /** The space (task channel) this report is assigned to, or null when unassigned. The general view lists every report regardless of this value. */ - channel_id?: string | null; -} - -export type SignalReportRefundReason = - | "pr_incorrect" - | "pr_not_useful" - | "duplicate" - | "other"; - -export interface SignalReportRefund { - id: string; - reason: SignalReportRefundReason; - note?: string | null; - created_at?: string; -} - -export interface SignalReportArtefactContent { - session_id: string; - start_time: string; - end_time: string; - distinct_id: string; - content: string; - distance_to_centroid: number | null; -} - -/** - * Fields shared by every artefact row. `created_by` / `task_id` carry attribution: - * at most one is set — `created_by` for user writes, `task_id` for agent writes, - * neither for system (pipeline) writes. - */ -interface SignalReportArtefactBase { - id: string; - created_at: string; - updated_at?: string | null; - /** User the artefact is attributed to, when a user produced it. */ - created_by?: UserBasic | null; - /** Task the artefact is attributed to, when an agent produced it. */ - task_id?: string | null; - /** - * True when the row's content did not match its type's expected shape and was - * normalized to a plain text preview instead — the entry still renders rather - * than silently vanishing from the activity log. - */ - degraded?: boolean; -} - -export interface SignalReportArtefact extends SignalReportArtefactBase { - type: string; - content: SignalReportArtefactContent; -} - -/** Artefact with `type: "priority_judgment"` — priority assessment from the agentic report. */ -export interface PriorityJudgmentArtefact extends SignalReportArtefactBase { - type: "priority_judgment"; - content: PriorityJudgmentContent; -} - -export interface PriorityJudgmentContent { - explanation: string; - priority: SignalReportPriority; -} - -/** Artefact with `type: "actionability_judgment"` — actionability assessment from the agentic report. */ -export interface ActionabilityJudgmentArtefact - extends SignalReportArtefactBase { - type: "actionability_judgment"; - content: ActionabilityJudgmentContent; -} - -export interface ActionabilityJudgmentContent { - explanation: string; - actionability: SignalReportActionability; - already_addressed: boolean; -} - -/** Artefact with `type: "safety_judgment"` — the prompt-injection safety verdict for the report. */ -export interface SafetyJudgmentArtefact extends SignalReportArtefactBase { - type: "safety_judgment"; - content: SafetyJudgmentContent; -} - -export interface SafetyJudgmentContent { - /** True when the report's signals are judged safe to act on. */ - choice: boolean; - /** Why the report was judged unsafe; null when safe. */ - explanation: string | null; -} - -/** Artefact with `type: "signal_finding"` — per-signal research finding from the agentic report. */ -export interface SignalFindingArtefact extends SignalReportArtefactBase { - type: "signal_finding"; - content: SignalFindingContent; -} - -export interface SignalFindingContent { - signal_id: string; - relevant_code_paths: string[]; - relevant_commit_hashes: Record; - data_queried: string; - verified: boolean; -} - -/** Artefact with `type: "repo_selection"` - selected repository for the report run. */ -export interface RepoSelectionArtefact extends SignalReportArtefactBase { - type: "repo_selection"; - content: RepoSelectionContent; -} - -export interface RepoSelectionContent { - repository: string | null; - reason: string; -} - -/** Artefact with `type: "suggested_reviewers"` — content is an enriched reviewer list. */ -export interface SuggestedReviewersArtefact extends SignalReportArtefactBase { - type: "suggested_reviewers"; - content: SuggestedReviewer[]; -} - -/** Artefact with `type: "dismissal"` — captures the user's rationale when suppressing or resolving a report. */ -export interface DismissalArtefact extends SignalReportArtefactBase { - type: "dismissal"; - content: DismissalContent; -} - -export interface DismissalContent { - reason: ReportStateReason; - /** Optional free-form detail provided alongside the reason. */ - note: string; - /** PostHog numeric user id of the dismisser, when available. */ - user_id: number | null; - /** PostHog UUID of the dismisser, when available. */ - user_uuid: string | null; -} - -// ── Log artefacts ──────────────────────────────────────────────────────────── -// Append-but-deletable "work log" entries that accumulate on a report. Distinct -// from the status artefacts above (judgments, reviewers) which are latest-wins. -// Content shapes mirror products/signals/backend/artefact_schemas.py. - -/** Artefact with `type: "code_reference"` — a contiguous span of source lines. */ -export interface CodeReferenceArtefact extends SignalReportArtefactBase { - type: "code_reference"; - content: CodeReferenceContent; -} - -export interface CodeReferenceContent { - file_path: string; - start_line: number; - end_line: number; - contents: string; - relevance_note: string; -} - -/** Artefact with `type: "line_reference"` — a single source line callout (a point). */ -export interface LineReferenceArtefact extends SignalReportArtefactBase { - type: "line_reference"; - content: LineReferenceContent; -} - -export interface LineReferenceContent { - file_path: string; - line: number; - note: string; - /** The exact source text of the referenced line, if available. */ - contents?: string | null; -} - -/** Artefact with `type: "commit"` — one commit pushed in relation to the report. */ -export interface CommitArtefact extends SignalReportArtefactBase { - type: "commit"; - content: CommitContent; -} - -export interface CommitContent { - repository: string; - branch: string; - commit_sha: string; - message: string; - note?: string | null; -} - -/** Artefact with `type: "task_run"` — a reference to a `tasks.Task` run for the report. */ -export interface TaskRunArtefact extends SignalReportArtefactBase { - type: "task_run"; - content: TaskRunArtefactContent; -} - -export interface TaskRunArtefactContent { - task_id: string; - run_id?: string | null; - /** - * Product that ran the task — `signals` for the built-in pipeline, or a custom agent's - * product identifier (mirrors backend TaskRunArtefact). - */ - product: string; - /** - * Task type within the product — e.g. `research` / `implementation` / `repo_selection` for the - * signals pipeline, or a custom agent's type identifier. - */ - type: string; -} - -/** Artefact with `type: "note"` — a free-form note authored by an agent or by code. */ -export interface NoteArtefact extends SignalReportArtefactBase { - type: "note"; - content: NoteContent; -} - -export interface NoteContent { - note: string; - author?: string | null; -} - -/** Response from the `commit` artefact diff endpoint — the commit rendered against its parent. */ -export interface CommitDiffResponse { - /** Unified diff (patch) text introduced by the commit. */ - diff: string; - /** True when the diff was too large to return in full and has been truncated. */ - truncated: boolean; -} - -export interface SuggestedReviewerCommit { - sha: string; - url: string; - reason: string; -} - -export interface SuggestedReviewerUser { - id: number; - uuid: string; - email: string; - first_name: string; - last_name: string; -} - -import type { AvailableSuggestedReviewer } from "./inbox-types"; -export type { AvailableSuggestedReviewer }; - -export interface SuggestedReviewer { - /** Null for a reviewer with no linked GitHub account — `user` identifies them instead. */ - github_login: string | null; - /** Null on entries written before reviewers carried one; `user` still resolves from the login. */ - user_uuid?: string | null; - github_name: string | null; - relevant_commits: SuggestedReviewerCommit[]; - user: SuggestedReviewerUser | null; - reason?: string | null; - source_skill?: string | null; - source_label?: string; - explanation?: string | null; -} - -export interface SuggestedReviewerWriteEntry { - github_login?: string; - user_uuid?: string; - github_name?: string; -} - -interface MatchedSignalMetadata { - parent_signal_id: string; - match_query: string; - reason: string; -} - -interface NoMatchSignalMetadata { - reason: string; - rejected_signal_ids: string[]; -} - -export type SignalMatchMetadata = MatchedSignalMetadata | NoMatchSignalMetadata; - -export interface Signal { - signal_id: string; - content: string; - source_product: string; - source_type: string; - source_id: string; - weight: number; - timestamp: string; - extra: Record; - match_metadata?: SignalMatchMetadata | null; -} - -export interface SignalReportsResponse { - results: SignalReport[]; - count: number; -} - -export interface SignalProcessingStateResponse { - paused_until: string | null; -} - -export interface AvailableSuggestedReviewersResponse { - results: AvailableSuggestedReviewer[]; - count: number; -} - -export interface SignalReportSignalsResponse { - report: SignalReport | null; - signals: Signal[]; -} - -/** Any artefact returned by the report `artefacts/` endpoint, discriminated on `type`. */ -export type AnySignalReportArtefact = - | SignalReportArtefact - | PriorityJudgmentArtefact - | ActionabilityJudgmentArtefact - | SafetyJudgmentArtefact - | SignalFindingArtefact - | RepoSelectionArtefact - | SuggestedReviewersArtefact - | DismissalArtefact - | CodeReferenceArtefact - | LineReferenceArtefact - | CommitArtefact - | TaskRunArtefact - | NoteArtefact; - -export interface SignalReportArtefactsResponse { - results: AnySignalReportArtefact[]; - count: number; - unavailableReason?: - | "forbidden" - | "not_found" - | "invalid_payload" - | "request_failed"; -} - -import type { SignalReportOrderingField } from "./signal-types"; -export type { SignalReportOrderingField }; - -export interface SignalReportsQueryParams { - unread?: boolean; - search?: string; - limit?: number; - offset?: number; - status?: CommaSeparatedSignalReportStatuses | string; - /** - * Comma-separated sort keys (prefix `-` for descending). `status` is semantic stage - * rank (not lexicographic `status` column order). Also: `signal_count`, `total_weight`, - * `created_at`, `updated_at`, `id`. Example: `status,-total_weight`. - */ - ordering?: string; - /** Comma-separated source products — only returns reports with signals from these sources. */ - source_product?: string; - /** Comma-separated PostHog user UUIDs — only returns reports with these suggested reviewers. */ - suggested_reviewers?: string; - /** Comma-separated `P0`–`P4` priorities — only returns reports with one of these priorities. */ - priority?: string; - /** Comma-separated actionability choices. Only returns reports with one of these latest judgments. */ - actionability?: string; - /** Return the filtered total without fetching or enriching report rows. */ - count_only?: boolean; - /** - * Filter by whether a shipped implementation pull request exists. `true` keeps only PR - * reports, `false` only non-PR reports. - */ - has_implementation_pr?: boolean; - /** A space (task channel) UUID — only returns reports assigned to that space. Omit for the general view, which returns every report. */ - channel_id?: string; -} - -export interface SignalTeamConfig { - id: string; - default_autostart_priority: SignalReportPriority; - /** Team-wide default `channel_id|#channel-name` target for inbox notifications. `null` = no team default. */ - default_slack_notification_channel?: string | null; - autostart_base_branches?: Record | null; - /** Daily cap on new reports reaching the inbox, counted per project-timezone day. `null` = unlimited. */ - max_reports_per_day?: number | null; - /** Reports that first became visible today. `0` when there is no cap. Read-only. */ - reports_generated_today?: number; - /** Whether the cap is reached, pausing new reports until local midnight. `false` when there is no cap. Read-only. */ - daily_report_limit_reached?: boolean; - created_at: string; - updated_at: string; -} - -export interface SignalUserAutonomyConfig { - id?: string; - autostart_priority: SignalReportPriority | null; - /** ID of the team-scoped Slack `Integration` row used to deliver inbox-item notifications. */ - slack_notification_integration_id?: number | null; - /** `channel_id|#channel-name` target — same convention used by Insight Alerts. */ - slack_notification_channel?: string | null; - /** Minimum priority that triggers a notification (P0 highest). `null` = every priority. */ - slack_notification_min_priority?: SignalReportPriority | null; - created_at?: string; - updated_at?: string; -} - -export interface SlackChannelOption { - id: string; - name: string; - is_private: boolean; - is_member: boolean; - is_ext_shared: boolean; - is_private_without_access: boolean; -} - -export interface SlackChannelsResponse { - channels: SlackChannelOption[]; - lastRefreshedAt?: string; - has_more?: boolean; -} - -export interface SlackChannelsQueryParams { - search?: string; - limit?: number; - offset?: number; - channelId?: string; -} +export * from "@posthog/agent-contracts/domain-types"; diff --git a/products/desktop/packages/shared/src/flags.test.ts b/products/desktop/packages/shared/src/flags.test.ts new file mode 100644 index 000000000000..cb7152bb6027 --- /dev/null +++ b/products/desktop/packages/shared/src/flags.test.ts @@ -0,0 +1,11 @@ +import { BEDROCK_LLM_GATEWAY_FLAG } from "@posthog/agent-contracts/bedrock-gateway"; +import { describe, expect, it } from "vitest"; +import featureFlagKeys from "./feature-flag-keys.json" with { type: "json" }; + +describe("flags", () => { + it("keeps the Bedrock gateway flag literal in step with the flag registry", () => { + expect(BEDROCK_LLM_GATEWAY_FLAG).toBe( + featureFlagKeys.BEDROCK_LLM_GATEWAY_FLAG, + ); + }); +}); diff --git a/products/desktop/packages/shared/src/flags.ts b/products/desktop/packages/shared/src/flags.ts index e0476543643b..8dae8249ef09 100644 --- a/products/desktop/packages/shared/src/flags.ts +++ b/products/desktop/packages/shared/src/flags.ts @@ -79,26 +79,11 @@ export const CHANNEL_REPORTS_FLAG = featureFlagKeys.CHANNEL_REPORTS_FLAG; */ export const TRIAGE_FOCUS_FLAG = featureFlagKeys.TRIAGE_FOCUS_FLAG; -/** - * Serves a session's Claude traffic from Bedrock instead of Anthropic. The - * `test` variant sends `x-posthog-provider: bedrock`, which the gateway routes - * to its Bedrock backend; `control` sends nothing and the gateway keeps its - * `anthropic` default. - * - * The variants differ in resilience, not just in provider. `control` keeps the - * gateway's Bedrock *failover* (`x-posthog-use-bedrock-fallback`), which retries - * against Bedrock when Anthropic returns 5xx/429 or blocks on billing. `test` - * cannot use it: the gateway dispatches on the provider header and returns - * before reading the fallback one, and its direct-Bedrock path has no reverse - * fallback to Anthropic. So a Bedrock outage fails a `test` session outright. - */ -export const BEDROCK_LLM_GATEWAY_FLAG = - featureFlagKeys.BEDROCK_LLM_GATEWAY_FLAG; - -/** Variants of {@link BEDROCK_LLM_GATEWAY_FLAG}. */ -export const BEDROCK_GATEWAY_VARIANTS = ["test", "control"] as const; - -export type BedrockGatewayVariant = (typeof BEDROCK_GATEWAY_VARIANTS)[number]; +export { + BEDROCK_GATEWAY_VARIANTS, + BEDROCK_LLM_GATEWAY_FLAG, + type BedrockGatewayVariant, +} from "@posthog/agent-contracts/bedrock-gateway"; /** Gates the organization context wiki: the Context explorer in the nav rails. */ export const CONTEXT_LAYER_FLAG = featureFlagKeys.CONTEXT_LAYER_FLAG; /** Gates the "set up this space for" step in the create-space flow. */ diff --git a/products/desktop/packages/shared/src/index.ts b/products/desktop/packages/shared/src/index.ts index 3c4bc617ea5b..c2f65035d9e5 100644 --- a/products/desktop/packages/shared/src/index.ts +++ b/products/desktop/packages/shared/src/index.ts @@ -1,40 +1,7 @@ -export * from "./adapter"; -export { - buildActionUrl, - openAgentActionInput, - type ShowActionButton, - showActionSchema, - splitShowAction, -} from "./agent-actions"; -export type { - AgentContent, - AgentConversationEvent, - AgentToolCall, - AgentToolCallContent, - AgentToolCallContentBlock, - AgentToolCallLocation, - AgentToolCallStatus, - AgentToolKind, - AgentTurnUsage, -} from "./agent-conversation"; -export * from "./agent-runtime"; +export * from "@posthog/agent-contracts"; export * from "./analytics-events"; -export type { TaskRunUpdate } from "./api-http-client"; -export { - API_DOWNLOAD_TIMEOUT_MS, - API_TRANSFER_TIMEOUT_MS, - PostHogHttpClient, - PostHogHttpError, - transferTimeoutMs, -} from "./api-http-client"; export type { ArchivedTask } from "./archive-domain"; export { withTimeout } from "./async"; -export { - type BackoffOptions, - getBackoffDelay, - sleepWithBackoff, -} from "./backoff"; -export { isBinaryFile } from "./binary"; export { closeTab, closeTabs, @@ -60,55 +27,9 @@ export { tabsSnapshotSchema, tabViewStateSchema, } from "./browser-tabs-schemas"; -export { - boundPersistedMcpResult, - MAX_PERSISTED_MCP_RESULT_BYTES, - omitNullCallToolResultFields, -} from "./call-tool-result"; export * from "./canvas-contracts"; export * from "./canvas-platform"; export type { CloudRunSource, PrAuthorshipMode } from "./cloud"; -export { - deserializeCloudPrompt, - promptBlocksToText, - serializeCloudPrompt, -} from "./cloud-prompt"; -export { - adapterForModelId, - buildCloudTaskConfigOptions, - buildProviderModelGroups, - type CloudTaskConfigOption, - type CloudTaskConfigSelectGroup, - type CloudTaskConfigSelectOption, - compareModelsForPicker, - DEFAULT_CODEX_MODEL, - DEFAULT_GATEWAY_MODEL, - formatGatewayModelName, - formatModelId, - type GatewayModel, - getClaudeModelRecency, - getCloudTaskGatewayUrl, - getProviderName, - isAnthropicModel, - isAnthropicModelId, - isBasetenModel, - isCloudflareModel, - isCloudflareModelId, - isDeepseekModelId, - isModalModel, - isModalModelId, - isOpenAIModel, - normalizeGatewayModelsResponse, - pickAllowedModel, -} from "./cloud-task-models"; -export { - type CustomCloud, - configureCustomCloud, - customCloudSchema, - getCustomCloud, - isCustomCloudHost, - normalizeCustomCloud, -} from "./custom-cloud"; export { buildLoopDeeplink, buildScoutDeeplink, @@ -119,156 +40,20 @@ export { type NewTaskSharedParams, parseGitHubIssueUrl, } from "./deep-links"; -export { - DISMISSAL_REASON_OPTIONS, - type DismissalReasonOptionValue, - dismissalReasonLabel, - isDismissalReasonSnooze, - RESOLVE_REASON_OPTIONS, - type ReportStateReason, - type ResolveReasonOptionValue, -} from "./dismissal-reasons"; -export { - type ArtifactSource, - type ArtifactType, - type CloudPermissionOption, - type CloudTaskPermissionRequestUpdate, - type CloudTaskUpdatePayload, - isSkillBundleArtifactMetadata, - isTerminalStatus, - type PendingFollowupMessage, - type StoreSkillStub, - type Task, - type TaskRun, - type TaskRunArtifact, - type TaskRunArtifactMetadata, - type TaskRunEnvironment, - type TaskRunState, - type TaskRunStateField, - type TaskRunStatus, - TERMINAL_STATUSES, - taskRunStateSchema, -} from "./domain-types"; -export * from "./enrichment"; -export { - classifyGatewayLimitError, - classifyPromptFailure, - type GatewayLimitCause, - getErrorMessage, - isAuthError, - isFatalSessionError, - isNotAuthenticatedError, - isRateLimitError, - isTransientUpstreamError, - isTurnEndedWithoutResponseError, - NotAuthenticatedError, - type PromptFailure, - type PromptFailureKind, - serializeError, -} from "./errors"; -export type { ExecutionMode } from "./exec-types"; -export { - CODEX_MODE_PRESETS, - type CodexModePreset, - resolveCloudInitialPermissionMode, -} from "./execution-modes"; export * from "./flags"; export * from "./git-domain"; export * from "./git-naming"; -export { - ALLOWED_IMAGE_MIME_TYPES, - buildImageDataUrl, - estimateBase64Bytes, - getImageMimeType, - IMAGE_MIME_TYPES, - isAllowedImageMimeType, - isClaudeImageFile, - isClaudeImageMimeType, - isGifFile, - isImageFile, - isRasterImageFile, - MAX_CLAUDE_IMAGE_BYTES, - MAX_IMAGE_BASE64_LENGTH, - parseImageDataUrl, -} from "./image"; export { buildDiscussReportPrompt, buildLocalCodeSnapshotPrompt, CODE_CONTEXT_DISCLOSURE, NO_CHECKOUT_DISCLOSURE, } from "./inbox-prompts"; -export type { - AvailableSuggestedReviewer, - SignalRecordKind, - SourceProduct, - SourceType, - ToggleableSourceProduct, -} from "./inbox-types"; -export { - EXTERNAL_INBOX_SOURCE_BY_PRODUCT, - EXTERNAL_INBOX_SOURCES, - filterInboxSourceOptions, - sourceNeedsFullRefresh, -} from "./inbox-types"; export { EXTERNAL_LINKS } from "./links"; -export type { - AcpMcpServer, - CloudMcpServerRelayDesignation, - LocalMcpServerDescriptor, - LocalMcpServerScope, - LocalMcpTransport, - McpServerConnection, -} from "./local-mcp-domain"; -export { toAcpMcpServers } from "./local-mcp-domain"; -export { - MCP_TOOL_PERMISSION_OPTIONS, - type McpToolApprovalState, - type McpToolPermissionDecision, - type McpToolPermissionRequest, - type McpToolPolicy, -} from "./mcp-tool-policy-domain"; export { formatMention, splitMentionSegments, } from "./mentions"; -export { - isOfferedModel, - isRetiredModel, - supports1MContext, - supportsFastMode, -} from "./model-catalog"; -export { - customModelMeta, - DEFAULT_OPTION_META_KEY, - defaultEligibleModel, - isCustomModelOption, - isDefaultSelectOption, - isRestrictedModelOption, - modelHarnessMeta, - OPTION_DOCS_URL_META_KEY, - restrictedModelMeta, - selectOptionDocsUrl, - selectOptionHarness, -} from "./models"; -export { - DEV_CALLBACK_PORT, - DEV_REDIRECT_URI, - getOauthClientIdFromRegion, - OAUTH_SCOPE_VERSION, - OAUTH_SCOPES, -} from "./oauth"; -export { - type AgentRunState, - agentRunStateSchema, - type PiSubagentToolCall, - type PiSubagentToolDetails, - type PiWorkflowToolDetails, - piSubagentToolCallSchema, - piSubagentToolDetailsSchema, - piWorkflowToolDetailsSchema, - type WorkflowAgentState, - workflowAgentStateSchema, -} from "./orchestration"; export { CLIPBOARD_ATTACHMENT_DIR_NAME, CLIPBOARD_ATTACHMENT_PREFIX, @@ -282,62 +67,10 @@ export { toRelativePath, } from "./path"; export type { PiMessagingMode, PiRuntimeHealth } from "./pi-session"; -export { - createPiToolCallRecord, - formatMcpToolLabel, - formatPiMcpToolName, - isPiToolName, - PI_TOOL_KIND_BY_NAME, - type PiMcpCallDetails, - type PiToolCallInput, - type PiToolCallRecord, - type PiToolName, - parsePiMcpCallDetails, - readPiMcpCallDetails, -} from "./pi-tool-call"; -export { POSTHOG_PRODUCTS, type PostHogProductId } from "./posthog-products"; -export { - buildPrOutput, - mergePrUrls, - promotePrUrl, - readPrSummaries, - readPrUrls, -} from "./pr-urls"; -export { isPrivateIpv4Octets, isPrivateIpv6Literal } from "./private-network"; -export { - type CapabilityNotch, - DEFAULT_REASONING_EFFORT, - getCapabilityLadder, - getReasoningEffortOptions, - isSupportedReasoningEffort, - type SupportedReasoningEffort, -} from "./reasoning-effort"; export { REFUND_REASON_OPTIONS } from "./refund-reasons"; -export { - CLOUD_REGIONS, - type CloudRegion, - describeRegion, - REGION_LABELS, - type RegionLabel, -} from "./regions"; export { normalizeRepoKey } from "./repo"; export { getTaskRepository, parseRepository } from "./repository"; export { rewriteSavedLocation } from "./route-migrations"; -export { Saga, type SagaLogger, type SagaResult } from "./saga"; -export { - type AcpMessage, - IDLE_RESUME_STOP_REASON, - IMPORTED_USER_PROMPT_META_KEY, - isIdleResumeTurnComplete, - isJsonRpcNotification, - isJsonRpcRequest, - isJsonRpcResponse, - type JsonRpcMessage, - type JsonRpcRequest, - type StoredLogEntry, - type UserShellExecuteParams, - type UserShellExecuteResult, -} from "./session-events"; export { type AgentSession, cycleModeOption, @@ -357,23 +90,6 @@ export { sessionSupportsSideQuestion, TRANSCRIPT_TAIL_WINDOW, } from "./sessions"; -export type { - ExportedSkill, - SkillFileEntry, - SkillInfo, - SkillSource, - UploadableSkillSource, -} from "./skills"; -export { - DISABLE_MODEL_INVOCATION_METADATA_KEY, - isIgnoredSkillEntry, - isIgnoredSkillPath, - SKILL_EXISTS_MARKER, - serializeSkillMarkdown, - stripFrontmatter, -} from "./skills"; -export { leadingSlashCommand } from "./slash-commands"; -export type { PostHogAPIConfig } from "./task"; export type { TaskCreationInput, TaskCreationOutput, @@ -390,25 +106,12 @@ export { getRelativeDateGroup, } from "./time"; export { singleLineTitle } from "./title-text"; -export { - mcpToolKey, - parseMcpToolName, - posthogToolMeta, - readAgentToolName, - readMcpInstallationId, - readMcpProxyCallDetails, - readMcpToolDescriptor, - readMcpToolName, - readParentToolCallId, -} from "./tool-meta"; -export { TranscriptBoundaries } from "./transcript-neutral-messages"; export { TypedEventEmitter } from "./typed-event-emitter"; export { isSafeExternalUrl, isSafeGitHubPullRequestUrl, isSafePostHogUrl, } from "./url"; -export { getCloudUrlFromRegion } from "./urls"; export { buildVideoDataUrl, getVideoMimeType, diff --git a/products/desktop/packages/shared/src/model-catalog.ts b/products/desktop/packages/shared/src/model-catalog.ts index eb9c42e653fc..7a0cba38157d 100644 --- a/products/desktop/packages/shared/src/model-catalog.ts +++ b/products/desktop/packages/shared/src/model-catalog.ts @@ -1,146 +1 @@ -import type { Adapter } from "./adapter"; -import { - type CatalogModel, - FALLBACK_REASONING_EFFORTS, - FAMILY_REASONING_EFFORTS, - MODELS, - PROVIDER_BY_RUNTIME_ADAPTER, - type ReasoningEffort, -} from "./model-catalog.generated"; - -export { - type CatalogModel, - COST_BASELINE_LABEL, - COST_BASELINE_MODEL, - DEFAULT_MODEL_BY_RUNTIME_ADAPTER, - MODELS, - type ModelCost, - PROVIDER_BY_RUNTIME_ADAPTER, - REASONING_EFFORTS, - type ReasoningEffort, - RUNTIME_ADAPTERS, - RUNTIME_OPTIONS, - type Runtime, - type RuntimeAdapter, - type RuntimeOption, -} from "./model-catalog.generated"; - -/** - * The form a model id is looked up under. The gateway serves some models both bare and - * provider-qualified (`openai/gpt-5.6-sol`) and a picker may hand back either, so folding - * the two together is what stops one model from having two answers. Only the provider - * prefixes the catalog knows are stripped, leaving ids that carry a slash of their own - * (`@cf/zai-org/glm-5.2`) intact. - */ -export function normalizeModelId(modelId: string): string { - const normalized = modelId.trim().toLowerCase(); - for (const provider of Object.values(PROVIDER_BY_RUNTIME_ADAPTER)) { - if (normalized.startsWith(`${provider}/`)) { - return normalized.slice(provider.length + 1); - } - } - return normalized; -} - -/** - * The efforts this model may run at, empty when it takes no effort at all. - * - * Resolved in three steps: the exact id, then the family it belongs to, then what the - * adapter accepts generally. Codex passes any `gpt-*` identifier through, so a newly - * served id still runs, while Claude has no fallback and yields nothing — which is what - * makes the backend reject it. Mirrors `reasoning_efforts_for` in - * products/tasks/backend/model_catalog.py, so a selection this offers is one a run can - * actually use. - */ -export function reasoningEffortsForModel( - adapter: Adapter, - modelId: string, -): readonly ReasoningEffort[] { - const normalized = normalizeModelId(modelId); - const model = MODELS.find( - (candidate) => - candidate.runtimeAdapter === adapter && candidate.id === normalized, - ); - if (model) return model.reasoningEfforts; - // Longest matching prefix wins, so the table's declaration order is free. - const family = FAMILY_REASONING_EFFORTS.filter( - (candidate) => - candidate.runtimeAdapter === adapter && - normalized.startsWith(candidate.prefix), - ).sort((a, b) => b.prefix.length - a.prefix.length)[0]; - return family?.reasoningEfforts ?? FALLBACK_REASONING_EFFORTS[adapter] ?? []; -} - -/** - * The catalog's entry for a model id in any form a picker hands back. The gateway serves - * ids the catalog omits, so a miss is the ordinary case and never an error. - */ -export function catalogModelFor(modelId: string): CatalogModel | undefined { - const normalized = normalizeModelId(modelId); - return MODELS.find((candidate) => candidate.id === normalized); -} - -/** - * Every access flag the catalog gates a model behind, without duplicates. - * - * A picker resolves these and hands the answers back to the filter, so gating a model is - * done by giving it an `access_flag` in products/tasks/backend/model_catalog.py and no - * picker has to learn the flag's name. Empty while no model is behind a rollout. - */ -export const MODEL_ACCESS_FLAGS: readonly string[] = [ - ...new Set( - MODELS.map((model) => model.accessFlag).filter( - (flag): flag is string => flag !== undefined, - ), - ), -]; - -/** - * The feature flag a person needs before a picker offers this model, or `undefined` when - * it is generally available. - * - * Governs display only. The server decides whether a run may use the model, so a stale - * projection can hide a model a person may use, never the other way round. - */ -export function accessFlagForModel(modelId: string): string | undefined { - return catalogModelFor(modelId)?.accessFlag; -} - -/** - * The name the catalog pins for a model, or `undefined` to let the caller format the id. - * - * Only the ids whose derived name reads wrong carry one, so a caller keeps its formatter - * for everything else. Mirrors `label_for_model` in - * products/tasks/backend/model_catalog.py, so both surfaces name a model identically. - */ -export function labelForModel(modelId: string): string | undefined { - return catalogModelFor(modelId)?.label; -} - -/** - * Whether a picker may offer this model. A model the catalog omits is not offered however - * the gateway answers, and a retired one stays listed only so a pinned session keeps - * running under a name and a price. - */ -export function isOfferedModel(modelId: string): boolean { - const model = catalogModelFor(modelId); - return model !== undefined && !model.retired; -} - -/** - * Whether the catalog has retired this model. Narrower than the inverse of `isOfferedModel`: - * an id the catalog never lists is not retired, because a runtime can still drive one — a - * person's own OpenAI subscription runs vendor variants such as `gpt-5.5-codex` that the - * gateway never serves. Ask this about the model a run uses, `isOfferedModel` about a picker. - */ -export function isRetiredModel(modelId: string): boolean { - return catalogModelFor(modelId)?.retired === true; -} - -export function supports1MContext(modelId: string): boolean { - return catalogModelFor(modelId)?.supports1MContext ?? false; -} - -export function supportsFastMode(modelId: string): boolean { - return catalogModelFor(modelId)?.supportsFastMode ?? false; -} +export * from "@posthog/agent-contracts/model-catalog"; diff --git a/products/desktop/packages/shared/src/posthog-property-headers.ts b/products/desktop/packages/shared/src/posthog-property-headers.ts index 7bb92ae24dca..e41649cfae3a 100644 --- a/products/desktop/packages/shared/src/posthog-property-headers.ts +++ b/products/desktop/packages/shared/src/posthog-property-headers.ts @@ -1,223 +1 @@ -export type PosthogPropertyValue = string | number | boolean | null | undefined; - -export type PosthogProperties = Record; - -export const POSTHOG_PROJECT_ID_HEADER = "X-PostHog-Project-Id"; -export const POSTHOG_TASK_RUN_ID_HEADER = "X-PostHog-Task-Run-Id"; - -/** - * Make a value safe to embed in an HTTP header value. Only printable ASCII - * survives: latin1 is valid per RFC 9110 and undici accepts it, but Bun's - * fetch — which the Claude Code CLI uses for `ANTHROPIC_CUSTOM_HEADERS` — - * rejects any non-ASCII header value. NFKD plus the final strip is what - * transliterates accented letters to their ASCII base (`più` → `piu`); the - * combining-mark pass just keeps a stray mark from splitting a newline run - * before it is collapsed to a single space. - */ -function sanitizeHeaderValue(value: string): string { - return value - .normalize("NFKD") - .replace(/[\u0300-\u036f]/g, "") - .replace(/[\r\n]+/g, " ") - .replace(/[^\x20-\x7e]/g, ""); -} - -function buildEntries(properties: PosthogProperties): Array<[string, string]> { - const entries: Array<[string, string]> = []; - for (const [key, value] of Object.entries(properties)) { - if (value === null || value === undefined) continue; - entries.push([ - `x-posthog-property-${key}`, - sanitizeHeaderValue(String(value)), - ]); - } - return entries; -} - -function taskRunIdHeader(properties: PosthogProperties): string | null { - const taskRunId = properties.task_run_id; - return typeof taskRunId === "string" ? sanitizeHeaderValue(taskRunId) : null; -} - -/** - * Build a `Record` of `x-posthog-property-` headers - * suitable for `fetch()` init.headers. The LLM gateway lifts each header - * onto the `$ai_generation` event it captures - * (see `services/llm-gateway/src/llm_gateway/request_context.py` in - * posthog/posthog). `null`/`undefined` values are dropped; values are - * sanitized via {@link sanitizeHeaderValue}. - */ -export function buildPosthogPropertyHeaderRecord( - properties: PosthogProperties, -): Record { - const taskRunId = taskRunIdHeader(properties); - return { - ...Object.fromEntries(buildEntries(properties)), - ...(taskRunId ? { [POSTHOG_TASK_RUN_ID_HEADER]: taskRunId } : {}), - }; -} - -/** - * Same property semantics as {@link buildPosthogPropertyHeaderRecord}, but - * returns a newline-joined string of `key: value` lines — the format - * `ANTHROPIC_CUSTOM_HEADERS` expects when wiring headers into the Claude - * Agent SDK. - */ -export function buildPosthogPropertyHeaderLines( - properties: PosthogProperties, -): string { - return Object.entries(buildPosthogPropertyHeaderRecord(properties)) - .map(([key, value]) => `${key}: ${value}`) - .join("\n"); -} - -/** - * Attribution node header for the person a request is spent on behalf of. The - * gateway keys its per-user spend limit on this value, so it must be the same - * node the spend-limit endpoint writes the limit against: the user's distinct - * id, not their uuid (see products/ai_gateway/backend/logic.py, _spend_node). - * - * Trust model: for local sessions this header is asserted by the client, so - * the limit it keys is a self-imposed guardrail, not a security boundary. - * Cloud runs pin the node server-side into the run's scoped token. - */ -const POSTHOG_USER_HEADER = "X-PostHog-User"; - -export function buildPosthogUserHeaderRecord( - userNode: string | null | undefined, -): Record { - return userNode - ? { [POSTHOG_USER_HEADER]: sanitizeHeaderValue(userNode) } - : {}; -} - -export function buildPosthogUserHeaderLines( - userNode: string | null | undefined, -): string { - return userNode - ? `${POSTHOG_USER_HEADER}: ${sanitizeHeaderValue(userNode)}` - : ""; -} - -export function buildPosthogProjectHeaderRecord( - projectId: number | null | undefined, -): Record { - return projectId ? { [POSTHOG_PROJECT_ID_HEADER]: String(projectId) } : {}; -} - -export function buildPosthogProjectHeaderLines( - projectId: number | null | undefined, -): string { - return projectId ? `${POSTHOG_PROJECT_ID_HEADER}: ${projectId}` : ""; -} - -export function buildPosthogScopedPropertyHeaderRecord( - properties: PosthogProperties, - projectId: number | null | undefined, -): Record { - return { - ...buildPosthogPropertyHeaderRecord(properties), - ...buildPosthogProjectHeaderRecord(projectId), - }; -} - -export function buildPosthogScopedPropertyHeaderLines( - properties: PosthogProperties, - projectId: number | null | undefined, -): string { - return [ - buildPosthogPropertyHeaderLines(properties), - buildPosthogProjectHeaderLines(projectId), - ] - .filter(Boolean) - .join("\n"); -} - -/** Header carrying the whole property set as one JSON object. */ -const POSTHOG_PROPERTIES_HEADER = "X-PostHog-Properties"; - -/** - * Byte cap the Go gateway enforces on {@link POSTHOG_PROPERTIES_HEADER}; a - * larger blob is rejected outright, losing every property including - * `ai_product`. Keep in sync with `maxPropertiesLen` in the gateway's - * `internal/httpapi/dispatch.go`. - */ -const MAX_PROPERTIES_BYTES = 8192; - -const encoder = new TextEncoder(); - -function byteLength(value: string): number { - return encoder.encode(value).length; -} - -/** - * Serialize properties for {@link POSTHOG_PROPERTIES_HEADER}, or `""` when - * there is nothing to send. - * - * Keys beginning with `$` are dropped: the gateway strips reserved `$ai_*` - * keys at the header boundary, so sending them silently loses them. Values - * are sanitized like the per-property headers so a stray control character - * cannot break the header block. - * - * Callers supply free-text values (task titles), so the blob can exceed - * {@link MAX_PROPERTIES_BYTES}. Rather than let the gateway reject the whole - * header, the longest string values are dropped one at a time until it fits, - * preferring to lose descriptive text over attribution keys, which are short. - */ -export function buildPosthogPropertiesBlob( - properties: PosthogProperties, -): string { - const clean: PosthogProperties = {}; - for (const [key, value] of Object.entries(properties)) { - if (value === null || value === undefined) continue; - if (key.startsWith("$")) continue; - // Keys are sanitized too: unlike the per-property headers, where the key - // becomes the header name, here it is serialized into the header value, - // so a non-ASCII key would make the whole request unsendable. - const safeKey = sanitizeHeaderValue(key); - if (!safeKey) continue; - clean[safeKey] = - typeof value === "string" ? sanitizeHeaderValue(value) : value; - } - if (Object.keys(clean).length === 0) return ""; - - let blob = JSON.stringify(clean); - while (byteLength(blob) > MAX_PROPERTIES_BYTES) { - const longest = Object.entries(clean) - .filter(([, value]) => typeof value === "string") - .sort((a, b) => (b[1] as string).length - (a[1] as string).length)[0]; - // Only non-string values remain and they still overflow: send nothing - // rather than a blob the gateway will reject. - if (!longest) return ""; - delete clean[longest[0]]; - blob = JSON.stringify(clean); - } - return blob; -} - -/** - * {@link buildPosthogPropertiesBlob} as a `fetch()`-ready header record, empty - * when there is nothing to send. - */ -export function buildPosthogPropertiesHeaderRecord( - properties: PosthogProperties, -): Record { - const blob = buildPosthogPropertiesBlob(properties); - const taskRunId = taskRunIdHeader(properties); - return { - ...(blob ? { [POSTHOG_PROPERTIES_HEADER]: blob } : {}), - ...(taskRunId ? { [POSTHOG_TASK_RUN_ID_HEADER]: taskRunId } : {}), - }; -} - -/** - * {@link buildPosthogPropertiesHeaderRecord} as `key: value` lines for - * `ANTHROPIC_CUSTOM_HEADERS`, empty when there is nothing to send. - */ -export function buildPosthogPropertiesHeaderLines( - properties: PosthogProperties, -): string { - return Object.entries(buildPosthogPropertiesHeaderRecord(properties)) - .map(([key, value]) => `${key}: ${value}`) - .join("\n"); -} +export * from "@posthog/agent-contracts/posthog-property-headers"; diff --git a/products/desktop/packages/shared/src/product-engineer-prompt.ts b/products/desktop/packages/shared/src/product-engineer-prompt.ts index aa2522c302ff..4291086094c5 100644 --- a/products/desktop/packages/shared/src/product-engineer-prompt.ts +++ b/products/desktop/packages/shared/src/product-engineer-prompt.ts @@ -1,47 +1 @@ -export const SIMPLIFIED_TECHNICAL_ENGLISH_INSTRUCTION = - "Talk and write only in Simplified Technical English (ASD-STE100)."; - -export const PRODUCT_ENGINEER_PROMPT = `Operate as an expert product engineer. Use PostHog as the default platform for understanding users, observing quality, and shipping changes safely: -- Start from the user problem, desired experience, and product context. Understand why the work matters before deciding what to build. -- Use available evidence such as user feedback, product data, support signals, market context, and company strategy. Ask for missing context when it would change the decision. -- Exercise product judgment. Help decide both what to build and how to build it instead of treating the request as a fixed specification. -- Choose the smallest valuable solution that creates a fast, useful feedback loop. Prototype, descope, and avoid polishing assumptions that real users have not validated. -- Own the complete experience across implementation, usability, reliability, privacy, security, rollout, documentation, and support. Do not stop when the code compiles or the narrow task is complete. -- Ship safely and learn from reality. Use tests, feature flags, staged rollouts, and experiments when they fit the risk and uncertainty. -- Define what success means and make it observable. Measure adoption, outcomes, and failures. -- Follow through after shipping. Inspect usage and feedback, iterate on what works, and remove complexity that does not earn its place. - -Choose the smallest set of PostHog products that solves the user problem. Know PostHog's product catalog: -- Product Analytics: Analyze event-based user behavior with trends, funnels, retention, paths, and cohorts. -- Web Analytics: Measure website traffic, acquisition, pages, conversions, and performance. -- Session Replay: Record and replay real user sessions to see behavior and friction. -- Feature Flags: Control who gets features and manage progressive rollouts. -- Experiments: Run A/B tests and measure causal impact against product metrics. -- Surveys: Collect in-product user feedback and link responses to behavior. -- Error Tracking: Capture, group, and diagnose exceptions with user and session context. -- Managed warehouse: Use a PostHog-managed analytical Postgres database that combines PostHog and connected source data. -- Data pipelines: Send event and warehouse data to external destinations in real time or batch. -- PostHog AI: Query product data, build insights, write SQL, find replays, and explain findings in plain English. -- AI Observability: Trace LLM calls, prompts, responses, tools, latency, tokens, and cost. -- Logs: Ingest, search, and retain structured application logs. -- Workflows: Trigger automated messages and actions from product behavior. -- Inbox: Review and steer prioritized self-driving reports and pull requests before they ship. -- Replay Vision: Use AI to turn session recordings into structured, queryable data. - -Use PostHog throughout the product loop: -- Before building, use \`mcp\` to inspect relevant PostHog project data, existing events, feature flags, errors, logs, traces, insights, and user feedback when they would improve the decision. Search before calling. Read or list before writing or creating, and reuse existing resources. -- Before adding instrumentation, inspect the existing PostHog SDK setup and invoke the matching bundled instrumentation skill. Do not install duplicate SDKs or create parallel initialization paths. -- Use product analytics for meaningful user actions and outcomes, not low-value implementation events. Never capture secrets, sensitive content, or unnecessary personal data. -- Use PostHog feature flags for uncertain or risky rollouts. Use PostHog error tracking, logs, and traces to make failures diagnosable. Use PostHog AI Observability for AI model calls. -- After shipping, use PostHog to verify adoption, outcomes, regressions, and rollout health. Let observed behavior drive the next iteration. - -Prefer customer impact and product quality over technical novelty. Treat code as one tool for creating useful, measurable outcomes.`; - -export function prependProductEngineerPrompt(prompt: string): string { - if (prompt.includes(PRODUCT_ENGINEER_PROMPT)) { - return prompt; - } - return prompt - ? `${PRODUCT_ENGINEER_PROMPT}\n\n${prompt}` - : PRODUCT_ENGINEER_PROMPT; -} +export * from "@posthog/agent-contracts/product-engineer-prompt"; diff --git a/products/desktop/packages/shared/src/refund-reasons.ts b/products/desktop/packages/shared/src/refund-reasons.ts index 0005f1bbee1f..7503576a81a0 100644 --- a/products/desktop/packages/shared/src/refund-reasons.ts +++ b/products/desktop/packages/shared/src/refund-reasons.ts @@ -1,4 +1,4 @@ -import type { SignalReportRefundReason } from "./domain-types"; +import type { SignalReportRefundReason } from "@posthog/agent-contracts/domain-types"; /** * Canonical refund reasons shown when refunding a report's PR. Values are diff --git a/products/desktop/packages/shared/src/rich-output-prompt.ts b/products/desktop/packages/shared/src/rich-output-prompt.ts index f2a093d7ffb4..e4111e72eaf5 100644 --- a/products/desktop/packages/shared/src/rich-output-prompt.ts +++ b/products/desktop/packages/shared/src/rich-output-prompt.ts @@ -1,38 +1 @@ -import { OBJECT_TAG_PROMPT_KIND_LIST } from "./objectTagKinds.generated"; - -/** - * Prompt block teaching an agent the object-tag vocabulary the desktop - * renders as live references (chips, hover previews, chart cards). Shared by - * every agent runtime so its syntax stays in sync with what `remarkObjectTags` - * parses; the kind list itself is generated from the registry - * (posthog/object_tags/kinds.py) so the prompt cannot drift from what the - * renderers understand. - */ -export const RICH_OUTPUT_TAGS_PROMPT = `Embed the PostHog objects behind your conclusions as XML tags, the same convention as \`\` attachments. Every tag is a live reference the app resolves when shown - never restate the object's data in your text, and never put tags inside code fences. -- Inline reference: \`short human label\` inside a sentence, e.g. \`The checkout funnel dropped after new-checkout-flow rolled out.\` Kinds: ${OBJECT_TAG_PROMPT_KIND_LIST}. Use the object's id (insights: the short id; feature flags: the numeric id, falling back to the key; Inbox reports: the report uuid; persons: the uuid). It renders as a chip with a live hover preview that opens the object in PostHog. -- Inline SQL: \`SELECT count() FROM events WHERE ...\` - the SQL is the tag body, the label is what the sentence shows. Hovering runs the query live; clicking opens the SQL editor. -- Full-size chart, for any numeric or time-series answer (always prefer this over a markdown table): a saved insight \`\` or a query \`SELECT ...\`. The chart executes live on every view. Include the time range in the title, and keep blank lines out of the SQL body. -- Some PostHog MCP query tools render their result as an interactive chart in the conversation, and the tool result says so. When the tool result says the user already sees the result as an interactive view, do not embed the same data again as a \`\` chart; write the conclusion in text and let that view carry the data. When it does not, the tool renders nothing on its own, so follow the full-size chart rule above. -- Recording card: \`\` renders the recording's details with a link into PostHog's player. Use it when a specific session is the evidence.`; - -export function appendRichOutputPrompt( - prompt: string, - interactionOrigin?: string | null, -): string { - if ( - interactionOrigin && - interactionOrigin !== "desktop" && - interactionOrigin !== "signal_report" - ) { - return prompt - .replaceAll( - `\n\n## Rich output in replies\n${RICH_OUTPUT_TAGS_PROMPT}`, - "", - ) - .replaceAll(RICH_OUTPUT_TAGS_PROMPT, ""); - } - if (prompt.includes(RICH_OUTPUT_TAGS_PROMPT)) { - return prompt; - } - return `${prompt}\n\n## Rich output in replies\n${RICH_OUTPUT_TAGS_PROMPT}`; -} +export * from "@posthog/agent-contracts/rich-output-prompt"; diff --git a/products/desktop/packages/shared/src/schemas.ts b/products/desktop/packages/shared/src/schemas.ts index 32b774b82aa7..75d5fc2f48f0 100644 --- a/products/desktop/packages/shared/src/schemas.ts +++ b/products/desktop/packages/shared/src/schemas.ts @@ -1,44 +1 @@ -import { z } from "zod"; - -const spaceGoalPeriodSchema = z.enum(["day", "week", "month"]); -const spaceGoalDirectionSchema = z.enum(["at_least", "at_most"]); - -export const spaceGoalInputSchema = z.object({ - statement: z.string().trim().min(1).max(2000), - period: spaceGoalPeriodSchema, - direction: spaceGoalDirectionSchema, - target: z.string().max(64).nullish(), - deadline: z.iso.date().nullish(), - insight_short_id: z.string().max(64).nullish(), -}); - -export const spaceFeatureInputSchema = z.object({ - name: z.string().trim().min(1).max(200), - description: z.string().max(2000).optional(), - flag_key: z.string().max(400).nullish(), -}); - -const repositorySchema = z.string().max(255).nullish(); - -export const spaceSetupInputSchema = z.discriminatedUnion("kind", [ - z.object({ - kind: z.literal("goal"), - goal: spaceGoalInputSchema, - repository: repositorySchema, - }), - z.object({ - kind: z.literal("feature"), - feature: spaceFeatureInputSchema, - repository: repositorySchema, - }), -]); - -export const spaceSetupStartedSchema = z.object({ task_id: z.uuid() }); - -export type SpaceGoalPeriod = z.infer; -export type SpaceGoalDirection = z.infer; -export type SpaceGoalInput = z.infer; -export type SpaceFeatureInput = z.infer; -export type SpaceSetupInput = z.infer; -export type SpaceSetupKind = SpaceSetupInput["kind"]; -export type SpaceSetupStarted = z.infer; +export * from "@posthog/agent-contracts/schemas"; diff --git a/products/desktop/packages/shared/src/sessions.ts b/products/desktop/packages/shared/src/sessions.ts index 93d15397b26e..090c5c1da2f8 100644 --- a/products/desktop/packages/shared/src/sessions.ts +++ b/products/desktop/packages/shared/src/sessions.ts @@ -6,11 +6,14 @@ import type { SessionConfigSelectOption, SessionConfigSelectOptions, } from "@agentclientprotocol/sdk"; -import type { Adapter, ModelAccess } from "./adapter"; +import type { Adapter, ModelAccess } from "@posthog/agent-contracts/adapter"; +import type { + TaskRunArtifact, + TaskRunStatus, +} from "@posthog/agent-contracts/domain-types"; +import type { ExecutionMode } from "@posthog/agent-contracts/exec-types"; +import type { AcpMessage } from "@posthog/agent-contracts/session-events"; import type { SkillButtonId } from "./analytics-events"; -import type { TaskRunArtifact, TaskRunStatus } from "./domain-types"; -import type { ExecutionMode } from "./exec-types"; -import type { AcpMessage } from "./session-events"; export type { Adapter }; diff --git a/products/desktop/packages/shared/src/task-context.ts b/products/desktop/packages/shared/src/task-context.ts index 59b3fbbed86c..4f84ef459e7f 100644 --- a/products/desktop/packages/shared/src/task-context.ts +++ b/products/desktop/packages/shared/src/task-context.ts @@ -1,14 +1 @@ -export interface TaskContextInput { - taskId: string; - cwd: string; - customInstructions?: string; - additionalDirectories?: string[]; - channelMode?: boolean; -} - -export interface TaskContext extends TaskContextInput { - projectId: number; - apiHost: string; - environment: "local" | "cloud"; - additionalInstructions?: string; -} +export * from "@posthog/agent-contracts/task-context"; diff --git a/products/desktop/packages/shared/src/task-creation-domain.ts b/products/desktop/packages/shared/src/task-creation-domain.ts index 531cca99cadf..01b729638572 100644 --- a/products/desktop/packages/shared/src/task-creation-domain.ts +++ b/products/desktop/packages/shared/src/task-creation-domain.ts @@ -1,12 +1,12 @@ -import type { Adapter, ModelAccess } from "./adapter"; -import type { AgentRuntime } from "./agent-runtime"; -import type { CloudRunSource, PrAuthorshipMode } from "./cloud"; -import type { Task } from "./domain-types"; -import type { ExecutionMode } from "./exec-types"; +import type { Adapter, ModelAccess } from "@posthog/agent-contracts/adapter"; +import type { AgentRuntime } from "@posthog/agent-contracts/agent-runtime"; +import type { Task } from "@posthog/agent-contracts/domain-types"; +import type { ExecutionMode } from "@posthog/agent-contracts/exec-types"; import type { CloudMcpServerRelayDesignation, McpServerConnection, -} from "./local-mcp-domain"; +} from "@posthog/agent-contracts/local-mcp-domain"; +import type { CloudRunSource, PrAuthorshipMode } from "./cloud"; import type { WorkspaceMode } from "./workspace"; import type { Workspace } from "./workspace-domain"; diff --git a/products/desktop/packages/shared/src/types.ts b/products/desktop/packages/shared/src/types.ts index 4635212a7a0e..bc6672e9e398 100644 --- a/products/desktop/packages/shared/src/types.ts +++ b/products/desktop/packages/shared/src/types.ts @@ -1,6 +1,6 @@ -export * from "./domain-types"; -export * from "./inbox-types"; +export * from "@posthog/agent-contracts/domain-types"; +export * from "@posthog/agent-contracts/inbox-types"; export type { SignalReportOrderingField, SignalReportStatus, -} from "./signal-types"; +} from "@posthog/agent-contracts/signal-types"; diff --git a/products/desktop/packages/shared/src/video.test.ts b/products/desktop/packages/shared/src/video.test.ts index cc9e97f4a17f..d79e8908cffa 100644 --- a/products/desktop/packages/shared/src/video.test.ts +++ b/products/desktop/packages/shared/src/video.test.ts @@ -1,5 +1,5 @@ +import { isBinaryFile } from "@posthog/agent-contracts/binary"; import { describe, expect, it } from "vitest"; -import { isBinaryFile } from "./binary"; import { getVideoMimeType, isAllowedVideoMimeType, diff --git a/products/desktop/packages/shared/src/video.ts b/products/desktop/packages/shared/src/video.ts index 2d5b04d85dfd..d961c0e8e55e 100644 --- a/products/desktop/packages/shared/src/video.ts +++ b/products/desktop/packages/shared/src/video.ts @@ -1,4 +1,4 @@ -import { extensionOf } from "./image"; +import { extensionOf } from "@posthog/agent-contracts/image"; // Container formats Chromium (and Electron, which bundles proprietary codecs) // can decode in a