{"_id":"@astxrtys/annotator","_rev":"3-723d81c6f75f3336e5bb84032fcb05f8","name":"@astxrtys/annotator","dist-tags":{"latest":"0.1.2"},"versions":{"0.1.0":{"name":"@astxrtys/annotator","version":"0.1.0","author":{"name":"ASTXRTYS"},"license":"MIT OR Apache-2.0","_id":"@astxrtys/annotator@0.1.0","maintainers":[{"name":"jason-madruga","email":"jason.gitdev@gmail.com"}],"homepage":"https://github.com/ASTXRTYS/annotator","bugs":{"url":"https://github.com/ASTXRTYS/annotator/issues"},"bin":{"annotator":"bin/annotator.js"},"dist":{"shasum":"30bdee23cff23907911290b9a2c6f5dd30ec8ad3","tarball":"https://registry.npmjs.org/@astxrtys/annotator/-/annotator-0.1.0.tgz","fileCount":479,"integrity":"sha512-x3QFhwWucXfSQZGg2Pc/QWhMBVvCUox0IumCXoKT52mMu+XRs3xePskc4y8IIsIdHnN9EK+95WGN0uc+DzthHA==","signatures":[{"sig":"MEQCICDgMUT24DwzUQgxP2/1HAMU/ZhwoxjH7GyKoDKhmgZ/AiBXj2vgierIsUEsZpaCTu0iXW58qEcWT2yVFzymvmxZLA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83604086},"type":"module","_from":"file:/tmp/annotator-release.GEMFpc/astxrtys-annotator.tgz","engines":{"bun":">=1.3.0","node":">=22"},"exports":{".":{"types":"./dist/sdk/root.d.ts","import":"./dist/sdk/root.js"},"./ui":{"types":"./dist/ui/index.d.ts","import":"./dist/ui/index.js"},"./sdk":{"types":"./dist/sdk/index.d.ts","import":"./dist/sdk/index.js"},"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","import":"./dist/testing/index.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js"},"./protocol":{"types":"./dist/protocol/index.d.ts","import":"./dist/protocol/index.js"},"./ui/react":{"types":"./dist/ui/react.d.ts","import":"./dist/ui/react.js"},"./extension":{"types":"./dist/extension-api/host.d.ts","import":"./dist/extension-api/host.js"},"./package.json":"./package.json","./ui/styles.css":"./dist/ui/styles.css","./protocol/schema":"./protocol/schema/protocol-1.0.schema.json","./extension/browser":{"types":"./dist/extension-api/browser.d.ts","import":"./dist/extension-api/browser.js"},"./protocol/fixtures":"./protocol/fixtures/protocol-1.0.fixtures.json","./schemas/review-package-1":"./protocol/schema/review-package-1.schema.json","./schemas/extension-manifest-1":"./protocol/schema/extension-manifest-1.schema.json"},"private":false,"scripts":{"test":"bun test","build":"bun run package:build","prepack":"bun run package:build","build:pi":"bun run build:review && bun run build:hook && bun run --cwd apps/pi-extension build","dev:hook":"bun run --cwd apps/hook dev","typecheck":"bash apps/pi-extension/vendor.sh && tsc --noEmit -p tsconfig.annotator.json && tsc --noEmit -p packages/core/tsconfig.json && tsc --noEmit -p packages/shared/tsconfig.json && tsc --noEmit -p packages/ai/tsconfig.json && tsc --noEmit -p packages/server/tsconfig.json && tsc --noEmit -p packages/ui/tsconfig.json && tsc --noEmit -p packages/guide-viewer/tsconfig.json && tsc --noEmit -p apps/guides-show/tsconfig.json && tsc --noEmit -p packages/ui/tsconfig.strict-consumer.json && tsc --noEmit -p apps/pi-extension/tsconfig.json","build:hook":"bun run --cwd apps/hook build","dev:portal":"bun run --cwd apps/portal dev","dev:review":"bun run --cwd apps/review dev","dev:vscode":"bun run --cwd apps/vscode-extension watch","build:portal":"bun run --cwd apps/portal build","build:review":"bun run --cwd apps/review build","build:ui-css":"bun run --cwd packages/ui build:css","build:vscode":"bun run --cwd apps/vscode-extension build","dev:marketing":"bun run --cwd apps/marketing dev","package:build":"bun scripts/build-annotator-package.ts","build:opencode":"bun run --cwd apps/opencode-plugin build","build:upstream":"bun run build:hook && bun run build:opencode","package:verify":"bun run package:build && bun scripts/verify-packed-package.ts","package:vscode":"bun run --cwd apps/vscode-extension package","build:marketing":"bun run --cwd apps/marketing build","upstream:verify":"bun scripts/verify-upstream.ts","check:release-version":"node scripts/check-release-version.mjs"},"_npmUser":{"name":"jason-madruga","email":"jason.gitdev@gmail.com"},"_resolved":"/tmp/annotator-release.GEMFpc/astxrtys-annotator.tgz","_integrity":"sha512-x3QFhwWucXfSQZGg2Pc/QWhMBVvCUox0IumCXoKT52mMu+XRs3xePskc4y8IIsIdHnN9EK+95WGN0uc+DzthHA==","repository":{"url":"git+https://github.com/ASTXRTYS/annotator.git","type":"git"},"workspaces":["apps/*","packages/*"],"_npmVersion":"11.19.0","description":"Review and annotate projects, files, code, plans, and live applications","directories":{},"sideEffects":["./dist/ui/styles.css"],"_nodeVersion":"26.7.0","dependencies":{"ws":"^8.21.3","tar":"^7.5.22","semver":"^7.8.5"},"_hasShrinkwrap":false,"devDependencies":{"diff":"^8.0.4","react":"^19.2.3","marked":"^17.0.6","sonner":"^2.0.7","@types/ws":"^8.18.1","bun-types":"^1.3.11","dompurify":"^3.3.3","react-dom":"^19.2.3","typescript":"~5.8.2","@types/node":"^25.5.2","@pierre/diffs":"1.3.2","@types/semver":"^7.8.0","dockview-react":"^5.2.0","@types/turndown":"^5.0.6","@opencode-ai/sdk":"^1.3.0","@anthropic-ai/claude-agent-sdk":"^0.2.92"},"peerDependencies":{"react":"^19.2.0","react-dom":"^19.2.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/annotator_0.1.0_1787844553887_0.5793154534801117","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@astxrtys/annotator","version":"0.1.1","author":{"name":"ASTXRTYS"},"license":"MIT OR Apache-2.0","_id":"@astxrtys/annotator@0.1.1","maintainers":[{"name":"jason-madruga","email":"jason.gitdev@gmail.com"}],"homepage":"https://github.com/ASTXRTYS/annotator","bugs":{"url":"https://github.com/ASTXRTYS/annotator/issues"},"bin":{"annotator":"bin/annotator.js"},"dist":{"shasum":"1b6d51f12346222446a0ce2b878efc5870387816","tarball":"https://registry.npmjs.org/@astxrtys/annotator/-/annotator-0.1.1.tgz","fileCount":483,"integrity":"sha512-bY6O+g8oe2WNYjobWvTYOa/dK1VR2vVvxwsbTtoUnad2Z1TUKcARjTvKJvv7uy1bT+gHw7D+QoQqGilnEv0kGQ==","signatures":[{"sig":"MEUCIQD1Mp8VR3MNDUlB/7POIf5vFSLk1jSkqabBbuldJXck9QIgTjzHePH1oZqmNgQ8RhR8fmZQLTZtqg9E7NDdeYtwrDU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83632064},"type":"module","_from":"file:/tmp/annotator-release-0.1.1.0eN8IK/astxrtys-annotator.tgz","engines":{"bun":">=1.3.0","node":">=22"},"exports":{".":{"types":"./dist/sdk/root.d.ts","import":"./dist/sdk/root.js"},"./ui":{"types":"./dist/ui/index.d.ts","import":"./dist/ui/index.js"},"./sdk":{"types":"./dist/sdk/index.d.ts","import":"./dist/sdk/index.js"},"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","import":"./dist/testing/index.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js"},"./protocol":{"types":"./dist/protocol/index.d.ts","import":"./dist/protocol/index.js"},"./ui/react":{"types":"./dist/ui/react.d.ts","import":"./dist/ui/react.js"},"./extension":{"types":"./dist/extension-api/host.d.ts","import":"./dist/extension-api/host.js"},"./package.json":"./package.json","./ui/styles.css":"./dist/ui/styles.css","./protocol/schema":"./protocol/schema/protocol-1.0.schema.json","./extension/browser":{"types":"./dist/extension-api/browser.d.ts","import":"./dist/extension-api/browser.js"},"./protocol/fixtures":"./protocol/fixtures/protocol-1.0.fixtures.json","./schemas/review-package-1":"./protocol/schema/review-package-1.schema.json","./schemas/extension-manifest-1":"./protocol/schema/extension-manifest-1.schema.json"},"private":false,"scripts":{"test":"bun test","build":"bun run package:build","prepack":"bun run package:build","build:pi":"bun run build:review && bun run build:hook && bun run --cwd apps/pi-extension build","dev:hook":"bun run --cwd apps/hook dev","typecheck":"bash apps/pi-extension/vendor.sh && tsc --noEmit -p tsconfig.annotator.json && tsc --noEmit -p packages/core/tsconfig.json && tsc --noEmit -p packages/shared/tsconfig.json && tsc --noEmit -p packages/ai/tsconfig.json && tsc --noEmit -p packages/server/tsconfig.json && tsc --noEmit -p packages/ui/tsconfig.json && tsc --noEmit -p packages/guide-viewer/tsconfig.json && tsc --noEmit -p apps/guides-show/tsconfig.json && tsc --noEmit -p packages/ui/tsconfig.strict-consumer.json && tsc --noEmit -p apps/pi-extension/tsconfig.json","build:hook":"bun run --cwd apps/hook build","dev:portal":"bun run --cwd apps/portal dev","dev:review":"bun run --cwd apps/review dev","dev:vscode":"bun run --cwd apps/vscode-extension watch","build:portal":"bun run --cwd apps/portal build","build:review":"bun run --cwd apps/review build","build:ui-css":"bun run --cwd packages/ui build:css","build:vscode":"bun run --cwd apps/vscode-extension build","dev:marketing":"bun run --cwd apps/marketing dev","package:build":"bun scripts/build-annotator-package.ts","build:opencode":"bun run --cwd apps/opencode-plugin build","build:upstream":"bun run build:hook && bun run build:opencode","package:verify":"bun run package:build && bun scripts/verify-packed-package.ts","package:vscode":"bun run --cwd apps/vscode-extension package","build:marketing":"bun run --cwd apps/marketing build","upstream:verify":"bun scripts/verify-upstream.ts","check:release-version":"node scripts/check-release-version.mjs"},"_npmUser":{"name":"jason-madruga","email":"jason.gitdev@gmail.com"},"_resolved":"/tmp/annotator-release-0.1.1.0eN8IK/astxrtys-annotator.tgz","_integrity":"sha512-bY6O+g8oe2WNYjobWvTYOa/dK1VR2vVvxwsbTtoUnad2Z1TUKcARjTvKJvv7uy1bT+gHw7D+QoQqGilnEv0kGQ==","repository":{"url":"git+https://github.com/ASTXRTYS/annotator.git","type":"git"},"workspaces":["apps/*","packages/*"],"_npmVersion":"11.19.0","description":"Review and annotate projects, files, code, plans, and live applications","directories":{},"sideEffects":["./dist/ui/styles.css"],"_nodeVersion":"26.7.0","dependencies":{"ws":"^8.21.3","tar":"^7.5.22","semver":"^7.8.5"},"_hasShrinkwrap":false,"devDependencies":{"diff":"^8.0.4","react":"^19.2.3","marked":"^17.0.6","sonner":"^2.0.7","@types/ws":"^8.18.1","bun-types":"^1.3.11","dompurify":"^3.3.3","react-dom":"^19.2.3","typescript":"~5.8.2","@types/node":"^25.5.2","@pierre/diffs":"1.3.2","@types/semver":"^7.8.0","dockview-react":"^5.2.0","@types/turndown":"^5.0.6","@opencode-ai/sdk":"^1.3.0","@anthropic-ai/claude-agent-sdk":"^0.2.92"},"peerDependencies":{"react":"^19.2.0","react-dom":"^19.2.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/annotator_0.1.1_1787854569006_0.3974833062472145","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@astxrtys/annotator","version":"0.1.2","private":false,"type":"module","description":"Review and annotate projects, files, code, plans, and live applications","author":{"name":"ASTXRTYS"},"license":"MIT OR Apache-2.0","bin":{"annotator":"bin/annotator.js"},"exports":{".":{"types":"./dist/sdk/root.d.ts","import":"./dist/sdk/root.js"},"./sdk":{"types":"./dist/sdk/index.d.ts","import":"./dist/sdk/index.js"},"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js"},"./protocol":{"types":"./dist/protocol/index.d.ts","import":"./dist/protocol/index.js"},"./protocol/schema":"./protocol/schema/protocol-1.0.schema.json","./protocol/fixtures":"./protocol/fixtures/protocol-1.0.fixtures.json","./schemas/review-package-1":"./protocol/schema/review-package-1.schema.json","./schemas/extension-manifest-1":"./protocol/schema/extension-manifest-1.schema.json","./extension":{"types":"./dist/extension-api/host.d.ts","import":"./dist/extension-api/host.js"},"./extension/browser":{"types":"./dist/extension-api/browser.d.ts","import":"./dist/extension-api/browser.js"},"./ui":{"types":"./dist/ui/index.d.ts","import":"./dist/ui/index.js"},"./ui/react":{"types":"./dist/ui/react.d.ts","import":"./dist/ui/react.js"},"./ui/styles.css":"./dist/ui/styles.css","./testing":{"types":"./dist/testing/index.d.ts","import":"./dist/testing/index.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js"},"./package.json":"./package.json"},"engines":{"node":">=22","bun":">=1.3.0"},"sideEffects":["./dist/ui/styles.css"],"repository":{"type":"git","url":"git+https://github.com/ASTXRTYS/annotator.git"},"homepage":"https://github.com/ASTXRTYS/annotator","bugs":{"url":"https://github.com/ASTXRTYS/annotator/issues"},"workspaces":["apps/*","packages/*"],"scripts":{"dev:hook":"bun run --cwd apps/hook dev","dev:portal":"bun run --cwd apps/portal dev","dev:marketing":"bun run --cwd apps/marketing dev","dev:review":"bun run --cwd apps/review dev","build:hook":"bun run --cwd apps/hook build","build:portal":"bun run --cwd apps/portal build","build:marketing":"bun run --cwd apps/marketing build","build:opencode":"bun run --cwd apps/opencode-plugin build","build:review":"bun run --cwd apps/review build","build:pi":"bun run build:review && bun run build:hook && bun run --cwd apps/pi-extension build","build:upstream":"bun run build:hook && bun run build:opencode","build":"bun run package:build","package:build":"bun scripts/build-annotator-package.ts","package:verify":"bun run package:build && bun scripts/verify-packed-package.ts","upstream:verify":"bun scripts/verify-upstream.ts","prepack":"bun run package:build","dev:vscode":"bun run --cwd apps/vscode-extension watch","build:vscode":"bun run --cwd apps/vscode-extension build","package:vscode":"bun run --cwd apps/vscode-extension package","check:release-version":"node scripts/check-release-version.mjs","test":"bun test","typecheck":"bash apps/pi-extension/vendor.sh && tsc --noEmit -p tsconfig.annotator.json && tsc --noEmit -p packages/core/tsconfig.json && tsc --noEmit -p packages/shared/tsconfig.json && tsc --noEmit -p packages/ai/tsconfig.json && tsc --noEmit -p packages/server/tsconfig.json && tsc --noEmit -p packages/ui/tsconfig.json && tsc --noEmit -p packages/guide-viewer/tsconfig.json && tsc --noEmit -p apps/guides-show/tsconfig.json && tsc --noEmit -p packages/ui/tsconfig.strict-consumer.json && tsc --noEmit -p apps/pi-extension/tsconfig.json","build:ui-css":"bun run --cwd packages/ui build:css"},"dependencies":{"semver":"^7.8.5","tar":"^7.5.22","ws":"^8.21.3"},"peerDependencies":{"react":"^19.2.0","react-dom":"^19.2.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"devDependencies":{"@anthropic-ai/claude-agent-sdk":"^0.2.92","@opencode-ai/sdk":"^1.3.0","@pierre/diffs":"1.3.2","@types/node":"^25.5.2","@types/semver":"^7.8.0","@types/turndown":"^5.0.6","@types/ws":"^8.18.1","bun-types":"^1.3.11","diff":"^8.0.4","dockview-react":"^5.2.0","dompurify":"^3.3.3","marked":"^17.0.6","react":"^19.2.3","react-dom":"^19.2.3","sonner":"^2.0.7","typescript":"~5.8.2"},"_id":"@astxrtys/annotator@0.1.2","_integrity":"sha512-KnAXA1LMJZJq1OmjKZO4qi/V0y5h8LTxQsMH/tabNsrlTSfRe7CKTokCnK7ylBTihPVPVYweA2Y7Gn3akfS/Nw==","_resolved":"/home/runner/work/annotator/annotator/npm-packages/astxrtys-annotator.tgz","_from":"file:npm-packages/astxrtys-annotator.tgz","_nodeVersion":"24.19.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-KnAXA1LMJZJq1OmjKZO4qi/V0y5h8LTxQsMH/tabNsrlTSfRe7CKTokCnK7ylBTihPVPVYweA2Y7Gn3akfS/Nw==","shasum":"325047b65651f3d969c6f515b1d736f6f55905b9","tarball":"https://registry.npmjs.org/@astxrtys/annotator/-/annotator-0.1.2.tgz","fileCount":485,"unpackedSize":83638543,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@astxrtys%2fannotator@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBIa6yTY54p2iU8fGs8ZUrKw5Mt/c1Hg49lanbJFaP9tAiAMECd57otP2D3ghsPHwMd48t3wUsE6ZbV5zUbt9bWNrA=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0ebf0073-0111-4aff-8901-331865b9eb1a"}},"directories":{},"maintainers":[{"name":"jason-madruga","email":"jason.gitdev@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/annotator_0.1.2_1787906602993_0.24752385132254262"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-27T15:29:13.630Z","modified":"2026-08-28T08:43:23.768Z","0.1.0":"2026-08-27T15:29:14.336Z","0.1.1":"2026-08-27T18:16:09.467Z","0.1.2":"2026-08-28T08:43:23.418Z"},"bugs":{"url":"https://github.com/ASTXRTYS/annotator/issues"},"author":{"name":"ASTXRTYS"},"license":"MIT OR Apache-2.0","homepage":"https://github.com/ASTXRTYS/annotator","repository":{"type":"git","url":"git+https://github.com/ASTXRTYS/annotator.git"},"description":"Review and annotate projects, files, code, plans, and live applications","maintainers":[{"name":"jason-madruga","email":"jason.gitdev@gmail.com"}],"readme":"# Annotator\n\nAnnotator is a local review and annotation product for working directories, files, plans, code changes, remote pages, and live localhost applications.\n\nIt keeps the mature document editor, code-review surface, live selector, diff providers, drafts, keyboard behavior, and responsive interface already proven in this repository. Annotator adds one product identity, permanent review packages, a public SDK, a language-neutral control protocol, and a managed extension system.\n\n## Install\n\n```bash\nnpm install --global @astxrtys/annotator\n```\n\nAnnotator requires Node.js 22 or newer. Browser-based review workflows currently also require Bun 1.3 or newer; the command explains this clearly if Bun is unavailable.\n\n## Open a workspace\n\n```bash\ncd /path/to/project\nannotator\n```\n\nThe bare command opens the current directory. It shows the workspace file tree and lets you open supported files without restarting the process.\n\nOpen a specific file, folder, or URL:\n\n```bash\nannotator annotate README.md\nannotator annotate docs/specification.md\n```\n\n## Review code\n\n```bash\nannotator review\n```\n\nThe code-review workflow retains the repository's existing Git, GitButler, Jujutsu, Perforce, GitHub, and GitLab behavior where available.\n\n## Annotate a live application\n\n```bash\nannotator app\n```\n\nWhen one web app is running on a standard development port, Annotator finds it automatically. You can still choose an explicit address with `annotator app http://localhost:3000` when more than one app is running or the app uses an unusual port.\n\nAnnotator mirrors the loopback application through its protected live proxy, keeps supported WebSockets and hot reload working, and preserves precise component selection and anchors.\n\n## Retrieve saved reviews\n\nSave and Submit create immutable review packages with permanent UUIDv7 identifiers under Annotator's data directory.\n\n```bash\nannotator reviews list\nannotator reviews get <uuid>\nannotator reviews get <uuid> --json\nannotator reviews acknowledge <uuid>\nannotator reviews export <uuid> --format directory\n```\n\nRetrieving a review does not mark it acknowledged unless you request acknowledgment explicitly.\n\nThe default data directory is `~/.annotator`, or `$XDG_DATA_HOME/annotator` when `XDG_DATA_HOME` is an absolute path. Set `ANNOTATOR_DATA_DIR` to choose another location.\n\n## Use the SDK\n\nImports do not start servers, open browsers, inspect the current directory, load extensions, or write configuration.\n\n```ts\nimport { createAnnotatorRuntime } from \"@astxrtys/annotator/sdk\";\n\nconst runtime = await createAnnotatorRuntime();\nconst session = await runtime.sessions.create({\n  mode: \"plan-review\",\n  source: { kind: \"plan\", markdown: \"# Proposed change\" },\n  presentation: { kind: \"headless\" },\n});\n\nawait session.addAnnotation({\n  type: \"comment\",\n  text: \"Clarify the recovery behavior.\",\n  target: { sourceId: \"plan\", selectedText: \"Proposed change\" },\n});\n\nconst { reviewId } = await session.save({ idempotencyKey: crypto.randomUUID() });\nconst review = await runtime.reviews.get(reviewId);\n\nawait session.dispose();\nawait runtime.dispose();\n```\n\nThe in-memory SDK profile writes nothing to disk. Select filesystem storage explicitly when an embedding application wants Annotator's default persistent adapters.\n\n## Embed the complete frontend\n\nReact applications can mount the same full plan-review and code-review interface used by Annotator itself. The component chooses the correct mature interface from the session mode; it is not a simplified replacement UI.\n\n```tsx\nimport { createRoot } from \"react-dom/client\";\nimport { EmbeddedAnnotator } from \"@astxrtys/annotator/ui/react\";\nimport \"@astxrtys/annotator/ui/styles.css\";\n\ncreateRoot(document.getElementById(\"root\")!).render(\n  <EmbeddedAnnotator session={session} />,\n);\n```\n\nUse `AnnotatorSessionApp` when you prefer the descriptive component name; `EmbeddedAnnotator` is its shorter alias. A host that wants a materially different interface can use `@astxrtys/annotator/client` or the custom-frontend reference extension and stay entirely on the public session protocol.\n\n## Product boundaries\n\n- Core owns sessions, commands, review-package rules, trust, persistence semantics, and lifecycle.\n- The SDK lets another application create and operate Annotator runtimes.\n- The client connects another frontend or process to an existing runtime.\n- Extensions join Annotator through a managed lifecycle and documented contribution registries.\n- External product adapters are separate installations and are not shipped as first-party integrations.\n\nCanonical Plannotator remains an upstream source of selected implementation improvements and repository history. It is not installed, launched, or required as a second runtime product.\n\n## Development\n\nUse Bun throughout the repository:\n\n```bash\nbun install\nbun test\nbun run typecheck\nbun run build\n```\n\n`bun run build` creates the exact npm package contents. The package acceptance suite installs the resulting tarball in an unrelated directory and checks that no command, import, web asset, or schema resolves through the source checkout.\n\n## License\n\nMIT or Apache-2.0, at your option. Upstream-derived code retains its applicable notices and provenance.\n","readmeFilename":"README.md"}