mirror of
https://github.com/onyx-dot-app/onyx.git
synced 2026-10-22 19:32:55 -05:00
## Description
Craft development required repeated image builds, copied cluster
settings, and editor-specific Telepresence commands. Startup could
report success before services were usable.
- Share configuration resolution and launch commands between Make and VS
Code. Read deployed ConfigMaps and Secrets in memory, with personal
`.env.k8s` overrides.
- Add separate infrastructure and application readiness checks,
`craft-doctor`, and shared Telepresence connection/intercept handling.
- Reuse images, detect source changes, and provide checkout-scoped
cleanup previews. Add pause/resume and migration commands with
database-target checks.
- Default Kubernetes sandbox callbacks to the internal API Service.
Preserve explicit `ONYX_SERVER_URL` overrides and bump the Helm chart to
0.9.20.
- Update the local Kubernetes guide, Craft development skill, and
feature map.
- Give Helm chart CI a 100 GB runner disk. The previous runner exhausted
disk while unpacking OpenSearch.
- Upgrade the Storybook package family to 10.6.2 to fix the critical
audit finding GHSA-f2ph-cmg5-wxc8.
Existing `.env.k8s` files remain untouched; old service entries continue
to override chart settings. Image refresh updates the PodTemplate for
future sandboxes; existing sandbox pods retain their images.
## Review guide
[Read or download the Markdown review
guide](https://github.com/onyx-dot-app/onyx/blob/d3cbc42d89bfb150d1cfc815638645043c34b69e/docs/craft/dev/kubernetes-review-guide.md).
## How Has This Been Tested?
- Live kind and Telepresence: startup, intercept reuse, doctor, API and
worker hot reload, readiness success/failure, and migration
status/upgrade.
- Three real Craft smoke tests: sandbox provisioning, file
upload/readback, and web app preview through the frontend. No real LLM
calls were exercised.
- 76 Craft Helm tests and 27 development-tool regression tests passed.
- Pre-commit checks, explicit development-tool type checking, frontend
type coverage, and skill validation passed.
- The local web audit passes its critical-severity gate without
suppressions. The Storybook production build passes.
- Removed the disposable test cluster, local processes, and temporary
files.
## Additional Options
- [ ] [Optional] Please cherry-pick this PR to the latest release
version.
<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Harden local Craft Kubernetes development by sharing configuration and
launch logic between Make and VS Code, and by checking service readiness
before startup reports success.
**What’s included**
- Resolve deployed ConfigMaps, Secrets, and container env in memory
through a shared launcher; personal `.env.k8s` values take precedence,
and resolved secrets never touch disk or terminal output.
- Add shared lifecycle commands (`craft-doctor`, staged
infrastructure/application readiness, Telepresence connect and
intercept, pause, resume, migration, cleanup previews) used by both Make
and VS Code.
- Reuse built images when source is unchanged, force a rebuild with
`--rebuild-sandbox-image`, and keep probe and command invocations
bounded while preserving actionable errors.
- Default sandbox callbacks to the internal API Service, preserving
explicit `ONYX_SERVER_URL` overrides; drop the now-unneeded validation
and bump the Helm chart to 0.9.20.
- Give the Helm CI runner a 100 GB disk, since Docker and kind each
store images and OpenSearch exhausted the default disk. Bump Storybook
tooling to 10.6.2 to patch a development server vulnerability.
- Update the local Kubernetes guide, Craft development skill, feature
map, and add a downloadable PR review guide.
**Validation**
- Passed 76 Craft Helm tests, 27 development-tool regression tests, and
new unit tests for the shared runtime and lifecycle CLI.
- Tested startup, readiness, Telepresence, hot reload, migrations, and
three Craft smoke tests against kind; no real LLM calls were exercised.
<sup>Written for commit d3cbc42d89.
Summary will update on new commits.</sup>
<a
href="https://cubic.dev/pr/onyx-dot-app/onyx/pull/16376?utm_source=github"
target="_blank" rel="noopener noreferrer"
data-no-image-dialog="true"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-light.svg"><img
alt="View guided diff"
src="https://www.cubic.dev/buttons/review-in-cubic-light.svg"></picture></a>
<a
href="https://www.cubic.dev/action/auto-fix/pr/onyx-dot-app/onyx/16376?returnTo=https%3A%2F%2Fgithub.com%2Fonyx-dot-app%2Fonyx%2Fpull%2F16376&source=description"
target="_blank" rel="noopener noreferrer"
data-no-image-dialog="true"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://www.cubic.dev/buttons/turn-on-auto-fix-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://www.cubic.dev/buttons/turn-on-auto-fix-light.svg"><img
alt="Turn on auto-fix"
src="https://www.cubic.dev/buttons/turn-on-auto-fix-light.svg"></picture></a>
<!-- End of auto-generated description by cubic. -->
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
<!-- coderabbit-ai-generated:v1 -->
## Summary by CodeRabbit
- **New Features**
- Added a unified local Kubernetes workflow for Craft, including API and
worker launching, connectivity, readiness checks, migrations,
pause/resume, diagnostics, cleanup, and disk management.
- Added sandbox image reuse, rebuilding, loading, and configurable image
selection.
- Sandbox callbacks now default to the internal API service URL, with
support for explicit overrides.
- **Documentation**
- Added guidance for local Kubernetes setup, configuration, lifecycle
management, troubleshooting, and verification.
- **Bug Fixes**
- Improved readiness validation and stopped sensitive generated
credentials from being printed.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
148 lines
4.8 KiB
JSON
148 lines
4.8 KiB
JSON
{
|
|
"name": "web",
|
|
"version": "1.0.0-dev",
|
|
"private": true,
|
|
"workspaces": [
|
|
"lib/opal",
|
|
"lib/shared"
|
|
],
|
|
"scripts": {
|
|
"dev": "node tools/prepare-pdf-assets.cjs && next dev",
|
|
"dev:profile": "node tools/prepare-pdf-assets.cjs && NEXT_PUBLIC_ENABLE_STATS=true next dev",
|
|
"dev:clean": "node tools/prepare-pdf-assets.cjs && bun run clean && next dev",
|
|
"clean": "rm -rf .next node_modules/.cache *.tsbuildinfo",
|
|
"build": "node tools/prepare-pdf-assets.cjs && next build",
|
|
"build:fast": "node tools/prepare-pdf-assets.cjs && SKIP_TYPE_CHECK=1 next build",
|
|
"start": "next start",
|
|
"lint": "oxlint",
|
|
"lint:fix": "oxlint --fix",
|
|
"types:check": "next typegen && node tools/type-check/index.ts",
|
|
"format": "oxfmt src",
|
|
"format:check": "oxfmt --check src",
|
|
"playwright": "playwright test",
|
|
"test": "jest",
|
|
"test:watch": "jest --watch",
|
|
"test:coverage": "jest --coverage",
|
|
"test:verbose": "jest --verbose",
|
|
"test:ci": "jest --ci --maxWorkers=2 --silent --bail",
|
|
"test:changed": "jest --onlyChanged",
|
|
"test:diff": "jest --changedSince=main",
|
|
"test:debug": "node --inspect-brk node_modules/.bin/jest --runInBand",
|
|
"storybook": "storybook dev -p 6006",
|
|
"storybook:build": "storybook build -o storybook-static"
|
|
},
|
|
"dependencies": {
|
|
"@dnd-kit/core": "^6.1.0",
|
|
"@dnd-kit/modifiers": "^7.0.0",
|
|
"@dnd-kit/sortable": "^10.0.0",
|
|
"@dnd-kit/utilities": "^3.2.2",
|
|
"@floating-ui/react-dom": "^2.1.6",
|
|
"@onyx-ai/opal": "file:./lib/opal",
|
|
"@onyx-ai/shared": "file:./lib/shared",
|
|
"@radix-ui/react-accordion": "^1.2.2",
|
|
"@radix-ui/react-avatar": "^1.2.2",
|
|
"@radix-ui/react-collapsible": "^1.1.2",
|
|
"@radix-ui/react-dialog": "^1.1.6",
|
|
"@radix-ui/react-direction": "^1.1.2",
|
|
"@radix-ui/react-dropdown-menu": "^2.1.6",
|
|
"@radix-ui/react-popover": "^1.1.6",
|
|
"@radix-ui/react-radio-group": "^1.2.2",
|
|
"@radix-ui/react-select": "^2.1.6",
|
|
"@radix-ui/react-slider": "^1.4.7",
|
|
"@radix-ui/react-slot": "^1.2.4",
|
|
"@radix-ui/react-tabs": "^1.1.1",
|
|
"@radix-ui/react-tooltip": "^1.2.8",
|
|
"@radix-ui/react-visually-hidden": "^1.2.11",
|
|
"@sentry/nextjs": "^10.54.0",
|
|
"@tanstack/react-table": "^8.21.3",
|
|
"@zip.js/zip.js": "^2.9.0",
|
|
"class-variance-authority": "^0.7.0",
|
|
"clsx": "^2.1.1",
|
|
"copy-to-clipboard": "^3.3.3",
|
|
"date-fns": "^4.1.0",
|
|
"docx-preview": "^0.3.7",
|
|
"dompurify": "3.4.15",
|
|
"formik": "^2.2.9",
|
|
"highlight.js": "^11.12.0",
|
|
"highlightjs-sap-abap": "^0.3.0",
|
|
"js-cookie": "^3.0.5",
|
|
"katex": "^0.17.0",
|
|
"linguist-languages": "^9.3.1",
|
|
"lodash": "^4.18.1",
|
|
"lowlight": "^3.3.0",
|
|
"lucide-react": "^1.25.0",
|
|
"mime": "^4.1.0",
|
|
"motion": "^12.42.2",
|
|
"next": "16.3.8",
|
|
"next-intl": "^4.13.7",
|
|
"next-themes": "^0.4.4",
|
|
"pdfjs-dist": "6.3.289",
|
|
"postcss": "^8.5.10",
|
|
"posthog-js": "^1.421.0",
|
|
"react": "19.2.8",
|
|
"react-day-picker": "^9.13.0",
|
|
"react-dom": "19.2.8",
|
|
"react-dropzone": "^20.1.0",
|
|
"react-icons": "^5.7.0",
|
|
"react-markdown": "^9.0.1",
|
|
"react-pdf": "11.0.0",
|
|
"recharts": "^3.9.2",
|
|
"rehype-highlight": "^7.0.2",
|
|
"rehype-katex": "^7.0.1",
|
|
"rehype-sanitize": "^6.0.0",
|
|
"rehype-stringify": "^10.0.1",
|
|
"remark-gfm": "^4.0.0",
|
|
"remark-math": "^6.0.0",
|
|
"remark-parse": "^11.0.0",
|
|
"remark-rehype": "^11.1.2",
|
|
"sharp": "^0.35.5",
|
|
"swr": "^2.1.5",
|
|
"tailwind-merge": "^3.6.0",
|
|
"tw-animate-css": "^1.4.0",
|
|
"unified": "^11.0.5",
|
|
"yup": "^1.4.0",
|
|
"zustand": "^5.0.8"
|
|
},
|
|
"devDependencies": {
|
|
"@formatjs/icu-messageformat-parser": "^3.5.17",
|
|
"@oxlint/plugins": "^1.71.0",
|
|
"@playwright/test": "^1.39.0",
|
|
"@storybook/addon-docs": "10.6.2",
|
|
"@storybook/addon-mcp": "^0.7.0",
|
|
"@storybook/addon-themes": "10.6.2",
|
|
"@storybook/react": "10.6.2",
|
|
"@storybook/react-vite": "10.6.2",
|
|
"@swc/core": "^1.15.43",
|
|
"@swc/jest": "^0.2.39",
|
|
"@tailwindcss/postcss": "^4.3.3",
|
|
"@tailwindcss/typography": "^0.5.19",
|
|
"@testing-library/jest-dom": "^6.9.1",
|
|
"@testing-library/react": "^16.3.0",
|
|
"@testing-library/user-event": "^14.6.1",
|
|
"@types/hast": "^3.0.4",
|
|
"@types/jest": "^30.0.0",
|
|
"@types/js-cookie": "^3.0.6",
|
|
"@types/lodash": "^4.17.25",
|
|
"@types/node": "24.12.2",
|
|
"@types/react": "19.2.18",
|
|
"@types/react-dom": "19.2.7",
|
|
"@types/stats.js": "^0.17.4",
|
|
"babel-plugin-react-compiler": "^1.0.0",
|
|
"dotenv": "^17.4.2",
|
|
"jest": "^30.4.2",
|
|
"jest-environment-jsdom": "^30.2.0",
|
|
"oxfmt": "0.59.0",
|
|
"oxlint": "^1.66.0",
|
|
"oxlint-plugin-react-doctor": "0.9.11",
|
|
"stats.js": "^0.17.0",
|
|
"storybook": "10.6.2",
|
|
"tailwindcss": "^4.3.3",
|
|
"typescript": "7.1.0-dev.20260916.1",
|
|
"whatwg-fetch": "^3.6.20"
|
|
},
|
|
"overrides": {
|
|
"react-is": "^19.0.0-rc-69d4b800-20241021",
|
|
"tinypool": "2.1.2"
|
|
}
|
|
}
|