mirror of
https://github.com/saltbo/agent-kanban.git
synced 2026-09-19 09:01:47 +08:00
96fdd70d2c
* feat(api)!: redesign task resource operations
Publish the complete resource-oriented OpenAPI contract, enforce scope-based authorization at the HTTP boundary, and replace lifecycle command routes with Task PATCH and nested Claim/Event resources.
Add server-side Task CAS, migration coverage, updated Agent Skills, and browser/API regression tests.
BREAKING CHANGE: remove the legacy task lifecycle endpoints and move bounded waits to /tasks/{taskId}/events.
* refactor(tasks)!: make claims create-only
Remove Task Claim retrieval and deletion routes, the release scope, live deletion logic, and release workflow guidance.
Keep historical release records readable for migration and audit compatibility.
BREAKING CHANGE: remove GET and DELETE /tasks/{taskId}/claims/{claimId} and the task:release scope.
* test(ci): align actor and projection contracts
Cover machine and service Task Action writes and update Agent detail fixtures to the canonical assignedTo query and paged lowerCamelCase response.
* fix(api): preserve merge patch fields and consume browser pagination
* test(ui): include terminal pagination in agent task fixture
---------
Co-authored-by: jarvis <jarvis@agents.realmroot.dev>
39 lines
1.2 KiB
TypeScript
39 lines
1.2 KiB
TypeScript
import { execSync } from "node:child_process";
|
|
import path from "node:path";
|
|
import { cloudflare } from "@cloudflare/vite-plugin";
|
|
import tailwindcss from "@tailwindcss/vite";
|
|
import react from "@vitejs/plugin-react";
|
|
import { defineConfig } from "vite";
|
|
|
|
const port = Number(process.env.VITE_DEV_PORT) || 6265;
|
|
const origin = `http://localhost:${port}`;
|
|
const gitSha = execSync("git rev-parse --short HEAD").toString().trim();
|
|
|
|
export default defineConfig({
|
|
plugins: [
|
|
react(),
|
|
tailwindcss(),
|
|
cloudflare({
|
|
configPath: process.env.AK_E2E_WRANGLER_CONFIG ?? "./wrangler.toml",
|
|
persistState: { path: process.env.AK_E2E_STATE_DIR ?? path.resolve(__dirname, ".wrangler/state") },
|
|
config: (config) => ({
|
|
vars: {
|
|
...config.vars,
|
|
AK_PUBLIC_ORIGIN: origin,
|
|
ALLOWED_HOSTS: `localhost:${port}`,
|
|
},
|
|
}),
|
|
}),
|
|
],
|
|
server: { port, allowedHosts: ["localhost"] },
|
|
define: { __APP_VERSION__: JSON.stringify(gitSha) },
|
|
resolve: {
|
|
dedupe: ["react", "react-dom", "react/jsx-runtime", "react/jsx-dev-runtime"],
|
|
alias: {
|
|
"@": path.resolve(__dirname, "./src"),
|
|
"@shared": path.resolve(__dirname, "./shared"),
|
|
"@server": path.resolve(__dirname, "./server"),
|
|
},
|
|
},
|
|
});
|