Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
fcb0195
feat: Slack integration, Wiki/RAG pipeline, Projects UI, wired workflow
ricardosobr Apr 10, 2026
0219f94
feat: add dev's webhook resume logic, workflow trigger, and Linear we…
ricardosobr Apr 10, 2026
b909a28
fix: add projects table to init-db.mjs (was lost during merge)
ricardosobr Apr 10, 2026
9363c95
fix: add Linear workspace URL to .env.example
ricardosobr Apr 10, 2026
808f7fb
feat: switch to SOL (Solidus) Linear team with Triage + severity labels
ricardosobr Apr 10, 2026
9f379ad
feat: Complete multi-project architecture refactor (Steps 1-3, 5)
ricardosobr Apr 10, 2026
b380c36
feat: Implement Step 6 - Integration Endpoints (per-project config)
ricardosobr Apr 10, 2026
b79dc37
feat: implement project-scoped API routes with middleware validation
ricardosobr Apr 10, 2026
5d5bba8
feat: complete Step 5 - frontend settings UI and comprehensive docume…
ricardosobr Apr 10, 2026
7237290
fix: remove unused Plug icon import and update docker-compose for clo…
ricardosobr Apr 10, 2026
b2e9d93
fix: hardcode frontend to use static mode and remove vite dev server
ricardosobr Apr 10, 2026
d7e8c70
fix: prevent useConversations hook error in ChatPage
ricardosobr Apr 10, 2026
49669bf
docs: add comprehensive infrastructure handoff guide
ricardosobr Apr 10, 2026
6889481
feat: auto-initialize default project on registration + restore profe…
ricardosobr Apr 10, 2026
d063ac9
fix: type frontend project init response properly
ricardosobr Apr 10, 2026
6dbee32
fix: enforce user isolation for projects + fix memory threads routing
ricardosobr Apr 10, 2026
5ebd52a
fix: restore direct workflow trigger and full board functionality
ricardosobr Apr 10, 2026
b1dd3f2
feat: expose runtime webhooks via cloudflare tunnel
ricardosobr Apr 10, 2026
66c5a60
docs: document orchestrator system prompt optimization strategy
ricardosobr Apr 10, 2026
922c6ee
refactor: optimize orchestrator prompt via memory-based context (Opti…
ricardosobr Apr 10, 2026
906e7b9
fix: reduce max_tokens and switch to mercury-2 for cost efficiency
ricardosobr Apr 10, 2026
f7d9dbf
feat: integrate Slack notification agent into workflow
ricardosobr Apr 10, 2026
50976ef
fix: update test expectations and mock context for pipeline compatibi…
ricardosobr Apr 10, 2026
6fb0395
fix: enhance project-routes test mock to support user isolation
ricardosobr Apr 10, 2026
7e0bd39
fix: adopt ephemeral volumes approach for docker-compose
ricardosobr Apr 10, 2026
5e2fe4e
feat: complete UI/UX overhaul — observability, workflow streaming, bo…
ricardosobr Apr 11, 2026
384e8a2
merge: integrate origin/main (final-integration-v2) into our branch
ricardosobr Apr 11, 2026
df4a5e2
fix: remove duplicate project_id column in local_tickets table
ricardosobr Apr 11, 2026
7daee93
refactor(runtime): Mastra v1.4 compat + dynamic Linear IDs + assignee…
ricardosobr Apr 15, 2026
d02b4b2
feat(ui): workflow timeline streaming + assignee on triage card
ricardosobr Apr 15, 2026
0a09600
feat(ui): board redesign (swimlane + cycle sidebar) + Caddy routing
ricardosobr Apr 15, 2026
69d64dc
chore(runtime): sanitize email subjects + /api/test/email debug route
ricardosobr Apr 15, 2026
9b58f46
fix(ui): move ChatPage gates after hooks to satisfy Rules of Hooks
ricardosobr Apr 15, 2026
c3e5b84
feat(workflow): route Linear issues to the right cycle based on deadline
ricardosobr Apr 15, 2026
2d1cfa9
fix(workflow): verify resolution email result + shrink OpenRouter res…
ricardosobr Apr 16, 2026
62fb05f
fix(workflow): use callTool() helper for sendResolutionNotification
ricardosobr Apr 16, 2026
132454d
fix(observability): crash + cost tracking + webhook test scripts
ricardosobr Apr 16, 2026
fd73700
fix(frontend): restore static Caddy mode + clear TS build errors
ricardosobr Apr 18, 2026
63b13e6
feat(webhooks): verify Linear signatures with HMAC-SHA256 + secret pe…
ricardosobr Apr 18, 2026
6dcc311
feat(wiki): project-aware orchestrator + pipeline fixes
ricardosobr Apr 20, 2026
74e05f2
feat(integrations): envelope-encrypted per-tenant keys schema
ricardosobr Apr 20, 2026
4ec307a
chore(types): fix pre-existing tsc drift (schema + pricing)
ricardosobr Apr 20, 2026
54de998
feat(integrations): resolve API keys per-tenant in tools (#4a)
ricardosobr Apr 20, 2026
124f29a
feat(integrations): resolve OpenRouter keys per-tenant for agents/too…
ricardosobr Apr 21, 2026
25db1f1
docs: update multi-tenant handoff with #4b closure + next-up #5
ricardosobr Apr 21, 2026
82713c2
refactor(integrations): rewrite integration-routes against encrypted …
ricardosobr Apr 21, 2026
1caef24
feat(ui): /integrations page with OpenRouter card + confirm dialog (#5a)
ricardosobr Apr 21, 2026
6206218
docs: handoff update for #5a slice closure + #5b followups
ricardosobr Apr 21, 2026
38fc56e
feat(integrations): Linear tenant key + scoped-routes ownership (#5b)
ricardosobr Apr 22, 2026
4c518bf
feat(ui): Linear card + agent project clarification (#5b)
ricardosobr Apr 22, 2026
d3d9c7c
feat(integrations): Slack/Resend/GitHub test dispatchers + tenant met…
ricardosobr Apr 22, 2026
4a350be
feat(ui): Slack/Resend/GitHub cards + account-email reporter (#5c)
ricardosobr Apr 22, 2026
5f732c7
docs: handoff update for #5c slice closure + #5d plan (Pattern C)
ricardosobr Apr 22, 2026
251e146
feat(integrations): GitHub probe + private-repo clone auth + repo-acc…
ricardosobr Apr 22, 2026
1237470
feat(ui): GitHubCard verify-access + needs_auth prompt + retry button…
ricardosobr Apr 22, 2026
2dc52bf
docs: handoff update for #5d slice closure + new gotchas
ricardosobr Apr 22, 2026
f665cf7
chore(workspace): add Linear MCP server to .mcp.json
ricardosobr May 12, 2026
838f03b
feat(ui): inline GitHub logo on integrations card + lucide-react bump…
ricardosobr May 12, 2026
3865f13
feat(security): guard /wiki/generate against needs_auth status (TRI-62)
ricardosobr May 12, 2026
636a325
refactor(ui): route all 5 integration cards through BrandIcon (svgl)
ricardosobr May 12, 2026
a1e51cc
feat(security): webhook_secrets composite PK (provider, project_id) (…
ricardosobr May 12, 2026
87a1f3b
feat(integrations): invalidate stale github integration on repo_url c…
ricardosobr May 12, 2026
acacbdf
feat(db): consolidate projects.status + webhook_secrets PK migration …
ricardosobr May 12, 2026
2aea95e
test(runtime): align stale unit tests with current contracts
ricardosobr May 12, 2026
b011ea7
test(infra): align infra-tests with post-Helm-extraction architecture
ricardosobr May 12, 2026
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
73 changes: 21 additions & 52 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -20,16 +20,25 @@ LIBSQL_URL=http://libsql:8080
BETTER_AUTH_SECRET=CHANGEME
BETTER_AUTH_URL=http://localhost:3001

# === Envelope encryption for per-tenant integration keys ===
# 32 bytes, base64 — generate with: openssl rand -base64 32
# Used by runtime/src/lib/crypto-envelope.ts to wrap per-row DEKs that
# encrypt project_integrations.encrypted_key. Rotating this key requires
# re-wrapping every row's DEK; losing it makes stored keys unrecoverable.
APP_MASTER_KEY=CHANGEME

# === LLM / AI (OpenRouter) ===
# Get your key at https://openrouter.ai/settings/keys
OPENROUTER_API_KEY=CHANGEME

# === Integrations ===

# === Integrations: Linear ===
# Get key at: https://linear.app/agentic-engineering-agency/settings/api
# Dashboard: https://linear.app/agentic-engineering-agency/team/TRI/all
# Get key at: your Linear workspace settings → API
# Team ID: go to your team dashboard → copy the team UUID from the URL
# Dashboard: https://linear.app/your-workspace/team/YOUR_TEAM_KEY/all
LINEAR_API_KEY=CHANGEME
LINEAR_TEAM_ID=645a639b-39e2-4abe-8ded-3346d2f79f9f # Default: TRI team from agentic-engineering-agency
GITHUB_TOKEN=CHANGEME # GitHub PAT for PR comments (repo scope)

# === Integrations: Resend (Email) ===
Expand All @@ -46,65 +55,25 @@ SLACK_CHANNEL_ID=CHANGEME
SLACK_SIGNING_SECRET=CHANGEME
# Team member Slack user IDs (for @mentions in notifications)
# Find IDs: click a user profile in Slack → "..." → "Copy member ID"
SLACK_USER_CHENKO=
SLACK_USER_FERNANDO=
SLACK_USER_KOKI=
SLACK_USER_CHENKO=
SLACK_USER_LALO=

# === Integrations: Jira ===
JIRA_BASE_URL=https://your-domain.atlassian.net
JIRA_EMAIL=your-email@example.com
JIRA_API_TOKEN=CHANGEME

# === Cloudflare Tunnel ===
# Token for the triage-hackathon tunnel (routes langfuse.agenticengineering.lat → langfuse-web:3000)
# Get with: cloudflared tunnel token triage-hackathon
CLOUDFLARE_TUNNEL_TOKEN=CHANGEME

# === Langfuse Core ===
# Generate with: openssl rand -hex 32
ENCRYPTION_KEY=CHANGEME
SALT=CHANGEME
NEXTAUTH_SECRET=CHANGEME
NEXTAUTH_URL=https://langfuse.agenticengineering.lat
# External URL via Cloudflare Tunnel — used by OpenRouter broadcast and Mastra LangfuseExporter
LANGFUSE_BASEURL=https://langfuse.agenticengineering.lat
LANGFUSE_PUBLIC_KEY=CHANGEME
LANGFUSE_SECRET_KEY=CHANGEME
TELEMETRY_ENABLED=true
LANGFUSE_ENABLE_EXPERIMENTAL_FEATURES=false
# URL shown in the frontend "Observability" link in the sidebar.
# Production (via Cloudflare Tunnel): https://langfuse.agenticengineering.lat
# Demo / local dev: http://localhost:3000
# Note: exposed to the browser at build time (VITE_* prefix).
VITE_OBSERVABILITY_URL=http://localhost:3000

# === Langfuse Infrastructure ===
# Generate with: openssl rand -hex 32
CLICKHOUSE_PASSWORD=CHANGEME
REDIS_AUTH=CHANGEME
MINIO_ROOT_USER=minio
MINIO_ROOT_PASSWORD=CHANGEME
LANGFUSE_S3_EVENT_UPLOAD_SECRET_ACCESS_KEY=CHANGEME
LANGFUSE_S3_MEDIA_UPLOAD_SECRET_ACCESS_KEY=CHANGEME
LANGFUSE_S3_BATCH_EXPORT_SECRET_ACCESS_KEY=CHANGEME
LANGFUSE_S3_BATCH_EXPORT_ENABLED=false

# === Langfuse Init (Headless Setup — auto-creates org/project/user) ===
LANGFUSE_INIT_ORG_ID=triage-org
LANGFUSE_INIT_ORG_NAME=Triage SRE
LANGFUSE_INIT_PROJECT_ID=triage-project
LANGFUSE_INIT_PROJECT_NAME=Triage Agent
LANGFUSE_INIT_PROJECT_PUBLIC_KEY=CHANGEME
LANGFUSE_INIT_PROJECT_SECRET_KEY=CHANGEME
LANGFUSE_INIT_USER_EMAIL=admin@agenticengineering.lat
LANGFUSE_INIT_USER_NAME=Admin
LANGFUSE_INIT_USER_PASSWORD=CHANGEME

# === Postgres (Langfuse backend DB) ===
POSTGRES_USER=postgres
POSTGRES_PASSWORD=CHANGEME
POSTGRES_DB=langfuse
# === Webhook testing (optional, dev-only) ===
# scripts/simulate-webhook.sh signs its payloads with HMAC-SHA256. By default
# it reads the secret from the webhook_secrets table (populated by POST
# /api/linear/webhook/setup once the webhook is registered with Linear).
# If you don't have a registered webhook yet — e.g. you're testing locally
# without ngrok — uncomment and set this to any non-empty string and export
# it only in the shell that runs simulate-webhook.sh. Do NOT set this in the
# running runtime's env: the server always reads from the DB.
# WEBHOOK_SECRET=dev-only-not-a-real-secret

# === Frontend ===
# Valid values: static (production, serves built SPA) or dev (proxies to Vite HMR)
Expand Down
4 changes: 4 additions & 0 deletions .mcp.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@
"@mastra/mcp-docs-server@latest"
],
"env": {}
},
"linear": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.linear.app/mcp"]
}
}
}
Loading
Loading