Compare commits

...

6 Commits

Author SHA1 Message Date
Dotta
09d2ef1a37 fix: restore docs deleted in v0.2.3 release, add Paperclip branding
- Restored docs/ directory that was accidentally deleted by `git add -A`
  in the v0.2.3 release script
- Replaced generic "P" favicon with actual paperclip icon using brand
  primary color (#2563EB)
- Added light/dark logo SVGs for Mintlify navbar (paperclip icon + wordmark)
- Updated docs.json with logo configuration for dark/light mode
- Fixed release.sh to stage only release-related files instead of `git add -A`
  to prevent sweeping unrelated changes into release commits

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 15:49:43 -06:00
Dotta
d18312d6de fix: bundle UI dist into server package for npm publishing
The server's static-ui mode resolves the UI dist path relative to its
own directory. In the monorepo it finds ../../ui/dist, but when published
to npm the UI package isn't available.

- server/src/app.ts: try ../ui-dist (published) then ../../ui/dist (dev),
  gracefully degrade to API-only if neither exists
- server/package.json: include ui-dist/ in published files
- scripts/release.sh: build UI and copy dist to server/ui-dist before
  publishing, clean up in restore step

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 15:45:45 -06:00
Dotta
28bf5e9e9b chore: release v0.2.3 2026-03-03 15:39:13 -06:00
Dotta
925680f736 fix: include migration files in @paperclipai/db and improve server error msg
- db build now copies src/migrations/ to dist/migrations/ after tsc,
  so SQL + meta JSON files are included in the published package.
  Without this, `import("@paperclipai/server")` fails at runtime with
  ENOENT when scanning for migration files.

- CLI's importServerEntry() now distinguishes between "module not found"
  and "server crashed during startup" for clearer error messages.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 15:30:50 -06:00
Dotta
4e9c1d83be Fix domain: paperclip.dev -> paperclip.ing
Updated all references across README and doc plans.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 15:25:19 -06:00
Dotta
b2737b9571 chore: release v0.2.2 2026-03-03 15:10:25 -06:00
27 changed files with 215 additions and 29 deletions

View File

@@ -4,7 +4,7 @@
<p align="center"> <p align="center">
<a href="#quickstart"><strong>Quickstart</strong></a> &middot; <a href="#quickstart"><strong>Quickstart</strong></a> &middot;
<a href="https://paperclip.dev/docs"><strong>Docs</strong></a> &middot; <a href="https://paperclip.ing/docs"><strong>Docs</strong></a> &middot;
<a href="https://github.com/paperclipai/paperclip"><strong>GitHub</strong></a> &middot; <a href="https://github.com/paperclipai/paperclip"><strong>GitHub</strong></a> &middot;
<a href="https://discord.gg/paperclip"><strong>Discord</strong></a> <a href="https://discord.gg/paperclip"><strong>Discord</strong></a>
</p> </p>

View File

@@ -1,5 +1,33 @@
# paperclipai # paperclipai
## 0.2.3
### Patch Changes
- Version bump (patch)
- Updated dependencies
- @paperclipai/shared@0.2.3
- @paperclipai/adapter-utils@0.2.3
- @paperclipai/db@0.2.3
- @paperclipai/adapter-claude-local@0.2.3
- @paperclipai/adapter-codex-local@0.2.3
- @paperclipai/adapter-openclaw@0.2.3
- @paperclipai/server@0.2.3
## 0.2.2
### Patch Changes
- Version bump (patch)
- Updated dependencies
- @paperclipai/shared@0.2.2
- @paperclipai/adapter-utils@0.2.2
- @paperclipai/db@0.2.2
- @paperclipai/adapter-claude-local@0.2.2
- @paperclipai/adapter-codex-local@0.2.2
- @paperclipai/adapter-openclaw@0.2.2
- @paperclipai/server@0.2.2
## 0.2.1 ## 0.2.1
### Patch Changes ### Patch Changes

View File

@@ -1,6 +1,6 @@
{ {
"name": "paperclipai", "name": "paperclipai",
"version": "0.2.1", "version": "0.2.3",
"description": "Paperclip CLI — orchestrate AI agent teams to run a business", "description": "Paperclip CLI — orchestrate AI agent teams to run a business",
"type": "module", "type": "module",
"bin": { "bin": {

View File

@@ -106,9 +106,15 @@ async function importServerEntry(): Promise<void> {
try { try {
await import("@paperclipai/server"); await import("@paperclipai/server");
} catch (err) { } catch (err) {
if (isModuleNotFoundError(err)) {
throw new Error(
`Could not locate a Paperclip server entrypoint.\n` +
`Tried: ${devEntry}, @paperclipai/server\n` +
`${formatError(err)}`,
);
}
throw new Error( throw new Error(
`Could not locate a Paperclip server entrypoint.\n` + `Paperclip server failed to start.\n` +
`Tried: ${devEntry}, @paperclipai/server\n` +
`${formatError(err)}`, `${formatError(err)}`,
); );
} }

View File

@@ -23,7 +23,7 @@ const DATA_DIR_OPTION_HELP =
program program
.name("paperclipai") .name("paperclipai")
.description("Paperclip CLI — setup, diagnose, and configure your instance") .description("Paperclip CLI — setup, diagnose, and configure your instance")
.version("0.2.0"); .version("0.2.3");
program.hook("preAction", (_thisCommand, actionCommand) => { program.hook("preAction", (_thisCommand, actionCommand) => {
const options = actionCommand.optsWithGlobals() as DataDirOptionLike; const options = actionCommand.optsWithGlobals() as DataDirOptionLike;

View File

@@ -127,7 +127,7 @@ Response:
}, },
"onboarding": { "onboarding": {
"instructions": "You are being invited to join Acme Corp as an employee agent...", "instructions": "You are being invited to join Acme Corp as an employee agent...",
"skillUrl": "https://app.paperclip.dev/skills/paperclip/SKILL.md", "skillUrl": "https://app.paperclip.ing/skills/paperclip/SKILL.md",
"requiredFields": { "requiredFields": {
"name": "Your display name", "name": "Your display name",
"adapterType": "How Paperclip should send you heartbeats", "adapterType": "How Paperclip should send you heartbeats",

View File

@@ -577,7 +577,7 @@ The Company Store is a registry for discovering and installing modules and templ
"id": "startup-in-a-box", "id": "startup-in-a-box",
"name": "Startup in a Box", "name": "Startup in a Box",
"description": "5-agent startup team", "description": "5-agent startup team",
"url": "https://store.paperclip.dev/templates/startup-in-a-box.json", "url": "https://store.paperclip.ing/templates/startup-in-a-box.json",
"tags": ["startup", "team"] "tags": ["startup", "team"]
} }
] ]

View File

@@ -9,6 +9,10 @@
"dark": "#1D4ED8" "dark": "#1D4ED8"
}, },
"favicon": "/favicon.svg", "favicon": "/favicon.svg",
"logo": {
"dark": "/images/logo-dark.svg",
"light": "/images/logo-light.svg"
},
"topbarLinks": [ "topbarLinks": [
{ {
"name": "GitHub", "name": "GitHub",

View File

@@ -1,4 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" fill="none"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="-4 -4 32 32" fill="none" stroke-linecap="round" stroke-linejoin="round">
<rect width="32" height="32" rx="6" fill="#2563EB"/> <rect x="-4" y="-4" width="32" height="32" rx="6" fill="#2563EB"/>
<path d="M10 8h6a6 6 0 0 1 0 12h-2v4h-4V8zm4 8h2a2 2 0 0 0 0-4h-2v4z" fill="white"/> <path stroke="#ffffff" stroke-width="2" d="m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 222 B

After

Width:  |  Height:  |  Size: 367 B

View File

@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" width="140" height="32" viewBox="0 0 140 32" fill="none">
<g stroke-linecap="round" stroke-linejoin="round">
<path stroke="#e4e4e7" stroke-width="2" d="m18 4-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551"/>
</g>
<text x="32" y="22" font-family="system-ui, -apple-system, sans-serif" font-size="18" font-weight="600" fill="#e4e4e7">Paperclip</text>
</svg>

After

Width:  |  Height:  |  Size: 474 B

View File

@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" width="140" height="32" viewBox="0 0 140 32" fill="none">
<g stroke-linecap="round" stroke-linejoin="round">
<path stroke="#18181b" stroke-width="2" d="m18 4-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551"/>
</g>
<text x="32" y="22" font-family="system-ui, -apple-system, sans-serif" font-size="18" font-weight="600" fill="#18181b">Paperclip</text>
</svg>

After

Width:  |  Height:  |  Size: 474 B

View File

@@ -1,5 +1,17 @@
# @paperclipai/adapter-utils # @paperclipai/adapter-utils
## 0.2.3
### Patch Changes
- Version bump (patch)
## 0.2.2
### Patch Changes
- Version bump (patch)
## 0.2.1 ## 0.2.1
### Patch Changes ### Patch Changes

View File

@@ -1,6 +1,6 @@
{ {
"name": "@paperclipai/adapter-utils", "name": "@paperclipai/adapter-utils",
"version": "0.2.1", "version": "0.2.3",
"type": "module", "type": "module",
"exports": { "exports": {
".": "./src/index.ts", ".": "./src/index.ts",

View File

@@ -1,5 +1,21 @@
# @paperclipai/adapter-claude-local # @paperclipai/adapter-claude-local
## 0.2.3
### Patch Changes
- Version bump (patch)
- Updated dependencies
- @paperclipai/adapter-utils@0.2.3
## 0.2.2
### Patch Changes
- Version bump (patch)
- Updated dependencies
- @paperclipai/adapter-utils@0.2.2
## 0.2.1 ## 0.2.1
### Patch Changes ### Patch Changes

View File

@@ -1,6 +1,6 @@
{ {
"name": "@paperclipai/adapter-claude-local", "name": "@paperclipai/adapter-claude-local",
"version": "0.2.1", "version": "0.2.3",
"type": "module", "type": "module",
"exports": { "exports": {
".": "./src/index.ts", ".": "./src/index.ts",

View File

@@ -1,5 +1,21 @@
# @paperclipai/adapter-codex-local # @paperclipai/adapter-codex-local
## 0.2.3
### Patch Changes
- Version bump (patch)
- Updated dependencies
- @paperclipai/adapter-utils@0.2.3
## 0.2.2
### Patch Changes
- Version bump (patch)
- Updated dependencies
- @paperclipai/adapter-utils@0.2.2
## 0.2.1 ## 0.2.1
### Patch Changes ### Patch Changes

View File

@@ -1,6 +1,6 @@
{ {
"name": "@paperclipai/adapter-codex-local", "name": "@paperclipai/adapter-codex-local",
"version": "0.2.1", "version": "0.2.3",
"type": "module", "type": "module",
"exports": { "exports": {
".": "./src/index.ts", ".": "./src/index.ts",

View File

@@ -1,5 +1,21 @@
# @paperclipai/adapter-openclaw # @paperclipai/adapter-openclaw
## 0.2.3
### Patch Changes
- Version bump (patch)
- Updated dependencies
- @paperclipai/adapter-utils@0.2.3
## 0.2.2
### Patch Changes
- Version bump (patch)
- Updated dependencies
- @paperclipai/adapter-utils@0.2.2
## 0.2.1 ## 0.2.1
### Patch Changes ### Patch Changes

View File

@@ -1,6 +1,6 @@
{ {
"name": "@paperclipai/adapter-openclaw", "name": "@paperclipai/adapter-openclaw",
"version": "0.2.1", "version": "0.2.3",
"type": "module", "type": "module",
"exports": { "exports": {
".": "./src/index.ts", ".": "./src/index.ts",

View File

@@ -1,5 +1,21 @@
# @paperclipai/db # @paperclipai/db
## 0.2.3
### Patch Changes
- Version bump (patch)
- Updated dependencies
- @paperclipai/shared@0.2.3
## 0.2.2
### Patch Changes
- Version bump (patch)
- Updated dependencies
- @paperclipai/shared@0.2.2
## 0.2.1 ## 0.2.1
### Patch Changes ### Patch Changes

View File

@@ -1,6 +1,6 @@
{ {
"name": "@paperclipai/db", "name": "@paperclipai/db",
"version": "0.2.1", "version": "0.2.3",
"type": "module", "type": "module",
"exports": { "exports": {
".": "./src/index.ts", ".": "./src/index.ts",
@@ -25,7 +25,7 @@
"dist" "dist"
], ],
"scripts": { "scripts": {
"build": "tsc", "build": "tsc && cp -r src/migrations dist/migrations",
"clean": "rm -rf dist", "clean": "rm -rf dist",
"typecheck": "tsc --noEmit", "typecheck": "tsc --noEmit",
"generate": "tsc -p tsconfig.json && drizzle-kit generate", "generate": "tsc -p tsconfig.json && drizzle-kit generate",

View File

@@ -1,5 +1,17 @@
# @paperclipai/shared # @paperclipai/shared
## 0.2.3
### Patch Changes
- Version bump (patch)
## 0.2.2
### Patch Changes
- Version bump (patch)
## 0.2.1 ## 0.2.1
### Patch Changes ### Patch Changes

View File

@@ -1,6 +1,6 @@
{ {
"name": "@paperclipai/shared", "name": "@paperclipai/shared",
"version": "0.2.1", "version": "0.2.3",
"type": "module", "type": "module",
"exports": { "exports": {
".": "./src/index.ts", ".": "./src/index.ts",

View File

@@ -125,7 +125,7 @@ echo ""
echo "==> Step 4/7: Building all packages..." echo "==> Step 4/7: Building all packages..."
cd "$REPO_ROOT" cd "$REPO_ROOT"
# Build packages in dependency order (excluding UI and CLI) # Build packages in dependency order (excluding CLI)
pnpm --filter @paperclipai/shared build pnpm --filter @paperclipai/shared build
pnpm --filter @paperclipai/adapter-utils build pnpm --filter @paperclipai/adapter-utils build
pnpm --filter @paperclipai/db build pnpm --filter @paperclipai/db build
@@ -133,7 +133,12 @@ pnpm --filter @paperclipai/adapter-claude-local build
pnpm --filter @paperclipai/adapter-codex-local build pnpm --filter @paperclipai/adapter-codex-local build
pnpm --filter @paperclipai/adapter-openclaw build pnpm --filter @paperclipai/adapter-openclaw build
pnpm --filter @paperclipai/server build pnpm --filter @paperclipai/server build
echo " ✓ All packages built"
# Build UI and bundle into server package for static serving
pnpm --filter @paperclipai/ui build
rm -rf "$REPO_ROOT/server/ui-dist"
cp -r "$REPO_ROOT/ui/dist" "$REPO_ROOT/server/ui-dist"
echo " ✓ All packages built (including UI)"
# ── Step 5: Build CLI bundle ───────────────────────────────────────────────── # ── Step 5: Build CLI bundle ─────────────────────────────────────────────────
@@ -183,8 +188,16 @@ if [ -f "$CLI_DIR/README.md" ]; then
rm "$CLI_DIR/README.md" rm "$CLI_DIR/README.md"
fi fi
# Commit all changes # Remove UI dist bundled into server for publishing
git add -A rm -rf "$REPO_ROOT/server/ui-dist"
# Stage only release-related files (avoid sweeping unrelated changes with -A)
git add \
.changeset/ \
'**/CHANGELOG.md' \
'**/package.json' \
cli/src/index.ts \
server/ui-dist
git commit -m "chore: release v$NEW_VERSION" git commit -m "chore: release v$NEW_VERSION"
git tag "v$NEW_VERSION" git tag "v$NEW_VERSION"
echo " ✓ Committed and tagged v$NEW_VERSION" echo " ✓ Committed and tagged v$NEW_VERSION"

View File

@@ -1,5 +1,31 @@
# @paperclipai/server # @paperclipai/server
## 0.2.3
### Patch Changes
- Version bump (patch)
- Updated dependencies
- @paperclipai/shared@0.2.3
- @paperclipai/adapter-utils@0.2.3
- @paperclipai/db@0.2.3
- @paperclipai/adapter-claude-local@0.2.3
- @paperclipai/adapter-codex-local@0.2.3
- @paperclipai/adapter-openclaw@0.2.3
## 0.2.2
### Patch Changes
- Version bump (patch)
- Updated dependencies
- @paperclipai/shared@0.2.2
- @paperclipai/adapter-utils@0.2.2
- @paperclipai/db@0.2.2
- @paperclipai/adapter-claude-local@0.2.2
- @paperclipai/adapter-codex-local@0.2.2
- @paperclipai/adapter-openclaw@0.2.2
## 0.2.1 ## 0.2.1
### Patch Changes ### Patch Changes

View File

@@ -1,6 +1,6 @@
{ {
"name": "@paperclipai/server", "name": "@paperclipai/server",
"version": "0.2.1", "version": "0.2.3",
"type": "module", "type": "module",
"exports": { "exports": {
".": "./src/index.ts" ".": "./src/index.ts"
@@ -17,7 +17,8 @@
"types": "./dist/index.d.ts" "types": "./dist/index.d.ts"
}, },
"files": [ "files": [
"dist" "dist",
"ui-dist"
], ],
"scripts": { "scripts": {
"dev": "tsx src/index.ts", "dev": "tsx src/index.ts",

View File

@@ -124,12 +124,20 @@ export async function createApp(
const __dirname = path.dirname(fileURLToPath(import.meta.url)); const __dirname = path.dirname(fileURLToPath(import.meta.url));
if (opts.uiMode === "static") { if (opts.uiMode === "static") {
// Serve built UI from ui/dist in production. // Try published location first (server/ui-dist/), then monorepo dev location (../../ui/dist)
const uiDist = path.resolve(__dirname, "../../ui/dist"); const candidates = [
app.use(express.static(uiDist)); path.resolve(__dirname, "../ui-dist"),
app.get(/.*/, (_req, res) => { path.resolve(__dirname, "../../ui/dist"),
res.sendFile(path.join(uiDist, "index.html")); ];
}); const uiDist = candidates.find((p) => fs.existsSync(path.join(p, "index.html")));
if (uiDist) {
app.use(express.static(uiDist));
app.get(/.*/, (_req, res) => {
res.sendFile(path.join(uiDist, "index.html"));
});
} else {
console.warn("[paperclip] UI dist not found; running in API-only mode");
}
} }
if (opts.uiMode === "vite-dev") { if (opts.uiMode === "vite-dev") {