Self-hosted Gitea deploy, Opus 4.8, server-hosting fixes, per-project Skills#1
Merged
Merged
Conversation
- git-provider.ts: env-driven provider config (github|gitea) - github.ts: provider-aware repo create/connect/push (Gitea /api/v1, org repos) - scaffold-deploy.ts: inject Dockerfile + compose + .gitea workflow per site - Dockerfile/compose/.gitea: containerize Claudable with claude CLI (claude -p)
- claude-opus-4-8 as the top/flagship Opus option - generic 'opus' aliases now resolve to 4.8; 4.6 kept as previous-gen
- preview.ts: PREVIEW_URL_TEMPLATE for proxy-routed preview URLs, PREVIEW_BIND_HOST to bind 0.0.0.0 - compose: preview band 3710-3719, preview.newstory.tf template, bind 0.0.0.0
- Dockerfile: run as node user (Claude Code refuses skip-permissions as root) - claude.ts: pass cwd so agent edits the project, not Claudable's own /app - preview.ts: force NODE_ENV=development so next dev compiles CSS (was 500)
- claude.ts: settingSources ['project','user'] so the agent loads .claude/skills/ - lib/services/skills.ts: read/write/delete SKILL.md under <project>/.claude/skills/<name>/ - API: GET/POST /api/projects/[id]/skills, GET/DELETE /api/projects/[id]/skills/[name] - UI: SkillsSettings panel + new Skills tab in ProjectSettings
holoduke
added a commit
that referenced
this pull request
Jun 29, 2026
…uard Perf (opactorai#4): stop killing a project's dev server on navigation/unmount. The PreviewManager already reaps idle previews + LRU-evicts on a full port pool, so leaving them running keeps multiple projects warm — switching back is instant instead of a 15-30s cold recompile. Projects (#1): show access-filtered project tiles below the new-project prompt. Agent isolation (#0, lightweight — no OS sandbox): a PreToolUse hook (fires even under bypassPermissions) denies tool calls that escape the current project — sibling projects, Claudable's source/secrets, sensitive system paths — while the agent keeps full tool/skill/file/shell power within its own project + tmp.
holoduke
added a commit
that referenced
this pull request
Jun 29, 2026
Headless Chromium (added to the image) screenshots a project's running preview on localhost:<port> via the CLI --screenshot flag (no extra npm dep). The chat page captures once the preview is up (best-effort, delayed to let it render); thumbnails are stored under data/thumbnails and served by GET /api/projects/:id/thumbnail. Tiles show the thumbnail with a gradient fallback until one exists.
holoduke
added a commit
that referenced
this pull request
Jul 5, 2026
…nded tiles Wave 2 of the Lovable/Bolt-benchmark polish pass: - COLORED DIFFS (the #1 competitive gap): edit/write tool cards now render a real unified diff (added=green/+, removed=red/-, context muted) from the toolInput metadata already persisted (Edit old/new_string, MultiEdit edits[], Write content, codex apply_patch). New dependency-free components/chat/DiffView.tsx (LCS line diff, capped at 400 lines, file-path header + Copy). Non-edit tools keep the raw pre. - TOPBAR DECLUTTER: build-screen top bar went from ~19 icon buttons to a focused set (Preview/Code, route, refresh, open-tab, device, theme, Settings, Share, and Publish as a LABELED brand CTA) + a '⋯' overflow menu (edit/comments/architecture/skills/ import/stop) with labels, Escape/outside-click close, role=menu. All conditionals + onClicks preserved. - NO MORE alert(): all 10 blocking alert()s → toasts; a new ConfirmDialog replaces the clear-comments confirm; ToastProvider api memoized. - Home: branded tile placeholder (brand-gradient + project initial) instead of flat grey when a preview has no thumbnail; hero tagline 'Describe it • Watch it build • Ship it' (was 'Connect CLI Agent…'). Verified: tsc, build, 74/74.
holoduke
added a commit
that referenced
this pull request
Jul 7, 2026
…e tokens, preview perf + chat fixes' (#1) from feat/homepage-mcp-tokens-perf into main
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adapts Claudable to run fully self-hosted on New Story infra (Gitea + Gitea Actions + Traefik), adds Claude Opus 4.8, fixes several bugs that broke chat/preview when hosted on a server, and adds per-project Agent Skills.
What's included
Self-hosting / Gitea
lib/services/git-provider.ts— env-driven git provider config (github|gitea).lib/services/github.ts— provider-aware repo create/connect/push; creates under an org via/orgs/{org}/repos; token fromGIT_TOKENenv or DB.lib/services/scaffold-deploy.ts— injectsDockerfile+docker-compose.yml+.gitea/workflows/deploy.ymlinto each generated site so push→main auto-deploys at<site>.<domain>.Dockerfile/docker-compose.yml/.gitea/workflows/deploy.yml— containerize Claudable itself with theclaudeCLI for headlessclaude -p.Model
lib/constants/claudeModels.ts); genericopusaliases resolve to it.Bug fixes (server hosting)
node— Claude Code refuses--dangerously-skip-permissionsas root, which killed the agent.claude.ts: passcwd— the SDK usescwd(it ignoredworkingDirectory), so the agent was editing Claudable's own files instead of the project.preview.ts: forceNODE_ENV=developmentfor the spawnednext dev— otherwise the dev CSS loader breaks (globals.css "Module parse failed" → preview 500).preview.ts: public proxy-routed preview URLs (PREVIEW_URL_TEMPLATE) + bind0.0.0.0(PREVIEW_BIND_HOST) —localhostpreviews aren't reachable when hosted remotely.docker compose build(dropped--no-cache).Per-project Agent Skills
claude.ts:settingSources: ['project','user']so the agent loads.claude/skills/.lib/services/skills.ts+ API (/api/projects/[id]/skillsGET/POST,/[name]GET/DELETE) to manageSKILL.mdfiles.SkillsSettingspanel + a new Skills tab inProjectSettings.Notes
GIT_PROVIDER,GIT_API_BASE_URL,GIT_HTTP_BASE,GIT_ORG,GIT_TOKEN,GIT_DEPLOY_DOMAIN,PREVIEW_URL_TEMPLATE,PREVIEW_BIND_HOST,DEPLOY_PORT_BASE/SPAN,CLAUDE_CODE_OAUTH_TOKEN.