feat: migrate task jobs to workflow notifications + timeline
This commit is contained in:
38
README.md
38
README.md
@@ -12,8 +12,8 @@ Turbopack-first rebuild of a fiscal.ai-style terminal with Vercel AI SDK integra
|
||||
- Drizzle ORM (SQLite) + Better Auth Drizzle adapter
|
||||
- Internal API routes via Elysia app module (`lib/server/api/app.ts`)
|
||||
- Eden Treaty for type-safe frontend API calls
|
||||
- Workflow DevKit Local World for background task execution
|
||||
- SQLite-backed domain storage (watchlist, holdings, filings, tasks, insights)
|
||||
- Workflow DevKit Postgres World for background task execution durability
|
||||
- SQLite-backed app domain storage (watchlist, holdings, filings, task projection, insights)
|
||||
- Vercel AI SDK (`ai`) with dual-model routing:
|
||||
- Ollama (`@ai-sdk/openai`) for lightweight filing extraction/parsing
|
||||
- Zhipu (`zhipu-ai-provider`) for heavyweight narrative reports (`https://api.z.ai/api/coding/paas/v4`)
|
||||
@@ -51,9 +51,11 @@ The app calls Zhipu directly via AI SDK for heavy reports and calls Ollama for l
|
||||
When running in Docker and Ollama runs on the host, set `OLLAMA_BASE_URL=http://host.docker.internal:11434`.
|
||||
Zhipu always targets the Coding API endpoint (`https://api.z.ai/api/coding/paas/v4`).
|
||||
On container startup, the app applies Drizzle migrations automatically before launching Next.js.
|
||||
The app stores SQLite data in Docker volume `fiscal_sqlite_data` (mounted to `/app/data`) and workflow local data in `fiscal_workflow_data` (mounted to `/app/.workflow-data`).
|
||||
|
||||
Workflow Local World uses filesystem state plus an in-memory queue. On container restart, queued in-flight jobs may be lost.
|
||||
The app stores SQLite data in Docker volume `fiscal_sqlite_data` (mounted to `/app/data`) and workflow world data in Postgres volume `workflow_postgres_data`.
|
||||
Container startup runs:
|
||||
1. `workflow-postgres-setup` (idempotent Workflow world bootstrap)
|
||||
2. Drizzle migrations for SQLite app tables
|
||||
3. Next.js server boot
|
||||
|
||||
Docker images use Bun (`oven/bun:1.3.5-alpine`) for build and runtime.
|
||||
|
||||
@@ -67,16 +69,23 @@ Required environment variables in Coolify:
|
||||
- `BETTER_AUTH_SECRET=<long-random-secret>`
|
||||
- `BETTER_AUTH_BASE_URL=https://fiscal.b11studio.xyz`
|
||||
- `BETTER_AUTH_TRUSTED_ORIGINS=https://fiscal.b11studio.xyz`
|
||||
- `WORKFLOW_TARGET_WORLD=local`
|
||||
- Optional: `WORKFLOW_LOCAL_DATA_DIR=/app/.workflow-data`
|
||||
- `WORKFLOW_TARGET_WORLD=@workflow/world-postgres`
|
||||
- `WORKFLOW_POSTGRES_URL=postgres://workflow:workflow@workflow-postgres:5432/workflow`
|
||||
- Optional: `WORKFLOW_POSTGRES_WORKER_CONCURRENCY=10`
|
||||
- Optional: `WORKFLOW_POSTGRES_JOB_PREFIX=fiscal_`
|
||||
|
||||
Operational constraints for Coolify:
|
||||
|
||||
- Keep this service to a single instance/replica. SQLite is file-based and not appropriate for multi-replica shared-write deployments.
|
||||
- Ensure the two named volumes are persisted (`fiscal_sqlite_data`, `fiscal_workflow_data`).
|
||||
- Workflow Local queueing is in-memory; in-flight queued jobs may be lost on restarts.
|
||||
- Docker build forces `WORKFLOW_TARGET_WORLD=local` to avoid stale Coolify build args referencing `@workflow/world-postgres`.
|
||||
- Runtime Compose config also pins `WORKFLOW_TARGET_WORLD=local` for the same reason.
|
||||
- Ensure both named volumes are persisted (`fiscal_sqlite_data`, `workflow_postgres_data`).
|
||||
- Keep `WORKFLOW_POSTGRES_URL` explicit so Workflow does not fall back to `DATABASE_URL` (SQLite).
|
||||
- The app `/api/health` probes Workflow backend connectivity and returns non-200 when Workflow world is unavailable.
|
||||
|
||||
Emergency rollback path:
|
||||
|
||||
1. Set `WORKFLOW_TARGET_WORLD=local`
|
||||
2. Remove/disable `WORKFLOW_POSTGRES_URL`
|
||||
3. Redeploy
|
||||
|
||||
## Environment
|
||||
|
||||
@@ -100,7 +109,12 @@ OLLAMA_MODEL=qwen3:8b
|
||||
OLLAMA_API_KEY=ollama
|
||||
SEC_USER_AGENT=Fiscal Clone <support@fiscal.local>
|
||||
|
||||
WORKFLOW_TARGET_WORLD=local
|
||||
WORKFLOW_TARGET_WORLD=@workflow/world-postgres
|
||||
WORKFLOW_POSTGRES_URL=postgres://workflow:workflow@workflow-postgres:5432/workflow
|
||||
WORKFLOW_POSTGRES_WORKER_CONCURRENCY=10
|
||||
WORKFLOW_POSTGRES_JOB_PREFIX=fiscal_
|
||||
|
||||
# Optional local-world fallback
|
||||
WORKFLOW_LOCAL_DATA_DIR=.workflow-data
|
||||
WORKFLOW_LOCAL_QUEUE_CONCURRENCY=100
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user