mirror of
https://github.com/stack-auth/stack.git
synced 2026-06-21 21:09:49 +08:00
## Summary
Replaces `writeConfigObject` (destructive overwrite) with
`updateConfigObject` — an async, AI-aware updater that preserves
user-authored config structure (imports, external file references,
helpers).
**Dual-path approach:**
- **Fast path** (deterministic, no AI): plain static literal configs →
`override()` + in-memory validation + atomic write
- **Agent path** (custom structure): configs with `import x from
"./file.txt" with { type: "text" }` etc. → Claude agent edits the
external files in place, then validates
**Safety guarantees:**
- Snapshot/restore: config + all relative imports are captured before
the agent runs; rolled back on any failure
- In-memory validation on fast path (never write unvalidated bytes)
- Semantic check when config is evaluable; no-op detection + structural
check when it isn't
- Path traversal guard on imports (rejects `../` escapes)
- Agent isolation: `settingSources: []`, `strictMcpConfig: true`,
`CLAUDE_CODE_DISABLE_AUTO_MEMORY`, no Bash tool
- `scheduleSync` only fires after a successful update
- Bounded 120s timeout on agent runs (configurable via env var)
CI failures are preexisting on `dev`
(`ERR_PNPM_LOCKFILE_CONFIG_MISMATCH` from overrides move without
lockfile regen); this branch has zero lockfile changes vs dev.
Link to Devin session:
https://app.devin.ai/sessions/cc7409a357bc472ea19fbed065f1229f
Requested by: @mantrakp04
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **New Features**
* Introduced partial configuration update functionality with validation
and automatic rollback on failures.
* Enhanced configuration management with support for more complex file
structures and external references.
* **Chores**
* Added Claude Agent SDK dependency for configuration update operations.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
## Documentation
Docs for this feature were added in this branch:
- **New page**
`docs-mintlify/guides/going-further/local-development.mdx` — covers
`stack dev`, the development-environment flow, and how dashboard edits
are written back to the local config file (structure-preserving fast
path vs. assistant path, external `import … with { type: "text" }`
templates, validation + rollback). Added to `docs.json` nav; also fixes
the previously-broken `/guides/going-further/local-development` links
from `index.mdx` and `self-host.mdx`.
- **`docs-mintlify/guides/going-further/cli.mdx`** — added a `stack dev`
("Run a development environment") section.
- **Skill-site AI prompts** — filled in the `config-docs` and
`dashboard-instructions` placeholders under
`packages/stack-shared/src/ai/unified-prompts/skill-site-prompt-parts/`,
and added a structure-preserving note to the setup prompt.
- **`CHANGELOG.md`** — user-facing entry.
---------
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: mantra <mantra@stack-auth.com>
142 lines
5.2 KiB
JSON
142 lines
5.2 KiB
JSON
{
|
|
"name": "@hexclave/dashboard",
|
|
"version": "1.0.15",
|
|
"repository": "https://github.com/hexclave/hexclave",
|
|
"private": true,
|
|
"scripts": {
|
|
"clean": "rimraf .next && rimraf node_modules",
|
|
"typecheck": "tsc --noEmit",
|
|
"with-env": "dotenv -c development --",
|
|
"with-env:prod": "dotenv -c --",
|
|
"dev": "concurrently -n \"dev,bundle-type-defs\" -k \"next dev --turbopack --port ${NEXT_PUBLIC_HEXCLAVE_LOCAL_DASHBOARD_PORT:-${NEXT_PUBLIC_HEXCLAVE_PORT_PREFIX:-81}01}\" \"pnpm run bundle-type-definitions:watch\"",
|
|
"dev:rde-production": "node scripts/dev-rde-production.mjs",
|
|
"bundle-type-definitions": "tsx scripts/bundle-type-definitions.ts",
|
|
"bundle-type-definitions:watch": "tsx watch --clear-screen=false scripts/bundle-type-definitions.ts",
|
|
"build": "pnpm run bundle-type-definitions && next build",
|
|
"build:rde-standalone": "NEXT_CONFIG_OUTPUT=standalone STACK_NEXT_CONFIG_DISABLE_TYPESCRIPT=true pnpm run build",
|
|
"docker-build": "pnpm run bundle-type-definitions && next build --experimental-build-mode compile",
|
|
"analyze-bundle": "next experimental-analyze",
|
|
"start": "next start --port ${NEXT_PUBLIC_HEXCLAVE_PORT_PREFIX:-81}01",
|
|
"psql": "pnpm run with-env bash -c 'psql $STACK_DATABASE_CONNECTION_STRING'",
|
|
"lint": "eslint ."
|
|
},
|
|
"dependencies": {
|
|
"@ai-sdk/react": "^3.0.72",
|
|
"@assistant-ui/react": "^0.10.24",
|
|
"@assistant-ui/react-ai-sdk": "^0.10.14",
|
|
"@assistant-ui/react-markdown": "^0.10.5",
|
|
"@dnd-kit/core": "^6.3.1",
|
|
"@dnd-kit/sortable": "^10.0.0",
|
|
"@dnd-kit/utilities": "^3.2.2",
|
|
"@hookform/resolvers": "^3.3.4",
|
|
"@monaco-editor/react": "4.7.0",
|
|
"@oslojs/otp": "^1.1.0",
|
|
"@phosphor-icons/react": "^2.1.10",
|
|
"@radix-ui/react-accordion": "^1.2.1",
|
|
"@radix-ui/react-alert-dialog": "^1.1.2",
|
|
"@radix-ui/react-aspect-ratio": "^1.1.0",
|
|
"@radix-ui/react-avatar": "^1.1.1",
|
|
"@radix-ui/react-checkbox": "^1.1.2",
|
|
"@radix-ui/react-collapsible": "^1.1.1",
|
|
"@radix-ui/react-context": "^1.1.1",
|
|
"@radix-ui/react-context-menu": "^2.2.2",
|
|
"@radix-ui/react-dialog": "^1.1.2",
|
|
"@radix-ui/react-dropdown-menu": "^2.1.2",
|
|
"@radix-ui/react-hover-card": "^1.1.2",
|
|
"@radix-ui/react-icons": "^1.3.1",
|
|
"@radix-ui/react-label": "^2.1.0",
|
|
"@radix-ui/react-menubar": "^1.1.2",
|
|
"@radix-ui/react-navigation-menu": "^1.2.1",
|
|
"@radix-ui/react-popover": "^1.1.2",
|
|
"@radix-ui/react-progress": "^1.1.0",
|
|
"@radix-ui/react-radio-group": "^1.2.1",
|
|
"@radix-ui/react-scroll-area": "^1.2.0",
|
|
"@radix-ui/react-select": "^2.1.2",
|
|
"@radix-ui/react-separator": "^1.1.0",
|
|
"@radix-ui/react-slider": "^1.2.1",
|
|
"@radix-ui/react-slot": "^1.2.3",
|
|
"@radix-ui/react-switch": "^1.1.1",
|
|
"@radix-ui/react-tabs": "^1.1.1",
|
|
"@radix-ui/react-toast": "^1.2.2",
|
|
"@radix-ui/react-toggle": "^1.1.0",
|
|
"@radix-ui/react-toggle-group": "^1.1.0",
|
|
"@radix-ui/react-tooltip": "^1.1.3",
|
|
"@react-hook/resize-observer": "^2.0.2",
|
|
"@sentry/nextjs": "^10.11.0",
|
|
"@hexclave/dashboard-ui-components": "workspace:*",
|
|
"@hexclave/shared-backend": "workspace:*",
|
|
"@hexclave/next": "workspace:*",
|
|
"@hexclave/shared": "workspace:*",
|
|
"@hexclave/ui": "workspace:*",
|
|
"@stripe/connect-js": "^3.3.27",
|
|
"@stripe/react-connect-js": "^3.3.24",
|
|
"@stripe/react-stripe-js": "^3.8.1",
|
|
"@stripe/stripe-js": "^7.7.0",
|
|
"@tanstack/react-table": "^8.21.3",
|
|
"@tanstack/react-virtual": "^3.13.18",
|
|
"@vercel/analytics": "^1.2.2",
|
|
"@vercel/speed-insights": "^1.0.12",
|
|
"ai": "^6.0.0",
|
|
"browser-image-compression": "^2.0.2",
|
|
"canvas-confetti": "^1.9.2",
|
|
"class-variance-authority": "^0.7.0",
|
|
"clsx": "^2.1.1",
|
|
"cmdk": "^1.0.4",
|
|
"date-fns": "^3.6.0",
|
|
"dotenv-cli": "^7.3.0",
|
|
"export-to-csv": "^1.4.0",
|
|
"geist": "^1",
|
|
"input-otp": "^1.4.1",
|
|
"jiti": "^2.4.2",
|
|
"jose": "^6.1.3",
|
|
"libsodium-wrappers": "^0.8.2",
|
|
"lodash": "^4.17.21",
|
|
"motion": "^12.39.0",
|
|
"next": "16.1.7",
|
|
"next-themes": "^0.2.1",
|
|
"posthog-js": "^1.336.1",
|
|
"qrcode": "^1.5.4",
|
|
"react": "19.2.3",
|
|
"react-day-picker": "^9.6.7",
|
|
"react-dom": "19.2.3",
|
|
"react-easy-crop": "^5.5.6",
|
|
"react-globe.gl": "^2.28.2",
|
|
"react-hook-form": "^7.53.1",
|
|
"react-icons": "^5.0.1",
|
|
"react-markdown": "^9.0.1",
|
|
"react-resizable-panels": "^2.1.6",
|
|
"react-syntax-highlighter": "^15.6.1",
|
|
"recharts": "^2.14.1",
|
|
"remark-gfm": "^4.0.1",
|
|
"rrweb": "^1.1.3",
|
|
"svix": "^1.32.0",
|
|
"svix-react": "^1.13.0",
|
|
"tailwind-merge": "^2.3.0",
|
|
"tailwindcss-animate": "^1.0.7",
|
|
"three": "^0.169.0",
|
|
"use-debounce": "^10.0.5",
|
|
"yup": "^1.7.1",
|
|
"zod": "^4.0.0"
|
|
},
|
|
"devDependencies": {
|
|
"@types/canvas-confetti": "^1.6.4",
|
|
"@types/lodash": "^4.17.5",
|
|
"@types/node": "20.17.6",
|
|
"@types/qrcode": "^1.5.5",
|
|
"@types/react": "19.2.7",
|
|
"@types/react-dom": "19.2.3",
|
|
"@types/react-syntax-highlighter": "^15.5.13",
|
|
"@types/three": "^0.169.0",
|
|
"autoprefixer": "^10.4.17",
|
|
"concurrently": "^8.2.2",
|
|
"glob": "^10.4.1",
|
|
"import-in-the-middle": "1.14.2",
|
|
"postcss": "^8.4.38",
|
|
"require-in-the-middle": "^7.4.0",
|
|
"rimraf": "^5.0.5",
|
|
"tailwindcss": "^3.4.1",
|
|
"tsx": "^4.7.2"
|
|
},
|
|
"packageManager": "pnpm@11.5.0"
|
|
}
|