Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 15 additions & 15 deletions backend/bun.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 4 additions & 2 deletions backend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@
"scripts": {
"build": "bun node_modules/@typescript/native/bin/tsc --noEmit && bun scripts/build.ts",
"start": "NODE_ENV=production doppler run --config prd --project rajohan -- bun dist/serverStart.js",
"start:worker": "NODE_ENV=production doppler run --config prd --project rajohan -- bun dist/workerStart.js",
"dev": "MIRA_DASHBOARD_DISABLE_SCHEDULER=1 doppler run --config prd --project rajohan -- bun --watch src/serverStart.ts",
"dev:worker": "doppler run --config prd --project rajohan -- bun --watch src/workerStart.ts",
"lint": "eslint .",
"lint:fix": "eslint . --fix",
"format": "prettier --write '**/*.{ts,js}'",
Expand All @@ -26,8 +28,8 @@
"eslint-plugin-prettier": "^5.5.6",
"eslint-plugin-simple-import-sort": "^14.0.0",
"eslint-plugin-unicorn": "^72.0.0",
"prettier": "^3.9.5",
"prettier": "^3.9.6",
"typescript": "^6.0.3",
"typescript-eslint": "^8.64.0"
"typescript-eslint": "^8.65.0"
}
}
5 changes: 4 additions & 1 deletion backend/scripts/build.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,10 @@ await rm(outdir, { force: true, recursive: true });
await mkdir(outdir, { recursive: true });

const result = await Bun.build({
entrypoints: [path.join(backendDirectory, "src/serverStart.ts")],
entrypoints: [
path.join(backendDirectory, "src/serverStart.ts"),
path.join(backendDirectory, "src/workerStart.ts"),
],
format: "esm",
outdir,
packages: "external",
Expand Down
54 changes: 54 additions & 0 deletions backend/src/database.ts
Original file line number Diff line number Diff line change
Expand Up @@ -305,6 +305,60 @@ CREATE TABLE IF NOT EXISTS scheduled_job_runs (
CREATE INDEX IF NOT EXISTS idx_scheduled_job_runs_job_started
ON scheduled_job_runs(job_id, started_at DESC);

CREATE TABLE IF NOT EXISTS scheduled_job_execution_policies (
job_id TEXT PRIMARY KEY,
resource_class TEXT NOT NULL,
timeout_ms INTEGER NOT NULL,
updated_at TEXT NOT NULL,
FOREIGN KEY(job_id) REFERENCES scheduled_jobs(id) ON DELETE CASCADE
);

CREATE TABLE IF NOT EXISTS job_workers (
id TEXT PRIMARY KEY,
capacity INTEGER NOT NULL,
started_at TEXT NOT NULL,
heartbeat_at TEXT NOT NULL
);

CREATE INDEX IF NOT EXISTS idx_job_workers_heartbeat
ON job_workers(heartbeat_at DESC);

CREATE TABLE IF NOT EXISTS job_executions (
id TEXT PRIMARY KEY,
scheduled_job_id TEXT,
scheduled_run_id INTEGER,
action_key TEXT NOT NULL,
display_name TEXT NOT NULL,
resource_class TEXT NOT NULL,
priority INTEGER NOT NULL,
status TEXT NOT NULL,
trigger_type TEXT NOT NULL,
payload_json TEXT NOT NULL DEFAULT '{}',
queued_at TEXT NOT NULL,
available_at TEXT NOT NULL,
started_at TEXT,
finished_at TEXT,
lease_owner TEXT,
lease_expires_at TEXT,
heartbeat_at TEXT,
cancel_requested_at TEXT,
cancellable INTEGER NOT NULL DEFAULT 1,
attempt INTEGER NOT NULL DEFAULT 0,
timeout_ms INTEGER NOT NULL,
message TEXT,
output_json TEXT NOT NULL DEFAULT '{}'
);

CREATE INDEX IF NOT EXISTS idx_job_executions_queue
ON job_executions(status, available_at, priority DESC, queued_at);

CREATE INDEX IF NOT EXISTS idx_job_executions_scheduled_run
ON job_executions(scheduled_run_id);

CREATE UNIQUE INDEX IF NOT EXISTS idx_job_executions_active_scheduled_job
ON job_executions(scheduled_job_id)
WHERE scheduled_job_id IS NOT NULL AND status IN ('queued', 'running');

CREATE TABLE IF NOT EXISTS chat_runtime_snapshots (
gateway_scope TEXT NOT NULL,
session_key TEXT NOT NULL,
Expand Down
Loading
Loading