Commit Graph

318 Commits

Author SHA1 Message Date
Dotta
0b6699a6ca chore: add clean onboarding test scripts
Scripts to test onboarding from scratch in isolated temp directories —
one via git clone + pnpm, one via npx from npm registry.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 13:46:27 -06:00
Dotta
e8acd6a8b0 Add bump-and-publish script for one-command npm releases
Combines version bump, build, publish, restore, commit, and tag into
a single ./scripts/bump-and-publish.sh command. Supports --dry-run.
Also restores cli/package.json to dev format after v0.1.1 publish.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 13:46:06 -06:00
Dotta
28a33d1359 chore: bump version to 0.1.1 2026-03-03 13:41:02 -06:00
Dotta
e3f0f9981b Delay first timer heartbeat until interval elapses 2026-03-03 13:39:03 -06:00
Dotta
510a5ee1a7 fix: replace DialogOverlay with plain div to unblock onboarding scroll
Radix's DialogOverlay wraps content in RemoveScroll, which blocks wheel
events on elements not registered as DialogPrimitive.Content. Since the
onboarding wizard uses a custom layout (not DialogContent), scroll events
on the form container were being swallowed. Replacing with a plain div
preserves the background appearance without the scroll-locking behavior.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 13:21:37 -06:00
Dotta
778fc3416f Fix agent API URL injection for auto-selected server ports 2026-03-03 13:13:47 -06:00
Dotta
2e4481fc26 Fix onboarding duplicate wake run and set 1h CEO heartbeat 2026-03-03 13:10:06 -06:00
Dotta
d232858afe fix: allow onboarding wizard pane to scroll when content overflows
The inner content wrapper in the onboarding form used flex-shrink default (1),
causing it to compress instead of overflowing the scroll container. Adding
shrink-0 prevents flex compression and lets overflow-y-auto work correctly.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 13:05:35 -06:00
Dotta
771f7f07f4 Fix adapter diagnostics text overflow in onboarding and config UI 2026-03-03 13:02:08 -06:00
Dotta
5346a4faef fix: correct pnpm filter name in db:backup script
The filter used `@paperclip/db` which doesn't exist — the package is
`@paperclipai/db`. This caused "No projects matched the filters".

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 13:01:00 -06:00
Dotta
9513bef7e7 Improve onboarding adapter diagnostics with live hello probes 2026-03-03 12:51:42 -06:00
Dotta
0810101fda Set codex-local creation defaults for model and sandbox bypass 2026-03-03 12:41:50 -06:00
Dotta
8351f7f1bd Auto-create missing cwd for claude_local and codex_local 2026-03-03 12:29:32 -06:00
Dotta
01210cef49 fix: onboarding step 3 description textarea scrolling and auto-grow
The description textarea in onboarding step 3 couldn't scroll and was too
short for the default content. Added auto-grow behavior that resizes from
120px up to 300px based on content, with overflow scrolling beyond the cap.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 12:26:28 -06:00
Dotta
eafacd4d55 ui: deduplicate live run from comments timeline
When an issue has an active running run, the same run was appearing both
as a live widget and as a run entry in the comments timeline. Filter out
runs shown by the live widget from the timeline linkedRuns to prevent
this duplication.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 12:19:26 -06:00
Dotta
b5e2433822 feat(cli): add --yes flag to onboard for non-interactive quickstart
Skip the setup path prompt and auto-start the server when --yes is
passed, enabling fully non-interactive onboarding with local defaults.
Opens the browser automatically on server listen.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 12:18:25 -06:00
Dotta
313a4aa36a Fix onboarding step reset after company creation 2026-03-03 12:16:05 -06:00
Dotta
31cab6efd2 ui: persist issue properties pane visibility in localStorage
Store the open/closed state of the properties panel in localStorage
so it persists across navigations, issues, and companies.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 12:07:01 -06:00
Dotta
fd90723902 ui: persist onboarding wizard across route redirects 2026-03-03 12:03:23 -06:00
Dotta
82c3080525 Fix issue live-run routes bypassing agent id normalizer 2026-03-03 12:00:03 -06:00
Dotta
9248766e4e ui: keep first-run onboarding mounted during company creation 2026-03-03 11:45:54 -06:00
Dotta
ef28f048db Backfill issue live run widget logs from persisted run log 2026-03-03 11:37:56 -06:00
Dotta
88149bbd29 ui: show no-agents banner on dashboard with link to onboarding step 2
When a company has no agents (e.g. user exited onboarding early), the
dashboard now shows an amber banner: "You have no agents. Create one
here" that opens the onboarding wizard directly at step 2 (agent
creation), skipping the company creation step.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 11:37:19 -06:00
Dotta
1301bdd18a ui: add tooltip to Working Directory field in onboarding wizard
Adds a question mark hint icon next to the "Working directory" label
explaining that users should create a dedicated folder for their agents.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 11:31:48 -06:00
Dotta
2ac47ff4cb ui: add Cursor adapter option and mark non-functional adapters as Coming Soon
Only Claude Code and Codex are selectable. OpenClaw, Cursor, Shell Command,
and HTTP Webhook are shown as disabled with "Coming soon" across all adapter
selection UIs: onboarding wizard, agent config form, and invite landing page.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 11:29:34 -06:00
Dotta
5f37b70be5 ui/server: start no-company flow in onboarding and remove auto-seed 2026-03-03 11:25:56 -06:00
Dotta
4292c28654 feat: auto-open browser after onboard completes
Set PAPERCLIP_OPEN_ON_LISTEN env flag when onboard triggers a run, and
open the browser to the UI URL once the server starts listening. Uses
the `open` package for cross-platform browser launching.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 11:22:18 -06:00
Dotta
0cba672c25 ui: memoize issue timeline rendering in comment thread 2026-03-03 11:21:38 -06:00
Dotta
996a6fcd57 server: seed first company and inline startup log fields 2026-03-03 11:11:04 -06:00
Dotta
7317135679 Fix issue live run widget fallback on issue detail 2026-03-03 11:06:41 -06:00
Dotta
9b4e808a27 cli: enable ui dev middleware for source server entrypoint 2026-03-03 11:01:45 -06:00
Dotta
11d42256a8 server: buffer embedded postgres logs and simplify startup message 2026-03-03 10:56:07 -06:00
Dotta
c77e2b3c19 server: auto-apply embedded postgres migrations on first run 2026-03-03 10:49:18 -06:00
Dotta
20737e2a11 cli/server: harden run startup for port conflicts and entrypoint loading 2026-03-03 10:41:31 -06:00
Dotta
f640b0445d cli: update banner art and simplify onboard help text
Switch to block-style ASCII art for the PAPERCLIP banner and use
unicode box-drawing separator. Shorten the onboard outro run hint.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 10:37:14 -06:00
Dotta
3248974435 cli: add quickstart onboarding flow and config-scoped jwt env handling 2026-03-03 10:24:34 -06:00
Dotta
5c07bdafc5 cli: add PAPERCLIP banner to onboard doctor configure 2026-03-03 10:15:25 -06:00
Dotta
98964b7c01 chore: ignore .paperclip-local directory
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 10:09:45 -06:00
Dotta
8873dd793f fix(ui): fix config save button persisting after save on agent configure page
The parent query for agent detail uses routeAgentRef (URL key like
"claudecoder") in its cache key, but ConfigurationTab and rollbackConfig
only invalidated by agent.id (UUID). This meant the refetch never fired
when navigating by URL key, so the dirty overlay was never cleared and the
save button stayed visible indefinitely.

Add urlKey-based invalidation to match the pattern already used by other
mutations in the parent component.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 10:09:15 -06:00
Dotta
c1f0b33d16 Fix onboarding default task text and launch redirect 2026-03-03 10:08:18 -06:00
Dotta
69ba77f334 fix(ui): prevent infinite re-render loop on agent configure page
MarkdownEditor's plugins useMemo depended on imageUploadHandler, which
was a new arrow function on every parent render. This caused MDXEditor
to reinitialize plugins on each render, firing onChange, which updated
the overlay state in AgentConfigForm, triggering a parent re-render —
creating an infinite "Maximum update depth exceeded" loop.

Fix: use a stable ref for imageUploadHandler so plugins are only created
once (keyed on whether a handler exists, not its identity). Also use a
module-level empty object for env config fallback to avoid unnecessary
EnvVarEditor re-renders.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 09:36:49 -06:00
Dotta
535f22dcaf docs: add PUBLISHING.md with npm publish instructions
Covers the full publish flow: version bump, build, publish, and restore.
Explains the package.dev.json mechanism (why workspace:* refs need
swapping for npm), how the esbuild bundle works, and forbidden token
enforcement.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 09:32:55 -06:00
Dotta
fe9f312cfc fix(ui): ensure rendered code blocks match editor styling for GFM support
Override Tailwind Typography's hardcoded code block colors with app theme
variables so fenced code blocks (```) render consistently between the
MDXEditor and MarkdownBody views. Also styles inline code, removes the
default backtick pseudo-elements, and adds mention chip styles for the
rendered prose context.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 09:28:49 -06:00
Dotta
4c6fe04700 feat: add npm build process, version bump, and forbidden token enforcement
- Add esbuild config to bundle CLI with all workspace code for npm publishing
- Add build-npm.sh script that runs forbidden token check, type-check,
  esbuild bundle, and generates publishable package.json
- Add generate-npm-package-json.mjs to resolve workspace:* refs to actual
  npm dependencies for publishing
- Add version-bump.sh for patch/minor/major/explicit version bumping
- Add check-forbidden-tokens.mjs that scans codebase for forbidden tokens
  (mirrors git hook logic, safe if token list is missing)
- Add esbuild as dev dependency
- Add build:npm, version:bump, check:tokens scripts to root package.json
- Update .gitignore for build artifacts

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 09:25:10 -06:00
Dotta
b6c321f30a chore: update pnpm-lock.yaml for @paperclipai package rename
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 08:56:43 -06:00
Dotta
4adea5e292 chore: add paperclip skill symlink to .claude/skills
Symlink .claude/skills/paperclip to the existing skills/paperclip
directory so Claude Code discovers the agent API skill automatically.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 08:45:57 -06:00
Dotta
f60c1001ec refactor: rename packages to @paperclipai and CLI binary to paperclipai
Rename all workspace packages from @paperclip/* to @paperclipai/* and
the CLI binary from `paperclip` to `paperclipai` in preparation for
npm publishing. Bump CLI version to 0.1.0 and add package metadata
(description, keywords, license, repository, files). Update all
imports, documentation, user-facing messages, and tests accordingly.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 08:45:26 -06:00
Dotta
5a5549fc54 feat(ui): improve markdown typography with better paragraph spacing and line height
Increase paragraph margins, add line-height: 1.4 to paragraphs/lists/blockquotes,
and bump inter-paragraph spacing in the MDXEditor for more readable markdown blocks.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 08:39:56 -06:00
Dotta
e9ba0418c3 feat(ui): sync browser title with current page breadcrumbs
Every page already sets breadcrumbs via BreadcrumbContext. This adds a
useEffect in the provider that updates document.title to reflect the
current page, e.g. "Issue Title · Issues · Paperclip".

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 08:17:48 -06:00
Dotta
5769aaeca3 fix(ui): use absolute paths in Navigate redirects
Change relative Navigate paths to absolute (e.g. "agents/all" to
"/agents/all") to prevent broken redirects when routes are nested.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 17:02:15 -06:00