diff --git a/.agents/skills/summon/SKILL.md b/.agents/skills/summon/SKILL.md index a49a605..87c3230 100644 --- a/.agents/skills/summon/SKILL.md +++ b/.agents/skills/summon/SKILL.md @@ -41,9 +41,9 @@ handlers, network, credentials, state, grants, and the selected `SurfacePlan`. Generated artifacts must not emit or widen `/surface-plan`. New generation servers should prefer `runSurfaceGeneration(input, emit)` from -`@summon/server`; `generateSurfaceStream()` remains available for existing -async-generator integrations. Applications should consume built package exports, -not `src/*.ts` paths. +`@anarchitecture/summon-server`; `generateSurfaceStream()` remains available for +existing async-generator integrations. Applications should consume built public +package exports, not `src/*.ts` paths or `@summon-internal/*` packages. Use `defineAction` and `defineDataResource` for common host-backed interactivity. Use `defineWorkerAction` / `defineWorkerResource` for host-owned diff --git a/.changeset/README.md b/.changeset/README.md new file mode 100644 index 0000000..ebdc371 --- /dev/null +++ b/.changeset/README.md @@ -0,0 +1,9 @@ +# Changesets + +This folder tracks public package versioning for: + +- `@anarchitecture/summon` +- `@anarchitecture/summon-server` +- `@anarchitecture/summon-react` + +Private `@summon-internal/*` workspaces and demo apps are ignored. diff --git a/.changeset/config.json b/.changeset/config.json new file mode 100644 index 0000000..2371c05 --- /dev/null +++ b/.changeset/config.json @@ -0,0 +1,20 @@ +{ + "$schema": "https://unpkg.com/@changesets/config@3.1.4/schema.json", + "changelog": ["@changesets/changelog-github", { "repo": "block/summon" }], + "commit": false, + "fixed": [], + "linked": [], + "access": "public", + "baseBranch": "main", + "updateInternalDependencies": "patch", + "ignore": [ + "@summon-internal/devtools", + "@summon-internal/engine", + "@summon-internal/host", + "@summon-internal/react", + "@summon-internal/sandbox-runtime", + "@summon-internal/server", + "@summon-internal/demo", + "@summon-internal/demo-server" + ] +} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1f8d438..b15b384 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -26,6 +26,7 @@ jobs: - run: pnpm typecheck - run: pnpm test - run: pnpm build + - run: pnpm check:public-packages - run: pnpm pack:dry-run safety: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..85a7af5 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,52 @@ +name: Release + +on: + push: + branches: [main] + workflow_dispatch: + +concurrency: + group: release-${{ github.ref }} + cancel-in-progress: false + +permissions: + contents: write + pull-requests: write + id-token: write + +jobs: + release: + name: Version or publish + runs-on: ubuntu-latest + timeout-minutes: 15 + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + fetch-depth: 0 + + - uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v4.4.0 + + - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 + with: + node-version: 24 + cache: pnpm + registry-url: https://registry.npmjs.org + + - run: pnpm install --frozen-lockfile + + - run: pnpm build + + - run: pnpm check:public-packages + + - name: Create Release PR or publish + uses: changesets/action@6a0a831ff30acef54f2c6aa1cbbc1096b066edaf # v1.7.0 + with: + publish: pnpm release + version: pnpm changeset version + commit: "chore: version packages" + title: "chore: version packages" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NPM_CONFIG_PROVENANCE: true + NPM_TOKEN: ${{ secrets.SUMMON_NPM_PUBLISH_TOKEN }} + NODE_AUTH_TOKEN: ${{ secrets.SUMMON_NPM_PUBLISH_TOKEN }} diff --git a/.npmrc b/.npmrc index 214c29d..4999d0c 100644 --- a/.npmrc +++ b/.npmrc @@ -1 +1,3 @@ registry=https://registry.npmjs.org/ +link-workspace-packages=true +auto-install-peers=false diff --git a/README.md b/README.md index adc171a..3edd4d9 100644 --- a/README.md +++ b/README.md @@ -11,12 +11,17 @@ network, credentials, state, handlers, grants, and persistence. ## Project Status: Beta -Summon is pre-1.0 and under active development. The protocol, package layout, -workspace package names, generated-surface contract, and public JavaScript -exports may change before a stable release. +Summon is pre-1.0 and under active development. The protocol, +generated-surface contract, and public JavaScript exports may change before a +stable release. -This initial public import keeps the existing `@summon/*` workspace package -names. Public npm packaging will be introduced in a follow-up change. +The public package boundary is: + +```txt +@anarchitecture/summon +@anarchitecture/summon-server +@anarchitecture/summon-react +``` ## Quickstart @@ -75,20 +80,21 @@ generation starts. The model sees that plan as a contract but cannot widen it. sandbox description. - `/fatal.html` - sandbox startup failure handling. +## Public Packages + +- `@anarchitecture/summon` - core protocol, validation, surface plans, policy, + browser sandbox host, runtime assets, envelopes, and Devtools events. +- `@anarchitecture/summon-server` - provider-neutral generation lifecycle, + repair, summaries, and model-provider interfaces. +- `@anarchitecture/summon-react` - `SummonSurface` and React component island + adapter. `react` and `react-dom` are peer dependencies. + ## Workspace Map -- `packages/sandbox-runtime` - built `bootstrap.js`, `tokens.css`, and - `@summon/sandbox-runtime/assets` string exports for non-Vite consumers. -- `packages/host` - policy, capability registry, envelope helpers, and the - browser-only `spawnSandbox` iframe primitive. -- `packages/engine` - protocol constants/parsers, `SectionAccumulator`, - `StreamGraph`, contract compilers, protocol hardener, token validation, and - parser-based runtime validation. -- `packages/devtools` - `EventStore` and typed lifecycle, protocol, intent, - state, render, and stream-graph events. -- `packages/react` - controlled `SummonSurface` component for React hosts. -- `packages/server` - provider-neutral generation primitives; no Express - routes. +- `packages/summon*` - public package facades. +- `packages/engine`, `packages/host`, `packages/devtools`, + `packages/sandbox-runtime`, `packages/server`, `packages/react` - private + implementation workspaces published only through the public facades. - `apps/server` - Anthropic-backed demo server, direction loading, repair feedback, and demo backing routes. - `apps/demo` - Vite host app for generation, batch runs, adversarial checks, diff --git a/apps/demo/package.json b/apps/demo/package.json index 5151b88..3ff5298 100644 --- a/apps/demo/package.json +++ b/apps/demo/package.json @@ -1,20 +1,17 @@ { - "name": "@summon/demo", + "name": "@summon-internal/demo", "version": "0.0.1", "private": true, "type": "module", "scripts": { - "dev": "pnpm --filter @summon/devtools --filter @summon/engine --filter @summon/host --filter @summon/sandbox-runtime build && vite", - "build": "pnpm --filter @summon/devtools --filter @summon/engine --filter @summon/host --filter @summon/sandbox-runtime build && vite build", + "dev": "pnpm --filter @summon-internal/devtools --filter @summon-internal/engine --filter @summon-internal/host --filter @summon-internal/sandbox-runtime build && pnpm --filter @anarchitecture/summon build && vite", + "build": "pnpm --filter @summon-internal/devtools --filter @summon-internal/engine --filter @summon-internal/host --filter @summon-internal/sandbox-runtime build && pnpm --filter @anarchitecture/summon build && vite build", "preview": "vite preview", "test": "tsx --test src/*.test.ts", "typecheck": "tsc --noEmit" }, "dependencies": { - "@summon/devtools": "workspace:*", - "@summon/engine": "workspace:*", - "@summon/host": "workspace:*", - "@summon/sandbox-runtime": "workspace:*", + "@anarchitecture/summon": "workspace:*", "zod": "^3.23.0" }, "devDependencies": { diff --git a/apps/demo/src/batch-main.ts b/apps/demo/src/batch-main.ts index 6a4f93c..5094e92 100644 --- a/apps/demo/src/batch-main.ts +++ b/apps/demo/src/batch-main.ts @@ -1,12 +1,12 @@ -import { spawnSandbox, PolicyEngine, type SandboxHandle } from '@summon/host'; +import { spawnSandbox, PolicyEngine, type SandboxHandle } from '@anarchitecture/summon'; import { parseProtocolLine, SectionAccumulator, type CapabilityPack, type ValidationCapability, -} from '@summon/engine'; -import bootstrapSource from '@summon/sandbox-runtime/bootstrap.js?raw'; -import defaultTokensSource from '@summon/sandbox-runtime/tokens.css?raw'; +} from '@anarchitecture/summon'; +import bootstrapSource from '@anarchitecture/summon/bootstrap.js?raw'; +import defaultTokensSource from '@anarchitecture/summon/tokens.css?raw'; import { ALL_PROMPTS, sample } from './prompts.js'; import { createDemoCapabilityRegistry } from './capabilities.js'; diff --git a/apps/demo/src/capabilities.ts b/apps/demo/src/capabilities.ts index 34f2abe..4d3af11 100644 --- a/apps/demo/src/capabilities.ts +++ b/apps/demo/src/capabilities.ts @@ -14,7 +14,7 @@ import { type CapabilityDefinition, type CapabilityRegistry, type IntentHandler, -} from '@summon/host'; +} from '@anarchitecture/summon'; import { z } from 'zod'; const logArgsSchema = z.object({ payload: z.any().optional() }).passthrough(); diff --git a/apps/demo/src/components.ts b/apps/demo/src/components.ts index dc783a2..0f5b9c7 100644 --- a/apps/demo/src/components.ts +++ b/apps/demo/src/components.ts @@ -3,8 +3,8 @@ import { defineComponent, type ComponentDefinition, type ComponentRegistry, -} from '@summon/host'; -import type { ComponentPack } from '@summon/engine'; +} from '@anarchitecture/summon'; +import type { ComponentPack } from '@anarchitecture/summon'; import { z } from 'zod'; const metricCardPropsSchema = z.object({ diff --git a/apps/demo/src/fatal-main.ts b/apps/demo/src/fatal-main.ts index b267909..5c48723 100644 --- a/apps/demo/src/fatal-main.ts +++ b/apps/demo/src/fatal-main.ts @@ -1,5 +1,5 @@ -import bootstrapSource from '@summon/sandbox-runtime/bootstrap.js?raw'; -import tokensSource from '@summon/sandbox-runtime/tokens.css?raw'; +import bootstrapSource from '@anarchitecture/summon/bootstrap.js?raw'; +import tokensSource from '@anarchitecture/summon/tokens.css?raw'; /** * Self-test harness. We deliberately drive the bootstrap into two iframes: diff --git a/apps/demo/src/generate-main.ts b/apps/demo/src/generate-main.ts index 873e5ce..0873d68 100644 --- a/apps/demo/src/generate-main.ts +++ b/apps/demo/src/generate-main.ts @@ -10,7 +10,7 @@ import { type SurfaceStreamContext, type SurfaceStreamResult, type SurfaceEnvelope, -} from '@summon/host'; +} from '@anarchitecture/summon'; import { deriveSurfacePlanControls, normalizeSurfacePlan, @@ -30,10 +30,10 @@ import { type SummonLayout, type ValidationCapability, type ValidationComponent, -} from '@summon/engine'; -import { createEventStore, type DevtoolsEvent } from '@summon/devtools'; -import bootstrapSource from '@summon/sandbox-runtime/bootstrap.js?raw'; -import defaultTokensSource from '@summon/sandbox-runtime/tokens.css?raw'; +} from '@anarchitecture/summon'; +import { createEventStore, type DevtoolsEvent } from '@anarchitecture/summon/devtools'; +import bootstrapSource from '@anarchitecture/summon/bootstrap.js?raw'; +import defaultTokensSource from '@anarchitecture/summon/tokens.css?raw'; import { createGhostShowcaseScenario, createScopedDemoRegistry, diff --git a/apps/demo/src/main.ts b/apps/demo/src/main.ts index 5c23319..c5e28a8 100644 --- a/apps/demo/src/main.ts +++ b/apps/demo/src/main.ts @@ -1,6 +1,6 @@ -import { spawnSandbox } from '@summon/host'; -import bootstrapSource from '@summon/sandbox-runtime/bootstrap.js?raw'; -import tokensSource from '@summon/sandbox-runtime/tokens.css?raw'; +import { spawnSandbox } from '@anarchitecture/summon'; +import bootstrapSource from '@anarchitecture/summon/bootstrap.js?raw'; +import tokensSource from '@anarchitecture/summon/tokens.css?raw'; import { ADVERSARIAL_BODY_HTML } from './adversarial-artifact.js'; const iframe = document.getElementById('sandbox') as HTMLIFrameElement; diff --git a/apps/demo/src/showcase.test.ts b/apps/demo/src/showcase.test.ts index 1543aec..bc55178 100644 --- a/apps/demo/src/showcase.test.ts +++ b/apps/demo/src/showcase.test.ts @@ -1,6 +1,6 @@ import assert from 'node:assert/strict'; import test from 'node:test'; -import { deriveSurfacePlanControls } from '@summon/engine'; +import { deriveSurfacePlanControls } from '@anarchitecture/summon'; import { createScopedDemoRegistry, narrowCapabilityPack, diff --git a/apps/demo/src/showcase.ts b/apps/demo/src/showcase.ts index 8385646..b203b28 100644 --- a/apps/demo/src/showcase.ts +++ b/apps/demo/src/showcase.ts @@ -3,8 +3,8 @@ import type { ScriptPolicy, SurfacePlan, SurfacePlanMode, -} from '@summon/engine'; -import type { CapabilityRegistry } from '@summon/host'; +} from '@anarchitecture/summon'; +import type { CapabilityRegistry } from '@anarchitecture/summon'; import { createDemoCapabilityRegistry, type DemoHandlerOptions } from './capabilities.js'; export type Mode = SurfacePlanMode; diff --git a/apps/demo/src/strict-main.ts b/apps/demo/src/strict-main.ts index ad828ca..ffc342a 100644 --- a/apps/demo/src/strict-main.ts +++ b/apps/demo/src/strict-main.ts @@ -14,9 +14,9 @@ import { createStrictInputRegistry, type SandboxHandle, type StrictInputController, -} from '@summon/host'; -import bootstrapSource from '@summon/sandbox-runtime/bootstrap.js?raw'; -import tokensSource from '@summon/sandbox-runtime/tokens.css?raw'; +} from '@anarchitecture/summon'; +import bootstrapSource from '@anarchitecture/summon/bootstrap.js?raw'; +import tokensSource from '@anarchitecture/summon/tokens.css?raw'; import { STRICT_DEMO_BODY_HTML } from './strict-demo-artifact.js'; const iframe = document.getElementById('sandbox') as HTMLIFrameElement; diff --git a/apps/server/package.json b/apps/server/package.json index 6b3ac73..407984e 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -1,5 +1,5 @@ { - "name": "@summon/demo-server", + "name": "@summon-internal/demo-server", "version": "0.0.1", "private": true, "type": "module", @@ -12,10 +12,10 @@ "dependencies": { "@anarchitecture/ghost": "^0.2.0", "@anthropic-ai/sdk": "^0.88.0", - "@summon/engine": "workspace:*", - "@summon/server": "workspace:*", "cors": "^2.8.5", - "express": "^4.22.1" + "express": "^4.21.2", + "@anarchitecture/summon": "workspace:*", + "@anarchitecture/summon-server": "workspace:*" }, "devDependencies": { "@types/cors": "^2.8.17", diff --git a/apps/server/src/capability-pack.ts b/apps/server/src/capability-pack.ts index 460fb71..2fa4190 100644 --- a/apps/server/src/capability-pack.ts +++ b/apps/server/src/capability-pack.ts @@ -5,7 +5,7 @@ import { type CapabilitySurface, type CapabilityTrigger, type IntentSpec, -} from '@summon/engine'; +} from '@anarchitecture/summon'; /** * Validate a capability pack sent by the client. The server is intent-agnostic diff --git a/apps/server/src/component-pack.ts b/apps/server/src/component-pack.ts index 35d57de..308bb86 100644 --- a/apps/server/src/component-pack.ts +++ b/apps/server/src/component-pack.ts @@ -3,7 +3,7 @@ import type { ComponentPack, ComponentSizing, ComponentSurface, -} from '@summon/engine'; +} from '@anarchitecture/summon'; /** * Validate a component pack sent by the client. The server remains renderer diff --git a/apps/server/src/directions-loader.ts b/apps/server/src/directions-loader.ts index 0d9ab81..cab2701 100644 --- a/apps/server/src/directions-loader.ts +++ b/apps/server/src/directions-loader.ts @@ -5,7 +5,7 @@ import { compileDirectionContract, coerceOpts, type DirectionOpts, -} from '@summon/engine'; +} from '@anarchitecture/summon'; export const PREFERRED_DEFAULT_DIRECTION_ID = 'ghost'; diff --git a/apps/server/src/generate-route.test.ts b/apps/server/src/generate-route.test.ts index 247e2e0..8864b26 100644 --- a/apps/server/src/generate-route.test.ts +++ b/apps/server/src/generate-route.test.ts @@ -6,7 +6,7 @@ import { createServer, type IncomingMessage } from 'node:http'; import { dirname, resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; import test from 'node:test'; -import type { CapabilityPack, ProtocolLine, SurfaceCeiling, SurfacePlan } from '@summon/engine'; +import type { CapabilityPack, ProtocolLine, SurfaceCeiling, SurfacePlan } from '@anarchitecture/summon'; const here = dirname(fileURLToPath(import.meta.url)); const packageRoot = resolve(here, '..'); diff --git a/apps/server/src/ghost-adapter.test.ts b/apps/server/src/ghost-adapter.test.ts index 84140f4..bff03e0 100644 --- a/apps/server/src/ghost-adapter.test.ts +++ b/apps/server/src/ghost-adapter.test.ts @@ -99,7 +99,7 @@ describe('Ghost adapter', () => { const ctx = await resolveGhostContext(parsed.request, roots); assert.equal(ctx.tokenSource.kind, 'summon-default'); - assert.equal(ctx.tokenSource.source, '@summon/sandbox-runtime/tokens.css'); + assert.equal(ctx.tokenSource.source, '@anarchitecture/summon/tokens.css'); assert.match(ctx.tokenSource.css, /--color-bg:/); assert.ok(ctx.tokenSource.warnings.some((warning) => warning.includes('failed token contract'))); }); diff --git a/apps/server/src/ghost-adapter.ts b/apps/server/src/ghost-adapter.ts index 58098b9..e5c159c 100644 --- a/apps/server/src/ghost-adapter.ts +++ b/apps/server/src/ghost-adapter.ts @@ -8,7 +8,7 @@ import { type GhostMemoryStackLayer, type PackageMemory, } from '@anarchitecture/ghost/scan'; -import { compileTokenContract, type ProtocolLine } from '@summon/engine'; +import { compileTokenContract, type ProtocolLine } from '@anarchitecture/summon'; import { existsSync, readFileSync, statSync } from 'node:fs'; import { mkdtemp, readFile, rm } from 'node:fs/promises'; import { tmpdir } from 'node:os'; @@ -395,7 +395,7 @@ async function resolveGhostTokenSource( } return { kind: 'summon-default', - source: '@summon/sandbox-runtime/tokens.css', + source: '@anarchitecture/summon/tokens.css', css: DEFAULT_TOKENS_CSS, warnings: [ ...warnings, diff --git a/apps/server/src/infer-capabilities.ts b/apps/server/src/infer-capabilities.ts index 7e2e7f1..2530fd9 100644 --- a/apps/server/src/infer-capabilities.ts +++ b/apps/server/src/infer-capabilities.ts @@ -1,5 +1,5 @@ import Anthropic from '@anthropic-ai/sdk'; -import type { CapabilityPack } from '@summon/engine'; +import type { CapabilityPack } from '@anarchitecture/summon'; export interface InferenceResult { /** Narrowed pack — never wider than the ceiling. Null when mode is static. */ diff --git a/apps/server/src/main.ts b/apps/server/src/main.ts index 258a6fb..49f0663 100644 --- a/apps/server/src/main.ts +++ b/apps/server/src/main.ts @@ -9,7 +9,7 @@ import { type ScriptPolicy, type SummonLayout, type TokenOverride, -} from '@summon/engine'; +} from '@anarchitecture/summon'; import { resolveSurfaceGenerationPlan, runSurfaceGeneration, @@ -18,7 +18,7 @@ import { type RepairOptions as SurfaceRepairOptions, type SurfaceGenerationSummary, type SummonModelChunk, -} from '@summon/server'; +} from '@anarchitecture/summon-server'; import { readFileSync } from 'node:fs'; import { dirname, join } from 'node:path'; import { fileURLToPath } from 'node:url'; diff --git a/apps/server/src/surface-plan.test.ts b/apps/server/src/surface-plan.test.ts index 0901114..013b21c 100644 --- a/apps/server/src/surface-plan.test.ts +++ b/apps/server/src/surface-plan.test.ts @@ -1,7 +1,7 @@ import assert from 'node:assert/strict'; import test from 'node:test'; -import { resolveSurfaceGenerationPlan } from '@summon/server'; -import type { CapabilityPack } from '@summon/engine'; +import { resolveSurfaceGenerationPlan } from '@anarchitecture/summon-server'; +import type { CapabilityPack } from '@anarchitecture/summon'; import { parseCapabilityPack } from './capability-pack.js'; const capabilities: CapabilityPack = { diff --git a/docs/adoption/integration.md b/docs/adoption/integration.md index 923bd4d..7044113 100644 --- a/docs/adoption/integration.md +++ b/docs/adoption/integration.md @@ -14,7 +14,7 @@ import { createCapabilityRegistry, defineAction, defineDataResource, -} from '@summon/host'; +} from '@anarchitecture/summon'; const registry = createCapabilityRegistry([ defineAction({ @@ -69,7 +69,7 @@ import { z } from 'zod'; import { createComponentRegistry, defineComponent, -} from '@summon/host'; +} from '@anarchitecture/summon'; const componentRegistry = createComponentRegistry([ defineComponent({ @@ -102,7 +102,7 @@ emits host actions. ## 3. Run Server Generation -The generation server should use `@summon/server` for the repeatable lifecycle: +The generation server should use `@anarchitecture/summon-server` for the repeatable lifecycle: compile contracts, emit host-owned meta lines, harden model JSONL, optionally repair retryable sections, and end with validation and stream-graph summaries. @@ -110,8 +110,8 @@ repair retryable sections, and end with validation and stream-graph summaries. import { runSurfaceGeneration, type SummonModelProvider, -} from '@summon/server'; -import type { SurfacePlan } from '@summon/engine'; +} from '@anarchitecture/summon-server'; +import type { SurfacePlan } from '@anarchitecture/summon'; const surfacePlan: SurfacePlan = { purpose: 'explore', @@ -168,13 +168,13 @@ section path. ## 4. Apply Protocol On The Client -The client should let `@summon/host` own chunk decoding, protocol parsing, +The client should let `@anarchitecture/summon` own chunk decoding, protocol parsing, section accumulation, stream health, and render timing. Product hosts still own fetching, aborts, request payloads, and product-specific meta interpretation. ```ts -import { deriveSurfacePlanControls } from '@summon/engine'; -import { consumeSurfaceStream } from '@summon/host/browser'; +import { deriveSurfacePlanControls } from '@anarchitecture/summon'; +import { consumeSurfaceStream } from '@anarchitecture/summon/browser'; const controls = deriveSurfacePlanControls(surfacePlan); const response = await fetch('/api/generate', { @@ -216,11 +216,11 @@ import { PolicyEngine, spawnSandbox, type SandboxHandle, -} from '@summon/host'; +} from '@anarchitecture/summon'; import { bootstrapSource, tokensSource, -} from '@summon/sandbox-runtime/assets'; +} from '@anarchitecture/summon/assets'; let sandbox: SandboxHandle | null = null; const islands = createComponentIslandRegistry({ diff --git a/docs/adoption/package-consumption.md b/docs/adoption/package-consumption.md index d81096c..d09af1b 100644 --- a/docs/adoption/package-consumption.md +++ b/docs/adoption/package-consumption.md @@ -1,18 +1,17 @@ # Summon Package Consumption -Summon V1 is consumed as built workspace packages. Do not import `src/*.ts` -paths from applications. +Summon V1 is consumed as built public packages. Do not import `src/*.ts` paths +or `@summon-internal/*` packages from applications. -For the follow-up package boundary, see -[Public Packaging Plan](public-packaging.md). Public scope and package renames -should happen in that package-boundary PR, not in the clean source import. +For package boundary rationale, see +[Public Packaging Plan](public-packaging.md). ## React Hosts ```ts -import { SummonSurface, defineReactComponent } from '@summon/react'; -import { createCapabilityRegistry, defineAction } from '@summon/host'; -import { tokensSource } from '@summon/sandbox-runtime/assets'; +import { SummonSurface, defineReactComponent } from '@anarchitecture/summon-react'; +import { createCapabilityRegistry, defineAction } from '@anarchitecture/summon'; +import { tokensSource } from '@anarchitecture/summon/assets'; ``` `SummonSurface` accepts an envelope or direct `html` / `protocolLines`. Pass a @@ -25,8 +24,8 @@ React hosts can register component islands with host-owned React components: ```tsx import { z } from 'zod'; -import { createComponentRegistry } from '@summon/host'; -import { SummonSurface, defineReactComponent } from '@summon/react'; +import { createComponentRegistry } from '@anarchitecture/summon'; +import { SummonSurface, defineReactComponent } from '@anarchitecture/summon-react'; const componentRegistry = createComponentRegistry([ defineReactComponent({ @@ -72,22 +71,22 @@ defineReactComponent({ ```ts import { deriveSurfacePlanControls, -} from '@summon/engine'; +} from '@anarchitecture/summon'; import { consumeSurfaceStream, createComponentIslandRegistry, spawnSandbox, type SandboxHandle, -} from '@summon/host/browser'; +} from '@anarchitecture/summon/browser'; import { createComponentRegistry, defineComponent, -} from '@summon/host'; -import { PolicyEngine } from '@summon/host/policy'; +} from '@anarchitecture/summon'; +import { PolicyEngine } from '@anarchitecture/summon/policy'; import { bootstrapSource, tokensSource, -} from '@summon/sandbox-runtime/assets'; +} from '@anarchitecture/summon/assets'; ``` Use `consumeSurfaceStream()` to decode streamed chunks, parse accepted protocol @@ -166,7 +165,7 @@ await consumeSurfaceStream(response.body!, { import { runSurfaceGeneration, type SummonModelProvider, -} from '@summon/server'; +} from '@anarchitecture/summon-server'; ``` `runSurfaceGeneration()` is provider-neutral. The provider receives compiled @@ -185,5 +184,6 @@ Run this before publishing: ```sh pnpm build +pnpm check:public-packages pnpm pack:dry-run ``` diff --git a/docs/adoption/public-packaging.md b/docs/adoption/public-packaging.md index 464af51..624abc9 100644 --- a/docs/adoption/public-packaging.md +++ b/docs/adoption/public-packaging.md @@ -1,40 +1,40 @@ # Summon Public Packaging Plan -This note records the intended public package boundary for the follow-up -package-boundary PR. The clean source import keeps the existing `@summon/*` -workspace package names so the first public review is source-only. +This note records Summon's public package boundary. Public packages are facades +over private implementation workspaces so consumer APIs are organized by install +environment rather than monorepo internals. ## Decision Publish by install environment, not by internal implementation layer. ```txt -@/summon -@/summon-server -@/summon-react +@anarchitecture/summon +@anarchitecture/summon-server +@anarchitecture/summon-react ``` -`@/summon` is the frameworkless client/core package. It owns the +`@anarchitecture/summon` is the frameworkless client/core package. It owns the browser-facing runtime contract: protocol types and parsers, surface envelopes, capability registry helpers, `PolicyEngine`, stream consumption, `spawnSandbox`, runtime assets, validation helpers, and Devtools event store exports. -`@/summon-server` is the provider-neutral generation package. It +`@anarchitecture/summon-server` is the provider-neutral generation package. It owns `runSurfaceGeneration`, prompt/contract assembly, repair feedback, summary helpers, and model-provider interfaces. It may depend on the core package but should not pull in browser or React peers. -`@/summon-react` is the React adapter. It owns `SummonSurface`, +`@anarchitecture/summon-react` is the React adapter. It owns `SummonSurface`, `defineReactComponent`, and React component island lifecycle. It depends on the core package and has `react` / `react-dom` as peer dependencies. Future adapters should follow the same rule: ```txt -@/summon-svelte -@/summon-vue -@/summon-acp +@anarchitecture/summon-svelte +@anarchitecture/summon-vue +@anarchitecture/summon-acp ``` Do not publish separate packages for `engine`, `host`, `sandbox-runtime`, and @@ -65,42 +65,27 @@ Useful references: - assistant-ui packages: https://www.assistant-ui.com/packages - Tambo: https://github.com/tambo-ai/tambo -## Clean Import Policy +## Implementation Policy -Keep the clean source import boring: +Keep the private implementation graph boring: -- Keep `@summon/*` workspace names in source until the package-boundary PR. -- Keep docs/examples on current workspace package names in the import PR. +- Keep `@summon-internal/*` workspace names private. +- Keep docs/examples on public package names. +- Publish only `@anarchitecture/summon`, `@anarchitecture/summon-server`, and + `@anarchitecture/summon-react`. +- Build public packages by copying implementation `dist` output and rewriting + private imports to public or relative imports. +- Fail CI if public JS or `.d.ts` imports `@summon-internal/*`. - Do source-health work here when it is destination-agnostic: tests, security fixes, API cleanup, build reliability, and package metadata correctness. -## Port Sequence - -1. Start from the public repo template commit so license, governance, - `CODEOWNERS`, Renovate, and issue templates survive. -2. Overlay the current Summon source as a single clean import commit, without - private history. -3. Convert package names and import examples to the public scope in the - follow-up package-boundary PR. -4. Add CI before the import PR lands. Minimum gates: `pnpm test`, `pnpm build`, - and `pnpm test:safety` once browser dependencies are available. -5. Choose the packaging implementation: - - Collapse source into the three public package directories during the port, - or - - Keep internal workspaces private and bundle their output into the three - public packages at publish time. -6. Run `pnpm build`, `pnpm test`, `pnpm test:safety`, and `pnpm pack:dry-run` - before tagging or publishing. - -## Open Implementation Question - -The three-package public shape is the desired consumer API. The mechanical -implementation still needs a choice: - -- Collapsing source makes npm packaging simple but creates a larger file move. -- Bundling keeps the current internal development graph but requires a publish - build that inlines internal packages and leaves only real external - dependencies in the published manifests. - -Make that choice in the package-boundary branch, where package names and npm -scope changes are expected. +## Release Gate + +Run this before publishing: + +```sh +pnpm build +pnpm check:public-packages +pnpm pack:dry-run +pnpm test:safety +``` diff --git a/package.json b/package.json index 10aa984..8961519 100644 --- a/package.json +++ b/package.json @@ -4,15 +4,23 @@ "private": true, "type": "module", "scripts": { - "dev": "pnpm --filter @summon/demo dev", - "dev:server": "pnpm --filter @summon/demo-server dev", - "dev:all": "pnpm -r --parallel --stream --filter @summon/demo-server --filter @summon/demo dev", - "build": "pnpm -r build", - "pack:dry-run": "pnpm -r --filter \"./packages/**\" exec npm --cache /tmp/summon-npm-cache pack --dry-run --json", - "test": "pnpm -r --filter @summon/engine --filter @summon/host --filter @summon/server --filter @summon/demo-server --filter @summon/demo test", + "dev": "pnpm --filter @summon-internal/demo dev", + "dev:server": "pnpm --filter @summon-internal/demo-server dev", + "dev:all": "pnpm -r --parallel --stream --filter @summon-internal/demo-server --filter @summon-internal/demo dev", + "build:impl": "pnpm -r --filter @summon-internal/devtools --filter @summon-internal/engine --filter @summon-internal/sandbox-runtime --filter @summon-internal/host --filter @summon-internal/server --filter @summon-internal/react build", + "build:public": "node scripts/build-public-packages.mjs", + "build:apps": "pnpm --filter @summon-internal/demo build", + "build": "pnpm build:impl && pnpm build:public && pnpm build:apps", + "check:public-packages": "node scripts/check-public-packages.mjs", + "pack:dry-run": "pnpm -r --filter \"@anarchitecture/*\" exec npm --cache /tmp/summon-npm-cache pack --dry-run --json", + "smoke:public-packages": "node scripts/smoke-public-packages.mjs", + "test": "pnpm -r --filter @summon-internal/engine --filter @summon-internal/host --filter @summon-internal/server --filter @summon-internal/demo-server --filter @summon-internal/demo test", "test:safety": "playwright test", "test:safety:ui": "playwright test --ui", "typecheck": "pnpm -r typecheck", + "changeset": "changeset", + "version-packages": "changeset version", + "release": "pnpm build && pnpm check:public-packages && changeset publish", "port-direction": "tsx scripts/port-direction.ts", "eval-directions": "tsx scripts/eval-directions.ts" }, @@ -23,6 +31,8 @@ "devDependencies": { "@anthropic-ai/sdk": "^0.88.0", "@playwright/test": "^1.60.0", - "tsx": "^4.7.0" + "tsx": "^4.7.0", + "@changesets/changelog-github": "^0.6.0", + "@changesets/cli": "^2.31.0" } } diff --git a/packages/devtools/package.json b/packages/devtools/package.json index 8d746b7..d631a23 100644 --- a/packages/devtools/package.json +++ b/packages/devtools/package.json @@ -1,5 +1,5 @@ { - "name": "@summon/devtools", + "name": "@summon-internal/devtools", "version": "0.1.0", "type": "module", "main": "./dist/index.js", @@ -14,14 +14,12 @@ "files": [ "dist" ], - "publishConfig": { - "access": "restricted" - }, "scripts": { "build": "tsc -p tsconfig.build.json", "typecheck": "tsc --noEmit" }, "devDependencies": { "typescript": "^5.4.0" - } + }, + "private": true } diff --git a/packages/engine/package.json b/packages/engine/package.json index 0af1585..1e13ad4 100644 --- a/packages/engine/package.json +++ b/packages/engine/package.json @@ -1,5 +1,5 @@ { - "name": "@summon/engine", + "name": "@summon-internal/engine", "version": "0.1.0", "type": "module", "main": "./dist/index.js", @@ -14,9 +14,6 @@ "files": [ "dist" ], - "publishConfig": { - "access": "restricted" - }, "scripts": { "build": "tsc -p tsconfig.build.json", "test": "tsx --test test/*.test.ts", @@ -25,5 +22,6 @@ "devDependencies": { "tsx": "^4.7.0", "typescript": "^5.4.0" - } + }, + "private": true } diff --git a/packages/host/package.json b/packages/host/package.json index 974e167..60eba70 100644 --- a/packages/host/package.json +++ b/packages/host/package.json @@ -1,5 +1,5 @@ { - "name": "@summon/host", + "name": "@summon-internal/host", "version": "0.1.0", "type": "module", "main": "./dist/index.js", @@ -26,22 +26,20 @@ "files": [ "dist" ], - "publishConfig": { - "access": "restricted" - }, "scripts": { "build": "tsc -p tsconfig.build.json", "test": "tsx --test test/*.test.ts", "typecheck": "tsc --noEmit" }, "dependencies": { - "@summon/devtools": "workspace:*", - "@summon/engine": "workspace:*", - "@summon/sandbox-runtime": "workspace:*", + "@summon-internal/devtools": "workspace:*", + "@summon-internal/engine": "workspace:*", + "@summon-internal/sandbox-runtime": "workspace:*", "zod": "^3.23.0" }, "devDependencies": { "tsx": "^4.7.0", "typescript": "^5.4.0" - } + }, + "private": true } diff --git a/packages/host/src/capability-registry.ts b/packages/host/src/capability-registry.ts index f5575fe..c1dec69 100644 --- a/packages/host/src/capability-registry.ts +++ b/packages/host/src/capability-registry.ts @@ -7,8 +7,8 @@ import type { CompiledCapabilityContract, IntentSpec, CapabilitySurface, -} from '@summon/engine'; -import { compileCapabilityContract } from '@summon/engine'; +} from '@summon-internal/engine'; +import { compileCapabilityContract } from '@summon-internal/engine'; import type { ZodType, ZodTypeAny } from 'zod'; import { defineIntent, type IntentEntry, type IntentHandler } from './policy-engine.js'; diff --git a/packages/host/src/component-islands.ts b/packages/host/src/component-islands.ts index cb1c46c..78a39e6 100644 --- a/packages/host/src/component-islands.ts +++ b/packages/host/src/component-islands.ts @@ -1,4 +1,4 @@ -import type { EventStore } from '@summon/devtools'; +import type { EventStore } from '@summon-internal/devtools'; import type { ComponentIslandBounds, ComponentIslandDescriptor, diff --git a/packages/host/src/component-registry.ts b/packages/host/src/component-registry.ts index c04858f..7e6ab4b 100644 --- a/packages/host/src/component-registry.ts +++ b/packages/host/src/component-registry.ts @@ -4,8 +4,8 @@ import type { ComponentPack, ComponentSizing, ComponentSurface, -} from '@summon/engine'; -import { compileComponentContract } from '@summon/engine'; +} from '@summon-internal/engine'; +import { compileComponentContract } from '@summon-internal/engine'; import type { ZodType, ZodTypeAny } from 'zod'; import { formatZodSchema } from './capability-registry.js'; diff --git a/packages/host/src/policy-engine.ts b/packages/host/src/policy-engine.ts index 02278cd..48e5ab9 100644 --- a/packages/host/src/policy-engine.ts +++ b/packages/host/src/policy-engine.ts @@ -4,7 +4,7 @@ * credential access, and state mutation live. The sandbox never sees any of it. */ -import type { EventStore } from '@summon/devtools'; +import type { EventStore } from '@summon-internal/devtools'; import type { ZodType } from 'zod'; export interface IntentContext> { diff --git a/packages/host/src/sandbox-spawner.ts b/packages/host/src/sandbox-spawner.ts index 124b52e..ca9c35b 100644 --- a/packages/host/src/sandbox-spawner.ts +++ b/packages/host/src/sandbox-spawner.ts @@ -1,5 +1,5 @@ -import type { EventStore } from '@summon/devtools'; -import { hasCompleteResourceStateKeys, type ValidationCapability } from '@summon/engine'; +import type { EventStore } from '@summon-internal/devtools'; +import { hasCompleteResourceStateKeys, type ValidationCapability } from '@summon-internal/engine'; import type { Artifact, ComponentIslandDescriptor, @@ -55,9 +55,9 @@ export interface SpawnOptions { * Intent execution remains governed solely by `grantedIntents`. */ grantedCapabilities?: ValidationCapability[]; - /** Raw source of `@summon/sandbox-runtime/bootstrap.js`; published consumers can use `@summon/sandbox-runtime/assets`. */ + /** Raw bootstrap source; published consumers can use `@anarchitecture/summon/assets`. */ bootstrapSource: string; - /** Raw source of `@summon/sandbox-runtime/tokens.css`. */ + /** Raw token CSS source; published consumers can use `@anarchitecture/summon/assets`. */ tokensSource: string; /** Receives only intents that passed the bridge allowlist. */ onIntent?: (intent: string, args: Record) => void; diff --git a/packages/host/src/surface-envelope.ts b/packages/host/src/surface-envelope.ts index e8fd806..5a959b1 100644 --- a/packages/host/src/surface-envelope.ts +++ b/packages/host/src/surface-envelope.ts @@ -5,14 +5,14 @@ import type { SurfacePlan, ValidationCapability, ValidationComponent, -} from '@summon/engine'; +} from '@summon-internal/engine'; import { isProtocolLine, normalizeSurfacePlan, surfacePlanScriptPolicy, validateHtmlFragment, validateProtocolLine, -} from '@summon/engine'; +} from '@summon-internal/engine'; export const SUMMON_SURFACE_ENVELOPE_VERSION = 1; diff --git a/packages/host/src/surface-stream.ts b/packages/host/src/surface-stream.ts index 660c7c3..dd1d1e5 100644 --- a/packages/host/src/surface-stream.ts +++ b/packages/host/src/surface-stream.ts @@ -8,7 +8,7 @@ import { type SectionApplyResult, type StreamGraphSnapshot, type SurfacePlanMode, -} from '@summon/engine'; +} from '@summon-internal/engine'; export type SurfaceStreamChunk = string | Uint8Array; export type SurfaceStreamSource = diff --git a/packages/host/src/types.ts b/packages/host/src/types.ts index 42109cc..d26941c 100644 --- a/packages/host/src/types.ts +++ b/packages/host/src/types.ts @@ -1,4 +1,4 @@ -import type { ValidationCapability, ValidationComponent } from '@summon/engine'; +import type { ValidationCapability, ValidationComponent } from '@summon-internal/engine'; /** Messages from host into the sandbox iframe. */ export interface StateMessage { diff --git a/packages/host/test/surface-stream.test.ts b/packages/host/test/surface-stream.test.ts index 07d785a..226c5df 100644 --- a/packages/host/test/surface-stream.test.ts +++ b/packages/host/test/surface-stream.test.ts @@ -1,10 +1,10 @@ import assert from 'node:assert/strict'; import test from 'node:test'; -import type { ProtocolLine } from '@summon/engine'; +import type { ProtocolLine } from '@summon-internal/engine'; import { SectionAccumulator, StreamGraph, -} from '@summon/engine'; +} from '@summon-internal/engine'; import { consumeSurfaceStream, type SurfaceStreamContext, diff --git a/packages/host/tsconfig.build.json b/packages/host/tsconfig.build.json index b0f2d13..da3e9e6 100644 --- a/packages/host/tsconfig.build.json +++ b/packages/host/tsconfig.build.json @@ -6,9 +6,9 @@ "noEmit": false, "outDir": "./dist", "paths": { - "@summon/devtools": ["packages/devtools/dist/index.d.ts"], - "@summon/engine": ["packages/engine/dist/index.d.ts"], - "@summon/sandbox-runtime/assets": ["packages/sandbox-runtime/dist/assets.d.ts"] + "@summon-internal/devtools": ["packages/devtools/dist/index.d.ts"], + "@summon-internal/engine": ["packages/engine/dist/index.d.ts"], + "@summon-internal/sandbox-runtime/assets": ["packages/sandbox-runtime/dist/assets.d.ts"] }, "rootDir": "./src", "sourceMap": true diff --git a/packages/react/package.json b/packages/react/package.json index 32c0e51..a2936bb 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -1,5 +1,5 @@ { - "name": "@summon/react", + "name": "@summon-internal/react", "version": "0.1.0", "type": "module", "main": "./dist/index.js", @@ -14,24 +14,26 @@ "files": [ "dist" ], - "publishConfig": { - "access": "restricted" - }, "scripts": { "build": "tsc -p tsconfig.build.json", "typecheck": "tsc --noEmit" }, "dependencies": { - "@summon/devtools": "workspace:*", - "@summon/engine": "workspace:*", - "@summon/host": "workspace:*", - "@summon/sandbox-runtime": "workspace:*" + "@summon-internal/devtools": "workspace:*", + "@summon-internal/engine": "workspace:*", + "@summon-internal/host": "workspace:*", + "@summon-internal/sandbox-runtime": "workspace:*" }, "peerDependencies": { "react": ">=18.3.0 || >=19.0.0", "react-dom": ">=18.3.0 || >=19.0.0" }, "devDependencies": { + "@types/react": "^18.3.0", + "@types/react-dom": "^18.3.0", + "react": "^18.3.1", + "react-dom": "^18.3.1", "typescript": "^5.4.0" - } + }, + "private": true } diff --git a/packages/react/src/index.ts b/packages/react/src/index.ts index 2ef27f8..80dd49f 100644 --- a/packages/react/src/index.ts +++ b/packages/react/src/index.ts @@ -1,5 +1,5 @@ -import { createEventStore, type DevtoolsEvent, type EventStore } from '@summon/devtools'; -import { SectionAccumulator, type ProtocolLine } from '@summon/engine'; +import { createEventStore, type DevtoolsEvent, type EventStore } from '@summon-internal/devtools'; +import { SectionAccumulator, type ProtocolLine } from '@summon-internal/engine'; import { createComponentIslandRegistry, defineComponent as defineHostComponent, @@ -12,12 +12,12 @@ import { type ComponentIslandRegistry, type ComponentRegistry, type SandboxHandle, -} from '@summon/host'; -import type { SurfaceEnvelope } from '@summon/host/envelope'; +} from '@summon-internal/host'; +import type { SurfaceEnvelope } from '@summon-internal/host/envelope'; import { bootstrapSource as defaultBootstrapSource, tokensSource as defaultTokensSource, -} from '@summon/sandbox-runtime/assets'; +} from '@summon-internal/sandbox-runtime/assets'; import { createElement, useEffect, useMemo, useRef, type ComponentType, type CSSProperties } from 'react'; import { createRoot, type Root } from 'react-dom/client'; @@ -205,7 +205,10 @@ export function defineReactComponent( const componentProps = mapProps ? mapProps(props as T, runtimeContext) : props as unknown as P; - root.render(createElement(component, componentProps as Record)); + root.render(createElement( + component as ComponentType>, + componentProps as Record, + )); }, destroy: ({ container }) => { const root = roots.get(container); diff --git a/packages/react/tsconfig.build.json b/packages/react/tsconfig.build.json index 2a17bbd..5833a00 100644 --- a/packages/react/tsconfig.build.json +++ b/packages/react/tsconfig.build.json @@ -6,11 +6,11 @@ "noEmit": false, "outDir": "./dist", "paths": { - "@summon/devtools": ["packages/devtools/dist/index.d.ts"], - "@summon/engine": ["packages/engine/dist/index.d.ts"], - "@summon/host": ["packages/host/dist/index.d.ts"], - "@summon/host/envelope": ["packages/host/dist/envelope.d.ts"], - "@summon/sandbox-runtime/assets": ["packages/sandbox-runtime/dist/assets.d.ts"] + "@summon-internal/devtools": ["packages/devtools/dist/index.d.ts"], + "@summon-internal/engine": ["packages/engine/dist/index.d.ts"], + "@summon-internal/host": ["packages/host/dist/index.d.ts"], + "@summon-internal/host/envelope": ["packages/host/dist/envelope.d.ts"], + "@summon-internal/sandbox-runtime/assets": ["packages/sandbox-runtime/dist/assets.d.ts"] }, "rootDir": "./src", "sourceMap": true diff --git a/packages/sandbox-runtime/package.json b/packages/sandbox-runtime/package.json index b8cb16e..8cbcad3 100644 --- a/packages/sandbox-runtime/package.json +++ b/packages/sandbox-runtime/package.json @@ -1,5 +1,5 @@ { - "name": "@summon/sandbox-runtime", + "name": "@summon-internal/sandbox-runtime", "version": "0.1.0", "type": "module", "main": "./dist/assets.js", @@ -16,11 +16,9 @@ "files": [ "dist" ], - "publishConfig": { - "access": "restricted" - }, "scripts": { "build": "node scripts/build.mjs", "typecheck": "node scripts/build.mjs --check" - } + }, + "private": true } diff --git a/packages/sandbox-runtime/src/assets.ts b/packages/sandbox-runtime/src/assets.ts index a1d5afd..f8b6df3 100644 --- a/packages/sandbox-runtime/src/assets.ts +++ b/packages/sandbox-runtime/src/assets.ts @@ -1,8 +1,8 @@ /** * Source-only type target for monorepo consumers. The publishable - * `@summon/sandbox-runtime/assets` module is generated into `dist/assets.js` - * by `scripts/build.mjs` so the canonical runtime files remain the source of - * truth. + * `@anarchitecture/summon/assets` module is generated into the public package + * facade, while this internal workspace keeps the canonical runtime files as + * source of truth. */ export const bootstrapSource = ''; export const tokensSource = ''; diff --git a/packages/sandbox-runtime/src/tokens.css b/packages/sandbox-runtime/src/tokens.css index 1b46d68..3141a3e 100644 --- a/packages/sandbox-runtime/src/tokens.css +++ b/packages/sandbox-runtime/src/tokens.css @@ -1,6 +1,6 @@ /* Summon default design tokens. * This fallback must satisfy the same token contract advertised by - * @summon/engine. Direction-specific tokens can still replace it per sandbox. + * the Summon engine. Direction-specific tokens can still replace it per sandbox. */ :root { color-scheme: light; diff --git a/packages/server/package.json b/packages/server/package.json index 8d60e70..ddd1116 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,5 +1,5 @@ { - "name": "@summon/server", + "name": "@summon-internal/server", "version": "0.1.0", "type": "module", "main": "./dist/index.js", @@ -14,19 +14,17 @@ "files": [ "dist" ], - "publishConfig": { - "access": "restricted" - }, "scripts": { "build": "tsc -p tsconfig.build.json", "test": "tsx --test test/*.test.ts", "typecheck": "tsc --noEmit" }, "dependencies": { - "@summon/engine": "workspace:*" + "@summon-internal/engine": "workspace:*" }, "devDependencies": { "tsx": "^4.7.0", "typescript": "^5.4.0" - } + }, + "private": true } diff --git a/packages/server/src/compat.ts b/packages/server/src/compat.ts index 23b0f4e..0dc89d2 100644 --- a/packages/server/src/compat.ts +++ b/packages/server/src/compat.ts @@ -1,4 +1,4 @@ -import type { ProtocolLine } from '@summon/engine'; +import type { ProtocolLine } from '@summon-internal/engine'; import { runSurfaceGeneration } from './runner.js'; import type { GenerateSurfaceInput, diff --git a/packages/server/src/index.ts b/packages/server/src/index.ts index 0428b7f..5eb5d8d 100644 --- a/packages/server/src/index.ts +++ b/packages/server/src/index.ts @@ -27,4 +27,4 @@ export type { ProtocolLine, ProtocolSkipMetaValue, RepairFeedbackMetaValue, -} from '@summon/engine'; +} from '@summon-internal/engine'; diff --git a/packages/server/src/plan.ts b/packages/server/src/plan.ts index f0a0e1c..ed5ffd8 100644 --- a/packages/server/src/plan.ts +++ b/packages/server/src/plan.ts @@ -6,7 +6,7 @@ import { normalizeSurfaceCeiling, normalizeSurfacePlan, surfacePlanWithinCeiling, -} from '@summon/engine'; +} from '@summon-internal/engine'; import type { ResolvedSurfaceGenerationPlan, ResolveSurfaceGenerationPlanInput, diff --git a/packages/server/src/repair.ts b/packages/server/src/repair.ts index 27f8e70..2cd4954 100644 --- a/packages/server/src/repair.ts +++ b/packages/server/src/repair.ts @@ -3,7 +3,7 @@ import type { ContractPromptBlock, ProtocolLine, RepairFeedbackMetaValue, -} from '@summon/engine'; +} from '@summon-internal/engine'; import type { RepairOptions, SummonModelChunk, diff --git a/packages/server/src/runner.ts b/packages/server/src/runner.ts index bc5d6d8..29c6176 100644 --- a/packages/server/src/runner.ts +++ b/packages/server/src/runner.ts @@ -1,4 +1,4 @@ -import type { ProtocolLine } from '@summon/engine'; +import type { ProtocolLine } from '@summon-internal/engine'; import { SurfaceGenerationSession } from './session.js'; import type { SurfaceGenerationInput, diff --git a/packages/server/src/session.ts b/packages/server/src/session.ts index 5639d0f..23242a9 100644 --- a/packages/server/src/session.ts +++ b/packages/server/src/session.ts @@ -8,7 +8,7 @@ import { type ProtocolHardenerResult, type ProtocolLine, type RepairFeedbackMetaValue, -} from '@summon/engine'; +} from '@summon-internal/engine'; import { buildEditBlock } from './edit.js'; import { normalizeRepairOptions, diff --git a/packages/server/src/summary.ts b/packages/server/src/summary.ts index bfb0620..1d4ba44 100644 --- a/packages/server/src/summary.ts +++ b/packages/server/src/summary.ts @@ -1,4 +1,4 @@ -import type { ContractIssue, ProtocolLine, StreamGraph } from '@summon/engine'; +import type { ContractIssue, ProtocolLine, StreamGraph } from '@summon-internal/engine'; import type { RepairStats } from './types.js'; const MAX_VALIDATION_EXAMPLES = 8; diff --git a/packages/server/src/types.ts b/packages/server/src/types.ts index 89a824d..ef696d7 100644 --- a/packages/server/src/types.ts +++ b/packages/server/src/types.ts @@ -13,7 +13,7 @@ import type { SurfaceCeiling, SurfacePlan, TokenOverride, -} from '@summon/engine'; +} from '@summon-internal/engine'; export interface SummonModelRequest { prompt: string; diff --git a/packages/server/tsconfig.build.json b/packages/server/tsconfig.build.json index 969a230..b9fcfb8 100644 --- a/packages/server/tsconfig.build.json +++ b/packages/server/tsconfig.build.json @@ -6,7 +6,7 @@ "noEmit": false, "outDir": "./dist", "paths": { - "@summon/engine": ["packages/engine/dist/index.d.ts"] + "@summon-internal/engine": ["packages/engine/dist/index.d.ts"] }, "rootDir": "./src", "sourceMap": true diff --git a/packages/summon-react/package.json b/packages/summon-react/package.json new file mode 100644 index 0000000..26daaed --- /dev/null +++ b/packages/summon-react/package.json @@ -0,0 +1,58 @@ +{ + "name": "@anarchitecture/summon-react", + "version": "0.1.0", + "description": "React adapter for rendering Summon surfaces and component islands", + "license": "Apache-2.0", + "author": "Block, Inc.", + "repository": { + "type": "git", + "url": "git+https://github.com/block/summon.git" + }, + "homepage": "https://github.com/block/summon#readme", + "bugs": { + "url": "https://github.com/block/summon/issues" + }, + "keywords": [ + "generative-ui", + "react", + "sandbox", + "llm", + "summon" + ], + "type": "module", + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + }, + "./package.json": "./package.json" + }, + "files": [ + "dist" + ], + "publishConfig": { + "access": "public", + "provenance": true + }, + "scripts": { + "build": "node ../../scripts/build-public-packages.mjs summon-react", + "typecheck": "tsc --noEmit", + "prepublishOnly": "pnpm build" + }, + "dependencies": { + "@anarchitecture/summon": "^0.1.0" + }, + "peerDependencies": { + "react": ">=18.3.0 || >=19.0.0", + "react-dom": ">=18.3.0 || >=19.0.0" + }, + "devDependencies": { + "@types/react": "^18.3.0", + "@types/react-dom": "^18.3.0", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "typescript": "^5.4.0" + } +} diff --git a/packages/summon-react/src/index.ts b/packages/summon-react/src/index.ts new file mode 100644 index 0000000..90f501f --- /dev/null +++ b/packages/summon-react/src/index.ts @@ -0,0 +1 @@ +export * from '@summon-internal/react'; diff --git a/packages/summon-react/tsconfig.json b/packages/summon-react/tsconfig.json new file mode 100644 index 0000000..52d43ea --- /dev/null +++ b/packages/summon-react/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "../../tsconfig.json", + "include": ["src/**/*"] +} diff --git a/packages/summon-server/package.json b/packages/summon-server/package.json new file mode 100644 index 0000000..4e6f2ad --- /dev/null +++ b/packages/summon-server/package.json @@ -0,0 +1,50 @@ +{ + "name": "@anarchitecture/summon-server", + "version": "0.1.0", + "description": "Provider-neutral server-side generation primitives for Summon surfaces", + "license": "Apache-2.0", + "author": "Block, Inc.", + "repository": { + "type": "git", + "url": "git+https://github.com/block/summon.git" + }, + "homepage": "https://github.com/block/summon#readme", + "bugs": { + "url": "https://github.com/block/summon/issues" + }, + "keywords": [ + "generative-ui", + "server", + "llm", + "streaming", + "summon" + ], + "type": "module", + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + }, + "./package.json": "./package.json" + }, + "files": [ + "dist" + ], + "publishConfig": { + "access": "public", + "provenance": true + }, + "scripts": { + "build": "node ../../scripts/build-public-packages.mjs summon-server", + "typecheck": "tsc --noEmit", + "prepublishOnly": "pnpm build" + }, + "dependencies": { + "@anarchitecture/summon": "^0.1.0" + }, + "devDependencies": { + "typescript": "^5.4.0" + } +} diff --git a/packages/summon-server/src/index.ts b/packages/summon-server/src/index.ts new file mode 100644 index 0000000..b4aee44 --- /dev/null +++ b/packages/summon-server/src/index.ts @@ -0,0 +1 @@ +export * from '@summon-internal/server'; diff --git a/packages/summon-server/tsconfig.json b/packages/summon-server/tsconfig.json new file mode 100644 index 0000000..52d43ea --- /dev/null +++ b/packages/summon-server/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "../../tsconfig.json", + "include": ["src/**/*"] +} diff --git a/packages/summon/package.json b/packages/summon/package.json new file mode 100644 index 0000000..2770712 --- /dev/null +++ b/packages/summon/package.json @@ -0,0 +1,75 @@ +{ + "name": "@anarchitecture/summon", + "version": "0.1.0", + "description": "Sandboxed generative UI runtime, protocol, policy bridge, and browser host primitives", + "license": "Apache-2.0", + "author": "Block, Inc.", + "repository": { + "type": "git", + "url": "git+https://github.com/block/summon.git" + }, + "homepage": "https://github.com/block/summon#readme", + "bugs": { + "url": "https://github.com/block/summon/issues" + }, + "keywords": [ + "generative-ui", + "sandbox", + "llm", + "protocol", + "runtime" + ], + "type": "module", + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + }, + "./browser": { + "types": "./dist/browser.d.ts", + "import": "./dist/browser.js" + }, + "./policy": { + "types": "./dist/policy.d.ts", + "import": "./dist/policy.js" + }, + "./envelope": { + "types": "./dist/envelope.d.ts", + "import": "./dist/envelope.js" + }, + "./assets": { + "types": "./dist/assets.d.ts", + "import": "./dist/assets.js" + }, + "./devtools": { + "types": "./dist/devtools.d.ts", + "import": "./dist/devtools.js" + }, + "./bootstrap.js": "./dist/sandbox-runtime/bootstrap.js", + "./tokens.css": "./dist/sandbox-runtime/tokens.css", + "./package.json": "./package.json" + }, + "files": [ + "dist" + ], + "sideEffects": [ + "**/*.css" + ], + "publishConfig": { + "access": "public", + "provenance": true + }, + "scripts": { + "build": "node ../../scripts/build-public-packages.mjs summon", + "typecheck": "tsc --noEmit", + "prepublishOnly": "pnpm build" + }, + "dependencies": { + "zod": "^3.23.0" + }, + "devDependencies": { + "typescript": "^5.4.0" + } +} diff --git a/packages/summon/src/assets.ts b/packages/summon/src/assets.ts new file mode 100644 index 0000000..5c7c51e --- /dev/null +++ b/packages/summon/src/assets.ts @@ -0,0 +1 @@ +export * from '@summon-internal/sandbox-runtime/assets'; diff --git a/packages/summon/src/browser.ts b/packages/summon/src/browser.ts new file mode 100644 index 0000000..1220ad0 --- /dev/null +++ b/packages/summon/src/browser.ts @@ -0,0 +1 @@ +export * from '@summon-internal/host/browser'; diff --git a/packages/summon/src/devtools.ts b/packages/summon/src/devtools.ts new file mode 100644 index 0000000..92ed025 --- /dev/null +++ b/packages/summon/src/devtools.ts @@ -0,0 +1 @@ +export * from '@summon-internal/devtools'; diff --git a/packages/summon/src/envelope.ts b/packages/summon/src/envelope.ts new file mode 100644 index 0000000..3a27aa2 --- /dev/null +++ b/packages/summon/src/envelope.ts @@ -0,0 +1 @@ +export * from '@summon-internal/host/envelope'; diff --git a/packages/summon/src/index.ts b/packages/summon/src/index.ts new file mode 100644 index 0000000..b295b12 --- /dev/null +++ b/packages/summon/src/index.ts @@ -0,0 +1,4 @@ +export * from '@summon-internal/engine'; +export * from '@summon-internal/host'; +export * from '@summon-internal/devtools'; +export { bootstrapSource, tokensSource } from '@summon-internal/sandbox-runtime/assets'; diff --git a/packages/summon/src/policy.ts b/packages/summon/src/policy.ts new file mode 100644 index 0000000..1fa0876 --- /dev/null +++ b/packages/summon/src/policy.ts @@ -0,0 +1 @@ +export * from '@summon-internal/host/policy'; diff --git a/packages/summon/tsconfig.json b/packages/summon/tsconfig.json new file mode 100644 index 0000000..52d43ea --- /dev/null +++ b/packages/summon/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "../../tsconfig.json", + "include": ["src/**/*"] +} diff --git a/playwright.config.ts b/playwright.config.ts index 45aca3b..390471a 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -24,7 +24,7 @@ export default defineConfig({ }, ], webServer: { - command: 'pnpm --filter @summon/demo dev --host 127.0.0.1 --port 5173', + command: 'pnpm --filter @summon-internal/demo dev --host 127.0.0.1 --port 5173', url: 'http://127.0.0.1:5173/generate.html', reuseExistingServer: !process.env.CI, timeout: 120_000, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index eb5d04a..385af9b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,7 +1,7 @@ lockfileVersion: '9.0' settings: - autoInstallPeers: true + autoInstallPeers: false excludeLinksFromLockfile: false importers: @@ -11,6 +11,12 @@ importers: '@anthropic-ai/sdk': specifier: ^0.88.0 version: 0.88.0(zod@4.4.3) + '@changesets/changelog-github': + specifier: ^0.6.0 + version: 0.6.0 + '@changesets/cli': + specifier: ^2.31.0 + version: 2.31.0(@types/node@20.19.39) '@playwright/test': specifier: ^1.60.0 version: 1.60.0 @@ -20,18 +26,9 @@ importers: apps/demo: dependencies: - '@summon/devtools': + '@anarchitecture/summon': specifier: workspace:* - version: link:../../packages/devtools - '@summon/engine': - specifier: workspace:* - version: link:../../packages/engine - '@summon/host': - specifier: workspace:* - version: link:../../packages/host - '@summon/sandbox-runtime': - specifier: workspace:* - version: link:../../packages/sandbox-runtime + version: link:../../packages/summon zod: specifier: ^3.23.0 version: 3.25.76 @@ -48,20 +45,20 @@ importers: '@anarchitecture/ghost': specifier: ^0.2.0 version: 0.2.0 + '@anarchitecture/summon': + specifier: workspace:* + version: link:../../packages/summon + '@anarchitecture/summon-server': + specifier: workspace:* + version: link:../../packages/summon-server '@anthropic-ai/sdk': specifier: ^0.88.0 version: 0.88.0(zod@4.4.3) - '@summon/engine': - specifier: workspace:* - version: link:../../packages/engine - '@summon/server': - specifier: workspace:* - version: link:../../packages/server cors: specifier: ^2.8.5 version: 2.8.6 express: - specifier: ^4.22.1 + specifier: ^4.21.2 version: 4.22.1 devDependencies: '@types/cors': @@ -97,13 +94,13 @@ importers: packages/host: dependencies: - '@summon/devtools': + '@summon-internal/devtools': specifier: workspace:* version: link:../devtools - '@summon/engine': + '@summon-internal/engine': specifier: workspace:* version: link:../engine - '@summon/sandbox-runtime': + '@summon-internal/sandbox-runtime': specifier: workspace:* version: link:../sandbox-runtime zod: @@ -119,25 +116,31 @@ importers: packages/react: dependencies: - '@summon/devtools': + '@summon-internal/devtools': specifier: workspace:* version: link:../devtools - '@summon/engine': + '@summon-internal/engine': specifier: workspace:* version: link:../engine - '@summon/host': + '@summon-internal/host': specifier: workspace:* version: link:../host - '@summon/sandbox-runtime': + '@summon-internal/sandbox-runtime': specifier: workspace:* version: link:../sandbox-runtime + devDependencies: + '@types/react': + specifier: ^18.3.0 + version: 18.3.31 + '@types/react-dom': + specifier: ^18.3.0 + version: 18.3.7(@types/react@18.3.31) react: - specifier: '>=18.3.0 || >=19.0.0' - version: 19.2.7 + specifier: ^18.3.1 + version: 18.3.1 react-dom: - specifier: '>=18.3.0 || >=19.0.0' - version: 19.2.7(react@19.2.7) - devDependencies: + specifier: ^18.3.1 + version: 18.3.1(react@18.3.1) typescript: specifier: ^5.4.0 version: 5.9.3 @@ -146,7 +149,7 @@ importers: packages/server: dependencies: - '@summon/engine': + '@summon-internal/engine': specifier: workspace:* version: link:../engine devDependencies: @@ -157,6 +160,48 @@ importers: specifier: ^5.4.0 version: 5.9.3 + packages/summon: + dependencies: + zod: + specifier: ^3.23.0 + version: 3.25.76 + devDependencies: + typescript: + specifier: ^5.4.0 + version: 5.9.3 + + packages/summon-react: + dependencies: + '@anarchitecture/summon': + specifier: ^0.1.0 + version: link:../summon + devDependencies: + '@types/react': + specifier: ^18.3.0 + version: 18.3.31 + '@types/react-dom': + specifier: ^18.3.0 + version: 18.3.7(@types/react@18.3.31) + react: + specifier: ^18.3.1 + version: 18.3.1 + react-dom: + specifier: ^18.3.1 + version: 18.3.1(react@18.3.1) + typescript: + specifier: ^5.4.0 + version: 5.9.3 + + packages/summon-server: + dependencies: + '@anarchitecture/summon': + specifier: ^0.1.0 + version: link:../summon + devDependencies: + typescript: + specifier: ^5.4.0 + version: 5.9.3 + packages: '@anarchitecture/ghost@0.2.0': @@ -176,6 +221,67 @@ packages: resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==} engines: {node: '>=6.9.0'} + '@changesets/apply-release-plan@7.1.1': + resolution: {integrity: sha512-9qPCm/rLx/xoOFXIHGB229+4GOL76S4MC+7tyOuTsR6+1jYlfFDQORdvwR5hDA6y4FL2BPt3qpbcQIS+dW85LA==} + + '@changesets/assemble-release-plan@6.0.10': + resolution: {integrity: sha512-rSDcqdJ9KbVyjpBIuCidhvZNIiVt1XaIYp73ycVQRIA5n/j6wQaEk0ChRLMUQ1vkxZe51PTQ9OIhbg6HQMW45A==} + + '@changesets/changelog-git@0.2.1': + resolution: {integrity: sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==} + + '@changesets/changelog-github@0.6.0': + resolution: {integrity: sha512-wA2/y4hR/A1K411cCT75rz0d46Iezxp1WYRFoFJDIUpkQ6oDBAIUiU7BZkDCmYgz0NBl94X1lgcZO+mHoiHnFg==} + + '@changesets/cli@2.31.0': + resolution: {integrity: sha512-AhI4enNTgHu2IZr6K4WZyf0EPch4XVMn1yOMFmCD9gsfBGqMYaHXls5HyDv6/CL5axVQABz68eG30eCtbr2wFg==} + hasBin: true + + '@changesets/config@3.1.4': + resolution: {integrity: sha512-pf0bvD/v6WI2cRlZ6hzpjtZdSlXDXMAJ+Iz7xfFzV4ZxJ8OGGAON+1qYc99ZPrijnt4xp3VGG7eNvAOGS24V1Q==} + + '@changesets/errors@0.2.0': + resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} + + '@changesets/get-dependents-graph@2.1.4': + resolution: {integrity: sha512-ZsS00x6WvmHq3sQv8oCMwL0f/z3wbXCVuSVTJwCnnmbC/iBdNJGFx1EcbMG4PC6sXRyH69liM4A2WKXzn/kRPg==} + + '@changesets/get-github-info@0.8.0': + resolution: {integrity: sha512-cRnC+xdF0JIik7coko3iUP9qbnfi1iJQ3sAa6dE+Tx3+ET8bjFEm63PA4WEohgjYcmsOikPHWzPsMWWiZmntOQ==} + + '@changesets/get-release-plan@4.0.16': + resolution: {integrity: sha512-2K5Om6CrMPm45rtvckfzWo7e9jOVCKLCnXia5eUPaURH7/LWzri7pK1TycdzAuAtehLkW7VPbWLCSExTHmiI6g==} + + '@changesets/get-version-range-type@0.4.0': + resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} + + '@changesets/git@3.0.4': + resolution: {integrity: sha512-BXANzRFkX+XcC1q/d27NKvlJ1yf7PSAgi8JG6dt8EfbHFHi4neau7mufcSca5zRhwOL8j9s6EqsxmT+s+/E6Sw==} + + '@changesets/logger@0.1.1': + resolution: {integrity: sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==} + + '@changesets/parse@0.4.3': + resolution: {integrity: sha512-ZDmNc53+dXdWEv7fqIUSgRQOLYoUom5Z40gmLgmATmYR9NbL6FJJHwakcCpzaeCy+1D0m0n7mT4jj2B/MQPl7A==} + + '@changesets/pre@2.0.2': + resolution: {integrity: sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug==} + + '@changesets/read@0.6.7': + resolution: {integrity: sha512-D1G4AUYGrBEk8vj8MGwf75k9GpN6XL3wg8i42P2jZZwFLXnlr2Pn7r9yuQNbaMCarP7ZQWNJbV6XLeysAIMhTA==} + + '@changesets/should-skip-package@0.1.2': + resolution: {integrity: sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==} + + '@changesets/types@4.1.0': + resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} + + '@changesets/types@6.1.0': + resolution: {integrity: sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA==} + + '@changesets/write@0.4.0': + resolution: {integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==} + '@esbuild/aix-ppc64@0.21.5': resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} engines: {node: '>=12'} @@ -470,6 +576,33 @@ packages: cpu: [x64] os: [win32] + '@inquirer/external-editor@1.0.3': + resolution: {integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@manypkg/find-root@1.1.0': + resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} + + '@manypkg/get-packages@1.1.3': + resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + '@playwright/test@1.60.0': resolution: {integrity: sha512-O71yZIbAh/PxDMNGns37GHBIfrVkEVyn+AXyIa5dOTfb4/xNvRWV+Vv/NMbNCtODB/pO7vLlF2OTmMVLhmr7Ag==} engines: {node: '>=18'} @@ -624,15 +757,29 @@ packages: '@types/mime@1.3.5': resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + '@types/node@12.20.55': + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + '@types/node@20.19.39': resolution: {integrity: sha512-orrrD74MBUyK8jOAD/r0+lfa1I2MO6I+vAkmAWzMYbCcgrN4lCrmK52gRFQq/JRxfYPfonkr4b0jcY7Olqdqbw==} + '@types/prop-types@15.7.15': + resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==} + '@types/qs@6.15.0': resolution: {integrity: sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow==} '@types/range-parser@1.2.7': resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} + '@types/react-dom@18.3.7': + resolution: {integrity: sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==} + peerDependencies: + '@types/react': ^18.0.0 + + '@types/react@18.3.31': + resolution: {integrity: sha512-vfEqpXTvwT91yhmwdfouStN2hSKwTvyRs8qpLfADyrq/kxDw0hZM7Wk9Ug1FELj8hIby+S/+kQCSRFF32nv2Qw==} + '@types/send@0.17.6': resolution: {integrity: sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==} @@ -646,13 +793,39 @@ packages: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + better-path-resolve@1.0.0: + resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} + engines: {node: '>=4'} + body-parser@1.20.5: resolution: {integrity: sha512-3grm+/2tUOvu2cjJkvsIxrv/wVpfXQW4PsQHYm7yk4vfpu7Ekl6nEsYBoJUL6qDwZUx8wUhQ8tR2qz+ad9c9OA==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} @@ -669,6 +842,9 @@ packages: resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} engines: {node: '>= 0.4'} + chardet@2.1.1: + resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==} + content-disposition@0.5.4: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} @@ -688,6 +864,16 @@ packages: resolution: {integrity: sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==} engines: {node: '>= 0.10'} + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + + dataloader@1.4.0: + resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==} + debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -704,6 +890,18 @@ packages: resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + detect-indent@6.1.0: + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} + engines: {node: '>=8'} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + dotenv@8.6.0: + resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} + engines: {node: '>=10'} + dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} @@ -715,6 +913,10 @@ packages: resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} engines: {node: '>= 0.8'} + enquirer@2.4.1: + resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} + engines: {node: '>=8.6'} + es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} @@ -740,6 +942,11 @@ packages: escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + etag@1.8.1: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} @@ -748,10 +955,28 @@ packages: resolution: {integrity: sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==} engines: {node: '>= 0.10.0'} + extendable-error@0.1.7: + resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fastq@1.20.1: + resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + finalhandler@1.3.2: resolution: {integrity: sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==} engines: {node: '>= 0.8'} + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} @@ -760,6 +985,14 @@ packages: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} + fs-extra@7.0.1: + resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} + engines: {node: '>=6 <7 || >=8'} + + fs-extra@8.1.0: + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + engines: {node: '>=6 <7 || >=8'} + fsevents@2.3.2: resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -784,10 +1017,21 @@ packages: get-tsconfig@4.14.0: resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==} + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + has-symbols@1.1.0: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} @@ -800,10 +1044,22 @@ packages: resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} engines: {node: '>= 0.8'} + human-id@4.2.0: + resolution: {integrity: sha512-K3GbkIWqyvvlpfhBPlbEvD97TtqBpAYA4kt+cn2lD2x2HuohzZCibcA2nOlnJT6exqvJLggoB5nv2dNf192nEA==} + hasBin: true + iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} + iconv-lite@0.7.2: + resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} + engines: {node: '>=0.10.0'} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -811,14 +1067,62 @@ packages: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-subdir@1.2.0: + resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} + engines: {node: '>=4'} + + is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + jiti@2.7.0: resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} hasBin: true + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@3.14.2: + resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==} + hasBin: true + + js-yaml@4.2.0: + resolution: {integrity: sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==} + hasBin: true + json-schema-to-ts@3.1.1: resolution: {integrity: sha512-+DWg8jCJG2TEnpy7kOm/7/AxaYoaRbjVB4LFZLySZlWn8exGs3A4OLJR966cVvU26N7X9TWxl+Jsw7dzAqKT6g==} engines: {node: '>=16'} + jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + lodash.startcase@4.4.0: + resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} @@ -830,10 +1134,18 @@ packages: merge-descriptors@1.0.3: resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + methods@1.1.2: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} @@ -847,6 +1159,10 @@ packages: engines: {node: '>=4'} hasBin: true + mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} @@ -862,6 +1178,15 @@ packages: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -874,16 +1199,62 @@ packages: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} + outdent@0.5.0: + resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} + + p-filter@2.1.0: + resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} + engines: {node: '>=8'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + p-map@2.1.0: + resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} + engines: {node: '>=6'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + package-manager-detector@0.2.11: + resolution: {integrity: sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==} + parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + path-to-regexp@0.1.13: resolution: {integrity: sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==} + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + picomatch@2.3.2: + resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} + engines: {node: '>=8.6'} + + pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + playwright-core@1.60.0: resolution: {integrity: sha512-9bW6zvX/m0lEbgTKJ6YppOKx8H3VOPBMOCFh2irXFOT4BbHgrx5hPjwJYLT40Lu+4qtD36qKc/Hn56StUW57IA==} engines: {node: '>=18'} @@ -898,6 +1269,11 @@ packages: resolution: {integrity: sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==} engines: {node: ^10 || ^12 || >=14} + prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} @@ -910,6 +1286,12 @@ packages: resolution: {integrity: sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw==} engines: {node: '>=0.6'} + quansync@0.2.11: + resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + range-parser@1.2.1: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} @@ -918,31 +1300,51 @@ packages: resolution: {integrity: sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==} engines: {node: '>= 0.8'} - react-dom@19.2.7: - resolution: {integrity: sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ==} + react-dom@18.3.1: + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} peerDependencies: - react: ^19.2.7 + react: ^18.3.1 - react@19.2.7: - resolution: {integrity: sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ==} + react@18.3.1: + resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} + read-yaml-file@1.1.0: + resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} + engines: {node: '>=6'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + rollup@4.60.2: resolution: {integrity: sha512-J9qZyW++QK/09NyN/zeO0dG/1GdGfyp9lV8ajHnRVLfo/uFsbji5mHnDgn/qYdUHyCkM2N+8VyspgZclfAh0eQ==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - scheduler@0.27.0: - resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} + scheduler@0.23.2: + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + + semver@7.8.2: + resolution: {integrity: sha512-c8jsqUZm3omBOI66G90z1Dyw5z622G8oLG+omfsHBJf3CWQTlOcwOjvOG6wtiNfW6anKm/eA39LMwMtMez2TiQ==} + engines: {node: '>=10'} + hasBin: true send@0.19.2: resolution: {integrity: sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==} @@ -955,6 +1357,14 @@ packages: setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + side-channel-list@1.0.1: resolution: {integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==} engines: {node: '>= 0.4'} @@ -971,18 +1381,51 @@ packages: resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} engines: {node: '>= 0.4'} + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} + spawndamnit@3.0.1: + resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + statuses@2.0.2: resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} engines: {node: '>= 0.8'} + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + term-size@2.2.1: + resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} + engines: {node: '>=8'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + toidentifier@1.0.1: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + ts-algebra@2.0.0: resolution: {integrity: sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw==} @@ -1003,6 +1446,10 @@ packages: undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + unpipe@1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} @@ -1046,6 +1493,17 @@ packages: terser: optional: true + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + yaml@2.8.3: resolution: {integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==} engines: {node: '>= 14.6'} @@ -1074,6 +1532,164 @@ snapshots: '@babel/runtime@7.29.2': {} + '@changesets/apply-release-plan@7.1.1': + dependencies: + '@changesets/config': 3.1.4 + '@changesets/get-version-range-type': 0.4.0 + '@changesets/git': 3.0.4 + '@changesets/should-skip-package': 0.1.2 + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + detect-indent: 6.1.0 + fs-extra: 7.0.1 + lodash.startcase: 4.4.0 + outdent: 0.5.0 + prettier: 2.8.8 + resolve-from: 5.0.0 + semver: 7.8.2 + + '@changesets/assemble-release-plan@6.0.10': + dependencies: + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.1.4 + '@changesets/should-skip-package': 0.1.2 + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + semver: 7.8.2 + + '@changesets/changelog-git@0.2.1': + dependencies: + '@changesets/types': 6.1.0 + + '@changesets/changelog-github@0.6.0': + dependencies: + '@changesets/get-github-info': 0.8.0 + '@changesets/types': 6.1.0 + dotenv: 8.6.0 + transitivePeerDependencies: + - encoding + + '@changesets/cli@2.31.0(@types/node@20.19.39)': + dependencies: + '@changesets/apply-release-plan': 7.1.1 + '@changesets/assemble-release-plan': 6.0.10 + '@changesets/changelog-git': 0.2.1 + '@changesets/config': 3.1.4 + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.1.4 + '@changesets/get-release-plan': 4.0.16 + '@changesets/git': 3.0.4 + '@changesets/logger': 0.1.1 + '@changesets/pre': 2.0.2 + '@changesets/read': 0.6.7 + '@changesets/should-skip-package': 0.1.2 + '@changesets/types': 6.1.0 + '@changesets/write': 0.4.0 + '@inquirer/external-editor': 1.0.3(@types/node@20.19.39) + '@manypkg/get-packages': 1.1.3 + ansi-colors: 4.1.3 + enquirer: 2.4.1 + fs-extra: 7.0.1 + mri: 1.2.0 + package-manager-detector: 0.2.11 + picocolors: 1.1.1 + resolve-from: 5.0.0 + semver: 7.8.2 + spawndamnit: 3.0.1 + term-size: 2.2.1 + transitivePeerDependencies: + - '@types/node' + + '@changesets/config@3.1.4': + dependencies: + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.1.4 + '@changesets/logger': 0.1.1 + '@changesets/should-skip-package': 0.1.2 + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + fs-extra: 7.0.1 + micromatch: 4.0.8 + + '@changesets/errors@0.2.0': + dependencies: + extendable-error: 0.1.7 + + '@changesets/get-dependents-graph@2.1.4': + dependencies: + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + picocolors: 1.1.1 + semver: 7.8.2 + + '@changesets/get-github-info@0.8.0': + dependencies: + dataloader: 1.4.0 + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + + '@changesets/get-release-plan@4.0.16': + dependencies: + '@changesets/assemble-release-plan': 6.0.10 + '@changesets/config': 3.1.4 + '@changesets/pre': 2.0.2 + '@changesets/read': 0.6.7 + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + + '@changesets/get-version-range-type@0.4.0': {} + + '@changesets/git@3.0.4': + dependencies: + '@changesets/errors': 0.2.0 + '@manypkg/get-packages': 1.1.3 + is-subdir: 1.2.0 + micromatch: 4.0.8 + spawndamnit: 3.0.1 + + '@changesets/logger@0.1.1': + dependencies: + picocolors: 1.1.1 + + '@changesets/parse@0.4.3': + dependencies: + '@changesets/types': 6.1.0 + js-yaml: 4.2.0 + + '@changesets/pre@2.0.2': + dependencies: + '@changesets/errors': 0.2.0 + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + fs-extra: 7.0.1 + + '@changesets/read@0.6.7': + dependencies: + '@changesets/git': 3.0.4 + '@changesets/logger': 0.1.1 + '@changesets/parse': 0.4.3 + '@changesets/types': 6.1.0 + fs-extra: 7.0.1 + p-filter: 2.1.0 + picocolors: 1.1.1 + + '@changesets/should-skip-package@0.1.2': + dependencies: + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + + '@changesets/types@4.1.0': {} + + '@changesets/types@6.1.0': {} + + '@changesets/write@0.4.0': + dependencies: + '@changesets/types': 6.1.0 + fs-extra: 7.0.1 + human-id: 4.2.0 + prettier: 2.8.8 + '@esbuild/aix-ppc64@0.21.5': optional: true @@ -1221,6 +1837,41 @@ snapshots: '@esbuild/win32-x64@0.27.7': optional: true + '@inquirer/external-editor@1.0.3(@types/node@20.19.39)': + dependencies: + chardet: 2.1.1 + iconv-lite: 0.7.2 + optionalDependencies: + '@types/node': 20.19.39 + + '@manypkg/find-root@1.1.0': + dependencies: + '@babel/runtime': 7.29.2 + '@types/node': 12.20.55 + find-up: 4.1.0 + fs-extra: 8.1.0 + + '@manypkg/get-packages@1.1.3': + dependencies: + '@babel/runtime': 7.29.2 + '@changesets/types': 4.1.0 + '@manypkg/find-root': 1.1.0 + fs-extra: 8.1.0 + globby: 11.1.0 + read-yaml-file: 1.1.0 + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.20.1 + '@playwright/test@1.60.0': dependencies: playwright: 1.60.0 @@ -1333,14 +1984,27 @@ snapshots: '@types/mime@1.3.5': {} + '@types/node@12.20.55': {} + '@types/node@20.19.39': dependencies: undici-types: 6.21.0 + '@types/prop-types@15.7.15': {} + '@types/qs@6.15.0': {} '@types/range-parser@1.2.7': {} + '@types/react-dom@18.3.7(@types/react@18.3.31)': + dependencies: + '@types/react': 18.3.31 + + '@types/react@18.3.31': + dependencies: + '@types/prop-types': 15.7.15 + csstype: 3.2.3 + '@types/send@0.17.6': dependencies: '@types/mime': 1.3.5 @@ -1361,8 +2025,24 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 + ansi-colors@4.1.3: {} + + ansi-regex@5.0.1: {} + + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + + argparse@2.0.1: {} + array-flatten@1.1.1: {} + array-union@2.1.0: {} + + better-path-resolve@1.0.0: + dependencies: + is-windows: 1.0.2 + body-parser@1.20.5: dependencies: bytes: 3.1.2 @@ -1380,6 +2060,10 @@ snapshots: transitivePeerDependencies: - supports-color + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + bytes@3.1.2: {} cac@6.7.14: {} @@ -1394,6 +2078,8 @@ snapshots: call-bind-apply-helpers: 1.0.2 get-intrinsic: 1.3.0 + chardet@2.1.1: {} + content-disposition@0.5.4: dependencies: safe-buffer: 5.2.1 @@ -1409,6 +2095,16 @@ snapshots: object-assign: 4.1.1 vary: 1.1.2 + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + csstype@3.2.3: {} + + dataloader@1.4.0: {} + debug@2.6.9: dependencies: ms: 2.0.0 @@ -1417,6 +2113,14 @@ snapshots: destroy@1.2.0: {} + detect-indent@6.1.0: {} + + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + + dotenv@8.6.0: {} + dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 @@ -1427,6 +2131,11 @@ snapshots: encodeurl@2.0.0: {} + enquirer@2.4.1: + dependencies: + ansi-colors: 4.1.3 + strip-ansi: 6.0.1 + es-define-property@1.0.1: {} es-errors@1.3.0: {} @@ -1492,6 +2201,8 @@ snapshots: escape-html@1.0.3: {} + esprima@4.0.1: {} + etag@1.8.1: {} express@4.22.1: @@ -1530,6 +2241,24 @@ snapshots: transitivePeerDependencies: - supports-color + extendable-error@0.1.7: {} + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fastq@1.20.1: + dependencies: + reusify: 1.1.0 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + finalhandler@1.3.2: dependencies: debug: 2.6.9 @@ -1542,10 +2271,27 @@ snapshots: transitivePeerDependencies: - supports-color + find-up@4.1.0: + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + forwarded@0.2.0: {} fresh@0.5.2: {} + fs-extra@7.0.1: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + + fs-extra@8.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + fsevents@2.3.2: optional: true @@ -1576,8 +2322,23 @@ snapshots: dependencies: resolve-pkg-maps: 1.0.0 + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + globby@11.1.0: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.3 + ignore: 5.3.2 + merge2: 1.4.1 + slash: 3.0.0 + gopd@1.2.0: {} + graceful-fs@4.2.11: {} + has-symbols@1.1.0: {} hasown@2.0.4: @@ -1592,29 +2353,85 @@ snapshots: statuses: 2.0.2 toidentifier: 1.0.1 + human-id@4.2.0: {} + iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 + iconv-lite@0.7.2: + dependencies: + safer-buffer: 2.1.2 + + ignore@5.3.2: {} + inherits@2.0.4: {} ipaddr.js@1.9.1: {} + is-extglob@2.1.1: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + + is-subdir@1.2.0: + dependencies: + better-path-resolve: 1.0.0 + + is-windows@1.0.2: {} + + isexe@2.0.0: {} + jiti@2.7.0: {} + js-tokens@4.0.0: {} + + js-yaml@3.14.2: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + + js-yaml@4.2.0: + dependencies: + argparse: 2.0.1 + json-schema-to-ts@3.1.1: dependencies: '@babel/runtime': 7.29.2 ts-algebra: 2.0.0 + jsonfile@4.0.0: + optionalDependencies: + graceful-fs: 4.2.11 + + locate-path@5.0.0: + dependencies: + p-locate: 4.1.0 + + lodash.startcase@4.4.0: {} + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + math-intrinsics@1.1.0: {} media-typer@0.3.0: {} merge-descriptors@1.0.3: {} + merge2@1.4.1: {} + methods@1.1.2: {} + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.2 + mime-db@1.52.0: {} mime-types@2.1.35: @@ -1623,6 +2440,8 @@ snapshots: mime@1.6.0: {} + mri@1.2.0: {} + ms@2.0.0: {} ms@2.1.3: {} @@ -1631,6 +2450,10 @@ snapshots: negotiator@0.6.3: {} + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + object-assign@4.1.1: {} object-inspect@1.13.4: {} @@ -1639,12 +2462,44 @@ snapshots: dependencies: ee-first: 1.1.1 + outdent@0.5.0: {} + + p-filter@2.1.0: + dependencies: + p-map: 2.1.0 + + p-limit@2.3.0: + dependencies: + p-try: 2.2.0 + + p-locate@4.1.0: + dependencies: + p-limit: 2.3.0 + + p-map@2.1.0: {} + + p-try@2.2.0: {} + + package-manager-detector@0.2.11: + dependencies: + quansync: 0.2.11 + parseurl@1.3.3: {} + path-exists@4.0.0: {} + + path-key@3.1.1: {} + path-to-regexp@0.1.13: {} + path-type@4.0.0: {} + picocolors@1.1.1: {} + picomatch@2.3.2: {} + + pify@4.0.1: {} + playwright-core@1.60.0: {} playwright@1.60.0: @@ -1659,6 +2514,8 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + prettier@2.8.8: {} + proxy-addr@2.0.7: dependencies: forwarded: 0.2.0 @@ -1672,6 +2529,10 @@ snapshots: dependencies: side-channel: 1.1.0 + quansync@0.2.11: {} + + queue-microtask@1.2.3: {} + range-parser@1.2.1: {} raw-body@2.5.3: @@ -1681,15 +2542,29 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 - react-dom@19.2.7(react@19.2.7): + react-dom@18.3.1(react@18.3.1): dependencies: - react: 19.2.7 - scheduler: 0.27.0 + loose-envify: 1.4.0 + react: 18.3.1 + scheduler: 0.23.2 - react@19.2.7: {} + react@18.3.1: + dependencies: + loose-envify: 1.4.0 + + read-yaml-file@1.1.0: + dependencies: + graceful-fs: 4.2.11 + js-yaml: 3.14.2 + pify: 4.0.1 + strip-bom: 3.0.0 + + resolve-from@5.0.0: {} resolve-pkg-maps@1.0.0: {} + reusify@1.1.0: {} + rollup@4.60.2: dependencies: '@types/estree': 1.0.8 @@ -1721,11 +2596,19 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.60.2 fsevents: 2.3.3 + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + safe-buffer@5.2.1: {} safer-buffer@2.1.2: {} - scheduler@0.27.0: {} + scheduler@0.23.2: + dependencies: + loose-envify: 1.4.0 + + semver@7.8.2: {} send@0.19.2: dependencies: @@ -1756,6 +2639,12 @@ snapshots: setprototypeof@1.2.0: {} + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + side-channel-list@1.0.1: dependencies: es-errors: 1.3.0 @@ -1784,12 +2673,37 @@ snapshots: side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 + signal-exit@4.1.0: {} + + slash@3.0.0: {} + source-map-js@1.2.1: {} + spawndamnit@3.0.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + sprintf-js@1.0.3: {} + statuses@2.0.2: {} + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-bom@3.0.0: {} + + term-size@2.2.1: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + toidentifier@1.0.1: {} + tr46@0.0.3: {} + ts-algebra@2.0.0: {} tsx@4.21.0: @@ -1808,6 +2722,8 @@ snapshots: undici-types@6.21.0: {} + universalify@0.1.2: {} + unpipe@1.0.0: {} utils-merge@1.0.1: {} @@ -1823,6 +2739,17 @@ snapshots: '@types/node': 20.19.39 fsevents: 2.3.3 + webidl-conversions@3.0.1: {} + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + yaml@2.8.3: {} zod@3.25.76: {} diff --git a/scripts/build-public-packages.mjs b/scripts/build-public-packages.mjs new file mode 100644 index 0000000..e8a1ac0 --- /dev/null +++ b/scripts/build-public-packages.mjs @@ -0,0 +1,163 @@ +import { mkdir, readdir, readFile, rm, stat, writeFile } from 'node:fs/promises'; +import { dirname, extname, join, relative } from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const rootDir = dirname(fileURLToPath(new URL('../package.json', import.meta.url))); + +const packageAliases = { + summon: 'summon', + '@anarchitecture/summon': 'summon', + 'summon-server': 'summon-server', + '@anarchitecture/summon-server': 'summon-server', + 'summon-react': 'summon-react', + '@anarchitecture/summon-react': 'summon-react', +}; + +const requested = process.argv.slice(2).map((name) => packageAliases[name] ?? name); +const targets = requested.length > 0 ? requested : ['summon', 'summon-server', 'summon-react']; + +const textExtensions = new Set(['.js', '.d.ts']); +const copiedExtensions = new Set(['.js', '.d.ts', '.css']); + +function resolveRoot(...parts) { + return join(rootDir, ...parts); +} + +async function writeText(path, text) { + await mkdir(dirname(path), { recursive: true }); + await writeFile(path, text); +} + +function rewriteSpecifiers(text, replacements) { + let next = text; + for (const [from, to] of replacements) { + next = next.split(from).join(to); + } + return next; +} + +function stripSourceMapReference(text) { + return text.replace(/^\/\/# sourceMappingURL=.*(?:\r?\n)?/gm, ''); +} + +async function copyDistTree(sourceDir, destinationDir, replacements = []) { + await mkdir(destinationDir, { recursive: true }); + for (const entry of await readdir(sourceDir, { withFileTypes: true })) { + const source = join(sourceDir, entry.name); + const destination = join(destinationDir, entry.name); + if (entry.isDirectory()) { + await copyDistTree(source, destination, replacements); + continue; + } + if (!entry.isFile()) continue; + const extension = entry.name.endsWith('.d.ts') ? '.d.ts' : extname(entry.name); + if (!copiedExtensions.has(extension)) continue; + const content = await readFile(source, textExtensions.has(extension) ? 'utf8' : undefined); + if (textExtensions.has(extension)) { + await writeText(destination, stripSourceMapReference(rewriteSpecifiers(content, replacements))); + } else { + await mkdir(dirname(destination), { recursive: true }); + await writeFile(destination, content); + } + } +} + +async function assertBuilt(packageDir) { + const distDir = resolveRoot(packageDir, 'dist'); + try { + const info = await stat(distDir); + if (info.isDirectory()) return; + } catch { + // handled below + } + throw new Error(`${packageDir} must be built before public packages are assembled`); +} + +async function buildCore() { + await Promise.all([ + assertBuilt('packages/devtools'), + assertBuilt('packages/engine'), + assertBuilt('packages/host'), + assertBuilt('packages/sandbox-runtime'), + ]); + + const distDir = resolveRoot('packages/summon/dist'); + await rm(distDir, { recursive: true, force: true }); + + await copyDistTree(resolveRoot('packages/engine/dist'), join(distDir, 'engine')); + await copyDistTree(resolveRoot('packages/devtools/dist'), join(distDir, 'devtools')); + await copyDistTree(resolveRoot('packages/sandbox-runtime/dist'), join(distDir, 'sandbox-runtime')); + await copyDistTree(resolveRoot('packages/host/dist'), join(distDir, 'host'), [ + ['@summon-internal/sandbox-runtime/assets', '../sandbox-runtime/assets.js'], + ['@summon-internal/devtools', '../devtools/index.js'], + ['@summon-internal/engine', '../engine/index.js'], + ]); + + const wrappers = { + 'index.js': [ + "export * from './engine/index.js';", + "export * from './host/index.js';", + "export * from './devtools/index.js';", + "export { bootstrapSource, tokensSource } from './sandbox-runtime/assets.js';", + '', + ].join('\n'), + 'index.d.ts': [ + "export * from './engine/index.js';", + "export * from './host/index.js';", + "export * from './devtools/index.js';", + "export { bootstrapSource, tokensSource } from './sandbox-runtime/assets.js';", + '', + ].join('\n'), + 'browser.js': "export * from './host/browser.js';\n", + 'browser.d.ts': "export * from './host/browser.js';\n", + 'policy.js': "export * from './host/policy.js';\n", + 'policy.d.ts': "export * from './host/policy.js';\n", + 'envelope.js': "export * from './host/envelope.js';\n", + 'envelope.d.ts': "export * from './host/envelope.js';\n", + 'assets.js': "export * from './sandbox-runtime/assets.js';\n", + 'assets.d.ts': "export * from './sandbox-runtime/assets.js';\n", + 'devtools.js': "export * from './devtools/index.js';\n", + 'devtools.d.ts': "export * from './devtools/index.js';\n", + }; + + for (const [file, content] of Object.entries(wrappers)) { + await writeText(join(distDir, file), content); + } +} + +async function buildServer() { + await assertBuilt('packages/server'); + const distDir = resolveRoot('packages/summon-server/dist'); + await rm(distDir, { recursive: true, force: true }); + await copyDistTree(resolveRoot('packages/server/dist'), distDir, [ + ['@summon-internal/engine', '@anarchitecture/summon'], + ]); +} + +async function buildReact() { + await assertBuilt('packages/react'); + const distDir = resolveRoot('packages/summon-react/dist'); + await rm(distDir, { recursive: true, force: true }); + await copyDistTree(resolveRoot('packages/react/dist'), distDir, [ + ['@summon-internal/sandbox-runtime/assets', '@anarchitecture/summon/assets'], + ['@summon-internal/host/envelope', '@anarchitecture/summon/envelope'], + ['@summon-internal/devtools', '@anarchitecture/summon/devtools'], + ['@summon-internal/engine', '@anarchitecture/summon'], + ['@summon-internal/host', '@anarchitecture/summon'], + ]); +} + +const builders = { + summon: buildCore, + 'summon-server': buildServer, + 'summon-react': buildReact, +}; + +for (const target of targets) { + const build = builders[target]; + if (!build) { + throw new Error(`Unknown public package target: ${target}`); + } + await build(); + console.log(`built ${target}`); +} diff --git a/scripts/check-public-packages.mjs b/scripts/check-public-packages.mjs new file mode 100644 index 0000000..0402c2b --- /dev/null +++ b/scripts/check-public-packages.mjs @@ -0,0 +1,75 @@ +import { readdir, readFile, stat } from 'node:fs/promises'; +import { dirname, extname, join, relative } from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const rootDir = dirname(fileURLToPath(new URL('../package.json', import.meta.url))); +const publicPackages = [ + 'packages/summon', + 'packages/summon-server', + 'packages/summon-react', +]; +const inspectedExtensions = new Set(['.js', '.d.ts']); + +async function* walk(dir) { + for (const entry of await readdir(dir, { withFileTypes: true })) { + const path = join(dir, entry.name); + if (entry.isDirectory()) { + yield* walk(path); + } else if (entry.isFile()) { + yield path; + } + } +} + +function inspectable(path) { + return path.endsWith('.d.ts') || inspectedExtensions.has(extname(path)); +} + +async function assertDist(packageDir) { + const distDir = join(rootDir, packageDir, 'dist'); + const info = await stat(distDir); + if (!info.isDirectory()) { + throw new Error(`${packageDir}/dist is not a directory`); + } + return distDir; +} + +const failures = []; + +for (const packageDir of publicPackages) { + const packageJsonPath = join(rootDir, packageDir, 'package.json'); + const manifest = JSON.parse(await readFile(packageJsonPath, 'utf8')); + const manifestText = JSON.stringify({ + dependencies: manifest.dependencies ?? {}, + peerDependencies: manifest.peerDependencies ?? {}, + optionalDependencies: manifest.optionalDependencies ?? {}, + }); + if (manifest.private) { + failures.push(`${packageDir}/package.json must not be private`); + } + if (manifestText.includes('@summon-internal/')) { + failures.push(`${packageDir}/package.json exposes @summon-internal dependencies`); + } + const distDir = await assertDist(packageDir); + for await (const file of walk(distDir)) { + if (file.endsWith('.map')) { + failures.push(`${relative(rootDir, file)} should not be published in public package dist`); + continue; + } + if (!inspectable(file)) continue; + const text = await readFile(file, 'utf8'); + if (text.includes('@summon-internal/')) { + failures.push(`${relative(rootDir, file)} imports @summon-internal`); + } + if (text.includes('sourceMappingURL=')) { + failures.push(`${relative(rootDir, file)} references an unpublished source map`); + } + } +} + +if (failures.length > 0) { + console.error(failures.join('\n')); + process.exit(1); +} + +console.log('public package dist is clean'); diff --git a/scripts/smoke-public-packages.mjs b/scripts/smoke-public-packages.mjs new file mode 100644 index 0000000..3ff1e3a --- /dev/null +++ b/scripts/smoke-public-packages.mjs @@ -0,0 +1,66 @@ +import { execFileSync } from 'node:child_process'; +import { mkdir, mkdtemp, writeFile } from 'node:fs/promises'; +import { dirname, join } from 'node:path'; +import { tmpdir } from 'node:os'; +import { fileURLToPath } from 'node:url'; + +const rootDir = dirname(fileURLToPath(new URL('../package.json', import.meta.url))); +const workDir = await mkdtemp(join(tmpdir(), 'summon-public-smoke-')); +const tarballDir = join(workDir, 'tarballs'); +const projectDir = join(workDir, 'project'); + +function run(command, args, cwd = rootDir) { + execFileSync(command, args, { cwd, stdio: 'inherit' }); +} + +await writeFile(join(workDir, 'README'), 'Summon public package smoke test scratch directory\n'); + +await mkdir(tarballDir, { recursive: true }); +await mkdir(projectDir, { recursive: true }); +for (const packageDir of ['packages/summon', 'packages/summon-server', 'packages/summon-react']) { + run('npm', ['pack', '--pack-destination', tarballDir], join(rootDir, packageDir)); +} + +await writeFile(join(projectDir, 'package.json'), JSON.stringify({ + private: true, + type: 'module', + dependencies: { + '@anarchitecture/summon': `file:${join(tarballDir, 'anarchitecture-summon-0.1.0.tgz')}`, + '@anarchitecture/summon-server': `file:${join(tarballDir, 'anarchitecture-summon-server-0.1.0.tgz')}`, + '@anarchitecture/summon-react': `file:${join(tarballDir, 'anarchitecture-summon-react-0.1.0.tgz')}`, + react: '19.2.5', + 'react-dom': '19.2.5', + }, + pnpm: { + overrides: { + '@anarchitecture/summon': `file:${join(tarballDir, 'anarchitecture-summon-0.1.0.tgz')}`, + }, + }, +}, null, 2) + '\n'); + +run('pnpm', ['install', '--ignore-scripts'], projectDir); + +await writeFile(join(projectDir, 'smoke.mjs'), [ + "import { parseProtocolLine, createCapabilityRegistry } from '@anarchitecture/summon';", + "import { spawnSandbox } from '@anarchitecture/summon/browser';", + "import { PolicyEngine } from '@anarchitecture/summon/policy';", + "import { createSurfaceEnvelope } from '@anarchitecture/summon/envelope';", + "import { bootstrapSource, tokensSource } from '@anarchitecture/summon/assets';", + "import { createEventStore } from '@anarchitecture/summon/devtools';", + "import { runSurfaceGeneration, generateSurfaceStream, resolveSurfaceGenerationPlan } from '@anarchitecture/summon-server';", + "import { SummonSurface, defineReactComponent } from '@anarchitecture/summon-react';", + "if (typeof parseProtocolLine !== 'function') throw new Error('core import failed');", + "if (typeof createCapabilityRegistry !== 'function') throw new Error('capability import failed');", + "if (typeof spawnSandbox !== 'function') throw new Error('browser import failed');", + "if (typeof PolicyEngine !== 'function') throw new Error('policy import failed');", + "if (typeof createSurfaceEnvelope !== 'function') throw new Error('envelope import failed');", + "if (typeof bootstrapSource !== 'string' || typeof tokensSource !== 'string') throw new Error('assets import failed');", + "if (typeof createEventStore !== 'function') throw new Error('devtools import failed');", + "if (typeof runSurfaceGeneration !== 'function' || typeof generateSurfaceStream !== 'function' || typeof resolveSurfaceGenerationPlan !== 'function') throw new Error('server import failed');", + "if (typeof SummonSurface !== 'function' || typeof defineReactComponent !== 'function') throw new Error('react import failed');", + "console.log('public package smoke imports passed');", + '', +].join('\n')); + +run('node', ['smoke.mjs'], projectDir); +console.log(`public package smoke test completed in ${workDir}`); diff --git a/tsconfig.json b/tsconfig.json index 4a3baf8..a24a734 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -15,17 +15,27 @@ "noEmit": true, "baseUrl": ".", "paths": { - "@summon/devtools": ["packages/devtools/src/index.ts"], - "@summon/engine": ["packages/engine/src/index.ts"], - "@summon/host": ["packages/host/src/index.ts"], - "@summon/host/browser": ["packages/host/src/browser.ts"], - "@summon/host/envelope": ["packages/host/src/envelope.ts"], - "@summon/host/policy": ["packages/host/src/policy.ts"], - "@summon/react": ["packages/react/src/index.ts"], - "@summon/sandbox-runtime/assets": ["packages/sandbox-runtime/src/assets.ts"], - "@summon/sandbox-runtime/bootstrap.js?raw": ["packages/sandbox-runtime/src/bootstrap.js"], - "@summon/sandbox-runtime/tokens.css?raw": ["packages/sandbox-runtime/src/tokens.css"], - "@summon/server": ["packages/server/src/index.ts"] + "@summon-internal/devtools": ["packages/devtools/src/index.ts"], + "@summon-internal/engine": ["packages/engine/src/index.ts"], + "@summon-internal/host": ["packages/host/src/index.ts"], + "@summon-internal/host/browser": ["packages/host/src/browser.ts"], + "@summon-internal/host/envelope": ["packages/host/src/envelope.ts"], + "@summon-internal/host/policy": ["packages/host/src/policy.ts"], + "@summon-internal/react": ["packages/react/src/index.ts"], + "@summon-internal/sandbox-runtime/assets": ["packages/sandbox-runtime/src/assets.ts"], + "@summon-internal/sandbox-runtime/bootstrap.js?raw": ["packages/sandbox-runtime/src/bootstrap.js"], + "@summon-internal/sandbox-runtime/tokens.css?raw": ["packages/sandbox-runtime/src/tokens.css"], + "@summon-internal/server": ["packages/server/src/index.ts"], + "@anarchitecture/summon": ["packages/summon/src/index.ts"], + "@anarchitecture/summon/browser": ["packages/summon/src/browser.ts"], + "@anarchitecture/summon/policy": ["packages/summon/src/policy.ts"], + "@anarchitecture/summon/envelope": ["packages/summon/src/envelope.ts"], + "@anarchitecture/summon/assets": ["packages/summon/src/assets.ts"], + "@anarchitecture/summon/devtools": ["packages/summon/src/devtools.ts"], + "@anarchitecture/summon/bootstrap.js?raw": ["packages/sandbox-runtime/src/bootstrap.js"], + "@anarchitecture/summon/tokens.css?raw": ["packages/sandbox-runtime/src/tokens.css"], + "@anarchitecture/summon-server": ["packages/summon-server/src/index.ts"], + "@anarchitecture/summon-react": ["packages/summon-react/src/index.ts"] } } }