mirror of
https://github.com/paperclipai/paperclip
synced 2026-05-08 16:12:20 +02:00
## Thinking Path > - Paperclip orchestrates AI agents for zero-human companies, and its CLI import/export path is part of how operators move company state safely between environments. > - The `paperclipai company import/export` e2e test is supposed to validate that portability flow inside a hermetic harness, not against a developer's live Paperclip home. > - This regression showed nested CLI subprocesses could silently fall back to ambient `PAPERCLIP_*` state and mutate a real local instance by creating extra companies such as `CLI-1-Roundtrip-Test`. > - The first job was to pin the test subprocesses to isolated config, home, instance, auth, and context paths, and to add a regression assertion that proves the nested CLI writes stay inside the test-owned state. > - Once the PR was up, CI and Greptile exposed two follow-on issues that were blocking merge: plugin SDK typecheck bootstrap was racing across packages in fresh CI, and the new lock helper needed one more fix to release its lock on failure. > - This pull request therefore ends up doing two tightly related things: fixing the original CLI isolation leak, and hardening the supporting typecheck/bootstrap path enough for the fix to verify cleanly in CI. > - The benefit is that the portability e2e test is now actually isolated, and the PR verification path is stable enough to catch regressions instead of introducing its own nondeterministic failures. ## What Changed - Hardened `cli/src/__tests__/company-import-export-e2e.test.ts` so nested CLI subprocesses re-seed isolated `PAPERCLIP_CONFIG`, `PAPERCLIP_HOME`, `PAPERCLIP_INSTANCE_ID`, `PAPERCLIP_CONTEXT`, `PAPERCLIP_AUTH_STORE`, and throwaway `HOME` values instead of falling back to ambient machine state. - Added a regression assertion around `paperclipai context set --json`, then cleared the temporary `context.json` so the isolation check and the later export/import flow stay independent. - Passed the same isolated `HOME` into the server subprocess so both sides of the e2e harness are symmetric. - Introduced locking in `scripts/ensure-plugin-build-deps.mjs` and switched the server/plugin example `typecheck` scripts to use that helper instead of launching concurrent raw `@paperclipai/plugin-sdk` builds. - Fixed the helper failure path so it releases the lock before exiting non-zero, which prevents stale-lock timeouts during parallel typecheck runs. ## Verification - `pnpm vitest run cli/src/__tests__/company-import-export-e2e.test.ts --project paperclipai` - `pnpm --filter paperclipai typecheck` - `pnpm -r typecheck` - PR checks now pass on the current head, including `policy`, `verify`, `e2e`, `security/snyk`, and `Greptile Review`. ## Risks - Low risk. The product-facing behavior change is scoped to test harness code in the CLI e2e suite. - The CI stabilization changes only affect bootstrap/typecheck helper paths for the server and plugin/example packages, but they do touch shared verification plumbing; the main risk is changing how fresh build artifacts are prepared in local/CI typecheck runs. ## Model Used - Anthropic Claude via Paperclip `claude_local`, model `claude-opus-4-7`, high-effort local coding agent, used for the initial implementation and first peer-reviewed verification. - OpenAI Codex via Paperclip `codex_local`, model `gpt-5.4`, high reasoning-effort local coding agent with tool use, used for CI triage, Greptile follow-up fixes, verification, and PR maintenance. ## Checklist - [x] I have included a thinking path that traces from project context to this change - [x] I have specified the model used (with version and capability details) - [x] I have checked ROADMAP.md and confirmed this PR does not duplicate planned core work - [x] I have run tests locally and they pass - [x] I have added or updated tests where applicable - [x] If this change affects the UI, I have included before/after screenshots - [x] I have updated relevant documentation to reflect my changes - [x] I have considered and documented any risks above - [x] I will address all Greptile and reviewer comments before requesting merge
43 lines
1.2 KiB
JSON
43 lines
1.2 KiB
JSON
{
|
|
"name": "@paperclipai/plugin-file-browser-example",
|
|
"version": "0.1.0",
|
|
"description": "Example plugin: project sidebar Files link + project detail tab with workspace selector and file browser",
|
|
"type": "module",
|
|
"private": true,
|
|
"exports": {
|
|
".": "./src/index.ts"
|
|
},
|
|
"paperclipPlugin": {
|
|
"manifest": "./dist/manifest.js",
|
|
"worker": "./dist/worker.js",
|
|
"ui": "./dist/ui/"
|
|
},
|
|
"scripts": {
|
|
"prebuild": "pnpm --filter @paperclipai/plugin-sdk ensure-build-deps",
|
|
"build": "tsc && node ./scripts/build-ui.mjs",
|
|
"clean": "rm -rf dist",
|
|
"typecheck": "pnpm --filter @paperclipai/plugin-sdk ensure-build-deps && tsc --noEmit"
|
|
},
|
|
"dependencies": {
|
|
"@codemirror/lang-javascript": "^6.2.2",
|
|
"@codemirror/language": "^6.11.0",
|
|
"@codemirror/state": "^6.4.0",
|
|
"@codemirror/view": "^6.28.0",
|
|
"@lezer/highlight": "^1.2.1",
|
|
"@paperclipai/plugin-sdk": "workspace:*",
|
|
"codemirror": "^6.0.1"
|
|
},
|
|
"devDependencies": {
|
|
"@types/node": "^24.6.0",
|
|
"@types/react": "^19.0.8",
|
|
"@types/react-dom": "^19.0.3",
|
|
"esbuild": "^0.27.3",
|
|
"react": "^19.0.0",
|
|
"react-dom": "^19.0.0",
|
|
"typescript": "^5.7.3"
|
|
},
|
|
"peerDependencies": {
|
|
"react": ">=18"
|
|
}
|
|
}
|