agent-relay 2.0.22 → 2.0.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/relay-pty-linux-arm64 +0 -0
- package/dist/src/cli/index.d.ts +3 -3
- package/dist/src/cli/index.js +58 -74
- package/package.json +21 -62
- package/packages/api-types/package.json +1 -1
- package/packages/bridge/package.json +8 -8
- package/packages/cli-tester/package.json +1 -1
- package/packages/config/package.json +2 -2
- package/packages/continuity/package.json +1 -1
- package/packages/daemon/dist/orchestrator.js +19 -1
- package/packages/daemon/package.json +12 -12
- package/packages/hooks/package.json +4 -4
- package/packages/mcp/package.json +2 -2
- package/packages/memory/package.json +2 -2
- package/packages/policy/package.json +2 -2
- package/packages/protocol/package.json +1 -1
- package/packages/resiliency/package.json +1 -1
- package/packages/sdk/package.json +2 -2
- package/packages/spawner/package.json +1 -1
- package/packages/state/package.json +1 -1
- package/packages/storage/package.json +2 -2
- package/packages/telemetry/package.json +1 -1
- package/packages/trajectory/package.json +2 -2
- package/packages/user-directory/package.json +2 -2
- package/packages/utils/dist/update-checker.js +4 -0
- package/packages/utils/package.json +1 -1
- package/packages/wrapper/package.json +6 -6
- package/deploy/init-db.sql +0 -5
- package/deploy/scripts/setup-fly-workspaces.sh +0 -69
- package/deploy/scripts/setup-railway.sh +0 -75
- package/deploy/workspace/codex.config.toml +0 -20
- package/deploy/workspace/entrypoint-browser.sh +0 -118
- package/deploy/workspace/entrypoint.sh +0 -612
- package/deploy/workspace/gh-credential-relay +0 -90
- package/deploy/workspace/gh-relay +0 -156
- package/deploy/workspace/git-credential-relay +0 -330
- package/deploy/workspace/git-credential-relay.test.sh +0 -230
- package/dist/dashboard/out/404.html +0 -1
- package/dist/dashboard/out/_next/static/91mkGYq3qbG8WHE6VytQ8/_buildManifest.js +0 -1
- package/dist/dashboard/out/_next/static/91mkGYq3qbG8WHE6VytQ8/_ssgManifest.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/116-a883fca163f3a5bc.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/117-c8afed19e821a35d.js +0 -2
- package/dist/dashboard/out/_next/static/chunks/282-980c2eb8fff20123.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/320-a6304232cd0ee2ce.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/532-bace199897eeab37.js +0 -9
- package/dist/dashboard/out/_next/static/chunks/631-16b905e5920f9b59.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/648-acb2ff9f77cbfbd3.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/766-2aea80818f7eb0d8.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/83-26d2bde54616ee90.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/847-f1f467060f32afff.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/891-5cb1513eeb97a891.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/app/_not-found/page-60501fddbafba9dc.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/app/app/onboarding/page-9914652442f7e4fb.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/app/app/page-366fb7c078d4e9e0.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/app/cloud/link/page-fa1d5842aa90e8a6.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/app/complete-profile/page-dd64bbdf66b639cd.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/app/connect-repos/page-113060009ef35bc2.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/app/history/page-9965d2483011b846.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/app/layout-6b91e33784c20610.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/app/login/page-435eceb0073be027.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/app/metrics/page-1e37ef8e73940b40.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/app/page-8119d4246743574e.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/app/pricing/page-9db3ebdfa567a7c9.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/app/providers/page-ecb16ffd3b36262b.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/app/providers/setup/[provider]/page-4dbe33f0f7691b7c.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/app/signup/page-c7a0a28341365ae0.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/e868780c-48e5f147c90a3a41.js +0 -18
- package/dist/dashboard/out/_next/static/chunks/fd9d1056-609918ca7b6280bb.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/framework-f66176bb897dc684.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/main-311c3db74dcfadb7.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/main-app-fdbeb09028f57c9f.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/pages/_app-72b849fbd24ac258.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/pages/_error-7ba65e1336b92748.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/polyfills-42372ed130431b0a.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/webpack-1cdd8ed57114d5e1.js +0 -1
- package/dist/dashboard/out/_next/static/css/4034f236dd1a3178.css +0 -1
- package/dist/dashboard/out/_next/static/css/6892f8422896ef7a.css +0 -1
- package/dist/dashboard/out/alt-logos/agent-relay-logo-128.png +0 -0
- package/dist/dashboard/out/alt-logos/agent-relay-logo-256.png +0 -0
- package/dist/dashboard/out/alt-logos/agent-relay-logo-32.png +0 -0
- package/dist/dashboard/out/alt-logos/agent-relay-logo-512.png +0 -0
- package/dist/dashboard/out/alt-logos/agent-relay-logo-64.png +0 -0
- package/dist/dashboard/out/alt-logos/agent-relay-logo.svg +0 -45
- package/dist/dashboard/out/alt-logos/logo.svg +0 -38
- package/dist/dashboard/out/alt-logos/monogram-logo-128.png +0 -0
- package/dist/dashboard/out/alt-logos/monogram-logo-256.png +0 -0
- package/dist/dashboard/out/alt-logos/monogram-logo-32.png +0 -0
- package/dist/dashboard/out/alt-logos/monogram-logo-512.png +0 -0
- package/dist/dashboard/out/alt-logos/monogram-logo-64.png +0 -0
- package/dist/dashboard/out/alt-logos/monogram-logo.svg +0 -38
- package/dist/dashboard/out/app/onboarding.html +0 -1
- package/dist/dashboard/out/app/onboarding.txt +0 -7
- package/dist/dashboard/out/app.html +0 -1
- package/dist/dashboard/out/app.txt +0 -7
- package/dist/dashboard/out/apple-icon.png +0 -0
- package/dist/dashboard/out/cloud/link.html +0 -1
- package/dist/dashboard/out/cloud/link.txt +0 -7
- package/dist/dashboard/out/complete-profile.html +0 -5
- package/dist/dashboard/out/complete-profile.txt +0 -7
- package/dist/dashboard/out/connect-repos.html +0 -1
- package/dist/dashboard/out/connect-repos.txt +0 -7
- package/dist/dashboard/out/history.html +0 -1
- package/dist/dashboard/out/history.txt +0 -7
- package/dist/dashboard/out/index.html +0 -1
- package/dist/dashboard/out/index.txt +0 -7
- package/dist/dashboard/out/login.html +0 -5
- package/dist/dashboard/out/login.txt +0 -7
- package/dist/dashboard/out/metrics.html +0 -1
- package/dist/dashboard/out/metrics.txt +0 -7
- package/dist/dashboard/out/pricing.html +0 -13
- package/dist/dashboard/out/pricing.txt +0 -7
- package/dist/dashboard/out/providers/setup/claude.html +0 -1
- package/dist/dashboard/out/providers/setup/claude.txt +0 -8
- package/dist/dashboard/out/providers/setup/codex.html +0 -1
- package/dist/dashboard/out/providers/setup/codex.txt +0 -8
- package/dist/dashboard/out/providers/setup/cursor.html +0 -1
- package/dist/dashboard/out/providers/setup/cursor.txt +0 -8
- package/dist/dashboard/out/providers.html +0 -1
- package/dist/dashboard/out/providers.txt +0 -7
- package/dist/dashboard/out/signup.html +0 -6
- package/dist/dashboard/out/signup.txt +0 -7
- package/dist/src/cloud/index.d.ts +0 -8
- package/dist/src/cloud/index.js +0 -8
- package/dist/src/dashboard-server/index.d.ts +0 -8
- package/dist/src/dashboard-server/index.js +0 -8
- package/packages/cloud/dist/api/admin.d.ts +0 -8
- package/packages/cloud/dist/api/admin.js +0 -225
- package/packages/cloud/dist/api/auth.d.ts +0 -20
- package/packages/cloud/dist/api/auth.js +0 -138
- package/packages/cloud/dist/api/billing.d.ts +0 -7
- package/packages/cloud/dist/api/billing.js +0 -564
- package/packages/cloud/dist/api/cli-pty-runner.d.ts +0 -53
- package/packages/cloud/dist/api/cli-pty-runner.js +0 -175
- package/packages/cloud/dist/api/codex-auth-helper.d.ts +0 -21
- package/packages/cloud/dist/api/codex-auth-helper.js +0 -327
- package/packages/cloud/dist/api/consensus.d.ts +0 -13
- package/packages/cloud/dist/api/consensus.js +0 -261
- package/packages/cloud/dist/api/coordinators.d.ts +0 -8
- package/packages/cloud/dist/api/coordinators.js +0 -750
- package/packages/cloud/dist/api/daemons.d.ts +0 -12
- package/packages/cloud/dist/api/daemons.js +0 -535
- package/packages/cloud/dist/api/email-auth.d.ts +0 -11
- package/packages/cloud/dist/api/email-auth.js +0 -347
- package/packages/cloud/dist/api/generic-webhooks.d.ts +0 -8
- package/packages/cloud/dist/api/generic-webhooks.js +0 -129
- package/packages/cloud/dist/api/git.d.ts +0 -8
- package/packages/cloud/dist/api/git.js +0 -269
- package/packages/cloud/dist/api/github-app.d.ts +0 -11
- package/packages/cloud/dist/api/github-app.js +0 -223
- package/packages/cloud/dist/api/middleware/planLimits.d.ts +0 -43
- package/packages/cloud/dist/api/middleware/planLimits.js +0 -202
- package/packages/cloud/dist/api/monitoring.d.ts +0 -11
- package/packages/cloud/dist/api/monitoring.js +0 -578
- package/packages/cloud/dist/api/nango-auth.d.ts +0 -9
- package/packages/cloud/dist/api/nango-auth.js +0 -741
- package/packages/cloud/dist/api/onboarding.d.ts +0 -15
- package/packages/cloud/dist/api/onboarding.js +0 -679
- package/packages/cloud/dist/api/policy.d.ts +0 -8
- package/packages/cloud/dist/api/policy.js +0 -229
- package/packages/cloud/dist/api/provider-env.d.ts +0 -26
- package/packages/cloud/dist/api/provider-env.js +0 -141
- package/packages/cloud/dist/api/providers.d.ts +0 -7
- package/packages/cloud/dist/api/providers.js +0 -574
- package/packages/cloud/dist/api/repos.d.ts +0 -8
- package/packages/cloud/dist/api/repos.js +0 -577
- package/packages/cloud/dist/api/sessions.d.ts +0 -11
- package/packages/cloud/dist/api/sessions.js +0 -302
- package/packages/cloud/dist/api/teams.d.ts +0 -7
- package/packages/cloud/dist/api/teams.js +0 -281
- package/packages/cloud/dist/api/test-helpers.d.ts +0 -10
- package/packages/cloud/dist/api/test-helpers.js +0 -745
- package/packages/cloud/dist/api/usage.d.ts +0 -7
- package/packages/cloud/dist/api/usage.js +0 -111
- package/packages/cloud/dist/api/webhooks.d.ts +0 -8
- package/packages/cloud/dist/api/webhooks.js +0 -645
- package/packages/cloud/dist/api/workspaces.d.ts +0 -25
- package/packages/cloud/dist/api/workspaces.js +0 -1799
- package/packages/cloud/dist/billing/index.d.ts +0 -9
- package/packages/cloud/dist/billing/index.js +0 -9
- package/packages/cloud/dist/billing/plans.d.ts +0 -39
- package/packages/cloud/dist/billing/plans.js +0 -245
- package/packages/cloud/dist/billing/service.d.ts +0 -80
- package/packages/cloud/dist/billing/service.js +0 -388
- package/packages/cloud/dist/billing/types.d.ts +0 -141
- package/packages/cloud/dist/billing/types.js +0 -7
- package/packages/cloud/dist/config.d.ts +0 -5
- package/packages/cloud/dist/config.js +0 -5
- package/packages/cloud/dist/db/bulk-ingest.d.ts +0 -89
- package/packages/cloud/dist/db/bulk-ingest.js +0 -268
- package/packages/cloud/dist/db/drizzle.d.ts +0 -290
- package/packages/cloud/dist/db/drizzle.js +0 -1422
- package/packages/cloud/dist/db/index.d.ts +0 -56
- package/packages/cloud/dist/db/index.js +0 -70
- package/packages/cloud/dist/db/schema.d.ts +0 -5117
- package/packages/cloud/dist/db/schema.js +0 -656
- package/packages/cloud/dist/index.d.ts +0 -11
- package/packages/cloud/dist/index.js +0 -38
- package/packages/cloud/dist/provisioner/index.d.ts +0 -207
- package/packages/cloud/dist/provisioner/index.js +0 -2118
- package/packages/cloud/dist/server.d.ts +0 -17
- package/packages/cloud/dist/server.js +0 -2034
- package/packages/cloud/dist/services/auto-scaler.d.ts +0 -152
- package/packages/cloud/dist/services/auto-scaler.js +0 -439
- package/packages/cloud/dist/services/capacity-manager.d.ts +0 -148
- package/packages/cloud/dist/services/capacity-manager.js +0 -449
- package/packages/cloud/dist/services/ci-agent-spawner.d.ts +0 -49
- package/packages/cloud/dist/services/ci-agent-spawner.js +0 -373
- package/packages/cloud/dist/services/cloud-message-bus.d.ts +0 -28
- package/packages/cloud/dist/services/cloud-message-bus.js +0 -19
- package/packages/cloud/dist/services/compute-enforcement.d.ts +0 -57
- package/packages/cloud/dist/services/compute-enforcement.js +0 -175
- package/packages/cloud/dist/services/coordinator.d.ts +0 -62
- package/packages/cloud/dist/services/coordinator.js +0 -389
- package/packages/cloud/dist/services/index.d.ts +0 -17
- package/packages/cloud/dist/services/index.js +0 -25
- package/packages/cloud/dist/services/intro-expiration.d.ts +0 -60
- package/packages/cloud/dist/services/intro-expiration.js +0 -252
- package/packages/cloud/dist/services/mention-handler.d.ts +0 -65
- package/packages/cloud/dist/services/mention-handler.js +0 -405
- package/packages/cloud/dist/services/nango.d.ts +0 -219
- package/packages/cloud/dist/services/nango.js +0 -424
- package/packages/cloud/dist/services/persistence.d.ts +0 -131
- package/packages/cloud/dist/services/persistence.js +0 -200
- package/packages/cloud/dist/services/planLimits.d.ts +0 -147
- package/packages/cloud/dist/services/planLimits.js +0 -335
- package/packages/cloud/dist/services/presence-registry.d.ts +0 -56
- package/packages/cloud/dist/services/presence-registry.js +0 -91
- package/packages/cloud/dist/services/scaling-orchestrator.d.ts +0 -159
- package/packages/cloud/dist/services/scaling-orchestrator.js +0 -502
- package/packages/cloud/dist/services/scaling-policy.d.ts +0 -121
- package/packages/cloud/dist/services/scaling-policy.js +0 -415
- package/packages/cloud/dist/services/ssh-security.d.ts +0 -31
- package/packages/cloud/dist/services/ssh-security.js +0 -63
- package/packages/cloud/dist/services/workspace-keepalive.d.ts +0 -76
- package/packages/cloud/dist/services/workspace-keepalive.js +0 -234
- package/packages/cloud/dist/shims/consensus.d.ts +0 -23
- package/packages/cloud/dist/shims/consensus.js +0 -5
- package/packages/cloud/dist/webhooks/index.d.ts +0 -24
- package/packages/cloud/dist/webhooks/index.js +0 -29
- package/packages/cloud/dist/webhooks/parsers/github.d.ts +0 -8
- package/packages/cloud/dist/webhooks/parsers/github.js +0 -234
- package/packages/cloud/dist/webhooks/parsers/index.d.ts +0 -23
- package/packages/cloud/dist/webhooks/parsers/index.js +0 -30
- package/packages/cloud/dist/webhooks/parsers/linear.d.ts +0 -9
- package/packages/cloud/dist/webhooks/parsers/linear.js +0 -258
- package/packages/cloud/dist/webhooks/parsers/slack.d.ts +0 -9
- package/packages/cloud/dist/webhooks/parsers/slack.js +0 -214
- package/packages/cloud/dist/webhooks/responders/github.d.ts +0 -8
- package/packages/cloud/dist/webhooks/responders/github.js +0 -73
- package/packages/cloud/dist/webhooks/responders/index.d.ts +0 -23
- package/packages/cloud/dist/webhooks/responders/index.js +0 -30
- package/packages/cloud/dist/webhooks/responders/linear.d.ts +0 -9
- package/packages/cloud/dist/webhooks/responders/linear.js +0 -149
- package/packages/cloud/dist/webhooks/responders/slack.d.ts +0 -20
- package/packages/cloud/dist/webhooks/responders/slack.js +0 -178
- package/packages/cloud/dist/webhooks/router.d.ts +0 -25
- package/packages/cloud/dist/webhooks/router.js +0 -504
- package/packages/cloud/dist/webhooks/rules-engine.d.ts +0 -24
- package/packages/cloud/dist/webhooks/rules-engine.js +0 -287
- package/packages/cloud/dist/webhooks/types.d.ts +0 -186
- package/packages/cloud/dist/webhooks/types.js +0 -8
- package/packages/cloud/package.json +0 -60
- package/packages/dashboard/README.md +0 -48
- package/packages/dashboard/dist/health-worker-manager.d.ts +0 -62
- package/packages/dashboard/dist/health-worker-manager.js +0 -144
- package/packages/dashboard/dist/health-worker.d.ts +0 -9
- package/packages/dashboard/dist/health-worker.js +0 -79
- package/packages/dashboard/dist/index.d.ts +0 -20
- package/packages/dashboard/dist/index.js +0 -19
- package/packages/dashboard/dist/metrics.d.ts +0 -105
- package/packages/dashboard/dist/metrics.js +0 -193
- package/packages/dashboard/dist/needs-attention.d.ts +0 -24
- package/packages/dashboard/dist/needs-attention.js +0 -78
- package/packages/dashboard/dist/server.d.ts +0 -25
- package/packages/dashboard/dist/server.js +0 -5270
- package/packages/dashboard/dist/start.d.ts +0 -6
- package/packages/dashboard/dist/start.js +0 -13
- package/packages/dashboard/dist/types/threading.d.ts +0 -8
- package/packages/dashboard/dist/types/threading.js +0 -2
- package/packages/dashboard/dist/user-bridge.d.ts +0 -154
- package/packages/dashboard/dist/user-bridge.js +0 -372
- package/packages/dashboard/package.json +0 -65
- package/packages/dashboard/ui/app/app/onboarding/page.tsx +0 -394
- package/packages/dashboard/ui/app/app/page.tsx +0 -667
- package/packages/dashboard/ui/app/apple-icon.png +0 -0
- package/packages/dashboard/ui/app/cloud/link/page.tsx +0 -464
- package/packages/dashboard/ui/app/complete-profile/page.tsx +0 -204
- package/packages/dashboard/ui/app/connect-repos/page.tsx +0 -410
- package/packages/dashboard/ui/app/favicon.png +0 -0
- package/packages/dashboard/ui/app/globals.css +0 -59
- package/packages/dashboard/ui/app/history/page.tsx +0 -658
- package/packages/dashboard/ui/app/layout.tsx +0 -25
- package/packages/dashboard/ui/app/login/page.tsx +0 -424
- package/packages/dashboard/ui/app/metrics/page.tsx +0 -751
- package/packages/dashboard/ui/app/page.tsx +0 -59
- package/packages/dashboard/ui/app/pricing/page.tsx +0 -7
- package/packages/dashboard/ui/app/providers/page.tsx +0 -193
- package/packages/dashboard/ui/app/providers/setup/[provider]/ProviderSetupClient.tsx +0 -148
- package/packages/dashboard/ui/app/providers/setup/[provider]/constants.ts +0 -35
- package/packages/dashboard/ui/app/providers/setup/[provider]/page.tsx +0 -42
- package/packages/dashboard/ui/app/signup/page.tsx +0 -533
- package/packages/dashboard/ui/index.ts +0 -49
- package/packages/dashboard/ui/landing/LandingPage.tsx +0 -713
- package/packages/dashboard/ui/landing/PricingPage.tsx +0 -559
- package/packages/dashboard/ui/landing/index.ts +0 -6
- package/packages/dashboard/ui/landing/styles.css +0 -2850
- package/packages/dashboard/ui/lib/agent-merge.ts +0 -35
- package/packages/dashboard/ui/lib/api.ts +0 -1155
- package/packages/dashboard/ui/lib/cloudApi.ts +0 -877
- package/packages/dashboard/ui/lib/colors.ts +0 -218
- package/packages/dashboard/ui/lib/hierarchy.ts +0 -242
- package/packages/dashboard/ui/lib/stuckDetection.ts +0 -142
- package/packages/dashboard/ui/next-env.d.ts +0 -5
- package/packages/dashboard/ui/next.config.js +0 -41
- package/packages/dashboard/ui/package-lock.json +0 -2882
- package/packages/dashboard/ui/package.json +0 -33
- package/packages/dashboard/ui/postcss.config.js +0 -5
- package/packages/dashboard/ui/react-components/ActivityFeed.tsx +0 -216
- package/packages/dashboard/ui/react-components/AddWorkspaceModal.tsx +0 -170
- package/packages/dashboard/ui/react-components/AgentCard.tsx +0 -587
- package/packages/dashboard/ui/react-components/AgentList.tsx +0 -411
- package/packages/dashboard/ui/react-components/AgentProfilePanel.tsx +0 -564
- package/packages/dashboard/ui/react-components/App.tsx +0 -3033
- package/packages/dashboard/ui/react-components/BillingPanel.tsx +0 -922
- package/packages/dashboard/ui/react-components/BillingResult.tsx +0 -447
- package/packages/dashboard/ui/react-components/BroadcastComposer.tsx +0 -690
- package/packages/dashboard/ui/react-components/ChannelAdminPanel.tsx +0 -773
- package/packages/dashboard/ui/react-components/ChannelBrowser.tsx +0 -385
- package/packages/dashboard/ui/react-components/ChannelChat.tsx +0 -261
- package/packages/dashboard/ui/react-components/ChannelSidebar.tsx +0 -399
- package/packages/dashboard/ui/react-components/CloudSessionProvider.tsx +0 -130
- package/packages/dashboard/ui/react-components/CommandPalette.tsx +0 -815
- package/packages/dashboard/ui/react-components/ConfirmationDialog.tsx +0 -133
- package/packages/dashboard/ui/react-components/ConversationHistory.tsx +0 -518
- package/packages/dashboard/ui/react-components/CoordinatorPanel.tsx +0 -944
- package/packages/dashboard/ui/react-components/DecisionQueue.tsx +0 -717
- package/packages/dashboard/ui/react-components/DirectMessageView.tsx +0 -164
- package/packages/dashboard/ui/react-components/FileAutocomplete.tsx +0 -368
- package/packages/dashboard/ui/react-components/FleetOverview.tsx +0 -278
- package/packages/dashboard/ui/react-components/LogViewer.tsx +0 -310
- package/packages/dashboard/ui/react-components/LogViewerPanel.tsx +0 -482
- package/packages/dashboard/ui/react-components/Logo.tsx +0 -284
- package/packages/dashboard/ui/react-components/MentionAutocomplete.tsx +0 -384
- package/packages/dashboard/ui/react-components/MessageComposer.tsx +0 -457
- package/packages/dashboard/ui/react-components/MessageList.tsx +0 -649
- package/packages/dashboard/ui/react-components/MessageSenderName.tsx +0 -91
- package/packages/dashboard/ui/react-components/MessageStatusIndicator.tsx +0 -142
- package/packages/dashboard/ui/react-components/NewConversationModal.tsx +0 -400
- package/packages/dashboard/ui/react-components/NotificationToast.tsx +0 -488
- package/packages/dashboard/ui/react-components/OnlineUsersIndicator.tsx +0 -164
- package/packages/dashboard/ui/react-components/Pagination.tsx +0 -124
- package/packages/dashboard/ui/react-components/PricingPlans.tsx +0 -386
- package/packages/dashboard/ui/react-components/ProjectList.tsx +0 -625
- package/packages/dashboard/ui/react-components/ProviderAuthFlow.tsx +0 -853
- package/packages/dashboard/ui/react-components/ProviderConnectionList.tsx +0 -378
- package/packages/dashboard/ui/react-components/ProvisioningProgress.tsx +0 -730
- package/packages/dashboard/ui/react-components/RepoAccessPanel.tsx +0 -549
- package/packages/dashboard/ui/react-components/ServerCard.tsx +0 -202
- package/packages/dashboard/ui/react-components/SessionExpiredModal.tsx +0 -128
- package/packages/dashboard/ui/react-components/SpawnModal.tsx +0 -804
- package/packages/dashboard/ui/react-components/TaskAssignmentUI.tsx +0 -375
- package/packages/dashboard/ui/react-components/TerminalProviderSetup.tsx +0 -608
- package/packages/dashboard/ui/react-components/ThemeProvider.tsx +0 -325
- package/packages/dashboard/ui/react-components/ThinkingIndicator.tsx +0 -231
- package/packages/dashboard/ui/react-components/ThreadList.tsx +0 -198
- package/packages/dashboard/ui/react-components/ThreadPanel.tsx +0 -346
- package/packages/dashboard/ui/react-components/TrajectoryViewer.tsx +0 -698
- package/packages/dashboard/ui/react-components/TypingIndicator.tsx +0 -69
- package/packages/dashboard/ui/react-components/UsageBanner.tsx +0 -231
- package/packages/dashboard/ui/react-components/UserProfilePanel.tsx +0 -233
- package/packages/dashboard/ui/react-components/WorkspaceContext.tsx +0 -107
- package/packages/dashboard/ui/react-components/WorkspaceSelector.tsx +0 -234
- package/packages/dashboard/ui/react-components/WorkspaceStatusIndicator.tsx +0 -370
- package/packages/dashboard/ui/react-components/XTermInteractive.tsx +0 -510
- package/packages/dashboard/ui/react-components/XTermLogViewer.tsx +0 -719
- package/packages/dashboard/ui/react-components/channels/ChannelDialogs.tsx +0 -1411
- package/packages/dashboard/ui/react-components/channels/ChannelHeader.tsx +0 -317
- package/packages/dashboard/ui/react-components/channels/ChannelMessageList.tsx +0 -463
- package/packages/dashboard/ui/react-components/channels/ChannelViewV1.tsx +0 -146
- package/packages/dashboard/ui/react-components/channels/MessageInput.tsx +0 -288
- package/packages/dashboard/ui/react-components/channels/SearchInput.tsx +0 -172
- package/packages/dashboard/ui/react-components/channels/SearchResults.tsx +0 -336
- package/packages/dashboard/ui/react-components/channels/api.ts +0 -697
- package/packages/dashboard/ui/react-components/channels/index.ts +0 -76
- package/packages/dashboard/ui/react-components/channels/mockApi.ts +0 -344
- package/packages/dashboard/ui/react-components/channels/types.ts +0 -566
- package/packages/dashboard/ui/react-components/hooks/index.ts +0 -57
- package/packages/dashboard/ui/react-components/hooks/useAgentLogs.ts +0 -394
- package/packages/dashboard/ui/react-components/hooks/useAgents.ts +0 -127
- package/packages/dashboard/ui/react-components/hooks/useBroadcastDedup.ts +0 -86
- package/packages/dashboard/ui/react-components/hooks/useChannelAdmin.ts +0 -329
- package/packages/dashboard/ui/react-components/hooks/useChannelBrowser.ts +0 -239
- package/packages/dashboard/ui/react-components/hooks/useChannelCommands.ts +0 -138
- package/packages/dashboard/ui/react-components/hooks/useChannels.ts +0 -328
- package/packages/dashboard/ui/react-components/hooks/useDebounce.ts +0 -29
- package/packages/dashboard/ui/react-components/hooks/useDirectMessage.ts +0 -141
- package/packages/dashboard/ui/react-components/hooks/useMessages.ts +0 -309
- package/packages/dashboard/ui/react-components/hooks/useOrchestrator.ts +0 -364
- package/packages/dashboard/ui/react-components/hooks/usePinnedAgents.ts +0 -140
- package/packages/dashboard/ui/react-components/hooks/usePresence.ts +0 -340
- package/packages/dashboard/ui/react-components/hooks/useRecentRepos.ts +0 -130
- package/packages/dashboard/ui/react-components/hooks/useSession.ts +0 -209
- package/packages/dashboard/ui/react-components/hooks/useTrajectory.ts +0 -265
- package/packages/dashboard/ui/react-components/hooks/useWebSocket.ts +0 -169
- package/packages/dashboard/ui/react-components/hooks/useWorkspaceMembers.ts +0 -120
- package/packages/dashboard/ui/react-components/hooks/useWorkspaceRepos.ts +0 -73
- package/packages/dashboard/ui/react-components/hooks/useWorkspaceStatus.ts +0 -237
- package/packages/dashboard/ui/react-components/index.ts +0 -81
- package/packages/dashboard/ui/react-components/layout/Header.tsx +0 -355
- package/packages/dashboard/ui/react-components/layout/RepoContextHeader.tsx +0 -361
- package/packages/dashboard/ui/react-components/layout/Sidebar.archive.test.tsx +0 -126
- package/packages/dashboard/ui/react-components/layout/Sidebar.test.tsx +0 -691
- package/packages/dashboard/ui/react-components/layout/Sidebar.tsx +0 -930
- package/packages/dashboard/ui/react-components/layout/index.ts +0 -7
- package/packages/dashboard/ui/react-components/settings/BillingSettingsPanel.tsx +0 -564
- package/packages/dashboard/ui/react-components/settings/SettingsPage.tsx +0 -544
- package/packages/dashboard/ui/react-components/settings/TeamSettingsPanel.tsx +0 -560
- package/packages/dashboard/ui/react-components/settings/WorkspaceSettingsPanel.tsx +0 -1386
- package/packages/dashboard/ui/react-components/settings/index.ts +0 -11
- package/packages/dashboard/ui/react-components/settings/types.ts +0 -53
- package/packages/dashboard/ui/react-components/utils/messageFormatting.tsx +0 -370
- package/packages/dashboard/ui/tailwind.config.js +0 -148
- package/packages/dashboard/ui/types/index.ts +0 -304
- package/packages/dashboard/ui/types/threading.ts +0 -7
- package/packages/dashboard/ui-dist/404.html +0 -1
- package/packages/dashboard/ui-dist/_next/static/91mkGYq3qbG8WHE6VytQ8/_buildManifest.js +0 -1
- package/packages/dashboard/ui-dist/_next/static/91mkGYq3qbG8WHE6VytQ8/_ssgManifest.js +0 -1
- package/packages/dashboard/ui-dist/_next/static/T2rV14eEU5OweDeV29SvG/_buildManifest.js +0 -1
- package/packages/dashboard/ui-dist/_next/static/T2rV14eEU5OweDeV29SvG/_ssgManifest.js +0 -1
- package/packages/dashboard/ui-dist/_next/static/chunks/116-a883fca163f3a5bc.js +0 -1
- package/packages/dashboard/ui-dist/_next/static/chunks/117-c8afed19e821a35d.js +0 -2
- package/packages/dashboard/ui-dist/_next/static/chunks/282-980c2eb8fff20123.js +0 -1
- package/packages/dashboard/ui-dist/_next/static/chunks/320-a6304232cd0ee2ce.js +0 -1
- package/packages/dashboard/ui-dist/_next/static/chunks/532-bace199897eeab37.js +0 -9
- package/packages/dashboard/ui-dist/_next/static/chunks/631-16b905e5920f9b59.js +0 -1
- package/packages/dashboard/ui-dist/_next/static/chunks/648-acb2ff9f77cbfbd3.js +0 -1
- package/packages/dashboard/ui-dist/_next/static/chunks/766-2aea80818f7eb0d8.js +0 -1
- package/packages/dashboard/ui-dist/_next/static/chunks/83-26d2bde54616ee90.js +0 -1
- package/packages/dashboard/ui-dist/_next/static/chunks/847-f1f467060f32afff.js +0 -1
- package/packages/dashboard/ui-dist/_next/static/chunks/891-5cb1513eeb97a891.js +0 -1
- package/packages/dashboard/ui-dist/_next/static/chunks/app/_not-found/page-60501fddbafba9dc.js +0 -1
- package/packages/dashboard/ui-dist/_next/static/chunks/app/app/onboarding/page-9914652442f7e4fb.js +0 -1
- package/packages/dashboard/ui-dist/_next/static/chunks/app/app/page-366fb7c078d4e9e0.js +0 -1
- package/packages/dashboard/ui-dist/_next/static/chunks/app/cloud/link/page-fa1d5842aa90e8a6.js +0 -1
- package/packages/dashboard/ui-dist/_next/static/chunks/app/complete-profile/page-dd64bbdf66b639cd.js +0 -1
- package/packages/dashboard/ui-dist/_next/static/chunks/app/connect-repos/page-113060009ef35bc2.js +0 -1
- package/packages/dashboard/ui-dist/_next/static/chunks/app/history/page-9965d2483011b846.js +0 -1
- package/packages/dashboard/ui-dist/_next/static/chunks/app/layout-6b91e33784c20610.js +0 -1
- package/packages/dashboard/ui-dist/_next/static/chunks/app/login/page-435eceb0073be027.js +0 -1
- package/packages/dashboard/ui-dist/_next/static/chunks/app/metrics/page-1e37ef8e73940b40.js +0 -1
- package/packages/dashboard/ui-dist/_next/static/chunks/app/page-8119d4246743574e.js +0 -1
- package/packages/dashboard/ui-dist/_next/static/chunks/app/pricing/page-9db3ebdfa567a7c9.js +0 -1
- package/packages/dashboard/ui-dist/_next/static/chunks/app/providers/page-ecb16ffd3b36262b.js +0 -1
- package/packages/dashboard/ui-dist/_next/static/chunks/app/providers/setup/[provider]/page-4dbe33f0f7691b7c.js +0 -1
- package/packages/dashboard/ui-dist/_next/static/chunks/app/signup/page-c7a0a28341365ae0.js +0 -1
- package/packages/dashboard/ui-dist/_next/static/chunks/e868780c-48e5f147c90a3a41.js +0 -18
- package/packages/dashboard/ui-dist/_next/static/chunks/fd9d1056-609918ca7b6280bb.js +0 -1
- package/packages/dashboard/ui-dist/_next/static/chunks/framework-f66176bb897dc684.js +0 -1
- package/packages/dashboard/ui-dist/_next/static/chunks/main-311c3db74dcfadb7.js +0 -1
- package/packages/dashboard/ui-dist/_next/static/chunks/main-app-fdbeb09028f57c9f.js +0 -1
- package/packages/dashboard/ui-dist/_next/static/chunks/pages/_app-72b849fbd24ac258.js +0 -1
- package/packages/dashboard/ui-dist/_next/static/chunks/pages/_error-7ba65e1336b92748.js +0 -1
- package/packages/dashboard/ui-dist/_next/static/chunks/polyfills-42372ed130431b0a.js +0 -1
- package/packages/dashboard/ui-dist/_next/static/chunks/webpack-1cdd8ed57114d5e1.js +0 -1
- package/packages/dashboard/ui-dist/_next/static/css/4034f236dd1a3178.css +0 -1
- package/packages/dashboard/ui-dist/_next/static/css/6892f8422896ef7a.css +0 -1
- package/packages/dashboard/ui-dist/_next/static/l8L2OscDSR2vsMIlWcC48/_buildManifest.js +0 -1
- package/packages/dashboard/ui-dist/_next/static/l8L2OscDSR2vsMIlWcC48/_ssgManifest.js +0 -1
- package/packages/dashboard/ui-dist/alt-logos/agent-relay-logo-128.png +0 -0
- package/packages/dashboard/ui-dist/alt-logos/agent-relay-logo-256.png +0 -0
- package/packages/dashboard/ui-dist/alt-logos/agent-relay-logo-32.png +0 -0
- package/packages/dashboard/ui-dist/alt-logos/agent-relay-logo-512.png +0 -0
- package/packages/dashboard/ui-dist/alt-logos/agent-relay-logo-64.png +0 -0
- package/packages/dashboard/ui-dist/alt-logos/agent-relay-logo.svg +0 -45
- package/packages/dashboard/ui-dist/alt-logos/logo.svg +0 -38
- package/packages/dashboard/ui-dist/alt-logos/monogram-logo-128.png +0 -0
- package/packages/dashboard/ui-dist/alt-logos/monogram-logo-256.png +0 -0
- package/packages/dashboard/ui-dist/alt-logos/monogram-logo-32.png +0 -0
- package/packages/dashboard/ui-dist/alt-logos/monogram-logo-512.png +0 -0
- package/packages/dashboard/ui-dist/alt-logos/monogram-logo-64.png +0 -0
- package/packages/dashboard/ui-dist/alt-logos/monogram-logo.svg +0 -38
- package/packages/dashboard/ui-dist/app/onboarding.html +0 -1
- package/packages/dashboard/ui-dist/app/onboarding.txt +0 -7
- package/packages/dashboard/ui-dist/app.html +0 -1
- package/packages/dashboard/ui-dist/app.txt +0 -7
- package/packages/dashboard/ui-dist/apple-icon.png +0 -0
- package/packages/dashboard/ui-dist/cloud/link.html +0 -1
- package/packages/dashboard/ui-dist/cloud/link.txt +0 -7
- package/packages/dashboard/ui-dist/complete-profile.html +0 -5
- package/packages/dashboard/ui-dist/complete-profile.txt +0 -7
- package/packages/dashboard/ui-dist/connect-repos.html +0 -1
- package/packages/dashboard/ui-dist/connect-repos.txt +0 -7
- package/packages/dashboard/ui-dist/history.html +0 -1
- package/packages/dashboard/ui-dist/history.txt +0 -7
- package/packages/dashboard/ui-dist/index.html +0 -1
- package/packages/dashboard/ui-dist/index.txt +0 -7
- package/packages/dashboard/ui-dist/login.html +0 -5
- package/packages/dashboard/ui-dist/login.txt +0 -7
- package/packages/dashboard/ui-dist/metrics.html +0 -1
- package/packages/dashboard/ui-dist/metrics.txt +0 -7
- package/packages/dashboard/ui-dist/pricing.html +0 -13
- package/packages/dashboard/ui-dist/pricing.txt +0 -7
- package/packages/dashboard/ui-dist/providers/setup/claude.html +0 -1
- package/packages/dashboard/ui-dist/providers/setup/claude.txt +0 -8
- package/packages/dashboard/ui-dist/providers/setup/codex.html +0 -1
- package/packages/dashboard/ui-dist/providers/setup/codex.txt +0 -8
- package/packages/dashboard/ui-dist/providers/setup/cursor.html +0 -1
- package/packages/dashboard/ui-dist/providers/setup/cursor.txt +0 -8
- package/packages/dashboard/ui-dist/providers.html +0 -1
- package/packages/dashboard/ui-dist/providers.txt +0 -7
- package/packages/dashboard/ui-dist/signup.html +0 -6
- package/packages/dashboard/ui-dist/signup.txt +0 -7
- package/packages/dashboard-server/dist/health-worker-manager.d.ts +0 -62
- package/packages/dashboard-server/dist/health-worker-manager.js +0 -144
- package/packages/dashboard-server/dist/health-worker.d.ts +0 -9
- package/packages/dashboard-server/dist/health-worker.js +0 -79
- package/packages/dashboard-server/dist/index.d.ts +0 -18
- package/packages/dashboard-server/dist/index.js +0 -17
- package/packages/dashboard-server/dist/metrics.d.ts +0 -105
- package/packages/dashboard-server/dist/metrics.js +0 -193
- package/packages/dashboard-server/dist/needs-attention.d.ts +0 -24
- package/packages/dashboard-server/dist/needs-attention.js +0 -78
- package/packages/dashboard-server/dist/server.d.ts +0 -25
- package/packages/dashboard-server/dist/server.js +0 -5158
- package/packages/dashboard-server/dist/start.d.ts +0 -6
- package/packages/dashboard-server/dist/start.js +0 -13
- package/packages/dashboard-server/dist/types/threading.d.ts +0 -8
- package/packages/dashboard-server/dist/types/threading.js +0 -2
- package/packages/dashboard-server/dist/user-bridge.d.ts +0 -158
- package/packages/dashboard-server/dist/user-bridge.js +0 -390
- package/packages/dashboard-server/package.json +0 -55
- package/scripts/run-migrations.js +0 -43
- package/scripts/setup-stripe-products.ts +0 -312
- package/scripts/verify-schema.js +0 -134
|
@@ -1,347 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Email Auth API Routes
|
|
3
|
-
*
|
|
4
|
-
* Handles email/password authentication:
|
|
5
|
-
* - Signup with email/password
|
|
6
|
-
* - Login with email/password
|
|
7
|
-
* - Email verification
|
|
8
|
-
* - Password reset (future)
|
|
9
|
-
*/
|
|
10
|
-
import { Router } from 'express';
|
|
11
|
-
import { randomBytes, scrypt, timingSafeEqual } from 'node:crypto';
|
|
12
|
-
import { promisify } from 'node:util';
|
|
13
|
-
import { db } from '../db/index.js';
|
|
14
|
-
import { requireAuth } from './auth.js';
|
|
15
|
-
const scryptAsync = promisify(scrypt);
|
|
16
|
-
export const emailAuthRouter = Router();
|
|
17
|
-
// Password hashing configuration
|
|
18
|
-
const SALT_LENGTH = 32;
|
|
19
|
-
const KEY_LENGTH = 64;
|
|
20
|
-
/**
|
|
21
|
-
* Hash a password using scrypt
|
|
22
|
-
*/
|
|
23
|
-
async function hashPassword(password) {
|
|
24
|
-
const salt = randomBytes(SALT_LENGTH);
|
|
25
|
-
const derivedKey = await scryptAsync(password, salt, KEY_LENGTH);
|
|
26
|
-
return `${salt.toString('hex')}:${derivedKey.toString('hex')}`;
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Verify a password against a hash
|
|
30
|
-
*/
|
|
31
|
-
async function verifyPassword(password, storedHash) {
|
|
32
|
-
try {
|
|
33
|
-
const [saltHex, keyHex] = storedHash.split(':');
|
|
34
|
-
if (!saltHex || !keyHex)
|
|
35
|
-
return false;
|
|
36
|
-
const salt = Buffer.from(saltHex, 'hex');
|
|
37
|
-
const storedKey = Buffer.from(keyHex, 'hex');
|
|
38
|
-
const derivedKey = await scryptAsync(password, salt, KEY_LENGTH);
|
|
39
|
-
return timingSafeEqual(storedKey, derivedKey);
|
|
40
|
-
}
|
|
41
|
-
catch {
|
|
42
|
-
return false;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Generate a random verification token
|
|
47
|
-
*/
|
|
48
|
-
function generateVerificationToken() {
|
|
49
|
-
return randomBytes(32).toString('hex');
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Validate email format
|
|
53
|
-
*/
|
|
54
|
-
function isValidEmail(email) {
|
|
55
|
-
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
56
|
-
return emailRegex.test(email);
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Validate password strength
|
|
60
|
-
*/
|
|
61
|
-
function isValidPassword(password) {
|
|
62
|
-
if (password.length < 8) {
|
|
63
|
-
return { valid: false, message: 'Password must be at least 8 characters long' };
|
|
64
|
-
}
|
|
65
|
-
if (password.length > 128) {
|
|
66
|
-
return { valid: false, message: 'Password must be less than 128 characters' };
|
|
67
|
-
}
|
|
68
|
-
return { valid: true };
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* POST /api/auth/email/signup
|
|
72
|
-
* Create a new account with email/password
|
|
73
|
-
*/
|
|
74
|
-
emailAuthRouter.post('/signup', async (req, res) => {
|
|
75
|
-
try {
|
|
76
|
-
const { email, password, displayName } = req.body;
|
|
77
|
-
// Validate input
|
|
78
|
-
if (!email || typeof email !== 'string') {
|
|
79
|
-
return res.status(400).json({ error: 'Email is required' });
|
|
80
|
-
}
|
|
81
|
-
if (!password || typeof password !== 'string') {
|
|
82
|
-
return res.status(400).json({ error: 'Password is required' });
|
|
83
|
-
}
|
|
84
|
-
const normalizedEmail = email.toLowerCase().trim();
|
|
85
|
-
if (!isValidEmail(normalizedEmail)) {
|
|
86
|
-
return res.status(400).json({ error: 'Invalid email format' });
|
|
87
|
-
}
|
|
88
|
-
const passwordValidation = isValidPassword(password);
|
|
89
|
-
if (!passwordValidation.valid) {
|
|
90
|
-
return res.status(400).json({ error: passwordValidation.message });
|
|
91
|
-
}
|
|
92
|
-
// Check if email already exists (in users.email or user_emails table)
|
|
93
|
-
// This enables account reconciliation - if someone signed up via GitHub,
|
|
94
|
-
// their linked emails will be found and they should log in instead
|
|
95
|
-
const existingUser = await db.userEmails.findUserByEmail(normalizedEmail);
|
|
96
|
-
if (existingUser) {
|
|
97
|
-
// If the existing user signed up via GitHub, offer to use that account
|
|
98
|
-
if (existingUser.githubId && !existingUser.passwordHash) {
|
|
99
|
-
return res.status(409).json({
|
|
100
|
-
error: 'This email is associated with a GitHub account. Please log in with GitHub, or set a password on that account.',
|
|
101
|
-
code: 'GITHUB_ACCOUNT_EXISTS',
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
return res.status(409).json({ error: 'An account with this email already exists' });
|
|
105
|
-
}
|
|
106
|
-
// Hash password and create user
|
|
107
|
-
const passwordHash = await hashPassword(password);
|
|
108
|
-
const user = await db.users.createEmailUser({
|
|
109
|
-
email: normalizedEmail,
|
|
110
|
-
passwordHash,
|
|
111
|
-
displayName: displayName?.trim() || undefined,
|
|
112
|
-
});
|
|
113
|
-
// Generate verification token
|
|
114
|
-
const verificationToken = generateVerificationToken();
|
|
115
|
-
const verificationExpires = new Date(Date.now() + 24 * 60 * 60 * 1000); // 24 hours
|
|
116
|
-
await db.users.setEmailVerificationToken(user.id, verificationToken, verificationExpires);
|
|
117
|
-
// TODO: Send verification email
|
|
118
|
-
// For now, we'll auto-verify in development or skip email verification
|
|
119
|
-
// In production, you would send an email with a link containing the token
|
|
120
|
-
// Set session
|
|
121
|
-
req.session.userId = user.id;
|
|
122
|
-
res.status(201).json({
|
|
123
|
-
success: true,
|
|
124
|
-
user: {
|
|
125
|
-
id: user.id,
|
|
126
|
-
email: user.email,
|
|
127
|
-
displayName: user.displayName,
|
|
128
|
-
emailVerified: user.emailVerified,
|
|
129
|
-
},
|
|
130
|
-
// Include verification token in development for testing
|
|
131
|
-
...(process.env.NODE_ENV !== 'production' && { verificationToken }),
|
|
132
|
-
});
|
|
133
|
-
}
|
|
134
|
-
catch (error) {
|
|
135
|
-
console.error('Email signup error:', error);
|
|
136
|
-
res.status(500).json({ error: 'Failed to create account' });
|
|
137
|
-
}
|
|
138
|
-
});
|
|
139
|
-
/**
|
|
140
|
-
* POST /api/auth/email/login
|
|
141
|
-
* Login with email/password
|
|
142
|
-
*
|
|
143
|
-
* Supports account reconciliation: users can log in with any email address
|
|
144
|
-
* linked to their account via GitHub, not just their primary email.
|
|
145
|
-
*/
|
|
146
|
-
emailAuthRouter.post('/login', async (req, res) => {
|
|
147
|
-
try {
|
|
148
|
-
const { email, password } = req.body;
|
|
149
|
-
// Validate input
|
|
150
|
-
if (!email || typeof email !== 'string') {
|
|
151
|
-
return res.status(400).json({ error: 'Email is required' });
|
|
152
|
-
}
|
|
153
|
-
if (!password || typeof password !== 'string') {
|
|
154
|
-
return res.status(400).json({ error: 'Password is required' });
|
|
155
|
-
}
|
|
156
|
-
const normalizedEmail = email.toLowerCase().trim();
|
|
157
|
-
// Find user by email - checks both user_emails table (GitHub-linked emails)
|
|
158
|
-
// and users.email (primary email), enabling account reconciliation
|
|
159
|
-
const user = await db.userEmails.findUserByEmail(normalizedEmail);
|
|
160
|
-
if (!user) {
|
|
161
|
-
// Use same message for security (don't reveal if email exists)
|
|
162
|
-
return res.status(401).json({ error: 'Invalid email or password' });
|
|
163
|
-
}
|
|
164
|
-
// Check if user has a password (might be GitHub-only user)
|
|
165
|
-
if (!user.passwordHash) {
|
|
166
|
-
return res.status(401).json({
|
|
167
|
-
error: 'This account uses GitHub login. Please sign in with GitHub, or set a password to enable email login.',
|
|
168
|
-
code: 'GITHUB_ACCOUNT',
|
|
169
|
-
});
|
|
170
|
-
}
|
|
171
|
-
// Verify password
|
|
172
|
-
const isValid = await verifyPassword(password, user.passwordHash);
|
|
173
|
-
if (!isValid) {
|
|
174
|
-
return res.status(401).json({ error: 'Invalid email or password' });
|
|
175
|
-
}
|
|
176
|
-
// Set session
|
|
177
|
-
req.session.userId = user.id;
|
|
178
|
-
res.json({
|
|
179
|
-
success: true,
|
|
180
|
-
user: {
|
|
181
|
-
id: user.id,
|
|
182
|
-
email: user.email,
|
|
183
|
-
displayName: user.displayName,
|
|
184
|
-
githubUsername: user.githubUsername,
|
|
185
|
-
avatarUrl: user.avatarUrl,
|
|
186
|
-
emailVerified: user.emailVerified,
|
|
187
|
-
},
|
|
188
|
-
});
|
|
189
|
-
}
|
|
190
|
-
catch (error) {
|
|
191
|
-
console.error('Email login error:', error);
|
|
192
|
-
res.status(500).json({ error: 'Failed to login' });
|
|
193
|
-
}
|
|
194
|
-
});
|
|
195
|
-
/**
|
|
196
|
-
* POST /api/auth/email/verify
|
|
197
|
-
* Verify email with token
|
|
198
|
-
*/
|
|
199
|
-
emailAuthRouter.post('/verify', async (req, res) => {
|
|
200
|
-
try {
|
|
201
|
-
const { token } = req.body;
|
|
202
|
-
if (!token || typeof token !== 'string') {
|
|
203
|
-
return res.status(400).json({ error: 'Verification token is required' });
|
|
204
|
-
}
|
|
205
|
-
// Find user by token
|
|
206
|
-
const user = await db.users.findByEmailVerificationToken(token);
|
|
207
|
-
if (!user) {
|
|
208
|
-
return res.status(400).json({ error: 'Invalid or expired verification token' });
|
|
209
|
-
}
|
|
210
|
-
// Check if token expired
|
|
211
|
-
if (user.emailVerificationExpires && user.emailVerificationExpires < new Date()) {
|
|
212
|
-
return res.status(400).json({ error: 'Verification token has expired' });
|
|
213
|
-
}
|
|
214
|
-
// Verify email
|
|
215
|
-
await db.users.verifyEmail(user.id);
|
|
216
|
-
res.json({
|
|
217
|
-
success: true,
|
|
218
|
-
message: 'Email verified successfully',
|
|
219
|
-
});
|
|
220
|
-
}
|
|
221
|
-
catch (error) {
|
|
222
|
-
console.error('Email verification error:', error);
|
|
223
|
-
res.status(500).json({ error: 'Failed to verify email' });
|
|
224
|
-
}
|
|
225
|
-
});
|
|
226
|
-
/**
|
|
227
|
-
* POST /api/auth/email/resend-verification
|
|
228
|
-
* Resend verification email (requires auth)
|
|
229
|
-
*/
|
|
230
|
-
emailAuthRouter.post('/resend-verification', requireAuth, async (req, res) => {
|
|
231
|
-
try {
|
|
232
|
-
const userId = req.session.userId;
|
|
233
|
-
const user = await db.users.findById(userId);
|
|
234
|
-
if (!user) {
|
|
235
|
-
return res.status(404).json({ error: 'User not found' });
|
|
236
|
-
}
|
|
237
|
-
if (user.emailVerified) {
|
|
238
|
-
return res.status(400).json({ error: 'Email is already verified' });
|
|
239
|
-
}
|
|
240
|
-
if (!user.email) {
|
|
241
|
-
return res.status(400).json({ error: 'No email address on this account' });
|
|
242
|
-
}
|
|
243
|
-
// Generate new verification token
|
|
244
|
-
const verificationToken = generateVerificationToken();
|
|
245
|
-
const verificationExpires = new Date(Date.now() + 24 * 60 * 60 * 1000); // 24 hours
|
|
246
|
-
await db.users.setEmailVerificationToken(user.id, verificationToken, verificationExpires);
|
|
247
|
-
// TODO: Send verification email
|
|
248
|
-
// For now, return success and include token in development
|
|
249
|
-
res.json({
|
|
250
|
-
success: true,
|
|
251
|
-
message: 'Verification email sent',
|
|
252
|
-
...(process.env.NODE_ENV !== 'production' && { verificationToken }),
|
|
253
|
-
});
|
|
254
|
-
}
|
|
255
|
-
catch (error) {
|
|
256
|
-
console.error('Resend verification error:', error);
|
|
257
|
-
res.status(500).json({ error: 'Failed to resend verification email' });
|
|
258
|
-
}
|
|
259
|
-
});
|
|
260
|
-
/**
|
|
261
|
-
* POST /api/auth/set-email
|
|
262
|
-
* Set email for GitHub users who don't have one (requires auth)
|
|
263
|
-
*/
|
|
264
|
-
emailAuthRouter.post('/set-email', requireAuth, async (req, res) => {
|
|
265
|
-
try {
|
|
266
|
-
const userId = req.session.userId;
|
|
267
|
-
const { email } = req.body;
|
|
268
|
-
if (!email || typeof email !== 'string') {
|
|
269
|
-
return res.status(400).json({ error: 'Email is required' });
|
|
270
|
-
}
|
|
271
|
-
const normalizedEmail = email.toLowerCase().trim();
|
|
272
|
-
if (!isValidEmail(normalizedEmail)) {
|
|
273
|
-
return res.status(400).json({ error: 'Invalid email format' });
|
|
274
|
-
}
|
|
275
|
-
const user = await db.users.findById(userId);
|
|
276
|
-
if (!user) {
|
|
277
|
-
return res.status(404).json({ error: 'User not found' });
|
|
278
|
-
}
|
|
279
|
-
// Check if user already has an email
|
|
280
|
-
if (user.email) {
|
|
281
|
-
return res.status(400).json({ error: 'Email is already set for this account' });
|
|
282
|
-
}
|
|
283
|
-
// Check if email is already used by another user (including in user_emails table)
|
|
284
|
-
const isLinkedToOther = await db.userEmails.isEmailLinkedToOtherUser(normalizedEmail, userId);
|
|
285
|
-
if (isLinkedToOther) {
|
|
286
|
-
return res.status(409).json({ error: 'This email is already associated with another account' });
|
|
287
|
-
}
|
|
288
|
-
// Also check users.email directly
|
|
289
|
-
const existingUser = await db.users.findByEmail(normalizedEmail);
|
|
290
|
-
if (existingUser && existingUser.id !== userId) {
|
|
291
|
-
return res.status(409).json({ error: 'This email is already associated with another account' });
|
|
292
|
-
}
|
|
293
|
-
// Update user with email
|
|
294
|
-
await db.users.update(userId, { email: normalizedEmail });
|
|
295
|
-
// Generate verification token
|
|
296
|
-
const verificationToken = generateVerificationToken();
|
|
297
|
-
const verificationExpires = new Date(Date.now() + 24 * 60 * 60 * 1000); // 24 hours
|
|
298
|
-
await db.users.setEmailVerificationToken(userId, verificationToken, verificationExpires);
|
|
299
|
-
// TODO: Send verification email
|
|
300
|
-
res.json({
|
|
301
|
-
success: true,
|
|
302
|
-
message: 'Email set successfully',
|
|
303
|
-
email: normalizedEmail,
|
|
304
|
-
...(process.env.NODE_ENV !== 'production' && { verificationToken }),
|
|
305
|
-
});
|
|
306
|
-
}
|
|
307
|
-
catch (error) {
|
|
308
|
-
console.error('Set email error:', error);
|
|
309
|
-
res.status(500).json({ error: 'Failed to set email' });
|
|
310
|
-
}
|
|
311
|
-
});
|
|
312
|
-
/**
|
|
313
|
-
* POST /api/auth/email/set-password
|
|
314
|
-
* Set password for GitHub users who want to add email login (requires auth)
|
|
315
|
-
*/
|
|
316
|
-
emailAuthRouter.post('/set-password', requireAuth, async (req, res) => {
|
|
317
|
-
try {
|
|
318
|
-
const userId = req.session.userId;
|
|
319
|
-
const { password } = req.body;
|
|
320
|
-
if (!password || typeof password !== 'string') {
|
|
321
|
-
return res.status(400).json({ error: 'Password is required' });
|
|
322
|
-
}
|
|
323
|
-
const passwordValidation = isValidPassword(password);
|
|
324
|
-
if (!passwordValidation.valid) {
|
|
325
|
-
return res.status(400).json({ error: passwordValidation.message });
|
|
326
|
-
}
|
|
327
|
-
const user = await db.users.findById(userId);
|
|
328
|
-
if (!user) {
|
|
329
|
-
return res.status(404).json({ error: 'User not found' });
|
|
330
|
-
}
|
|
331
|
-
if (!user.email) {
|
|
332
|
-
return res.status(400).json({ error: 'Please set an email address first' });
|
|
333
|
-
}
|
|
334
|
-
// Hash password and update user
|
|
335
|
-
const passwordHash = await hashPassword(password);
|
|
336
|
-
await db.users.updatePassword(userId, passwordHash);
|
|
337
|
-
res.json({
|
|
338
|
-
success: true,
|
|
339
|
-
message: 'Password set successfully',
|
|
340
|
-
});
|
|
341
|
-
}
|
|
342
|
-
catch (error) {
|
|
343
|
-
console.error('Set password error:', error);
|
|
344
|
-
res.status(500).json({ error: 'Failed to set password' });
|
|
345
|
-
}
|
|
346
|
-
});
|
|
347
|
-
//# sourceMappingURL=email-auth.js.map
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generic Webhooks API Routes
|
|
3
|
-
*
|
|
4
|
-
* Provides endpoints for receiving webhooks from any configured source.
|
|
5
|
-
* Routes: POST /api/webhooks/:source
|
|
6
|
-
*/
|
|
7
|
-
export declare const genericWebhooksRouter: import("express-serve-static-core").Router;
|
|
8
|
-
//# sourceMappingURL=generic-webhooks.d.ts.map
|
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generic Webhooks API Routes
|
|
3
|
-
*
|
|
4
|
-
* Provides endpoints for receiving webhooks from any configured source.
|
|
5
|
-
* Routes: POST /api/webhooks/:source
|
|
6
|
-
*/
|
|
7
|
-
import { Router } from 'express';
|
|
8
|
-
import { processWebhook, getWebhookConfig } from '../webhooks/index.js';
|
|
9
|
-
export const genericWebhooksRouter = Router();
|
|
10
|
-
/**
|
|
11
|
-
* POST /api/webhooks/:source
|
|
12
|
-
* Receive a webhook from any configured source
|
|
13
|
-
*/
|
|
14
|
-
genericWebhooksRouter.post('/:source', async (req, res) => {
|
|
15
|
-
const source = req.params.source;
|
|
16
|
-
// For Slack URL verification challenge
|
|
17
|
-
if (source === 'slack' && req.body?.type === 'url_verification') {
|
|
18
|
-
return res.json({ challenge: req.body.challenge });
|
|
19
|
-
}
|
|
20
|
-
try {
|
|
21
|
-
// Get raw body for signature verification
|
|
22
|
-
// Note: This requires express.raw() middleware or similar
|
|
23
|
-
const rawBody = typeof req.body === 'string'
|
|
24
|
-
? req.body
|
|
25
|
-
: JSON.stringify(req.body);
|
|
26
|
-
const result = await processWebhook(source, rawBody, req.headers);
|
|
27
|
-
if (!result.success && result.responses[0]?.error === 'Invalid signature') {
|
|
28
|
-
return res.status(401).json({ error: 'Invalid signature' });
|
|
29
|
-
}
|
|
30
|
-
if (!result.success && result.responses[0]?.error?.includes('Unknown webhook source')) {
|
|
31
|
-
return res.status(404).json({ error: `Unknown webhook source: ${source}` });
|
|
32
|
-
}
|
|
33
|
-
console.log(`[webhooks] Processed ${source} webhook: ${result.eventType} (${result.matchedRules.length} rules matched)`);
|
|
34
|
-
res.json({
|
|
35
|
-
success: result.success,
|
|
36
|
-
eventId: result.eventId,
|
|
37
|
-
eventType: result.eventType,
|
|
38
|
-
matchedRules: result.matchedRules,
|
|
39
|
-
actionsExecuted: result.actions.length,
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
catch (error) {
|
|
43
|
-
console.error(`[webhooks] Error processing ${source} webhook:`, error);
|
|
44
|
-
res.status(500).json({
|
|
45
|
-
error: error instanceof Error ? error.message : 'Unknown error',
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
|
-
/**
|
|
50
|
-
* GET /api/webhooks/config
|
|
51
|
-
* Get the current webhook configuration (for debugging)
|
|
52
|
-
*/
|
|
53
|
-
genericWebhooksRouter.get('/config', (_req, res) => {
|
|
54
|
-
const config = getWebhookConfig();
|
|
55
|
-
res.json({
|
|
56
|
-
sources: Object.entries(config.sources).map(([id, source]) => ({
|
|
57
|
-
id,
|
|
58
|
-
name: source.name,
|
|
59
|
-
enabled: source.enabled,
|
|
60
|
-
parser: source.parser,
|
|
61
|
-
responder: source.responder,
|
|
62
|
-
})),
|
|
63
|
-
rules: config.rules.map(rule => ({
|
|
64
|
-
id: rule.id,
|
|
65
|
-
name: rule.name,
|
|
66
|
-
enabled: rule.enabled,
|
|
67
|
-
source: rule.source,
|
|
68
|
-
eventType: rule.eventType,
|
|
69
|
-
condition: rule.condition,
|
|
70
|
-
actionType: rule.action.type,
|
|
71
|
-
priority: rule.priority,
|
|
72
|
-
})),
|
|
73
|
-
});
|
|
74
|
-
});
|
|
75
|
-
/**
|
|
76
|
-
* GET /api/webhooks/sources
|
|
77
|
-
* List available webhook sources with their setup instructions
|
|
78
|
-
*/
|
|
79
|
-
genericWebhooksRouter.get('/sources', (_req, res) => {
|
|
80
|
-
const baseUrl = process.env.PUBLIC_URL || 'https://your-domain.com';
|
|
81
|
-
res.json({
|
|
82
|
-
sources: [
|
|
83
|
-
{
|
|
84
|
-
id: 'github',
|
|
85
|
-
name: 'GitHub',
|
|
86
|
-
webhookUrl: `${baseUrl}/api/webhooks/github`,
|
|
87
|
-
setupInstructions: [
|
|
88
|
-
'1. Go to your repository Settings > Webhooks > Add webhook',
|
|
89
|
-
`2. Set Payload URL to: ${baseUrl}/api/webhooks/github`,
|
|
90
|
-
'3. Set Content type to: application/json',
|
|
91
|
-
'4. Set Secret to your GITHUB_WEBHOOK_SECRET value',
|
|
92
|
-
'5. Select events: Check runs, Issues, Issue comments, Pull request review comments',
|
|
93
|
-
],
|
|
94
|
-
requiredEnvVars: ['GITHUB_WEBHOOK_SECRET'],
|
|
95
|
-
events: ['check_run', 'issues', 'issue_comment', 'pull_request_review_comment'],
|
|
96
|
-
},
|
|
97
|
-
{
|
|
98
|
-
id: 'linear',
|
|
99
|
-
name: 'Linear',
|
|
100
|
-
webhookUrl: `${baseUrl}/api/webhooks/linear`,
|
|
101
|
-
setupInstructions: [
|
|
102
|
-
'1. Go to Linear Settings > API > Webhooks',
|
|
103
|
-
'2. Create a new webhook',
|
|
104
|
-
`3. Set URL to: ${baseUrl}/api/webhooks/linear`,
|
|
105
|
-
'4. Copy the signing secret to LINEAR_WEBHOOK_SECRET',
|
|
106
|
-
'5. Select events: Issues, Comments',
|
|
107
|
-
],
|
|
108
|
-
requiredEnvVars: ['LINEAR_WEBHOOK_SECRET', 'LINEAR_API_KEY'],
|
|
109
|
-
events: ['Issue', 'Comment', 'IssueLabel'],
|
|
110
|
-
},
|
|
111
|
-
{
|
|
112
|
-
id: 'slack',
|
|
113
|
-
name: 'Slack',
|
|
114
|
-
webhookUrl: `${baseUrl}/api/webhooks/slack`,
|
|
115
|
-
setupInstructions: [
|
|
116
|
-
'1. Create a Slack App at api.slack.com/apps',
|
|
117
|
-
'2. Enable Event Subscriptions',
|
|
118
|
-
`3. Set Request URL to: ${baseUrl}/api/webhooks/slack`,
|
|
119
|
-
'4. Subscribe to bot events: app_mention, message.channels',
|
|
120
|
-
'5. Copy Signing Secret to SLACK_SIGNING_SECRET',
|
|
121
|
-
'6. Install the app to your workspace',
|
|
122
|
-
],
|
|
123
|
-
requiredEnvVars: ['SLACK_SIGNING_SECRET', 'SLACK_BOT_TOKEN'],
|
|
124
|
-
events: ['app_mention', 'message', 'reaction_added'],
|
|
125
|
-
},
|
|
126
|
-
],
|
|
127
|
-
});
|
|
128
|
-
});
|
|
129
|
-
//# sourceMappingURL=generic-webhooks.js.map
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Git Gateway API Routes
|
|
3
|
-
*
|
|
4
|
-
* Provides fresh GitHub tokens to workspace containers for git operations.
|
|
5
|
-
* This gateway pattern ensures tokens are always valid (Nango handles refresh).
|
|
6
|
-
*/
|
|
7
|
-
export declare const gitRouter: import("express-serve-static-core").Router;
|
|
8
|
-
//# sourceMappingURL=git.d.ts.map
|