diff --git a/cli/CHANGELOG.md b/cli/CHANGELOG.md index 6bae020..d261b8a 100644 --- a/cli/CHANGELOG.md +++ b/cli/CHANGELOG.md @@ -1,5 +1,23 @@ # paperclipai +## 0.3.1 + +### Patch Changes + +- Stable release preparation for 0.3.1 +- Updated dependencies + - @paperclipai/adapter-utils@0.3.1 + - @paperclipai/adapter-claude-local@0.3.1 + - @paperclipai/adapter-codex-local@0.3.1 + - @paperclipai/adapter-cursor-local@0.3.1 + - @paperclipai/adapter-gemini-local@0.3.1 + - @paperclipai/adapter-openclaw-gateway@0.3.1 + - @paperclipai/adapter-opencode-local@0.3.1 + - @paperclipai/adapter-pi-local@0.3.1 + - @paperclipai/db@0.3.1 + - @paperclipai/shared@0.3.1 + - @paperclipai/server@0.3.1 + ## 0.3.0 ### Minor Changes diff --git a/cli/package.json b/cli/package.json index 089f5a5..4bda09e 100644 --- a/cli/package.json +++ b/cli/package.json @@ -1,6 +1,6 @@ { "name": "paperclipai", - "version": "0.3.0", + "version": "0.3.1", "description": "Paperclip CLI — orchestrate AI agent teams to run a business", "type": "module", "bin": { diff --git a/packages/adapter-utils/CHANGELOG.md b/packages/adapter-utils/CHANGELOG.md index dd4c015..76cabbd 100644 --- a/packages/adapter-utils/CHANGELOG.md +++ b/packages/adapter-utils/CHANGELOG.md @@ -1,5 +1,11 @@ # @paperclipai/adapter-utils +## 0.3.1 + +### Patch Changes + +- Stable release preparation for 0.3.1 + ## 0.3.0 ### Minor Changes diff --git a/packages/adapter-utils/package.json b/packages/adapter-utils/package.json index 4b264bf..3a908ee 100644 --- a/packages/adapter-utils/package.json +++ b/packages/adapter-utils/package.json @@ -1,6 +1,6 @@ { "name": "@paperclipai/adapter-utils", - "version": "0.3.0", + "version": "0.3.1", "type": "module", "exports": { ".": "./src/index.ts", diff --git a/packages/adapters/claude-local/CHANGELOG.md b/packages/adapters/claude-local/CHANGELOG.md index ac3bcac..b903558 100644 --- a/packages/adapters/claude-local/CHANGELOG.md +++ b/packages/adapters/claude-local/CHANGELOG.md @@ -1,5 +1,13 @@ # @paperclipai/adapter-claude-local +## 0.3.1 + +### Patch Changes + +- Stable release preparation for 0.3.1 +- Updated dependencies + - @paperclipai/adapter-utils@0.3.1 + ## 0.3.0 ### Minor Changes diff --git a/packages/adapters/claude-local/package.json b/packages/adapters/claude-local/package.json index f73390b..35a6d9e 100644 --- a/packages/adapters/claude-local/package.json +++ b/packages/adapters/claude-local/package.json @@ -1,6 +1,6 @@ { "name": "@paperclipai/adapter-claude-local", - "version": "0.3.0", + "version": "0.3.1", "type": "module", "exports": { ".": "./src/index.ts", diff --git a/packages/adapters/codex-local/CHANGELOG.md b/packages/adapters/codex-local/CHANGELOG.md index 8a4e2d1..45c143e 100644 --- a/packages/adapters/codex-local/CHANGELOG.md +++ b/packages/adapters/codex-local/CHANGELOG.md @@ -1,5 +1,13 @@ # @paperclipai/adapter-codex-local +## 0.3.1 + +### Patch Changes + +- Stable release preparation for 0.3.1 +- Updated dependencies + - @paperclipai/adapter-utils@0.3.1 + ## 0.3.0 ### Minor Changes diff --git a/packages/adapters/codex-local/package.json b/packages/adapters/codex-local/package.json index 8180104..4b28c72 100644 --- a/packages/adapters/codex-local/package.json +++ b/packages/adapters/codex-local/package.json @@ -1,6 +1,6 @@ { "name": "@paperclipai/adapter-codex-local", - "version": "0.3.0", + "version": "0.3.1", "type": "module", "exports": { ".": "./src/index.ts", diff --git a/packages/adapters/cursor-local/CHANGELOG.md b/packages/adapters/cursor-local/CHANGELOG.md index ae97efa..df26ccd 100644 --- a/packages/adapters/cursor-local/CHANGELOG.md +++ b/packages/adapters/cursor-local/CHANGELOG.md @@ -1,5 +1,13 @@ # @paperclipai/adapter-cursor-local +## 0.3.1 + +### Patch Changes + +- Stable release preparation for 0.3.1 +- Updated dependencies + - @paperclipai/adapter-utils@0.3.1 + ## 0.3.0 ### Minor Changes diff --git a/packages/adapters/cursor-local/package.json b/packages/adapters/cursor-local/package.json index 6743464..3561f0f 100644 --- a/packages/adapters/cursor-local/package.json +++ b/packages/adapters/cursor-local/package.json @@ -1,6 +1,6 @@ { "name": "@paperclipai/adapter-cursor-local", - "version": "0.3.0", + "version": "0.3.1", "type": "module", "exports": { ".": "./src/index.ts", diff --git a/packages/adapters/gemini-local/package.json b/packages/adapters/gemini-local/package.json index 6b214f7..1d482fb 100644 --- a/packages/adapters/gemini-local/package.json +++ b/packages/adapters/gemini-local/package.json @@ -1,6 +1,6 @@ { "name": "@paperclipai/adapter-gemini-local", - "version": "0.2.7", + "version": "0.3.1", "type": "module", "exports": { ".": "./src/index.ts", diff --git a/packages/adapters/openclaw-gateway/CHANGELOG.md b/packages/adapters/openclaw-gateway/CHANGELOG.md index 8b6357e..f78f518 100644 --- a/packages/adapters/openclaw-gateway/CHANGELOG.md +++ b/packages/adapters/openclaw-gateway/CHANGELOG.md @@ -1,5 +1,13 @@ # @paperclipai/adapter-openclaw-gateway +## 0.3.1 + +### Patch Changes + +- Stable release preparation for 0.3.1 +- Updated dependencies + - @paperclipai/adapter-utils@0.3.1 + ## 0.3.0 ### Minor Changes diff --git a/packages/adapters/openclaw-gateway/package.json b/packages/adapters/openclaw-gateway/package.json index c81ee74..323d09a 100644 --- a/packages/adapters/openclaw-gateway/package.json +++ b/packages/adapters/openclaw-gateway/package.json @@ -1,6 +1,6 @@ { "name": "@paperclipai/adapter-openclaw-gateway", - "version": "0.3.0", + "version": "0.3.1", "type": "module", "exports": { ".": "./src/index.ts", diff --git a/packages/adapters/opencode-local/CHANGELOG.md b/packages/adapters/opencode-local/CHANGELOG.md index 904b21d..9ccc9e8 100644 --- a/packages/adapters/opencode-local/CHANGELOG.md +++ b/packages/adapters/opencode-local/CHANGELOG.md @@ -1,5 +1,13 @@ # @paperclipai/adapter-opencode-local +## 0.3.1 + +### Patch Changes + +- Stable release preparation for 0.3.1 +- Updated dependencies + - @paperclipai/adapter-utils@0.3.1 + ## 0.3.0 ### Minor Changes diff --git a/packages/adapters/opencode-local/package.json b/packages/adapters/opencode-local/package.json index cf2d078..e281695 100644 --- a/packages/adapters/opencode-local/package.json +++ b/packages/adapters/opencode-local/package.json @@ -1,6 +1,6 @@ { "name": "@paperclipai/adapter-opencode-local", - "version": "0.3.0", + "version": "0.3.1", "type": "module", "exports": { ".": "./src/index.ts", diff --git a/packages/adapters/pi-local/CHANGELOG.md b/packages/adapters/pi-local/CHANGELOG.md index f7297fa..fb3c93a 100644 --- a/packages/adapters/pi-local/CHANGELOG.md +++ b/packages/adapters/pi-local/CHANGELOG.md @@ -1,5 +1,13 @@ # @paperclipai/adapter-pi-local +## 0.3.1 + +### Patch Changes + +- Stable release preparation for 0.3.1 +- Updated dependencies + - @paperclipai/adapter-utils@0.3.1 + ## 0.3.0 ### Minor Changes diff --git a/packages/adapters/pi-local/package.json b/packages/adapters/pi-local/package.json index 442d83d..c286f84 100644 --- a/packages/adapters/pi-local/package.json +++ b/packages/adapters/pi-local/package.json @@ -1,6 +1,6 @@ { "name": "@paperclipai/adapter-pi-local", - "version": "0.3.0", + "version": "0.3.1", "type": "module", "exports": { ".": "./src/index.ts", diff --git a/packages/db/CHANGELOG.md b/packages/db/CHANGELOG.md index 077cb65..03d3763 100644 --- a/packages/db/CHANGELOG.md +++ b/packages/db/CHANGELOG.md @@ -1,5 +1,13 @@ # @paperclipai/db +## 0.3.1 + +### Patch Changes + +- Stable release preparation for 0.3.1 +- Updated dependencies + - @paperclipai/shared@0.3.1 + ## 0.3.0 ### Minor Changes diff --git a/packages/db/package.json b/packages/db/package.json index 1dae4bd..f22d1e9 100644 --- a/packages/db/package.json +++ b/packages/db/package.json @@ -1,6 +1,6 @@ { "name": "@paperclipai/db", - "version": "0.3.0", + "version": "0.3.1", "type": "module", "exports": { ".": "./src/index.ts", diff --git a/packages/shared/CHANGELOG.md b/packages/shared/CHANGELOG.md index 492cee6..6ae4a3f 100644 --- a/packages/shared/CHANGELOG.md +++ b/packages/shared/CHANGELOG.md @@ -1,5 +1,11 @@ # @paperclipai/shared +## 0.3.1 + +### Patch Changes + +- Stable release preparation for 0.3.1 + ## 0.3.0 ### Minor Changes diff --git a/packages/shared/package.json b/packages/shared/package.json index 33452f6..3a844f1 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -1,6 +1,6 @@ { "name": "@paperclipai/shared", - "version": "0.3.0", + "version": "0.3.1", "type": "module", "exports": { ".": "./src/index.ts", diff --git a/releases/v0.3.1.md b/releases/v0.3.1.md new file mode 100644 index 0000000..7aa55bf --- /dev/null +++ b/releases/v0.3.1.md @@ -0,0 +1,54 @@ +# v0.3.1 + +> Released: 2026-03-12 + +## Highlights + +- **Gemini CLI adapter** — Full local adapter support for Google's Gemini CLI. Includes API-key detection, turn-limit handling, sandbox and approval modes, skill injection into `~/.gemini/`, and yolo-mode default. ([#452](https://github.com/paperclipai/paperclip/pull/452), [#656](https://github.com/paperclipai/paperclip/pull/656), @aaaaron) +- **Run transcript polish** — Run transcripts render markdown, fold command stdout, redact home paths and user identities, and display humanized event labels across both detail and live surfaces. ([#648](https://github.com/paperclipai/paperclip/pull/648), [#695](https://github.com/paperclipai/paperclip/pull/695)) +- **Inbox refinements** — Improved tab behavior, badge counts aligned with visible unread items, better mobile layout, and smoother new-issue submit state. ([#613](https://github.com/paperclipai/paperclip/pull/613)) +- **Improved onboarding wizard** — Onboarding now shows Claude Code and Codex as recommended adapters, collapses other types, and features animated step transitions with clickable tabs. Adapter environment checks animate on success and show debug output only on failure. ([#700](https://github.com/paperclipai/paperclip/pull/700)) + +## Improvements + +- **Instance heartbeat settings sidebar** — View and manage heartbeat configuration directly from the instance settings page with compact grouped run lists. ([#697](https://github.com/paperclipai/paperclip/pull/697)) +- **Project and agent configuration tabs** — New tabbed configuration UI for projects and agents, including execution workspace policy settings. ([#613](https://github.com/paperclipai/paperclip/pull/613)) +- **Agent runs tab** — Agent detail pages now include a dedicated runs tab. +- **Configurable attachment content types** — The `PAPERCLIP_ALLOWED_ATTACHMENT_TYPES` env var lets operators control which file types can be uploaded. ([#495](https://github.com/paperclipai/paperclip/pull/495), @subhendukundu) +- **Default max turns raised to 300** — Agents now default to 300 max turns instead of the previous limit. ([#701](https://github.com/paperclipai/paperclip/pull/701)) +- **Issue creator shown in sidebar** — The issue properties pane now displays who created each issue. ([#145](https://github.com/paperclipai/paperclip/pull/145), @cschneid) +- **Company-aware 404 handling** — The UI now shows company-scoped not-found pages instead of a generic error. +- **Tools for Worktree workflow for developers** — New `paperclipai worktree:make` command provisions isolated development instances with their own database, secrets, favicon branding, and git hooks. Worktrees support minimal seed mode, start-point selection, and automatic workspace rebinding. ([#496](https://github.com/paperclipai/paperclip/pull/496), [#530](https://github.com/paperclipai/paperclip/pull/530), [#545](https://github.com/paperclipai/paperclip/pull/545)) + +## Fixes + +- **Gemini Docker build** — Include the Gemini adapter manifest in the Docker deps stage so production builds succeed. ([#706](https://github.com/paperclipai/paperclip/pull/706), @zvictor) +- **Approval retries made idempotent** — Duplicate approval submissions no longer create duplicate records. ([#502](https://github.com/paperclipai/paperclip/pull/502), @davidahmann) +- **Heartbeat cost recording** — Costs are now routed through `costService` instead of being recorded inline, fixing missing cost attribution. ([#386](https://github.com/paperclipai/paperclip/pull/386), @domocarroll) +- **Claude Code env var leak** — Child adapter processes no longer inherit Claude Code's internal environment variables. ([#485](https://github.com/paperclipai/paperclip/pull/485), @jknair) +- **`parentId` query filter** — The issues list endpoint now correctly applies the `parentId` filter. ([#491](https://github.com/paperclipai/paperclip/pull/491), @lazmo88) +- **Remove `Cmd+1..9` shortcut** — The company-switch keyboard shortcut conflicted with browser tab switching and has been removed. ([#628](https://github.com/paperclipai/paperclip/pull/628), @STRML) +- **IME composition Enter** — Pressing Enter during IME composition in the new-issue title no longer moves focus prematurely. ([#578](https://github.com/paperclipai/paperclip/pull/578), @kaonash) +- **Restart hint after hostname change** — The CLI now reminds users to restart the server after changing allowed hostnames. ([#549](https://github.com/paperclipai/paperclip/pull/549), @mvanhorn) +- **Default `dangerouslySkipPermissions` for unattended agents** — Agents running without a terminal now default to skipping permission prompts instead of hanging. ([#388](https://github.com/paperclipai/paperclip/pull/388), @ohld) +- **Remove stale `paperclip` property from OpenClaw Gateway** — Cleaned up an invalid agent parameter that caused warnings. ([#626](https://github.com/paperclipai/paperclip/pull/626), @openagen) +- **Issue description overflow** — Long descriptions no longer break the layout. +- **Worktree JWT persistence** — Environment-sensitive JWT config is now correctly carried into worktree instances. +- **Dev migration prompt** — Fixed embedded `db:migrate` flow for local development. +- **Markdown link dialog positioning** — The link insertion dialog no longer renders off-screen. +- **Pretty logger metadata** — Server log metadata stays on one line instead of wrapping. + +## Upgrade Guide + +Two new database migrations (`0026`, `0027`) will run automatically on startup: + +- **Migration 0026** adds the `workspace_runtime_services` table for worktree-aware runtime support. +- **Migration 0027** adds `execution_workspace_settings` to issues and `execution_workspace_policy` to projects. + +Both are additive (new table and new columns) — no existing data is modified. Standard `paperclipai` startup will apply them automatically. + +## Contributors + +Thank you to everyone who contributed to this release! + +@aaaaron, @adamrobbie-nudge, @cschneid, @davidahmann, @domocarroll, @jknair, @kaonash, @lazmo88, @mvanhorn, @ohld, @openagen, @STRML, @subhendukundu, @zvictor diff --git a/scripts/release-lib.sh b/scripts/release-lib.sh index d2a3352..7a4df5f 100644 --- a/scripts/release-lib.sh +++ b/scripts/release-lib.sh @@ -196,6 +196,36 @@ npm_version_exists() { [ "$resolved" = "$version" ] } +npm_package_version_exists() { + local package_name="$1" + local version="$2" + local resolved + + resolved="$(npm view "${package_name}@${version}" version 2>/dev/null || true)" + [ "$resolved" = "$version" ] +} + +wait_for_npm_package_version() { + local package_name="$1" + local version="$2" + local attempts="${3:-12}" + local delay_seconds="${4:-5}" + local attempt=1 + + while [ "$attempt" -le "$attempts" ]; do + if npm_package_version_exists "$package_name" "$version"; then + return 0 + fi + + if [ "$attempt" -lt "$attempts" ]; then + sleep "$delay_seconds" + fi + attempt=$((attempt + 1)) + done + + return 1 +} + require_clean_worktree() { if [ -n "$(git -C "$REPO_ROOT" status --porcelain)" ]; then release_fail "working tree is not clean. Commit, stash, or remove changes before releasing." diff --git a/scripts/release.sh b/scripts/release.sh index 555a674..5e64fa9 100755 --- a/scripts/release.sh +++ b/scripts/release.sh @@ -181,10 +181,12 @@ for (const rel of roots) { rows.sort((a, b) => a[0].localeCompare(b[0])); for (const [dir, name] of rows) { - const key = `${dir}\t${name}`; + const pkgPath = path.join(root, dir, 'package.json'); + const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8')); + const key = `${dir}\t${name}\t${pkg.version}`; if (seen.has(key)) continue; seen.add(key); - process.stdout.write(`${dir}\t${name}\n`); + process.stdout.write(`${dir}\t${name}\t${pkg.version}\n`); } NODE } @@ -356,6 +358,8 @@ if [ "$canary" = true ]; then fi fi +VERSIONED_PACKAGE_INFO="$(list_public_package_info)" + VERSION_IN_CLI_PACKAGE="$(node -e "console.log(require('$CLI_DIR/package.json').version)")" if [ "$VERSION_IN_CLI_PACKAGE" != "$TARGET_PUBLISH_VERSION" ]; then release_fail "versioning drift detected. Expected $TARGET_PUBLISH_VERSION but found $VERSION_IN_CLI_PACKAGE." @@ -403,6 +407,31 @@ else npx changeset publish release_info " ✓ Published ${TARGET_PUBLISH_VERSION} under dist-tag latest" fi + + release_info "" + release_info "==> Post-publish verification: Confirming npm package availability..." + VERIFY_ATTEMPTS="${NPM_PUBLISH_VERIFY_ATTEMPTS:-12}" + VERIFY_DELAY_SECONDS="${NPM_PUBLISH_VERIFY_DELAY_SECONDS:-5}" + MISSING_PUBLISHED_PACKAGES="" + while IFS=$'\t' read -r pkg_dir pkg_name pkg_version; do + [ -z "$pkg_name" ] && continue + release_info " Checking $pkg_name@$pkg_version" + if wait_for_npm_package_version "$pkg_name" "$pkg_version" "$VERIFY_ATTEMPTS" "$VERIFY_DELAY_SECONDS"; then + release_info " ✓ Found on npm" + continue + fi + + if [ -n "$MISSING_PUBLISHED_PACKAGES" ]; then + MISSING_PUBLISHED_PACKAGES="${MISSING_PUBLISHED_PACKAGES}, " + fi + MISSING_PUBLISHED_PACKAGES="${MISSING_PUBLISHED_PACKAGES}${pkg_name}@${pkg_version}" + done <<< "$VERSIONED_PACKAGE_INFO" + + if [ -n "$MISSING_PUBLISHED_PACKAGES" ]; then + release_fail "publish completed but npm never exposed: $MISSING_PUBLISHED_PACKAGES. Inspect the changeset publish output before treating this release as good." + fi + + release_info " ✓ Verified all versioned packages are available on npm" fi release_info "" diff --git a/server/CHANGELOG.md b/server/CHANGELOG.md index 7749b09..56110f9 100644 --- a/server/CHANGELOG.md +++ b/server/CHANGELOG.md @@ -1,5 +1,22 @@ # @paperclipai/server +## 0.3.1 + +### Patch Changes + +- Stable release preparation for 0.3.1 +- Updated dependencies + - @paperclipai/adapter-utils@0.3.1 + - @paperclipai/adapter-claude-local@0.3.1 + - @paperclipai/adapter-codex-local@0.3.1 + - @paperclipai/adapter-cursor-local@0.3.1 + - @paperclipai/adapter-gemini-local@0.3.1 + - @paperclipai/adapter-openclaw-gateway@0.3.1 + - @paperclipai/adapter-opencode-local@0.3.1 + - @paperclipai/adapter-pi-local@0.3.1 + - @paperclipai/db@0.3.1 + - @paperclipai/shared@0.3.1 + ## 0.3.0 ### Minor Changes diff --git a/server/package.json b/server/package.json index cd30cf1..9ea3bf2 100644 --- a/server/package.json +++ b/server/package.json @@ -1,6 +1,6 @@ { "name": "@paperclipai/server", - "version": "0.3.0", + "version": "0.3.1", "type": "module", "exports": { ".": "./src/index.ts"