mirror of
https://github.com/paperclipai/paperclip.git
synced 2026-10-23 17:33:51 +02:00
Major-version Vitest upgrade across the workspace. Refactors
server/vitest.config.ts to use top-level minWorkers/maxWorkers
(replacing nested poolOptions.forks.{maxForks,minForks}, which
Vitest 4 ignores at top level), updates scripts/run-vitest-stable.mjs
for the new CLI surface, and adds explicit vi.fn() generics required
by Vitest 4's stricter inference in two UI tests. Lockfile changes
intentionally excluded — refresh bot will regenerate.
Plugin Orchestration Smoke Example
This first-party example validates the orchestration-grade plugin host surface. It is intentionally small and exists as an acceptance fixture rather than a product plugin.
What it exercises
apiRoutesunder/api/plugins/:pluginId/api/*- restricted database migrations and runtime
ctx.db - plugin-owned rows joined to
public.issues - plugin-created child issues with namespaced origin metadata
- billing codes, workspace inheritance, blocker relations, documents, wakeups, and orchestration summaries
- issue detail and settings UI slots that surface route, capability, namespace, and smoke status
Development
pnpm install
pnpm typecheck
pnpm test
pnpm build
Install Into Paperclip
Use an absolute local path during development:
curl -X POST http://127.0.0.1:3100/api/plugins/install \
-H "Content-Type: application/json" \
-d '{"packageName":"/absolute/path/to/paperclip/packages/plugins/examples/plugin-orchestration-smoke-example","isLocalPath":true}'
Scoped Route Smoke
After the plugin is ready, run the scoped route against an existing issue:
curl -X POST http://127.0.0.1:3100/api/plugins/paperclipai.plugin-orchestration-smoke-example/api/issues/<issue-id>/smoke \
-H "Content-Type: application/json" \
-d '{"assigneeAgentId":"<agent-id>"}'
The route returns the generated child issue, resolved blocker, billing code, subtree ids, and wakeup result.