Addresses review findings before Slice 5 sandbox work. Resolver primitives: - resolveOutcome maps an attempt outcome to retry-or-terminal; removed the no-op isTerminalClassification. - WORK_STATUS_FOR_OUTCOME preserves real terminal Work status instead of collapsing everything back to ready. - Lifecycle: completed is terminal, cancelled reopens only to ready, and the invalid awaiting-design-approval -> awaiting-definition-approval reopening is gone. Execution (workExecution.ts): - finishAttempt replaces completeAttempt: auto-retries within the kit budget and settles Work at the real classification (Succeeded->completed, PermanentFailure/BudgetExhausted->failed, NeedsInput->needs-input, Blocked->blocked). No Work stays silently runnable after a failure. - startSimulatedExecution validates sliceId against the current approved Design (foreign ids rejected; defaults to the first slice) and advances slice status running -> completed/ready. - retrySimulatedExecution is now an explicit user restart with a retryable- state guard, not the automatic resolver path. - reconcileExpiredAttempts is bounded: a dead lease terminates as Blocked, resumes within budget or settles the Run/Work so nothing runs forever. - crons.ts runs the reconciler every 30s, string-referenced so it does not depend on the stale codegen. Planning (workPlanning.ts): - saveDefinition/saveDesign reject revision while a Run is executing. - submitQuestion validates and persists a durable workQuestions row instead of discarding planner questions. - Design revision invalidates active design approvals. Verification: primitives 69 tests (+4), backend 22 tests (+10) covering retry/cancel/failure/restart, slice validation, reconciliation, the revision guard, and question persistence. Root typecheck, web+agents build, and the configured Ultracite gate (53 files) all pass. package.json: the recurring check gate now covers workExecution, workPlanning, crons, resolver, and work-lifecycle.
92 lines
3.9 KiB
JSON
92 lines
3.9 KiB
JSON
{
|
|
"name": "code",
|
|
"private": true,
|
|
"workspaces": {
|
|
"packages": [
|
|
"apps/web",
|
|
"packages/agents",
|
|
"packages/auth",
|
|
"packages/backend",
|
|
"packages/config",
|
|
"packages/env",
|
|
"packages/primitives",
|
|
"packages/ui"
|
|
],
|
|
"catalog": {
|
|
"@rivet-dev/agentos": "^0.2.7",
|
|
"@rivet-dev/agentos-core": "^0.2.10",
|
|
"@effect/platform-bun": "4.0.0-beta.99",
|
|
"dotenv": "^17.4.2",
|
|
"zod": "^4.4.3",
|
|
"lucide-react": "^1.23.0",
|
|
"next-themes": "^0.4.6",
|
|
"react": "19.2.8",
|
|
"react-dom": "19.2.8",
|
|
"sonner": "^2.0.7",
|
|
"convex": "^1.42.1",
|
|
"better-auth": "1.6.15",
|
|
"@convex-dev/better-auth": "^0.12.5",
|
|
"@tanstack/react-form": "^1.33.0",
|
|
"@types/react-dom": "^19.2.3",
|
|
"tailwindcss": "^4.3.2",
|
|
"tailwind-merge": "^3.6.0",
|
|
"@better-auth/expo": "1.6.15",
|
|
"effect": "4.0.0-beta.99",
|
|
"typescript": "^6",
|
|
"@types/bun": "latest",
|
|
"heroui-native": "^1.0.5",
|
|
"vite": "^7.3.6",
|
|
"vitest": "^4.1.10",
|
|
"convex-test": "^0.0.54"
|
|
}
|
|
},
|
|
"type": "module",
|
|
"scripts": {
|
|
"dev": "vp run -r dev",
|
|
"build": "vp run -r build",
|
|
"check-types": "vp run -r check-types",
|
|
"check": "ultracite check package.json vite.config.ts apps/web/package.json apps/web/src/root.tsx apps/web/src/index.css apps/web/src/components/chat apps/web/src/components/slice-one apps/web/src/hooks/chat apps/web/src/hooks/slice-one apps/web/src/lib/chat apps/web/src/lib/slice-one apps/web/src/routes.ts apps/web/src/routes/app/dashboard/page.tsx apps/web/src/routes/app/mobile/page.tsx packages/agents/package.json packages/agents/src/agents/zopu.ts packages/agents/src/app.ts packages/agents/src/auth.ts packages/agents/src/tools/slice-one.ts packages/backend/package.json packages/backend/convex/conversationMessages.ts packages/backend/convex/conversationMessages.test.ts packages/backend/convex/projects.ts packages/backend/convex/schema.ts packages/backend/convex/signalRouting.ts packages/backend/convex/signalRouting.test.ts packages/backend/convex/works.ts packages/backend/convex/works.test.ts packages/backend/convex/workExecution.ts packages/backend/convex/workExecution.test.ts packages/backend/convex/workPlanning.ts packages/backend/convex/workPlanning.test.ts packages/backend/convex/crons.ts packages/primitives/src/work.ts packages/primitives/src/work.test.ts packages/primitives/src/resolver.ts packages/primitives/src/work-lifecycle.ts packages/primitives/src/work-resolution.test.ts",
|
|
"lint": "vp lint",
|
|
"format": "vp fmt",
|
|
"staged": "vp staged",
|
|
"hooks:setup": "vp config",
|
|
"dev:web": "vp run --filter web dev",
|
|
"dev:agents": "vp run --filter @code/agents dev",
|
|
"dev:tailscale:web": "vp run --filter web dev:tailscale",
|
|
"dev:tailscale:agents": "vp run --filter @code/agents dev:tailscale",
|
|
"dev:server": "vp run --filter @code/backend dev",
|
|
"dev:setup": "vp run --filter @code/backend dev:setup",
|
|
"build:agents": "vp run --filter @code/agents build",
|
|
"docs:update": "bun run scripts/update-docs.ts",
|
|
"subtree": "bun run scripts/subtree.ts",
|
|
"fix": "ultracite fix",
|
|
"slice1": "vp run -r dev",
|
|
"dev:zopu": "vp run --filter @code/agents dev",
|
|
"dev:zopu:web": "vp run --filter web dev"
|
|
},
|
|
"dependencies": {},
|
|
"devDependencies": {
|
|
"@code/backend": "workspace:*",
|
|
"@code/config": "workspace:*",
|
|
"@code/env": "workspace:*",
|
|
"@code/primitives": "workspace:*",
|
|
"@flue/sdk": "1.0.0-beta.9",
|
|
"@types/bun": "catalog:",
|
|
"@types/node": "^22.13.14",
|
|
"convex": "catalog:",
|
|
"convex-test": "catalog:",
|
|
"effect": "catalog:",
|
|
"oxfmt": "latest",
|
|
"oxlint": "latest",
|
|
"rolldown": "1.1.4",
|
|
"typescript": "catalog:",
|
|
"ultracite": "7.9.3",
|
|
"vite-plus": "0.2.2",
|
|
"vitest": "catalog:"
|
|
},
|
|
"overrides": {
|
|
"vite": "npm:@voidzero-dev/vite-plus-core@0.2.2"
|
|
},
|
|
"packageManager": "bun@1.3.14"
|
|
}
|