corporateai 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (704) hide show
  1. package/.dockerignore +10 -0
  2. package/.env.example +3 -0
  3. package/.github/workflows/publish-cli.yml +49 -0
  4. package/.mailmap +1 -0
  5. package/AGENTS.md +148 -0
  6. package/CONTRIBUTING.md +75 -0
  7. package/Dockerfile +59 -0
  8. package/Dockerfile.onboard-smoke +42 -0
  9. package/LICENSE +21 -0
  10. package/README.md +93 -0
  11. package/cli/esbuild.config.mjs +11 -0
  12. package/cli/package.json +24 -0
  13. package/cli/scripts/build-cli.mjs +5 -0
  14. package/cli/src/index.ts +27 -0
  15. package/docker-compose.quickstart.yml +18 -0
  16. package/docker-compose.untrusted-review.yml +33 -0
  17. package/docker-compose.yml +38 -0
  18. package/package.json +56 -0
  19. package/patches/embedded-postgres@18.1.0-beta.16.patch +0 -0
  20. package/pnpm-workspace.yaml +4 -0
  21. package/releases/.gitkeep +0 -0
  22. package/releases/v0.0.1.md +36 -0
  23. package/releases/v0.2.7.md +15 -0
  24. package/releases/v0.3.0.md +54 -0
  25. package/releases/v0.3.1.md +55 -0
  26. package/releases/v2026.318.0.md +66 -0
  27. package/releases/v2026.325.0.md +78 -0
  28. package/report/2026-03-13-08-46-token-optimization-implementation.md +48 -0
  29. package/scripts/backup-db.sh +17 -0
  30. package/scripts/build-npm.sh +80 -0
  31. package/scripts/check-forbidden-tokens.mjs +115 -0
  32. package/scripts/clean-onboard-git.sh +14 -0
  33. package/scripts/clean-onboard-npm.sh +13 -0
  34. package/scripts/clean-onboard-ref.sh +86 -0
  35. package/scripts/create-github-release.sh +99 -0
  36. package/scripts/dev-runner-paths.mjs +38 -0
  37. package/scripts/dev-runner.mjs +606 -0
  38. package/scripts/docker-onboard-smoke.sh +306 -0
  39. package/scripts/ensure-plugin-build-deps.mjs +47 -0
  40. package/scripts/generate-company-assets.ts +365 -0
  41. package/scripts/generate-npm-package-json.mjs +113 -0
  42. package/scripts/generate-org-chart-images.ts +694 -0
  43. package/scripts/generate-org-chart-satori-comparison.ts +225 -0
  44. package/scripts/generate-ui-package-json.mjs +31 -0
  45. package/scripts/kill-dev.sh +71 -0
  46. package/scripts/migrate-inline-env-secrets.ts +126 -0
  47. package/scripts/prepare-server-ui-dist.sh +22 -0
  48. package/scripts/provision-worktree.sh +333 -0
  49. package/scripts/release-lib.sh +306 -0
  50. package/scripts/release-package-map.mjs +169 -0
  51. package/scripts/release.sh +312 -0
  52. package/scripts/rollback-latest.sh +111 -0
  53. package/scripts/smoke/openclaw-docker-ui.sh +329 -0
  54. package/scripts/smoke/openclaw-gateway-e2e.sh +954 -0
  55. package/scripts/smoke/openclaw-join.sh +295 -0
  56. package/scripts/smoke/openclaw-sse-standalone.sh +146 -0
  57. package/scripts/workspace-compat.mjs +60 -0
  58. package/server/CHANGELOG.md +130 -0
  59. package/server/package.json +96 -0
  60. package/server/scripts/copy-onboarding-assets.mjs +10 -0
  61. package/server/scripts/dev-watch.ts +33 -0
  62. package/server/src/__tests__/activity-routes.test.ts +70 -0
  63. package/server/src/__tests__/adapter-models.test.ts +105 -0
  64. package/server/src/__tests__/adapter-session-codecs.test.ts +194 -0
  65. package/server/src/__tests__/agent-auth-jwt.test.ts +79 -0
  66. package/server/src/__tests__/agent-instructions-routes.test.ts +318 -0
  67. package/server/src/__tests__/agent-instructions-service.test.ts +361 -0
  68. package/server/src/__tests__/agent-permissions-routes.test.ts +275 -0
  69. package/server/src/__tests__/agent-shortname-collision.test.ts +69 -0
  70. package/server/src/__tests__/agent-skill-contract.test.ts +50 -0
  71. package/server/src/__tests__/agent-skills-routes.test.ts +462 -0
  72. package/server/src/__tests__/app-hmr-port.test.ts +19 -0
  73. package/server/src/__tests__/approval-routes-idempotency.test.ts +110 -0
  74. package/server/src/__tests__/approvals-service.test.ts +107 -0
  75. package/server/src/__tests__/assets.test.ts +250 -0
  76. package/server/src/__tests__/attachment-types.test.ts +97 -0
  77. package/server/src/__tests__/board-mutation-guard.test.ts +105 -0
  78. package/server/src/__tests__/budgets-service.test.ts +311 -0
  79. package/server/src/__tests__/claude-local-adapter-environment.test.ts +92 -0
  80. package/server/src/__tests__/claude-local-adapter.test.ts +31 -0
  81. package/server/src/__tests__/claude-local-skill-sync.test.ts +111 -0
  82. package/server/src/__tests__/cli-auth-routes.test.ts +230 -0
  83. package/server/src/__tests__/codex-local-adapter-environment.test.ts +143 -0
  84. package/server/src/__tests__/codex-local-adapter.test.ts +253 -0
  85. package/server/src/__tests__/codex-local-execute.test.ts +391 -0
  86. package/server/src/__tests__/codex-local-skill-injection.test.ts +175 -0
  87. package/server/src/__tests__/codex-local-skill-sync.test.ts +123 -0
  88. package/server/src/__tests__/companies-route-path-guard.test.ts +56 -0
  89. package/server/src/__tests__/company-branding-route.test.ts +196 -0
  90. package/server/src/__tests__/company-portability-routes.test.ts +175 -0
  91. package/server/src/__tests__/company-portability.test.ts +2186 -0
  92. package/server/src/__tests__/company-skills-routes.test.ts +113 -0
  93. package/server/src/__tests__/company-skills.test.ts +229 -0
  94. package/server/src/__tests__/costs-service.test.ts +226 -0
  95. package/server/src/__tests__/cursor-local-adapter-environment.test.ts +196 -0
  96. package/server/src/__tests__/cursor-local-adapter.test.ts +406 -0
  97. package/server/src/__tests__/cursor-local-execute.test.ts +263 -0
  98. package/server/src/__tests__/cursor-local-skill-injection.test.ts +104 -0
  99. package/server/src/__tests__/cursor-local-skill-sync.test.ts +145 -0
  100. package/server/src/__tests__/dev-runner-paths.test.ts +25 -0
  101. package/server/src/__tests__/dev-server-status.test.ts +66 -0
  102. package/server/src/__tests__/dev-watch-ignore.test.ts +42 -0
  103. package/server/src/__tests__/documents.test.ts +29 -0
  104. package/server/src/__tests__/error-handler.test.ts +53 -0
  105. package/server/src/__tests__/execution-workspace-policy.test.ts +170 -0
  106. package/server/src/__tests__/forbidden-tokens.test.ts +77 -0
  107. package/server/src/__tests__/gemini-local-adapter-environment.test.ts +135 -0
  108. package/server/src/__tests__/gemini-local-adapter.test.ts +190 -0
  109. package/server/src/__tests__/gemini-local-execute.test.ts +172 -0
  110. package/server/src/__tests__/gemini-local-skill-sync.test.ts +90 -0
  111. package/server/src/__tests__/health.test.ts +16 -0
  112. package/server/src/__tests__/heartbeat-process-recovery.test.ts +256 -0
  113. package/server/src/__tests__/heartbeat-run-summary.test.ts +33 -0
  114. package/server/src/__tests__/heartbeat-workspace-session.test.ts +334 -0
  115. package/server/src/__tests__/helpers/embedded-postgres.ts +7 -0
  116. package/server/src/__tests__/hire-hook.test.ts +181 -0
  117. package/server/src/__tests__/instance-settings-routes.test.ts +156 -0
  118. package/server/src/__tests__/invite-accept-gateway-defaults.test.ts +119 -0
  119. package/server/src/__tests__/invite-accept-replay.test.ts +92 -0
  120. package/server/src/__tests__/invite-expiry.test.ts +10 -0
  121. package/server/src/__tests__/invite-join-grants.test.ts +57 -0
  122. package/server/src/__tests__/invite-join-manager.test.ts +33 -0
  123. package/server/src/__tests__/invite-onboarding-text.test.ts +116 -0
  124. package/server/src/__tests__/issue-comment-reopen-routes.test.ts +146 -0
  125. package/server/src/__tests__/issue-goal-fallback.test.ts +99 -0
  126. package/server/src/__tests__/issues-checkout-wakeup.test.ts +48 -0
  127. package/server/src/__tests__/issues-goal-context-routes.test.ts +187 -0
  128. package/server/src/__tests__/issues-service.test.ts +317 -0
  129. package/server/src/__tests__/issues-user-context.test.ts +113 -0
  130. package/server/src/__tests__/log-redaction.test.ts +74 -0
  131. package/server/src/__tests__/monthly-spend-service.test.ts +90 -0
  132. package/server/src/__tests__/normalize-agent-mention-token.test.ts +41 -0
  133. package/server/src/__tests__/openclaw-gateway-adapter.test.ts +626 -0
  134. package/server/src/__tests__/openclaw-invite-prompt-route.test.ts +192 -0
  135. package/server/src/__tests__/opencode-local-adapter-environment.test.ts +97 -0
  136. package/server/src/__tests__/opencode-local-adapter.test.ts +226 -0
  137. package/server/src/__tests__/opencode-local-skill-sync.test.ts +91 -0
  138. package/server/src/__tests__/paperclip-env.test.ts +58 -0
  139. package/server/src/__tests__/paperclip-skill-utils.test.ts +63 -0
  140. package/server/src/__tests__/pi-local-adapter-environment.test.ts +102 -0
  141. package/server/src/__tests__/pi-local-skill-sync.test.ts +95 -0
  142. package/server/src/__tests__/plugin-dev-watcher.test.ts +68 -0
  143. package/server/src/__tests__/plugin-worker-manager.test.ts +43 -0
  144. package/server/src/__tests__/private-hostname-guard.test.ts +56 -0
  145. package/server/src/__tests__/project-shortname-resolution.test.ts +45 -0
  146. package/server/src/__tests__/quota-windows-service.test.ts +56 -0
  147. package/server/src/__tests__/quota-windows.test.ts +1109 -0
  148. package/server/src/__tests__/redaction.test.ts +66 -0
  149. package/server/src/__tests__/routines-e2e.test.ts +276 -0
  150. package/server/src/__tests__/routines-routes.test.ts +271 -0
  151. package/server/src/__tests__/routines-service.test.ts +424 -0
  152. package/server/src/__tests__/storage-local-provider.test.ts +78 -0
  153. package/server/src/__tests__/ui-branding.test.ts +82 -0
  154. package/server/src/__tests__/work-products.test.ts +95 -0
  155. package/server/src/__tests__/workspace-runtime.test.ts +1131 -0
  156. package/server/src/__tests__/worktree-config.test.ts +426 -0
  157. package/server/src/adapters/codex-models.ts +105 -0
  158. package/server/src/adapters/cursor-models.ts +171 -0
  159. package/server/src/adapters/http/execute.ts +42 -0
  160. package/server/src/adapters/http/index.ts +21 -0
  161. package/server/src/adapters/http/test.ts +116 -0
  162. package/server/src/adapters/index.ts +18 -0
  163. package/server/src/adapters/process/execute.ts +77 -0
  164. package/server/src/adapters/process/index.ts +24 -0
  165. package/server/src/adapters/process/test.ts +89 -0
  166. package/server/src/adapters/registry.ts +225 -0
  167. package/server/src/adapters/server-utils-compat.ts +57 -0
  168. package/server/src/adapters/types.ts +30 -0
  169. package/server/src/adapters/utils.ts +48 -0
  170. package/server/src/agent-auth-jwt.ts +141 -0
  171. package/server/src/app.ts +321 -0
  172. package/server/src/attachment-types.ts +74 -0
  173. package/server/src/auth/better-auth.ts +148 -0
  174. package/server/src/board-claim.ts +150 -0
  175. package/server/src/config-file.ts +17 -0
  176. package/server/src/config.ts +260 -0
  177. package/server/src/dev-server-status.ts +103 -0
  178. package/server/src/dev-watch-ignore.ts +36 -0
  179. package/server/src/errors.ts +34 -0
  180. package/server/src/home-paths.ts +95 -0
  181. package/server/src/index.ts +799 -0
  182. package/server/src/log-redaction.ts +146 -0
  183. package/server/src/middleware/auth.ts +178 -0
  184. package/server/src/middleware/board-mutation-guard.ts +66 -0
  185. package/server/src/middleware/error-handler.ts +71 -0
  186. package/server/src/middleware/index.ts +3 -0
  187. package/server/src/middleware/logger.ts +90 -0
  188. package/server/src/middleware/private-hostname-guard.ts +92 -0
  189. package/server/src/middleware/validate.ts +9 -0
  190. package/server/src/onboarding-assets/ceo/AGENTS.md +54 -0
  191. package/server/src/onboarding-assets/ceo/HEARTBEAT.md +72 -0
  192. package/server/src/onboarding-assets/ceo/SOUL.md +33 -0
  193. package/server/src/onboarding-assets/ceo/TOOLS.md +3 -0
  194. package/server/src/onboarding-assets/default/AGENTS.md +3 -0
  195. package/server/src/paths.ts +34 -0
  196. package/server/src/realtime/live-events-ws.ts +274 -0
  197. package/server/src/redaction.ts +59 -0
  198. package/server/src/routes/access.ts +2888 -0
  199. package/server/src/routes/activity.ts +89 -0
  200. package/server/src/routes/agents.ts +2313 -0
  201. package/server/src/routes/approvals.ts +346 -0
  202. package/server/src/routes/assets.ts +341 -0
  203. package/server/src/routes/authz.ts +52 -0
  204. package/server/src/routes/companies.ts +343 -0
  205. package/server/src/routes/company-skills.ts +300 -0
  206. package/server/src/routes/costs.ts +335 -0
  207. package/server/src/routes/dashboard.ts +19 -0
  208. package/server/src/routes/execution-workspaces.ts +182 -0
  209. package/server/src/routes/goals.ts +107 -0
  210. package/server/src/routes/health.ts +94 -0
  211. package/server/src/routes/index.ts +17 -0
  212. package/server/src/routes/instance-settings.ts +95 -0
  213. package/server/src/routes/issues-checkout-wakeup.ts +14 -0
  214. package/server/src/routes/issues.ts +1680 -0
  215. package/server/src/routes/llms.ts +86 -0
  216. package/server/src/routes/org-chart-svg.ts +777 -0
  217. package/server/src/routes/plugin-ui-static.ts +497 -0
  218. package/server/src/routes/plugins.ts +2220 -0
  219. package/server/src/routes/projects.ts +295 -0
  220. package/server/src/routes/routines.ts +300 -0
  221. package/server/src/routes/secrets.ts +166 -0
  222. package/server/src/routes/sidebar-badges.ts +52 -0
  223. package/server/src/secrets/external-stub-providers.ts +32 -0
  224. package/server/src/secrets/local-encrypted-provider.ts +135 -0
  225. package/server/src/secrets/provider-registry.ts +31 -0
  226. package/server/src/secrets/types.ts +23 -0
  227. package/server/src/services/access.ts +381 -0
  228. package/server/src/services/activity-log.ts +95 -0
  229. package/server/src/services/activity.ts +164 -0
  230. package/server/src/services/agent-instructions.ts +735 -0
  231. package/server/src/services/agent-permissions.ts +27 -0
  232. package/server/src/services/agents.ts +694 -0
  233. package/server/src/services/approvals.ts +273 -0
  234. package/server/src/services/assets.ts +23 -0
  235. package/server/src/services/board-auth.ts +355 -0
  236. package/server/src/services/budgets.ts +959 -0
  237. package/server/src/services/companies.ts +313 -0
  238. package/server/src/services/company-export-readme.ts +173 -0
  239. package/server/src/services/company-portability.ts +4263 -0
  240. package/server/src/services/company-skills.ts +2356 -0
  241. package/server/src/services/costs.ts +365 -0
  242. package/server/src/services/cron.ts +373 -0
  243. package/server/src/services/dashboard.ts +110 -0
  244. package/server/src/services/default-agent-instructions.ts +27 -0
  245. package/server/src/services/documents.ts +434 -0
  246. package/server/src/services/execution-workspace-policy.ts +210 -0
  247. package/server/src/services/execution-workspaces.ts +100 -0
  248. package/server/src/services/finance.ts +135 -0
  249. package/server/src/services/goals.ts +81 -0
  250. package/server/src/services/heartbeat-run-summary.ts +35 -0
  251. package/server/src/services/heartbeat.ts +3863 -0
  252. package/server/src/services/hire-hook.ts +114 -0
  253. package/server/src/services/index.ts +32 -0
  254. package/server/src/services/instance-settings.ts +138 -0
  255. package/server/src/services/issue-approvals.ts +175 -0
  256. package/server/src/services/issue-assignment-wakeup.ts +48 -0
  257. package/server/src/services/issue-goal-fallback.ts +56 -0
  258. package/server/src/services/issues.ts +1828 -0
  259. package/server/src/services/live-events.ts +55 -0
  260. package/server/src/services/plugin-capability-validator.ts +450 -0
  261. package/server/src/services/plugin-config-validator.ts +55 -0
  262. package/server/src/services/plugin-dev-watcher.ts +339 -0
  263. package/server/src/services/plugin-event-bus.ts +413 -0
  264. package/server/src/services/plugin-host-service-cleanup.ts +59 -0
  265. package/server/src/services/plugin-host-services.ts +1132 -0
  266. package/server/src/services/plugin-job-coordinator.ts +261 -0
  267. package/server/src/services/plugin-job-scheduler.ts +753 -0
  268. package/server/src/services/plugin-job-store.ts +466 -0
  269. package/server/src/services/plugin-lifecycle.ts +822 -0
  270. package/server/src/services/plugin-loader.ts +1955 -0
  271. package/server/src/services/plugin-log-retention.ts +87 -0
  272. package/server/src/services/plugin-manifest-validator.ts +164 -0
  273. package/server/src/services/plugin-registry.ts +683 -0
  274. package/server/src/services/plugin-runtime-sandbox.ts +222 -0
  275. package/server/src/services/plugin-secrets-handler.ts +355 -0
  276. package/server/src/services/plugin-state-store.ts +238 -0
  277. package/server/src/services/plugin-stream-bus.ts +81 -0
  278. package/server/src/services/plugin-tool-dispatcher.ts +449 -0
  279. package/server/src/services/plugin-tool-registry.ts +450 -0
  280. package/server/src/services/plugin-worker-manager.ts +1343 -0
  281. package/server/src/services/projects.ts +860 -0
  282. package/server/src/services/quota-windows.ts +65 -0
  283. package/server/src/services/routines.ts +1269 -0
  284. package/server/src/services/run-log-store.ts +156 -0
  285. package/server/src/services/secrets.ts +370 -0
  286. package/server/src/services/sidebar-badges.ts +56 -0
  287. package/server/src/services/work-products.ts +124 -0
  288. package/server/src/services/workspace-operation-log-store.ts +156 -0
  289. package/server/src/services/workspace-operations.ts +262 -0
  290. package/server/src/services/workspace-runtime.ts +1565 -0
  291. package/server/src/startup-banner.ts +176 -0
  292. package/server/src/storage/index.ts +35 -0
  293. package/server/src/storage/local-disk-provider.ts +89 -0
  294. package/server/src/storage/provider-registry.ts +18 -0
  295. package/server/src/storage/s3-provider.ts +153 -0
  296. package/server/src/storage/service.ts +131 -0
  297. package/server/src/storage/types.ts +63 -0
  298. package/server/src/ui-branding.ts +217 -0
  299. package/server/src/version.ts +10 -0
  300. package/server/src/worktree-config.ts +468 -0
  301. package/server/tsconfig.json +9 -0
  302. package/server/vitest.config.ts +7 -0
  303. package/skills/paperclip/SKILL.md +365 -0
  304. package/skills/paperclip/references/api-reference.md +647 -0
  305. package/skills/paperclip/references/company-skills.md +193 -0
  306. package/skills/paperclip-create-agent/SKILL.md +142 -0
  307. package/skills/paperclip-create-agent/references/api-reference.md +105 -0
  308. package/skills/paperclip-create-plugin/SKILL.md +102 -0
  309. package/skills/para-memory-files/SKILL.md +104 -0
  310. package/skills/para-memory-files/references/schemas.md +35 -0
  311. package/tests/e2e/onboarding.spec.ts +142 -0
  312. package/tests/e2e/playwright.config.ts +35 -0
  313. package/tests/release-smoke/docker-auth-onboarding.spec.ts +141 -0
  314. package/tests/release-smoke/playwright.config.ts +28 -0
  315. package/tsconfig.base.json +18 -0
  316. package/tsconfig.json +18 -0
  317. package/ui/README.md +12 -0
  318. package/ui/components.json +21 -0
  319. package/ui/index.html +47 -0
  320. package/ui/package.json +73 -0
  321. package/ui/public/android-chrome-192x192.png +0 -0
  322. package/ui/public/android-chrome-512x512.png +0 -0
  323. package/ui/public/apple-touch-icon.png +0 -0
  324. package/ui/public/brands/opencode-logo-dark-square.svg +18 -0
  325. package/ui/public/brands/opencode-logo-light-square.svg +18 -0
  326. package/ui/public/favicon-16x16.png +0 -0
  327. package/ui/public/favicon-32x32.png +0 -0
  328. package/ui/public/favicon.ico +0 -0
  329. package/ui/public/favicon.svg +9 -0
  330. package/ui/public/site.webmanifest +30 -0
  331. package/ui/public/sprites/1-D-1.png +0 -0
  332. package/ui/public/sprites/1-D-2.png +0 -0
  333. package/ui/public/sprites/1-D-3.png +0 -0
  334. package/ui/public/sprites/1-L-1.png +0 -0
  335. package/ui/public/sprites/1-R-1.png +0 -0
  336. package/ui/public/sprites/10-D-1.png +0 -0
  337. package/ui/public/sprites/10-D-2.png +0 -0
  338. package/ui/public/sprites/10-D-3.png +0 -0
  339. package/ui/public/sprites/10-L-1.png +0 -0
  340. package/ui/public/sprites/10-R-1.png +0 -0
  341. package/ui/public/sprites/11-D-1.png +0 -0
  342. package/ui/public/sprites/11-D-2.png +0 -0
  343. package/ui/public/sprites/11-D-3.png +0 -0
  344. package/ui/public/sprites/11-L-1.png +0 -0
  345. package/ui/public/sprites/11-R-1.png +0 -0
  346. package/ui/public/sprites/12-D-1.png +0 -0
  347. package/ui/public/sprites/12-D-2.png +0 -0
  348. package/ui/public/sprites/12-D-3.png +0 -0
  349. package/ui/public/sprites/12-L-1.png +0 -0
  350. package/ui/public/sprites/12-R-1.png +0 -0
  351. package/ui/public/sprites/13-D-1.png +0 -0
  352. package/ui/public/sprites/13-D-2.png +0 -0
  353. package/ui/public/sprites/13-D-3.png +0 -0
  354. package/ui/public/sprites/13-L-1.png +0 -0
  355. package/ui/public/sprites/13-R-1.png +0 -0
  356. package/ui/public/sprites/14-D-1.png +0 -0
  357. package/ui/public/sprites/14-D-2.png +0 -0
  358. package/ui/public/sprites/14-D-3.png +0 -0
  359. package/ui/public/sprites/14-L-1.png +0 -0
  360. package/ui/public/sprites/14-R-1.png +0 -0
  361. package/ui/public/sprites/2-D-1.png +0 -0
  362. package/ui/public/sprites/2-D-2.png +0 -0
  363. package/ui/public/sprites/2-D-3.png +0 -0
  364. package/ui/public/sprites/2-L-1.png +0 -0
  365. package/ui/public/sprites/2-R-1.png +0 -0
  366. package/ui/public/sprites/3-D-1.png +0 -0
  367. package/ui/public/sprites/3-D-2.png +0 -0
  368. package/ui/public/sprites/3-D-3.png +0 -0
  369. package/ui/public/sprites/3-L-1.png +0 -0
  370. package/ui/public/sprites/3-R-1.png +0 -0
  371. package/ui/public/sprites/4-D-1.png +0 -0
  372. package/ui/public/sprites/4-D-2.png +0 -0
  373. package/ui/public/sprites/4-D-3.png +0 -0
  374. package/ui/public/sprites/4-L-1.png +0 -0
  375. package/ui/public/sprites/4-R-1.png +0 -0
  376. package/ui/public/sprites/5-D-1.png +0 -0
  377. package/ui/public/sprites/5-D-2.png +0 -0
  378. package/ui/public/sprites/5-D-3.png +0 -0
  379. package/ui/public/sprites/5-L-1.png +0 -0
  380. package/ui/public/sprites/5-R-1.png +0 -0
  381. package/ui/public/sprites/6-D-1.png +0 -0
  382. package/ui/public/sprites/6-D-2.png +0 -0
  383. package/ui/public/sprites/6-D-3.png +0 -0
  384. package/ui/public/sprites/6-L-1.png +0 -0
  385. package/ui/public/sprites/6-R-1.png +0 -0
  386. package/ui/public/sprites/7-D-1.png +0 -0
  387. package/ui/public/sprites/7-D-2.png +0 -0
  388. package/ui/public/sprites/7-D-3.png +0 -0
  389. package/ui/public/sprites/7-L-1.png +0 -0
  390. package/ui/public/sprites/7-R-1.png +0 -0
  391. package/ui/public/sprites/8-D-1.png +0 -0
  392. package/ui/public/sprites/8-D-2.png +0 -0
  393. package/ui/public/sprites/8-D-3.png +0 -0
  394. package/ui/public/sprites/8-L-1.png +0 -0
  395. package/ui/public/sprites/8-R-1.png +0 -0
  396. package/ui/public/sprites/9-D-1.png +0 -0
  397. package/ui/public/sprites/9-D-2.png +0 -0
  398. package/ui/public/sprites/9-D-3.png +0 -0
  399. package/ui/public/sprites/9-L-1.png +0 -0
  400. package/ui/public/sprites/9-R-1.png +0 -0
  401. package/ui/public/sprites/ceo-lobster.png +0 -0
  402. package/ui/public/sw.js +42 -0
  403. package/ui/public/worktree-favicon-16x16.png +0 -0
  404. package/ui/public/worktree-favicon-32x32.png +0 -0
  405. package/ui/public/worktree-favicon.ico +0 -0
  406. package/ui/public/worktree-favicon.svg +9 -0
  407. package/ui/src/App.tsx +354 -0
  408. package/ui/src/adapters/claude-local/config-fields.tsx +138 -0
  409. package/ui/src/adapters/claude-local/index.ts +13 -0
  410. package/ui/src/adapters/codex-local/config-fields.tsx +104 -0
  411. package/ui/src/adapters/codex-local/index.ts +13 -0
  412. package/ui/src/adapters/cursor/config-fields.tsx +49 -0
  413. package/ui/src/adapters/cursor/index.ts +13 -0
  414. package/ui/src/adapters/gemini-local/config-fields.tsx +51 -0
  415. package/ui/src/adapters/gemini-local/index.ts +13 -0
  416. package/ui/src/adapters/http/build-config.ts +9 -0
  417. package/ui/src/adapters/http/config-fields.tsx +38 -0
  418. package/ui/src/adapters/http/index.ts +12 -0
  419. package/ui/src/adapters/http/parse-stdout.ts +5 -0
  420. package/ui/src/adapters/index.ts +9 -0
  421. package/ui/src/adapters/local-workspace-runtime-fields.tsx +5 -0
  422. package/ui/src/adapters/openclaw-gateway/config-fields.tsx +237 -0
  423. package/ui/src/adapters/openclaw-gateway/index.ts +13 -0
  424. package/ui/src/adapters/opencode-local/config-fields.tsx +72 -0
  425. package/ui/src/adapters/opencode-local/index.ts +13 -0
  426. package/ui/src/adapters/pi-local/config-fields.tsx +49 -0
  427. package/ui/src/adapters/pi-local/index.ts +13 -0
  428. package/ui/src/adapters/process/build-config.ts +18 -0
  429. package/ui/src/adapters/process/config-fields.tsx +77 -0
  430. package/ui/src/adapters/process/index.ts +12 -0
  431. package/ui/src/adapters/process/parse-stdout.ts +5 -0
  432. package/ui/src/adapters/registry.ts +34 -0
  433. package/ui/src/adapters/runtime-json-fields.tsx +122 -0
  434. package/ui/src/adapters/transcript.test.ts +30 -0
  435. package/ui/src/adapters/transcript.ts +62 -0
  436. package/ui/src/adapters/types.ts +34 -0
  437. package/ui/src/api/access.ts +160 -0
  438. package/ui/src/api/activity.ts +37 -0
  439. package/ui/src/api/agents.ts +194 -0
  440. package/ui/src/api/approvals.ts +25 -0
  441. package/ui/src/api/assets.ts +30 -0
  442. package/ui/src/api/auth.ts +74 -0
  443. package/ui/src/api/budgets.ts +21 -0
  444. package/ui/src/api/client.ts +50 -0
  445. package/ui/src/api/companies.ts +59 -0
  446. package/ui/src/api/companySkills.ts +55 -0
  447. package/ui/src/api/costs.ts +60 -0
  448. package/ui/src/api/dashboard.ts +7 -0
  449. package/ui/src/api/execution-workspaces.ts +27 -0
  450. package/ui/src/api/goals.ts +12 -0
  451. package/ui/src/api/health.ts +41 -0
  452. package/ui/src/api/heartbeats.ts +62 -0
  453. package/ui/src/api/index.ts +18 -0
  454. package/ui/src/api/instanceSettings.ts +19 -0
  455. package/ui/src/api/issues.ts +115 -0
  456. package/ui/src/api/plugins.ts +424 -0
  457. package/ui/src/api/projects.ts +34 -0
  458. package/ui/src/api/routines.ts +59 -0
  459. package/ui/src/api/secrets.ts +26 -0
  460. package/ui/src/api/sidebarBadges.ts +7 -0
  461. package/ui/src/components/AccountingModelCard.tsx +69 -0
  462. package/ui/src/components/ActiveAgentsPanel.tsx +157 -0
  463. package/ui/src/components/ActivityCharts.tsx +264 -0
  464. package/ui/src/components/ActivityRow.tsx +147 -0
  465. package/ui/src/components/AgentActionButtons.tsx +51 -0
  466. package/ui/src/components/AgentConfigForm.tsx +1468 -0
  467. package/ui/src/components/AgentIconPicker.tsx +81 -0
  468. package/ui/src/components/AgentProperties.tsx +107 -0
  469. package/ui/src/components/ApprovalCard.tsx +107 -0
  470. package/ui/src/components/ApprovalPayload.tsx +134 -0
  471. package/ui/src/components/AsciiArtAnimation.tsx +355 -0
  472. package/ui/src/components/BillerSpendCard.tsx +146 -0
  473. package/ui/src/components/BreadcrumbBar.tsx +113 -0
  474. package/ui/src/components/BudgetIncidentCard.tsx +101 -0
  475. package/ui/src/components/BudgetPolicyCard.tsx +220 -0
  476. package/ui/src/components/BudgetSidebarMarker.tsx +13 -0
  477. package/ui/src/components/ClaudeSubscriptionPanel.tsx +141 -0
  478. package/ui/src/components/CodexSubscriptionPanel.tsx +158 -0
  479. package/ui/src/components/CommandPalette.tsx +239 -0
  480. package/ui/src/components/CommentThread.tsx +503 -0
  481. package/ui/src/components/CompanyPatternIcon.tsx +212 -0
  482. package/ui/src/components/CompanyRail.tsx +329 -0
  483. package/ui/src/components/CompanySwitcher.tsx +81 -0
  484. package/ui/src/components/CopyText.tsx +56 -0
  485. package/ui/src/components/DevRestartBanner.tsx +89 -0
  486. package/ui/src/components/EmptyState.tsx +27 -0
  487. package/ui/src/components/EntityRow.tsx +69 -0
  488. package/ui/src/components/FilterBar.tsx +39 -0
  489. package/ui/src/components/FinanceBillerCard.tsx +45 -0
  490. package/ui/src/components/FinanceKindCard.tsx +44 -0
  491. package/ui/src/components/FinanceTimelineCard.tsx +72 -0
  492. package/ui/src/components/GoalProperties.tsx +165 -0
  493. package/ui/src/components/GoalTree.tsx +118 -0
  494. package/ui/src/components/Identity.tsx +39 -0
  495. package/ui/src/components/InlineEditor.tsx +248 -0
  496. package/ui/src/components/InlineEntitySelector.tsx +206 -0
  497. package/ui/src/components/InstanceSidebar.tsx +53 -0
  498. package/ui/src/components/IssueDocumentsSection.tsx +892 -0
  499. package/ui/src/components/IssueProperties.tsx +621 -0
  500. package/ui/src/components/IssueRow.tsx +149 -0
  501. package/ui/src/components/IssueWorkspaceCard.tsx +404 -0
  502. package/ui/src/components/IssuesList.tsx +889 -0
  503. package/ui/src/components/JsonSchemaForm.tsx +1048 -0
  504. package/ui/src/components/KanbanBoard.tsx +275 -0
  505. package/ui/src/components/Layout.tsx +441 -0
  506. package/ui/src/components/LiveRunWidget.tsx +160 -0
  507. package/ui/src/components/MarkdownBody.test.tsx +50 -0
  508. package/ui/src/components/MarkdownBody.tsx +152 -0
  509. package/ui/src/components/MarkdownEditor.tsx +622 -0
  510. package/ui/src/components/MetricCard.tsx +53 -0
  511. package/ui/src/components/MobileBottomNav.tsx +123 -0
  512. package/ui/src/components/NewAgentDialog.tsx +223 -0
  513. package/ui/src/components/NewGoalDialog.tsx +283 -0
  514. package/ui/src/components/NewIssueDialog.tsx +1473 -0
  515. package/ui/src/components/NewProjectDialog.tsx +451 -0
  516. package/ui/src/components/OnboardingWizard.tsx +1392 -0
  517. package/ui/src/components/OpenCodeLogoIcon.tsx +22 -0
  518. package/ui/src/components/PackageFileTree.tsx +318 -0
  519. package/ui/src/components/PageSkeleton.tsx +180 -0
  520. package/ui/src/components/PageTabBar.tsx +45 -0
  521. package/ui/src/components/PathInstructionsModal.tsx +143 -0
  522. package/ui/src/components/PriorityIcon.tsx +77 -0
  523. package/ui/src/components/ProjectProperties.tsx +1127 -0
  524. package/ui/src/components/PropertiesPanel.tsx +29 -0
  525. package/ui/src/components/ProviderQuotaCard.tsx +417 -0
  526. package/ui/src/components/QuotaBar.tsx +65 -0
  527. package/ui/src/components/ReportsToPicker.tsx +127 -0
  528. package/ui/src/components/ScheduleEditor.tsx +344 -0
  529. package/ui/src/components/ScrollToBottom.tsx +79 -0
  530. package/ui/src/components/Sidebar.tsx +130 -0
  531. package/ui/src/components/SidebarAgents.tsx +146 -0
  532. package/ui/src/components/SidebarNavItem.tsx +92 -0
  533. package/ui/src/components/SidebarProjects.tsx +234 -0
  534. package/ui/src/components/SidebarSection.tsx +17 -0
  535. package/ui/src/components/StatusBadge.tsx +15 -0
  536. package/ui/src/components/StatusIcon.tsx +71 -0
  537. package/ui/src/components/SwipeToArchive.tsx +152 -0
  538. package/ui/src/components/ToastViewport.tsx +99 -0
  539. package/ui/src/components/WorktreeBanner.tsx +25 -0
  540. package/ui/src/components/agent-config-defaults.ts +31 -0
  541. package/ui/src/components/agent-config-primitives.tsx +476 -0
  542. package/ui/src/components/transcript/RunTranscriptView.test.tsx +84 -0
  543. package/ui/src/components/transcript/RunTranscriptView.tsx +1015 -0
  544. package/ui/src/components/transcript/useLiveRunTranscripts.ts +297 -0
  545. package/ui/src/components/ui/avatar.tsx +107 -0
  546. package/ui/src/components/ui/badge.tsx +48 -0
  547. package/ui/src/components/ui/breadcrumb.tsx +109 -0
  548. package/ui/src/components/ui/button.tsx +64 -0
  549. package/ui/src/components/ui/card.tsx +92 -0
  550. package/ui/src/components/ui/checkbox.tsx +32 -0
  551. package/ui/src/components/ui/collapsible.tsx +33 -0
  552. package/ui/src/components/ui/command.tsx +194 -0
  553. package/ui/src/components/ui/dialog.tsx +156 -0
  554. package/ui/src/components/ui/dropdown-menu.tsx +257 -0
  555. package/ui/src/components/ui/input.tsx +21 -0
  556. package/ui/src/components/ui/label.tsx +22 -0
  557. package/ui/src/components/ui/popover.tsx +88 -0
  558. package/ui/src/components/ui/scroll-area.tsx +56 -0
  559. package/ui/src/components/ui/select.tsx +188 -0
  560. package/ui/src/components/ui/separator.tsx +28 -0
  561. package/ui/src/components/ui/sheet.tsx +143 -0
  562. package/ui/src/components/ui/skeleton.tsx +13 -0
  563. package/ui/src/components/ui/tabs.tsx +89 -0
  564. package/ui/src/components/ui/textarea.tsx +18 -0
  565. package/ui/src/components/ui/tooltip.tsx +57 -0
  566. package/ui/src/components/visual-office/AgentAvatar.tsx +99 -0
  567. package/ui/src/components/visual-office/OfficeViewExact.tsx +417 -0
  568. package/ui/src/components/visual-office/i18n.ts +52 -0
  569. package/ui/src/components/visual-office/office-view/CliUsagePanel.tsx +240 -0
  570. package/ui/src/components/visual-office/office-view/VirtualPadOverlay.tsx +104 -0
  571. package/ui/src/components/visual-office/office-view/buildScene-break-room.ts +248 -0
  572. package/ui/src/components/visual-office/office-view/buildScene-ceo-hallway.ts +345 -0
  573. package/ui/src/components/visual-office/office-view/buildScene-department-agent.ts +242 -0
  574. package/ui/src/components/visual-office/office-view/buildScene-departments.ts +360 -0
  575. package/ui/src/components/visual-office/office-view/buildScene-final-layers.ts +113 -0
  576. package/ui/src/components/visual-office/office-view/buildScene-types.ts +91 -0
  577. package/ui/src/components/visual-office/office-view/buildScene.ts +232 -0
  578. package/ui/src/components/visual-office/office-view/drawing-core.ts +374 -0
  579. package/ui/src/components/visual-office/office-view/drawing-furniture-a.ts +338 -0
  580. package/ui/src/components/visual-office/office-view/drawing-furniture-b.ts +241 -0
  581. package/ui/src/components/visual-office/office-view/model.ts +301 -0
  582. package/ui/src/components/visual-office/office-view/officeTicker.ts +455 -0
  583. package/ui/src/components/visual-office/office-view/officeTickerRoomAndDelivery.ts +133 -0
  584. package/ui/src/components/visual-office/office-view/themes-locale.ts +460 -0
  585. package/ui/src/components/visual-office/office-view/useCliUsage.ts +37 -0
  586. package/ui/src/components/visual-office/office-view/useOfficeDeliveryEffects.ts +465 -0
  587. package/ui/src/components/visual-office/office-view/useOfficePixiRuntime.ts +282 -0
  588. package/ui/src/components/visual-office/types.ts +123 -0
  589. package/ui/src/context/BreadcrumbContext.tsx +44 -0
  590. package/ui/src/context/CompanyContext.tsx +151 -0
  591. package/ui/src/context/DialogContext.tsx +135 -0
  592. package/ui/src/context/LiveUpdatesProvider.test.ts +119 -0
  593. package/ui/src/context/LiveUpdatesProvider.tsx +760 -0
  594. package/ui/src/context/PanelContext.tsx +73 -0
  595. package/ui/src/context/SidebarContext.tsx +43 -0
  596. package/ui/src/context/ThemeContext.tsx +83 -0
  597. package/ui/src/context/ToastContext.tsx +172 -0
  598. package/ui/src/fixtures/runTranscriptFixtures.ts +226 -0
  599. package/ui/src/hooks/useAgentOrder.ts +105 -0
  600. package/ui/src/hooks/useAutosaveIndicator.ts +72 -0
  601. package/ui/src/hooks/useCompanyPageMemory.test.ts +90 -0
  602. package/ui/src/hooks/useCompanyPageMemory.ts +79 -0
  603. package/ui/src/hooks/useDateRange.ts +120 -0
  604. package/ui/src/hooks/useInboxBadge.ts +132 -0
  605. package/ui/src/hooks/useKeyboardShortcuts.ts +40 -0
  606. package/ui/src/hooks/useProjectOrder.ts +106 -0
  607. package/ui/src/index.css +770 -0
  608. package/ui/src/lib/agent-icons.ts +99 -0
  609. package/ui/src/lib/agent-order.ts +107 -0
  610. package/ui/src/lib/agent-skills-state.test.ts +90 -0
  611. package/ui/src/lib/agent-skills-state.ts +41 -0
  612. package/ui/src/lib/assignees.test.ts +92 -0
  613. package/ui/src/lib/assignees.ts +82 -0
  614. package/ui/src/lib/color-contrast.ts +107 -0
  615. package/ui/src/lib/company-export-selection.test.ts +41 -0
  616. package/ui/src/lib/company-export-selection.ts +57 -0
  617. package/ui/src/lib/company-page-memory.ts +65 -0
  618. package/ui/src/lib/company-portability-sidebar.test.ts +101 -0
  619. package/ui/src/lib/company-portability-sidebar.ts +62 -0
  620. package/ui/src/lib/company-routes.ts +88 -0
  621. package/ui/src/lib/company-selection.test.ts +34 -0
  622. package/ui/src/lib/company-selection.ts +18 -0
  623. package/ui/src/lib/groupBy.ts +11 -0
  624. package/ui/src/lib/inbox.test.ts +404 -0
  625. package/ui/src/lib/inbox.ts +292 -0
  626. package/ui/src/lib/instance-settings.test.ts +26 -0
  627. package/ui/src/lib/instance-settings.ts +25 -0
  628. package/ui/src/lib/issueDetailBreadcrumb.ts +24 -0
  629. package/ui/src/lib/legacy-agent-config.test.ts +40 -0
  630. package/ui/src/lib/legacy-agent-config.ts +17 -0
  631. package/ui/src/lib/mention-aware-link-node.test.ts +50 -0
  632. package/ui/src/lib/mention-aware-link-node.ts +67 -0
  633. package/ui/src/lib/mention-chips.ts +168 -0
  634. package/ui/src/lib/mention-deletion.test.ts +87 -0
  635. package/ui/src/lib/mention-deletion.ts +143 -0
  636. package/ui/src/lib/model-utils.ts +16 -0
  637. package/ui/src/lib/onboarding-goal.test.ts +22 -0
  638. package/ui/src/lib/onboarding-goal.ts +18 -0
  639. package/ui/src/lib/onboarding-launch.test.ts +131 -0
  640. package/ui/src/lib/onboarding-launch.ts +54 -0
  641. package/ui/src/lib/onboarding-route.test.ts +80 -0
  642. package/ui/src/lib/onboarding-route.ts +51 -0
  643. package/ui/src/lib/portable-files.ts +42 -0
  644. package/ui/src/lib/project-order.ts +71 -0
  645. package/ui/src/lib/queryKeys.ts +140 -0
  646. package/ui/src/lib/recent-assignees.ts +36 -0
  647. package/ui/src/lib/router.tsx +76 -0
  648. package/ui/src/lib/routine-trigger-patch.test.ts +72 -0
  649. package/ui/src/lib/routine-trigger-patch.ts +31 -0
  650. package/ui/src/lib/status-colors.ts +108 -0
  651. package/ui/src/lib/timeAgo.ts +31 -0
  652. package/ui/src/lib/utils.ts +168 -0
  653. package/ui/src/lib/worktree-branding.ts +65 -0
  654. package/ui/src/lib/zip.test.ts +289 -0
  655. package/ui/src/lib/zip.ts +284 -0
  656. package/ui/src/main.tsx +67 -0
  657. package/ui/src/pages/Activity.tsx +141 -0
  658. package/ui/src/pages/AgentDetail.tsx +4053 -0
  659. package/ui/src/pages/Agents.tsx +415 -0
  660. package/ui/src/pages/ApprovalDetail.tsx +369 -0
  661. package/ui/src/pages/Approvals.tsx +132 -0
  662. package/ui/src/pages/Auth.tsx +180 -0
  663. package/ui/src/pages/BoardClaim.tsx +125 -0
  664. package/ui/src/pages/CliAuth.tsx +184 -0
  665. package/ui/src/pages/Companies.tsx +297 -0
  666. package/ui/src/pages/CompanyExport.tsx +1019 -0
  667. package/ui/src/pages/CompanyImport.tsx +1355 -0
  668. package/ui/src/pages/CompanySettings.tsx +661 -0
  669. package/ui/src/pages/CompanySkills.tsx +1171 -0
  670. package/ui/src/pages/Costs.tsx +1103 -0
  671. package/ui/src/pages/Dashboard.tsx +388 -0
  672. package/ui/src/pages/DesignGuide.tsx +1330 -0
  673. package/ui/src/pages/ExecutionWorkspaceDetail.tsx +82 -0
  674. package/ui/src/pages/GoalDetail.tsx +197 -0
  675. package/ui/src/pages/Goals.tsx +63 -0
  676. package/ui/src/pages/Inbox.tsx +1291 -0
  677. package/ui/src/pages/InstanceExperimentalSettings.tsx +139 -0
  678. package/ui/src/pages/InstanceGeneralSettings.tsx +104 -0
  679. package/ui/src/pages/InstanceSettings.tsx +284 -0
  680. package/ui/src/pages/InviteLanding.tsx +320 -0
  681. package/ui/src/pages/IssueDetail.tsx +1201 -0
  682. package/ui/src/pages/Issues.tsx +116 -0
  683. package/ui/src/pages/MyIssues.tsx +72 -0
  684. package/ui/src/pages/NewAgent.tsx +353 -0
  685. package/ui/src/pages/NotFound.tsx +66 -0
  686. package/ui/src/pages/Org.tsx +132 -0
  687. package/ui/src/pages/OrgChart.tsx +447 -0
  688. package/ui/src/pages/PluginManager.tsx +510 -0
  689. package/ui/src/pages/PluginPage.tsx +156 -0
  690. package/ui/src/pages/PluginSettings.tsx +836 -0
  691. package/ui/src/pages/ProjectDetail.tsx +633 -0
  692. package/ui/src/pages/Projects.tsx +87 -0
  693. package/ui/src/pages/RoutineDetail.tsx +1022 -0
  694. package/ui/src/pages/Routines.tsx +661 -0
  695. package/ui/src/pages/RunTranscriptUxLab.tsx +334 -0
  696. package/ui/src/pages/VisualOffice.tsx +243 -0
  697. package/ui/src/plugins/bridge-init.ts +69 -0
  698. package/ui/src/plugins/bridge.ts +476 -0
  699. package/ui/src/plugins/launchers.tsx +834 -0
  700. package/ui/src/plugins/slots.tsx +855 -0
  701. package/ui/tsconfig.json +21 -0
  702. package/ui/vite.config.ts +23 -0
  703. package/ui/vitest.config.ts +14 -0
  704. package/vitest.config.ts +11 -0
package/.dockerignore ADDED
@@ -0,0 +1,10 @@
1
+ .git
2
+ .github
3
+ .paperclip
4
+ .pnpm-store
5
+ node_modules
6
+ **/node_modules
7
+ coverage
8
+ data
9
+ tmp
10
+ *.log
package/.env.example ADDED
@@ -0,0 +1,3 @@
1
+ DATABASE_URL=postgres://paperclip:paperclip@localhost:5432/paperclip
2
+ PORT=3100
3
+ SERVE_UI=false
@@ -0,0 +1,49 @@
1
+ name: Publish CLI to npm
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+ workflow_dispatch: {}
7
+ push:
8
+ tags:
9
+ - 'v*'
10
+
11
+ jobs:
12
+ publish:
13
+ runs-on: ubuntu-latest
14
+ steps:
15
+ - name: Checkout
16
+ uses: actions/checkout@v4
17
+
18
+ - name: Setup Node
19
+ uses: actions/setup-node@v4
20
+ with:
21
+ node-version: '20'
22
+ registry-url: 'https://registry.npmjs.org'
23
+
24
+ - name: Enable Corepack & setup pnpm
25
+ run: |
26
+ corepack enable
27
+ corepack prepare pnpm@9.15.4 --activate
28
+
29
+ - name: Install workspace dependencies
30
+ run: pnpm install --frozen-lockfile
31
+
32
+ - name: Build CLI
33
+ run: |
34
+ cd cli
35
+ pnpm build
36
+
37
+ - name: Configure npm auth
38
+ if: secrets.NPM_TOKEN
39
+ env:
40
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
41
+ run: |
42
+ echo "//registry.npmjs.org/:_authToken=${NODE_AUTH_TOKEN}" > ~/.npmrc
43
+
44
+ - name: Publish CLI to npm
45
+ env:
46
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
47
+ run: |
48
+ cd cli
49
+ npm publish --access public
package/.mailmap ADDED
@@ -0,0 +1 @@
1
+ Dotta <bippadotta@protonmail.com> Forgotten <forgottenrunes@protonmail.com>
package/AGENTS.md ADDED
@@ -0,0 +1,148 @@
1
+ # AGENTS.md
2
+
3
+ Guidance for human and AI contributors working in this repository.
4
+
5
+ ## 1. Purpose
6
+
7
+ Corporate is a control plane for AI-agent companies.
8
+ The current implementation target is V1 and is defined in `doc/SPEC-implementation.md`.
9
+
10
+ ## 2. Read This First
11
+
12
+ Before making changes, read in this order:
13
+
14
+ 1. `doc/GOAL.md`
15
+ 2. `doc/PRODUCT.md`
16
+ 3. `doc/SPEC-implementation.md`
17
+ 4. `doc/DEVELOPING.md`
18
+ 5. `doc/DATABASE.md`
19
+
20
+ `doc/SPEC.md` is long-horizon product context.
21
+ `doc/SPEC-implementation.md` is the concrete V1 build contract.
22
+
23
+ ## 3. Repo Map
24
+
25
+ - `server/`: Express REST API and orchestration services
26
+ - `ui/`: React + Vite board UI
27
+ - `packages/db/`: Drizzle schema, migrations, DB clients
28
+ - `packages/shared/`: shared types, constants, validators, API path constants
29
+ - `packages/adapters/`: agent adapter implementations (Claude, Codex, Cursor, etc.)
30
+ - `packages/adapter-utils/`: shared adapter utilities
31
+ - `packages/plugins/`: plugin system packages
32
+ - `doc/`: operational and product docs
33
+
34
+ ## 4. Dev Setup (Auto DB)
35
+
36
+ Use embedded PGlite in dev by leaving `DATABASE_URL` unset.
37
+
38
+ ```sh
39
+ pnpm install
40
+ pnpm dev
41
+ ```
42
+
43
+ This starts:
44
+
45
+ - API: `http://localhost:3100`
46
+ - UI: `http://localhost:3100` (served by API server in dev middleware mode)
47
+
48
+ Quick checks:
49
+
50
+ ```sh
51
+ curl http://localhost:3100/api/health
52
+ curl http://localhost:3100/api/companies
53
+ ```
54
+
55
+ Reset local dev DB:
56
+
57
+ ```sh
58
+ rm -rf data/pglite
59
+ pnpm dev
60
+ ```
61
+
62
+ ## 5. Core Engineering Rules
63
+
64
+ 1. Keep changes company-scoped.
65
+ Every domain entity should be scoped to a company and company boundaries must be enforced in routes/services.
66
+
67
+ 2. Keep contracts synchronized.
68
+ If you change schema/API behavior, update all impacted layers:
69
+ - `packages/db` schema and exports
70
+ - `packages/shared` types/constants/validators
71
+ - `server` routes/services
72
+ - `ui` API clients and pages
73
+
74
+ 3. Preserve control-plane invariants.
75
+ - Single-assignee task model
76
+ - Atomic issue checkout semantics
77
+ - Approval gates for governed actions
78
+ - Budget hard-stop auto-pause behavior
79
+ - Activity logging for mutating actions
80
+
81
+ 4. Do not replace strategic docs wholesale unless asked.
82
+ Prefer additive updates. Keep `doc/SPEC.md` and `doc/SPEC-implementation.md` aligned.
83
+
84
+ 5. Keep plan docs dated and centralized.
85
+ New plan documents belong in `doc/plans/` and should use `YYYY-MM-DD-slug.md` filenames.
86
+
87
+ ## 6. Database Change Workflow
88
+
89
+ When changing data model:
90
+
91
+ 1. Edit `packages/db/src/schema/*.ts`
92
+ 2. Ensure new tables are exported from `packages/db/src/schema/index.ts`
93
+ 3. Generate migration:
94
+
95
+ ```sh
96
+ pnpm db:generate
97
+ ```
98
+
99
+ 4. Validate compile:
100
+
101
+ ```sh
102
+ pnpm -r typecheck
103
+ ```
104
+
105
+ Notes:
106
+ - `packages/db/drizzle.config.ts` reads compiled schema from `dist/schema/*.js`
107
+ - `pnpm db:generate` compiles `packages/db` first
108
+
109
+ ## 7. Verification Before Hand-off
110
+
111
+ Run this full check before claiming done:
112
+
113
+ ```sh
114
+ pnpm -r typecheck
115
+ pnpm test:run
116
+ pnpm build
117
+ ```
118
+
119
+ If anything cannot be run, explicitly report what was not run and why.
120
+
121
+ ## 8. API and Auth Expectations
122
+
123
+ - Base path: `/api`
124
+ - Board access is treated as full-control operator context
125
+ - Agent access uses bearer API keys (`agent_api_keys`), hashed at rest
126
+ - Agent keys must not access other companies
127
+
128
+ When adding endpoints:
129
+
130
+ - apply company access checks
131
+ - enforce actor permissions (board vs agent)
132
+ - write activity log entries for mutations
133
+ - return consistent HTTP errors (`400/401/403/404/409/422/500`)
134
+
135
+ ## 9. UI Expectations
136
+
137
+ - Keep routes and nav aligned with available API surface
138
+ - Use company selection context for company-scoped pages
139
+ - Surface failures clearly; do not silently ignore API errors
140
+
141
+ ## 10. Definition of Done
142
+
143
+ A change is done when all are true:
144
+
145
+ 1. Behavior matches `doc/SPEC-implementation.md`
146
+ 2. Typecheck, tests, and build pass
147
+ 3. Contracts are synced across db/shared/server/ui
148
+ 4. Docs updated when behavior or commands change
@@ -0,0 +1,75 @@
1
+ # Contributing Guide
2
+
3
+ Thanks for wanting to contribute!
4
+
5
+ We really appreciate both small fixes and thoughtful larger changes.
6
+
7
+ ## Two Paths to Get Your Pull Request Accepted
8
+
9
+ ### Path 1: Small, Focused Changes (Fastest way to get merged)
10
+
11
+ - Pick **one** clear thing to fix/improve
12
+ - Touch the **smallest possible number of files**
13
+ - Make sure the change is very targeted and easy to review
14
+ - All automated checks pass (including Greptile comments)
15
+ - No new lint/test failures
16
+
17
+ These almost always get merged quickly when they're clean.
18
+
19
+ ### Path 2: Bigger or Impactful Changes
20
+
21
+ - **First** talk about it in Discord → #dev channel
22
+ → Describe what you're trying to solve
23
+ → Share rough ideas / approach
24
+ - Once there's rough agreement, build it
25
+ - In your PR include:
26
+ - Before / After screenshots (or short video if UI/behavior change)
27
+ - Clear description of what & why
28
+ - Proof it works (manual testing notes)
29
+ - All tests passing
30
+ - All Greptile + other PR comments addressed
31
+
32
+ PRs that follow this path are **much** more likely to be accepted, even when they're large.
33
+
34
+ ## General Rules (both paths)
35
+
36
+ - Write clear commit messages
37
+ - Keep PR title + description meaningful
38
+ - One PR = one logical change (unless it's a small related group)
39
+ - Run tests locally first
40
+ - Be kind in discussions 😄
41
+
42
+ ## Writing a Good PR message
43
+
44
+ Please include a "thinking path" at the top of your PR message that explains from the top of the project down to what you fixed. E.g.:
45
+
46
+ ### Thinking Path Example 1:
47
+
48
+ > - Corporate orchestrates ai-agents for zero-human companies
49
+ > - There are many types of adapters for each LLM model provider
50
+ > - But LLM's have a context limit and not all agents can automatically compact their context
51
+ > - So we need to have an adapter-specific configuration for which adapters can and cannot automatically compact their context
52
+ > - This pull request adds per-adapter configuration of compaction, either auto or paperclip managed
53
+ > - That way we can get optimal performance from any adapter/provider in Corporate
54
+
55
+ ### Thinking Path Example 2:
56
+
57
+ > - Corporate orchestrates ai-agents for zero-human companies
58
+ > - But humans want to watch the agents and oversee their work
59
+ > - Human users also operate in teams and so they need their own logins, profiles, views etc.
60
+ > - So we have a multi-user system for humans
61
+ > - But humans want to be able to update their own profile picture and avatar
62
+ > - But the avatar upload form wasn't saving the avatar to the file storage system
63
+ > - So this PR fixes the avatar upload form to use the file storage service
64
+ > - The benefit is we don't have a one-off file storage for just one aspect of the system, which would cause confusion and extra configuration
65
+
66
+ Then have the rest of your normal PR message after the Thinking Path.
67
+
68
+ This should include details about what you did, why you did it, why it matters & the benefits, how we can verify it works, and any risks.
69
+
70
+ Please include screenshots if possible if you have a visible change. (use something like the [agent-browser skill](https://github.com/vercel-labs/agent-browser/blob/main/skills/agent-browser/SKILL.md) or similar to take screenshots). Ideally, you include before and after screenshots.
71
+
72
+ Questions? Just ask in #dev — we're happy to help.
73
+
74
+ Happy hacking!
75
+
package/Dockerfile ADDED
@@ -0,0 +1,59 @@
1
+ FROM node:lts-trixie-slim AS base
2
+ RUN apt-get update \
3
+ && apt-get install -y --no-install-recommends ca-certificates curl git \
4
+ && rm -rf /var/lib/apt/lists/*
5
+ RUN corepack enable
6
+
7
+ FROM base AS deps
8
+ WORKDIR /app
9
+ COPY package.json pnpm-workspace.yaml pnpm-lock.yaml .npmrc ./
10
+ COPY cli/package.json cli/
11
+ COPY server/package.json server/
12
+ COPY ui/package.json ui/
13
+ COPY packages/shared/package.json packages/shared/
14
+ COPY packages/db/package.json packages/db/
15
+ COPY packages/adapter-utils/package.json packages/adapter-utils/
16
+ COPY packages/adapters/claude-local/package.json packages/adapters/claude-local/
17
+ COPY packages/adapters/codex-local/package.json packages/adapters/codex-local/
18
+ COPY packages/adapters/cursor-local/package.json packages/adapters/cursor-local/
19
+ COPY packages/adapters/gemini-local/package.json packages/adapters/gemini-local/
20
+ COPY packages/adapters/openclaw-gateway/package.json packages/adapters/openclaw-gateway/
21
+ COPY packages/adapters/opencode-local/package.json packages/adapters/opencode-local/
22
+ COPY packages/adapters/pi-local/package.json packages/adapters/pi-local/
23
+ COPY packages/plugins/sdk/package.json packages/plugins/sdk/
24
+ COPY patches/ patches/
25
+
26
+ RUN pnpm install --frozen-lockfile
27
+
28
+ FROM base AS build
29
+ WORKDIR /app
30
+ COPY --from=deps /app /app
31
+ COPY . .
32
+ RUN pnpm --filter @paperclipai/ui build
33
+ RUN pnpm --filter @paperclipai/plugin-sdk build
34
+ RUN pnpm --filter @paperclipai/server build
35
+ RUN test -f server/dist/index.js || (echo "ERROR: server build output missing" && exit 1)
36
+
37
+ FROM base AS production
38
+ WORKDIR /app
39
+ COPY --chown=node:node --from=build /app /app
40
+ RUN npm install --global --omit=dev @anthropic-ai/claude-code@latest @openai/codex@latest opencode-ai \
41
+ && mkdir -p /paperclip \
42
+ && chown node:node /paperclip
43
+
44
+ ENV NODE_ENV=production \
45
+ HOME=/paperclip \
46
+ HOST=0.0.0.0 \
47
+ PORT=3100 \
48
+ SERVE_UI=true \
49
+ PAPERCLIP_HOME=/paperclip \
50
+ PAPERCLIP_INSTANCE_ID=default \
51
+ PAPERCLIP_CONFIG=/paperclip/instances/default/config.json \
52
+ PAPERCLIP_DEPLOYMENT_MODE=authenticated \
53
+ PAPERCLIP_DEPLOYMENT_EXPOSURE=private
54
+
55
+ VOLUME ["/paperclip"]
56
+ EXPOSE 3100
57
+
58
+ USER node
59
+ CMD ["node", "--import", "./server/node_modules/tsx/dist/loader.mjs", "server/dist/index.js"]
@@ -0,0 +1,42 @@
1
+ FROM ubuntu:24.04
2
+
3
+ ARG NODE_MAJOR=20
4
+ ARG CORPORATEAI_VERSION=latest
5
+ ARG PAPERCLIPAI_VERSION=latest
6
+ ARG HOST_UID=10001
7
+
8
+ ENV DEBIAN_FRONTEND=noninteractive \
9
+ PAPERCLIP_HOME=/paperclip \
10
+ PAPERCLIP_OPEN_ON_LISTEN=false \
11
+ HOST=0.0.0.0 \
12
+ PORT=3100 \
13
+ HOME=/home/paperclip \
14
+ LANG=en_US.UTF-8 \
15
+ LC_ALL=en_US.UTF-8 \
16
+ NPM_CONFIG_UPDATE_NOTIFIER=false \
17
+ NODE_MAJOR=${NODE_MAJOR} \
18
+ CORPORATEAI_VERSION=${CORPORATEAI_VERSION} \
19
+ PAPERCLIPAI_VERSION=${PAPERCLIPAI_VERSION}
20
+
21
+ RUN apt-get update \
22
+ && apt-get install -y --no-install-recommends ca-certificates curl gnupg locales \
23
+ && mkdir -p /etc/apt/keyrings \
24
+ && curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key \
25
+ | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \
26
+ && echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_${NODE_MAJOR}.x nodistro main" \
27
+ > /etc/apt/sources.list.d/nodesource.list \
28
+ && apt-get update \
29
+ && apt-get install -y --no-install-recommends nodejs \
30
+ && locale-gen en_US.UTF-8 \
31
+ && groupadd --gid 10001 paperclip \
32
+ && useradd --create-home --shell /bin/bash --uid "${HOST_UID}" --gid 10001 paperclip \
33
+ && mkdir -p /paperclip /home/paperclip/workspace \
34
+ && chown -R paperclip:paperclip /paperclip /home/paperclip \
35
+ && rm -rf /var/lib/apt/lists/*
36
+
37
+ VOLUME ["/paperclip"]
38
+ WORKDIR /home/paperclip/workspace
39
+ EXPOSE 3100
40
+ USER paperclip
41
+
42
+ CMD ["bash", "-lc", "set -euo pipefail; mkdir -p \"$PAPERCLIP_HOME\"; CLI_VERSION=\"${CORPORATEAI_VERSION:-${PAPERCLIPAI_VERSION:-latest}}\"; npx --yes \"corporateai@${CLI_VERSION}\" onboard --yes --data-dir \"$PAPERCLIP_HOME\""]
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Corporate AI
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,93 @@
1
+ # Corporate: Orchestrate Your AI-Agent Company
2
+
3
+ Early release v0.0.1 — Open-source control plane for AI-agent companies.
4
+
5
+ Corporate helps teams run AI-agent companies with predictable costs, clear governance, and full audit trails. Bring your agents, set goals, and let Corporate handle orchestration, budgeting, and approvals.
6
+
7
+ ---
8
+
9
+ ## Why Corporate?
10
+
11
+ Corporate is built for businesses that want to scale AI-agent operations without the chaos. Unlike other tools, Corporate focuses on:
12
+
13
+ - **Company-Wide Orchestration**: Manage multiple agents, teams, and goals from one dashboard.
14
+ - **Cost Control**: Set budgets and auto-pause runaway processes.
15
+ - **Governance**: Enforce approval gates and track every decision.
16
+ - **Audit-Ready**: Immutable logs for every action.
17
+
18
+ ---
19
+
20
+ ## Features
21
+
22
+ | Feature | Benefit |
23
+ |------------------------|--------------------------------------|
24
+ | **Bring Your Own Agent** | Any agent, any runtime, one platform. |
25
+ | **Budget Control** | Hard-stop limits to prevent overspend. |
26
+ | **Governance** | Approvals, rollbacks, and revisions. |
27
+ | **Audit Logs** | Full traceability of every action. |
28
+ | **Multi-Company** | One deployment, many companies. |
29
+ | **Mobile Ready** | Manage your business from anywhere. |
30
+
31
+ ---
32
+
33
+ ## Problems Corporate Solves
34
+
35
+ | Problem | Solution |
36
+ |----------------------------------------|---------------------------------------|
37
+ | Unclear ownership and manual handoffs | Single-assignee task model. |
38
+ | Runaway costs from agent loops | Budget tracking and auto-pause. |
39
+ | Fragmented approvals | Centralized governance workflows. |
40
+ | No traceability | Immutable audit logs. |
41
+
42
+ ---
43
+
44
+ ## Quickstart
45
+
46
+ Corporate is open-source and self-hosted. No account required.
47
+
48
+ ### One-Liner Setup
49
+ ```bash
50
+ npx corporateai onboard --yes
51
+ ```
52
+ This command:
53
+ - Clones the repository.
54
+ - Installs dependencies.
55
+ - Sets up an embedded development database.
56
+ - Starts the server and UI.
57
+
58
+ ### Manual Setup
59
+ ```bash
60
+ git clone https://github.com/EvanGribar/corporate.git
61
+ cd corporate
62
+ pnpm install
63
+ pnpm dev
64
+ ```
65
+ Access the platform:
66
+ - API: [http://localhost:3100/api](http://localhost:3100/api)
67
+ - UI: [http://localhost:3100](http://localhost:3100)
68
+
69
+ ---
70
+
71
+ ## Why Corporate Over Paperclip?
72
+
73
+ | Feature | Corporate | Paperclip |
74
+ |------------------------|------------------------------------|-----------|
75
+ | **Company-Wide Scope** | Yes | No |
76
+ | **Budget Controls** | Hard-stop limits | Limited |
77
+ | **Audit Logs** | Comprehensive | Basic |
78
+ | **Ease of Use** | 5-minute onboarding | Moderate |
79
+ | **Governance** | Built-in approval workflows | Limited |
80
+
81
+ ---
82
+
83
+ ## Community
84
+
85
+ - [Discord](https://discord.gg/m4HZY7xNG3) — Join the conversation.
86
+ - [GitHub Issues](https://github.com/EvanGribar/corporate/issues) — Report bugs and request features.
87
+ - [GitHub Discussions](https://github.com/EvanGribar/corporate/discussions) — Share ideas and feedback.
88
+
89
+ ---
90
+
91
+ ## License
92
+
93
+ MIT © 2026 Corporate
@@ -0,0 +1,11 @@
1
+ import path from 'node:path';
2
+
3
+ export default {
4
+ entryPoints: [path.resolve('src', 'index.ts')],
5
+ bundle: true,
6
+ platform: 'node',
7
+ format: 'esm',
8
+ target: 'node20',
9
+ outfile: path.resolve('dist', 'index.js'),
10
+ sourcemap: true,
11
+ };
@@ -0,0 +1,24 @@
1
+ {
2
+ "name": "corporateai",
3
+ "version": "0.3.1",
4
+ "description": "Corporate CLI wrapper for the Corporate control plane",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "corporateai": "dist/index.js"
9
+ },
10
+ "scripts": {
11
+ "build": "node ./scripts/build-cli.mjs"
12
+ },
13
+ "files": ["dist"],
14
+ "dependencies": {
15
+ "@corporateai/server": "workspace:*"
16
+ },
17
+ "devDependencies": {
18
+ "esbuild": "^0.27.3"
19
+ },
20
+ "engines": {
21
+ "node": ">=20"
22
+ }
23
+ }
24
+
@@ -0,0 +1,5 @@
1
+ import esbuild from 'esbuild';
2
+ import config from '../esbuild.config.mjs';
3
+
4
+ await esbuild.build(config);
5
+ console.log('Built corporateai CLI bundle');
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env node
2
+ import { spawnSync } from 'node:child_process';
3
+
4
+ const cmd = process.argv[2] || 'help';
5
+ const args = process.argv.slice(3);
6
+
7
+ if (cmd === 'help' || ['-h', '--help'].includes(cmd)) {
8
+ console.log(`corporateai CLI (wrapper)
9
+
10
+ Usage:
11
+ corporateai onboard [--yes] [--data-dir <dir>]
12
+ corporateai agent local-cli <agent-id> --company-id <company-id>
13
+ corporateai worktree init ...
14
+
15
+ This binary is a minimal stub. For full experience, install the top-level package and run the CLI in the repo root.
16
+ `);
17
+ process.exit(0);
18
+ }
19
+
20
+ if (cmd === 'onboard') {
21
+ const finalArgs = ['onboard', ...args];
22
+ const result = spawnSync('pnpm', finalArgs, { stdio: 'inherit' });
23
+ process.exit(result.status ?? 1);
24
+ }
25
+
26
+ const result = spawnSync('pnpm', [cmd, ...args], { stdio: 'inherit' });
27
+ process.exit(result.status ?? 1);
@@ -0,0 +1,18 @@
1
+ services:
2
+ paperclip:
3
+ build:
4
+ context: .
5
+ dockerfile: Dockerfile
6
+ ports:
7
+ - "${PAPERCLIP_PORT:-3100}:3100"
8
+ environment:
9
+ HOST: "0.0.0.0"
10
+ PAPERCLIP_HOME: "/paperclip"
11
+ OPENAI_API_KEY: "${OPENAI_API_KEY:-}"
12
+ ANTHROPIC_API_KEY: "${ANTHROPIC_API_KEY:-}"
13
+ PAPERCLIP_DEPLOYMENT_MODE: "authenticated"
14
+ PAPERCLIP_DEPLOYMENT_EXPOSURE: "private"
15
+ PAPERCLIP_PUBLIC_URL: "${PAPERCLIP_PUBLIC_URL:-http://localhost:3100}"
16
+ BETTER_AUTH_SECRET: "${BETTER_AUTH_SECRET:?BETTER_AUTH_SECRET must be set}"
17
+ volumes:
18
+ - "${PAPERCLIP_DATA_DIR:-./data/docker-paperclip}:/paperclip"
@@ -0,0 +1,33 @@
1
+ services:
2
+ review:
3
+ build:
4
+ context: .
5
+ dockerfile: docker/untrusted-review/Dockerfile
6
+ init: true
7
+ tty: true
8
+ stdin_open: true
9
+ working_dir: /work
10
+ environment:
11
+ HOME: "/home/reviewer"
12
+ CODEX_HOME: "/home/reviewer/.codex"
13
+ CLAUDE_HOME: "/home/reviewer/.claude"
14
+ PAPERCLIP_HOME: "/home/reviewer/.paperclip-review"
15
+ OPENAI_API_KEY: "${OPENAI_API_KEY:-}"
16
+ ANTHROPIC_API_KEY: "${ANTHROPIC_API_KEY:-}"
17
+ GITHUB_TOKEN: "${GITHUB_TOKEN:-}"
18
+ ports:
19
+ - "${REVIEW_PAPERCLIP_PORT:-3100}:3100"
20
+ - "${REVIEW_VITE_PORT:-5173}:5173"
21
+ volumes:
22
+ - review-home:/home/reviewer
23
+ - review-work:/work
24
+ cap_drop:
25
+ - ALL
26
+ security_opt:
27
+ - no-new-privileges:true
28
+ tmpfs:
29
+ - /tmp:mode=1777,size=1g
30
+
31
+ volumes:
32
+ review-home:
33
+ review-work:
@@ -0,0 +1,38 @@
1
+ services:
2
+ db:
3
+ image: postgres:17-alpine
4
+ environment:
5
+ POSTGRES_USER: paperclip
6
+ POSTGRES_PASSWORD: paperclip
7
+ POSTGRES_DB: paperclip
8
+ healthcheck:
9
+ test: ["CMD-SHELL", "pg_isready -U paperclip -d paperclip"]
10
+ interval: 2s
11
+ timeout: 5s
12
+ retries: 30
13
+ ports:
14
+ - "5432:5432"
15
+ volumes:
16
+ - pgdata:/var/lib/postgresql/data
17
+
18
+ server:
19
+ build: .
20
+ ports:
21
+ - "3100:3100"
22
+ environment:
23
+ DATABASE_URL: postgres://paperclip:paperclip@db:5432/paperclip
24
+ PORT: "3100"
25
+ SERVE_UI: "true"
26
+ PAPERCLIP_DEPLOYMENT_MODE: "authenticated"
27
+ PAPERCLIP_DEPLOYMENT_EXPOSURE: "private"
28
+ PAPERCLIP_PUBLIC_URL: "${PAPERCLIP_PUBLIC_URL:-http://localhost:3100}"
29
+ BETTER_AUTH_SECRET: "${BETTER_AUTH_SECRET:?BETTER_AUTH_SECRET must be set}"
30
+ volumes:
31
+ - paperclip-data:/paperclip
32
+ depends_on:
33
+ db:
34
+ condition: service_healthy
35
+
36
+ volumes:
37
+ pgdata:
38
+ paperclip-data: