How to work on Annotask itself.
- Node.js 18+
- pnpm
Some stress-test services also need language runtimes such as Python, Go, Rust, or Java if you run them outside Docker.
git clone <repo-url>
cd annotask
pnpm install
pnpm buildpnpm build
pnpm build:shell
pnpm build:plugin
pnpm build:vendorBuild order matters:
build:shellwritesdist/shell/build:pluginbundles the plugin, server, webpack integration, standalone server, loader, and CLIbuild:vendorcopies pinned browser-side vendor assets intodist/vendor/
pnpm test
pnpm test:watch
pnpm typecheck
pnpm test:e2e
pnpm test:e2e:stressCurrent test buckets:
- unit tests with Vitest
- shell composable tests in jsdom
- plugin and server tests in Node
- Playwright end-to-end coverage for the main playgrounds
- Playwright stress-lab coverage for the multi-MFE environment
pnpm dev:shellThis runs the shell on its own without a fully instrumented app iframe. Good for shell-only UI work, not enough to validate source mapping or bridge interactions.
Simple playgrounds:
pnpm dev:vue-vite
pnpm dev:vue-primevue
pnpm dev:vue-webpack
pnpm dev:react-vite
pnpm dev:react-radix
pnpm dev:svelte-vite
pnpm dev:solid-vite
pnpm dev:html-vite
pnpm dev:astro
pnpm dev:htmx-vite
pnpm dev:mfe-viteStress-lab scripts:
pnpm dev:stress-host
pnpm dev:stress-vue-data-lab
pnpm dev:stress-react-workflows
pnpm dev:stress-svelte-streaming
pnpm dev:stress-solid-component-lab
pnpm dev:stress-htmx-partials
pnpm dev:stress-react-sidebar
pnpm dev:stress-fastapi
pnpm dev:stress-node-api
pnpm dev:stress-go-api
pnpm dev:stress-rust-api
pnpm stress-test:up
pnpm stress-test:downplaygrounds/simple/ also has a justfile for convenience recipes like just react, just svelte, just vue, and just mfe.
src/
plugin/ Vite integration and transforms
server/ HTTP API, persistence, scanners, workspace discovery
mcp/ embedded MCP server
webpack/ Webpack plugin and loader
shell/ Vue shell UI served at /__annotask/
cli/ annotask CLI
shared/ shared task-summary and bridge helpers
schema.ts canonical contracts
The pnpm workspace currently includes:
playgrounds/simple/*playgrounds/stress-test/apps/*playgrounds/stress-test/packages/*playgrounds/stress-test/services/node-api
Annotask's server-side scanners are workspace-aware, so contributor changes in component scanning, data scanning, or API schema discovery should be tested against both single-package playgrounds and the stress lab when relevant.
App.vueis still the orchestration hub and is larger than the desired long-term targetThemePage.vueis also still oversized and under ongoing extraction pressure- new shell behavior should generally land in a composable under
src/shell/composables/ - the user-facing tabs are Annotate, Design, and Audit, while the internal Audit view id remains
develop
Useful shell files:
src/shell/App.vuesrc/shell/components/AppToolbar.vuesrc/shell/components/HelpOverlay.vuesrc/shell/composables/useShellNavigation.tssrc/shell/composables/useTaskWorkflows.tssrc/shell/composables/useProjectComponents.tssrc/shell/composables/useDataSources.tssrc/shell/composables/useWorkspace.ts
- ESM only
- TypeScript throughout
- Vue 3 Composition API in the shell
- zod-validated server and MCP boundaries
src/schema.tsandsrc/shared/*are the shared contracts and should stay strict- use
apply_patchfor source edits in agent workflows
When adding or changing a task or API surface:
- update
src/schema.tsif the wire shape changes - update shared validation in
src/server/validation.tsorsrc/server/schemas.ts - update the HTTP route in
src/server/api.tsand MCP tooling insrc/mcp/server.tsif needed - add or update tests in
src/plugin/__tests__/orsrc/server/__tests__/ - update docs in
README.md,docs/api.md,docs/cli.md, ordocs/skills.md
See ../CONTRIBUTING.md and distribution.md for publishing details. The short version is:
pnpm typecheck
pnpm test
pnpm build
npm pack --dry-runThen update package.json and CHANGELOG.md together before publishing.