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,612 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
|
|
3
|
-
set -euo pipefail
|
|
4
|
-
|
|
5
|
-
log() {
|
|
6
|
-
echo "[workspace] $*"
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
# Debug logging function
|
|
10
|
-
debug() {
|
|
11
|
-
if [[ "${GH_CREDENTIAL_DEBUG:-}" == "1" ]]; then
|
|
12
|
-
echo "[workspace:debug] $*" >&2
|
|
13
|
-
fi
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
# Fix volume permissions and drop to workspace user if running as root
|
|
17
|
-
if [[ "$(id -u)" == "0" ]]; then
|
|
18
|
-
# Fix /data and /workspace permissions before dropping privileges
|
|
19
|
-
# Fresh Fly.io volumes are root-owned, need to chown for workspace user
|
|
20
|
-
log "Fixing volume permissions..."
|
|
21
|
-
chown -R workspace:workspace /data /workspace 2>/dev/null || true
|
|
22
|
-
|
|
23
|
-
# ============================================================================
|
|
24
|
-
# SSH Server Setup (for CLI tunneling - Codex OAuth callback forwarding)
|
|
25
|
-
# When ENABLE_SSH=true, start SSH server on port 3022 for secure tunneling
|
|
26
|
-
# ============================================================================
|
|
27
|
-
if [[ "${ENABLE_SSH:-false}" == "true" ]]; then
|
|
28
|
-
SSH_PORT="${SSH_PORT:-3022}"
|
|
29
|
-
log "Starting SSH server on port ${SSH_PORT}..."
|
|
30
|
-
|
|
31
|
-
# Set SSH password for workspace user
|
|
32
|
-
SSH_PASS="${SSH_PASSWORD:-devpassword}"
|
|
33
|
-
echo "workspace:${SSH_PASS}" | chpasswd
|
|
34
|
-
|
|
35
|
-
# Configure SSH server for tunneling
|
|
36
|
-
# - Allow password auth (for CLI simplicity)
|
|
37
|
-
# - Listen on port 3022 (non-privileged)
|
|
38
|
-
# - Allow TCP forwarding (for port tunneling)
|
|
39
|
-
mkdir -p /etc/ssh/sshd_config.d
|
|
40
|
-
cat > /etc/ssh/sshd_config.d/workspace.conf <<SSHEOF
|
|
41
|
-
Port ${SSH_PORT}
|
|
42
|
-
PasswordAuthentication yes
|
|
43
|
-
PermitRootLogin no
|
|
44
|
-
AllowUsers workspace
|
|
45
|
-
AllowTcpForwarding yes
|
|
46
|
-
GatewayPorts no
|
|
47
|
-
X11Forwarding no
|
|
48
|
-
SSHEOF
|
|
49
|
-
|
|
50
|
-
# Start SSH server in background
|
|
51
|
-
/usr/sbin/sshd -e -p "${SSH_PORT}"
|
|
52
|
-
log "SSH server started (port ${SSH_PORT}, user: workspace)"
|
|
53
|
-
fi
|
|
54
|
-
|
|
55
|
-
# ============================================================================
|
|
56
|
-
# Persist workspace environment for SSH sessions (must be done as root)
|
|
57
|
-
# SSH sessions don't inherit the container's runtime environment, so we write
|
|
58
|
-
# critical variables to /etc/profile.d/ which gets sourced by login shells
|
|
59
|
-
# ============================================================================
|
|
60
|
-
if [[ -n "${CLOUD_API_URL:-}" || -n "${WORKSPACE_ID:-}" ]]; then
|
|
61
|
-
log "Persisting workspace environment for SSH sessions"
|
|
62
|
-
# Compute HOME path for the env file
|
|
63
|
-
_DATA_DIR="${AGENT_RELAY_DATA_DIR:-/data}"
|
|
64
|
-
if [[ -n "${WORKSPACE_OWNER_USER_ID:-}" ]]; then
|
|
65
|
-
_USER_HOME="${_DATA_DIR}/users/${WORKSPACE_OWNER_USER_ID}"
|
|
66
|
-
else
|
|
67
|
-
_USER_HOME="/home/workspace"
|
|
68
|
-
fi
|
|
69
|
-
cat > /etc/profile.d/workspace-env.sh <<ENVEOF
|
|
70
|
-
# Workspace environment variables (auto-generated by entrypoint.sh)
|
|
71
|
-
export WORKSPACE_ID="${WORKSPACE_ID:-}"
|
|
72
|
-
export WORKSPACE_OWNER_USER_ID="${WORKSPACE_OWNER_USER_ID:-}"
|
|
73
|
-
export CLOUD_API_URL="${CLOUD_API_URL:-}"
|
|
74
|
-
export WORKSPACE_TOKEN="${WORKSPACE_TOKEN:-}"
|
|
75
|
-
export WORKSPACE_DIR="${WORKSPACE_DIR:-/workspace}"
|
|
76
|
-
export HOME="${_USER_HOME}"
|
|
77
|
-
export AGENT_RELAY_USER_ID="${WORKSPACE_OWNER_USER_ID:-}"
|
|
78
|
-
export AGENT_RELAY_DATA_DIR="${_DATA_DIR}"
|
|
79
|
-
export AGENT_RELAY_API_KEY="${AGENT_RELAY_API_KEY:-}"
|
|
80
|
-
|
|
81
|
-
# Source GH_TOKEN from user-writable file if available (written after startup)
|
|
82
|
-
# This enables SSH sessions to use the token fetched during container init
|
|
83
|
-
if [[ -f "${_USER_HOME}/.gh_token" ]]; then
|
|
84
|
-
source "${_USER_HOME}/.gh_token"
|
|
85
|
-
fi
|
|
86
|
-
ENVEOF
|
|
87
|
-
chmod 644 /etc/profile.d/workspace-env.sh
|
|
88
|
-
fi
|
|
89
|
-
|
|
90
|
-
log "Dropping privileges to workspace user..."
|
|
91
|
-
exec gosu workspace "$0" "$@"
|
|
92
|
-
fi
|
|
93
|
-
|
|
94
|
-
PORT="${AGENT_RELAY_DASHBOARD_PORT:-${PORT:-3888}}"
|
|
95
|
-
export AGENT_RELAY_DASHBOARD_PORT="${PORT}"
|
|
96
|
-
export PORT="${PORT}"
|
|
97
|
-
|
|
98
|
-
# Disable auto-updates for AI CLIs in container environments
|
|
99
|
-
# Prevents permission errors when CLIs try to self-update with npm/pip
|
|
100
|
-
export DISABLE_AUTOUPDATER=1
|
|
101
|
-
# Belt-and-suspenders flags to block Codex/OpenAI update checks
|
|
102
|
-
export CODEX_CHECK_FOR_UPDATES=false
|
|
103
|
-
export CODEX_DISABLE_AUTOUPDATE=1
|
|
104
|
-
export OPENAI_CLI_NO_UPDATE=1
|
|
105
|
-
export NO_UPDATE_NOTIFIER=1
|
|
106
|
-
export NPM_CONFIG_UPDATE_NOTIFIER=false
|
|
107
|
-
log "Auto-updates disabled for AI CLIs (container environment)"
|
|
108
|
-
|
|
109
|
-
# ============================================================================
|
|
110
|
-
# Git credential helper configuration
|
|
111
|
-
# Clean up conflicting credential helpers that gh CLI or other tools may set
|
|
112
|
-
# git-credential-relay requires no host-specific overrides to work properly
|
|
113
|
-
# ============================================================================
|
|
114
|
-
git config --global --unset-all 'credential.https://github.com.helper' 2>/dev/null || true
|
|
115
|
-
git config --global --unset-all 'credential.https://gist.github.com.helper' 2>/dev/null || true
|
|
116
|
-
log "Git credential helper configured (removed conflicting gh auth overrides)"
|
|
117
|
-
|
|
118
|
-
# ============================================================================
|
|
119
|
-
# Per-user credential storage setup
|
|
120
|
-
# Create user-specific HOME on persistent volume (/data)
|
|
121
|
-
# This enables multi-user workspaces where each user has their own credentials
|
|
122
|
-
# ============================================================================
|
|
123
|
-
DATA_DIR="${AGENT_RELAY_DATA_DIR:-/data}"
|
|
124
|
-
if [[ -n "${WORKSPACE_OWNER_USER_ID:-}" ]]; then
|
|
125
|
-
USER_HOME="${DATA_DIR}/users/${WORKSPACE_OWNER_USER_ID}"
|
|
126
|
-
log "Setting up per-user HOME at ${USER_HOME}"
|
|
127
|
-
mkdir -p "${USER_HOME}"
|
|
128
|
-
mkdir -p "${USER_HOME}/.claude"
|
|
129
|
-
mkdir -p "${USER_HOME}/.codex"
|
|
130
|
-
mkdir -p "${USER_HOME}/.config/gcloud"
|
|
131
|
-
mkdir -p "${USER_HOME}/.config/gh"
|
|
132
|
-
export HOME="${USER_HOME}"
|
|
133
|
-
# Ensure user-local bin is on PATH for per-user shims/wrappers
|
|
134
|
-
export PATH="${HOME}/.local/bin:${PATH}"
|
|
135
|
-
export XDG_CONFIG_HOME="${USER_HOME}/.config"
|
|
136
|
-
export AGENT_RELAY_USER_ID="${WORKSPACE_OWNER_USER_ID}"
|
|
137
|
-
log "HOME set to ${HOME} (user: ${WORKSPACE_OWNER_USER_ID})"
|
|
138
|
-
else
|
|
139
|
-
log "No WORKSPACE_OWNER_USER_ID set, using default HOME: ${HOME}"
|
|
140
|
-
fi
|
|
141
|
-
|
|
142
|
-
WORKSPACE_DIR="${WORKSPACE_DIR:-/workspace}"
|
|
143
|
-
REPO_LIST="${REPOSITORIES:-}"
|
|
144
|
-
|
|
145
|
-
mkdir -p "${WORKSPACE_DIR}"
|
|
146
|
-
cd "${WORKSPACE_DIR}"
|
|
147
|
-
|
|
148
|
-
# Configure Git credentials via the gateway (tokens auto-refresh via Nango)
|
|
149
|
-
# The credential helper fetches fresh tokens from the cloud API on each git operation
|
|
150
|
-
if [[ -n "${CLOUD_API_URL:-}" && -n "${WORKSPACE_ID:-}" && -n "${WORKSPACE_TOKEN:-}" ]]; then
|
|
151
|
-
log "Configuring git credential helper (gateway mode)"
|
|
152
|
-
git config --global credential.helper "/usr/local/bin/git-credential-relay"
|
|
153
|
-
git config --global credential.useHttpPath true
|
|
154
|
-
export GIT_TERMINAL_PROMPT=0
|
|
155
|
-
|
|
156
|
-
# ============================================================================
|
|
157
|
-
# PRE-FETCH GitHub token at startup and export to environment
|
|
158
|
-
# This ensures GH_TOKEN is available for git operations and spawned agents
|
|
159
|
-
# even if cloud API becomes unreachable later. The credential helper's
|
|
160
|
-
# fallback chain will use this token (env > hosts.yml > gh CLI > cloud API).
|
|
161
|
-
# ============================================================================
|
|
162
|
-
if [[ -z "${GH_TOKEN:-}" ]]; then
|
|
163
|
-
log "Fetching GitHub token from cloud API (with retry)..."
|
|
164
|
-
|
|
165
|
-
GH_TOKEN_MAX_RETRIES=3
|
|
166
|
-
GH_TOKEN_RETRY_DELAY=2
|
|
167
|
-
GH_TOKEN_FETCHED=""
|
|
168
|
-
|
|
169
|
-
for attempt in $(seq 1 $GH_TOKEN_MAX_RETRIES); do
|
|
170
|
-
log "Attempt $attempt/$GH_TOKEN_MAX_RETRIES to fetch token..."
|
|
171
|
-
|
|
172
|
-
# Remove -f flag to capture error responses, use -w to get HTTP status
|
|
173
|
-
GH_TOKEN_HTTP_CODE=0
|
|
174
|
-
GH_TOKEN_RESPONSE=$(curl -s -w "\n%{http_code}" --max-time 10 \
|
|
175
|
-
-H "Authorization: Bearer ${WORKSPACE_TOKEN}" \
|
|
176
|
-
"${CLOUD_API_URL}/api/git/token?workspaceId=${WORKSPACE_ID}" 2>&1) || true
|
|
177
|
-
|
|
178
|
-
# Split response and status code
|
|
179
|
-
GH_TOKEN_HTTP_CODE=$(echo "$GH_TOKEN_RESPONSE" | tail -1)
|
|
180
|
-
GH_TOKEN_RESPONSE=$(echo "$GH_TOKEN_RESPONSE" | head -n -1)
|
|
181
|
-
|
|
182
|
-
debug "HTTP Status: $GH_TOKEN_HTTP_CODE"
|
|
183
|
-
debug "Response: ${GH_TOKEN_RESPONSE:0:200}"
|
|
184
|
-
|
|
185
|
-
# Handle different failure modes
|
|
186
|
-
case "$GH_TOKEN_HTTP_CODE" in
|
|
187
|
-
200)
|
|
188
|
-
# Success - parse token
|
|
189
|
-
FETCHED_TOKEN=$(echo "$GH_TOKEN_RESPONSE" | jq -r '.userToken // .token // empty' 2>/dev/null)
|
|
190
|
-
if [[ -n "${FETCHED_TOKEN}" && "${FETCHED_TOKEN}" != "null" ]]; then
|
|
191
|
-
export GH_TOKEN="${FETCHED_TOKEN}"
|
|
192
|
-
export GITHUB_TOKEN="${FETCHED_TOKEN}"
|
|
193
|
-
echo "export GH_TOKEN=\"${FETCHED_TOKEN}\"" > "${HOME}/.gh_token"
|
|
194
|
-
echo "export GITHUB_TOKEN=\"${FETCHED_TOKEN}\"" >> "${HOME}/.gh_token"
|
|
195
|
-
chmod 600 "${HOME}/.gh_token"
|
|
196
|
-
log "✓ GH_TOKEN fetched successfully (attempt $attempt)"
|
|
197
|
-
GH_TOKEN_FETCHED="yes"
|
|
198
|
-
break
|
|
199
|
-
else
|
|
200
|
-
log "WARN: Response 200 but no token in JSON response"
|
|
201
|
-
GH_TOKEN_FETCHED="empty-response"
|
|
202
|
-
fi
|
|
203
|
-
;;
|
|
204
|
-
401|403)
|
|
205
|
-
# Auth error - don't retry
|
|
206
|
-
log "ERROR: Authentication failed (HTTP $GH_TOKEN_HTTP_CODE)"
|
|
207
|
-
log " Check WORKSPACE_TOKEN and CLOUD_API_URL credentials"
|
|
208
|
-
GH_TOKEN_FETCHED="auth-error"
|
|
209
|
-
break
|
|
210
|
-
;;
|
|
211
|
-
000|28)
|
|
212
|
-
# Network timeout (000=curl error, 28=timeout)
|
|
213
|
-
log "WARN: Network timeout on attempt $attempt"
|
|
214
|
-
[[ $attempt -lt $GH_TOKEN_MAX_RETRIES ]] && sleep $((GH_TOKEN_RETRY_DELAY * (2 ** (attempt - 1))))
|
|
215
|
-
;;
|
|
216
|
-
*)
|
|
217
|
-
# Other HTTP errors - could be transient, retry
|
|
218
|
-
log "WARN: HTTP $GH_TOKEN_HTTP_CODE on attempt $attempt"
|
|
219
|
-
[[ $attempt -lt $GH_TOKEN_MAX_RETRIES ]] && sleep $((GH_TOKEN_RETRY_DELAY * (2 ** (attempt - 1))))
|
|
220
|
-
;;
|
|
221
|
-
esac
|
|
222
|
-
done
|
|
223
|
-
|
|
224
|
-
# Final status
|
|
225
|
-
if [[ -z "$GH_TOKEN_FETCHED" ]]; then
|
|
226
|
-
log "WARN: Could not fetch GitHub token after $GH_TOKEN_MAX_RETRIES attempts"
|
|
227
|
-
log " Git operations will use credential helper fallback chain"
|
|
228
|
-
fi
|
|
229
|
-
else
|
|
230
|
-
log "GH_TOKEN already set in environment"
|
|
231
|
-
fi
|
|
232
|
-
|
|
233
|
-
# Configure git identity for commits
|
|
234
|
-
# Use env vars if set, otherwise default to "Agent Relay" / "agent@agent-relay.com"
|
|
235
|
-
DEFAULT_GIT_EMAIL="${AGENT_NAME:-agent}@agent-relay.com"
|
|
236
|
-
git config --global user.name "${GIT_USER_NAME:-Agent Relay}"
|
|
237
|
-
git config --global user.email "${GIT_USER_EMAIL:-${DEFAULT_GIT_EMAIL}}"
|
|
238
|
-
log "Git identity configured: ${GIT_USER_NAME:-Agent Relay} <${GIT_USER_EMAIL:-${DEFAULT_GIT_EMAIL}}>"
|
|
239
|
-
|
|
240
|
-
# Configure gh CLI
|
|
241
|
-
# NOTE: Do NOT create hosts.yml with placeholder - it causes migration errors
|
|
242
|
-
# when combined with GH_TOKEN. The gh-relay wrapper in /usr/local/bin/gh
|
|
243
|
-
# handles token refresh automatically with caching.
|
|
244
|
-
# Install and configure gh-credential-relay credential helper
|
|
245
|
-
# This allows gh CLI to fetch fresh tokens from cloud API on-demand
|
|
246
|
-
if [[ -f "/app/deploy/workspace/gh-credential-relay" ]]; then
|
|
247
|
-
sudo install -m 755 /app/deploy/workspace/gh-credential-relay /usr/local/bin/gh-credential-relay
|
|
248
|
-
gh config set -h github.com credential-helper gh-credential-relay 2>/dev/null || true
|
|
249
|
-
log "Configured gh CLI to use cloud API credential helper"
|
|
250
|
-
fi
|
|
251
|
-
|
|
252
|
-
mkdir -p "${HOME}/.config/gh"
|
|
253
|
-
# Remove any stale hosts.yml that might cause migration errors
|
|
254
|
-
rm -f "${HOME}/.config/gh/hosts.yml"
|
|
255
|
-
|
|
256
|
-
# The gh-relay wrapper is installed at /usr/local/bin/gh during Docker build.
|
|
257
|
-
# It fetches fresh tokens from /api/git/token and caches them for 55 minutes.
|
|
258
|
-
# This handles the case where GH_TOKEN expires after ~1 hour.
|
|
259
|
-
if [[ -x "/usr/local/bin/gh" ]]; then
|
|
260
|
-
log "GitHub CLI wrapper installed at /usr/local/bin/gh (auto-refreshing tokens)"
|
|
261
|
-
fi
|
|
262
|
-
|
|
263
|
-
# Fallback: Use static GITHUB_TOKEN if provided (legacy mode)
|
|
264
|
-
elif [[ -n "${GITHUB_TOKEN:-}" ]]; then
|
|
265
|
-
log "Configuring git credentials (legacy static token mode)"
|
|
266
|
-
GIT_ASKPASS_SCRIPT="/tmp/git-askpass.sh"
|
|
267
|
-
cat > "${GIT_ASKPASS_SCRIPT}" <<'EOF'
|
|
268
|
-
#!/usr/bin/env bash
|
|
269
|
-
prompt="${1:-}"
|
|
270
|
-
if [[ "${prompt}" == *"Username"* ]]; then
|
|
271
|
-
echo "x-access-token"
|
|
272
|
-
else
|
|
273
|
-
echo "${GITHUB_TOKEN}"
|
|
274
|
-
fi
|
|
275
|
-
EOF
|
|
276
|
-
chmod +x "${GIT_ASKPASS_SCRIPT}"
|
|
277
|
-
export GIT_ASKPASS="${GIT_ASKPASS_SCRIPT}"
|
|
278
|
-
export GIT_TERMINAL_PROMPT=0
|
|
279
|
-
export GH_TOKEN="${GITHUB_TOKEN}"
|
|
280
|
-
|
|
281
|
-
# Configure git identity for commits
|
|
282
|
-
DEFAULT_GIT_EMAIL="${AGENT_NAME:-agent}@agent-relay.com"
|
|
283
|
-
git config --global user.name "${GIT_USER_NAME:-Agent Relay}"
|
|
284
|
-
git config --global user.email "${GIT_USER_EMAIL:-${DEFAULT_GIT_EMAIL}}"
|
|
285
|
-
log "Git identity configured: ${GIT_USER_NAME:-Agent Relay} <${GIT_USER_EMAIL:-${DEFAULT_GIT_EMAIL}}>"
|
|
286
|
-
fi
|
|
287
|
-
|
|
288
|
-
clone_or_update_repo() {
|
|
289
|
-
local repo="$1"
|
|
290
|
-
repo="${repo// /}"
|
|
291
|
-
if [[ -z "${repo}" ]]; then
|
|
292
|
-
return
|
|
293
|
-
fi
|
|
294
|
-
|
|
295
|
-
local repo_name
|
|
296
|
-
repo_name="$(basename "${repo}")"
|
|
297
|
-
local target="${WORKSPACE_DIR}/${repo_name}"
|
|
298
|
-
local url="https://github.com/${repo}.git"
|
|
299
|
-
|
|
300
|
-
if [[ -d "${target}/.git" ]]; then
|
|
301
|
-
log "Updating ${repo}..."
|
|
302
|
-
git -C "${target}" remote set-url origin "${url}" >/dev/null 2>&1 || true
|
|
303
|
-
git -C "${target}" fetch --all --prune >/dev/null 2>&1 || true
|
|
304
|
-
git -C "${target}" pull --ff-only >/dev/null 2>&1 || true
|
|
305
|
-
else
|
|
306
|
-
log "Cloning ${repo}..."
|
|
307
|
-
# Use shallow clone for faster initial setup (full history not needed for most agent work)
|
|
308
|
-
# SHALLOW_CLONE env var can be set to "false" to disable this optimization
|
|
309
|
-
if [[ "${SHALLOW_CLONE:-true}" == "true" ]]; then
|
|
310
|
-
git clone --depth=1 "${url}" "${target}" >/dev/null 2>&1 || {
|
|
311
|
-
log "WARN: Failed to clone ${repo}"
|
|
312
|
-
}
|
|
313
|
-
else
|
|
314
|
-
git clone "${url}" "${target}" >/dev/null 2>&1 || {
|
|
315
|
-
log "WARN: Failed to clone ${repo}"
|
|
316
|
-
}
|
|
317
|
-
fi
|
|
318
|
-
fi
|
|
319
|
-
# Note: safe.directory config is done after all clones complete (batched)
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
if [[ -n "${REPO_LIST}" ]]; then
|
|
323
|
-
# Check if we have credentials configured (gateway mode or static token)
|
|
324
|
-
if [[ -z "${GITHUB_TOKEN:-}" && -z "${CLOUD_API_URL:-}" ]]; then
|
|
325
|
-
log "WARN: REPOSITORIES set but no credentials configured; clones may fail."
|
|
326
|
-
fi
|
|
327
|
-
|
|
328
|
-
IFS=',' read -ra repos <<< "${REPO_LIST}"
|
|
329
|
-
|
|
330
|
-
# Clone repositories in PARALLEL for faster startup
|
|
331
|
-
# Each clone runs in background, then we wait for all to complete
|
|
332
|
-
log "Cloning ${#repos[@]} repositories in parallel..."
|
|
333
|
-
for repo in "${repos[@]}"; do
|
|
334
|
-
clone_or_update_repo "${repo}" &
|
|
335
|
-
done
|
|
336
|
-
|
|
337
|
-
# Wait for all background clone jobs to complete
|
|
338
|
-
wait
|
|
339
|
-
log "All repository clones complete"
|
|
340
|
-
|
|
341
|
-
# Batch configure safe.directory for all cloned repos (runs once, not per-repo)
|
|
342
|
-
# This prevents "dubious ownership" errors when git runs as different user
|
|
343
|
-
for repo in "${repos[@]}"; do
|
|
344
|
-
repo="${repo// /}"
|
|
345
|
-
if [[ -n "${repo}" ]]; then
|
|
346
|
-
repo_name="$(basename "${repo}")"
|
|
347
|
-
target="${WORKSPACE_DIR}/${repo_name}"
|
|
348
|
-
if [[ -d "${target}/.git" ]]; then
|
|
349
|
-
git config --global --add safe.directory "${target}" 2>/dev/null || true
|
|
350
|
-
fi
|
|
351
|
-
fi
|
|
352
|
-
done
|
|
353
|
-
fi
|
|
354
|
-
|
|
355
|
-
# ============================================================================
|
|
356
|
-
# Configure agent policy enforcement for cloud workspaces
|
|
357
|
-
# Policy is fetched from cloud API and enforced at runtime
|
|
358
|
-
# ============================================================================
|
|
359
|
-
|
|
360
|
-
if [[ -n "${CLOUD_API_URL:-}" && -n "${WORKSPACE_ID:-}" ]]; then
|
|
361
|
-
log "Enabling agent policy enforcement"
|
|
362
|
-
export AGENT_POLICY_ENFORCEMENT=1
|
|
363
|
-
# Policy is fetched from ${CLOUD_API_URL}/api/policy/${WORKSPACE_ID}/internal
|
|
364
|
-
fi
|
|
365
|
-
|
|
366
|
-
# ============================================================================
|
|
367
|
-
# Configure AI provider credentials
|
|
368
|
-
# Create credential files that CLIs expect from ENV vars passed by provisioner
|
|
369
|
-
# ============================================================================
|
|
370
|
-
|
|
371
|
-
# Claude CLI expects ~/.claude/.credentials.json (note the dot prefix on filename)
|
|
372
|
-
# Format: { claudeAiOauth: { accessToken: "...", refreshToken: "...", expiresAt: ... } }
|
|
373
|
-
if [[ -n "${ANTHROPIC_TOKEN:-}" ]]; then
|
|
374
|
-
log "Configuring Claude credentials..."
|
|
375
|
-
mkdir -p "${HOME}/.claude"
|
|
376
|
-
cat > "${HOME}/.claude/.credentials.json" <<EOF
|
|
377
|
-
{
|
|
378
|
-
"claudeAiOauth": {
|
|
379
|
-
"accessToken": "${ANTHROPIC_TOKEN}",
|
|
380
|
-
"refreshToken": "${ANTHROPIC_REFRESH_TOKEN:-}",
|
|
381
|
-
"expiresAt": ${ANTHROPIC_TOKEN_EXPIRES_AT:-null}
|
|
382
|
-
}
|
|
383
|
-
}
|
|
384
|
-
EOF
|
|
385
|
-
chmod 600 "${HOME}/.claude/.credentials.json"
|
|
386
|
-
fi
|
|
387
|
-
|
|
388
|
-
# Configure Claude Code for cloud workspaces
|
|
389
|
-
# Create both settings and instructions files
|
|
390
|
-
log "Configuring Claude Code for cloud workspace..."
|
|
391
|
-
mkdir -p "${HOME}/.claude"
|
|
392
|
-
|
|
393
|
-
# Create settings.json with MCP server config and auto-accept permissions
|
|
394
|
-
# This tells Claude Code to skip the "Ready to code here?" permission prompt
|
|
395
|
-
# Reference: Claude Code uses this for headless/automated environments
|
|
396
|
-
# IMPORTANT: Must include mcpServers config (Dockerfile version gets overwritten here)
|
|
397
|
-
cat > "${HOME}/.claude/settings.json" <<'SETTINGSEOF'
|
|
398
|
-
{
|
|
399
|
-
"mcpServers": {
|
|
400
|
-
"agent-relay": {
|
|
401
|
-
"command": "node",
|
|
402
|
-
"args": ["/app/dist/src/cli/index.js", "mcp", "serve"]
|
|
403
|
-
}
|
|
404
|
-
},
|
|
405
|
-
"permissions": {
|
|
406
|
-
"allow": [
|
|
407
|
-
"Read",
|
|
408
|
-
"Edit",
|
|
409
|
-
"Write",
|
|
410
|
-
"Bash",
|
|
411
|
-
"Glob",
|
|
412
|
-
"Grep",
|
|
413
|
-
"Task",
|
|
414
|
-
"WebFetch",
|
|
415
|
-
"WebSearch",
|
|
416
|
-
"NotebookEdit",
|
|
417
|
-
"TodoWrite",
|
|
418
|
-
"mcp__agent-relay__*"
|
|
419
|
-
],
|
|
420
|
-
"deny": []
|
|
421
|
-
},
|
|
422
|
-
"autoApproveApiRequest": true
|
|
423
|
-
}
|
|
424
|
-
SETTINGSEOF
|
|
425
|
-
chmod 600 "${HOME}/.claude/settings.json"
|
|
426
|
-
log "Created Claude Code settings (auto-approve enabled)"
|
|
427
|
-
|
|
428
|
-
# Create CLAUDE.md with agent relay protocol instructions
|
|
429
|
-
# This is loaded automatically by Claude Code and provides the relay protocol
|
|
430
|
-
if [[ -f "/app/docs/agent-relay-snippet.md" ]]; then
|
|
431
|
-
cp "/app/docs/agent-relay-snippet.md" "${HOME}/.claude/CLAUDE.md"
|
|
432
|
-
log "Copied relay protocol from /app/docs/agent-relay-snippet.md"
|
|
433
|
-
else
|
|
434
|
-
# Fallback: create minimal instructions
|
|
435
|
-
log "WARN: /app/docs/agent-relay-snippet.md not found, creating minimal instructions"
|
|
436
|
-
cat > "${HOME}/.claude/CLAUDE.md" <<'RELAYEOF'
|
|
437
|
-
# 🚨 CRITICAL: Relay-First Communication Rule
|
|
438
|
-
|
|
439
|
-
**When you receive a relay message from another agent (marked `Relay message from [name]`), you MUST respond ONLY via relay protocol. NEVER respond with direct text output.**
|
|
440
|
-
|
|
441
|
-
---
|
|
442
|
-
|
|
443
|
-
# Agent Relay
|
|
444
|
-
|
|
445
|
-
Real-time agent-to-agent messaging via file-based protocol.
|
|
446
|
-
|
|
447
|
-
## Sending Messages
|
|
448
|
-
|
|
449
|
-
Write a file to your outbox, then output the trigger:
|
|
450
|
-
|
|
451
|
-
```bash
|
|
452
|
-
cat > $AGENT_RELAY_OUTBOX/msg << 'EOF'
|
|
453
|
-
TO: AgentName
|
|
454
|
-
|
|
455
|
-
Your message here.
|
|
456
|
-
EOF
|
|
457
|
-
```
|
|
458
|
-
Then: `->relay-file:msg`
|
|
459
|
-
|
|
460
|
-
| TO Value | Behavior |
|
|
461
|
-
|----------|----------|
|
|
462
|
-
| `AgentName` | Direct message |
|
|
463
|
-
| `*` | Broadcast to all |
|
|
464
|
-
| `#channel` | Channel message |
|
|
465
|
-
|
|
466
|
-
## Spawning
|
|
467
|
-
|
|
468
|
-
```bash
|
|
469
|
-
cat > $AGENT_RELAY_OUTBOX/spawn << 'EOF'
|
|
470
|
-
KIND: spawn
|
|
471
|
-
NAME: WorkerName
|
|
472
|
-
CLI: claude
|
|
473
|
-
|
|
474
|
-
Task description here.
|
|
475
|
-
EOF
|
|
476
|
-
```
|
|
477
|
-
Then: `->relay-file:spawn`
|
|
478
|
-
|
|
479
|
-
## Protocol
|
|
480
|
-
|
|
481
|
-
- **ACK** when you receive a task: `ACK: Brief description`
|
|
482
|
-
- **DONE** when complete: `DONE: What was accomplished`
|
|
483
|
-
- Send status to your **lead** (the agent in `$AGENT_RELAY_SPAWNER`), not broadcast
|
|
484
|
-
RELAYEOF
|
|
485
|
-
fi
|
|
486
|
-
log "Claude Code configuration complete"
|
|
487
|
-
|
|
488
|
-
# Codex CLI settings (always install config to disable auto-updates)
|
|
489
|
-
mkdir -p "${HOME}/.codex"
|
|
490
|
-
if [[ -f "/app/deploy/workspace/codex.config.toml" ]]; then
|
|
491
|
-
cp "/app/deploy/workspace/codex.config.toml" "${HOME}/.codex/config.toml"
|
|
492
|
-
chmod 600 "${HOME}/.codex/config.toml"
|
|
493
|
-
log "Codex configuration applied from codex.config.toml"
|
|
494
|
-
else
|
|
495
|
-
# Fallback: create minimal config (should not happen in production)
|
|
496
|
-
log "WARN: codex.config.toml not found, creating minimal config"
|
|
497
|
-
cat > "${HOME}/.codex/config.toml" <<CODEXCONFIGEOF
|
|
498
|
-
check_for_updates = false
|
|
499
|
-
CODEXCONFIGEOF
|
|
500
|
-
chmod 600 "${HOME}/.codex/config.toml"
|
|
501
|
-
fi
|
|
502
|
-
# Also create JSON config for Codex (some versions read config.json instead of config.toml)
|
|
503
|
-
cat > "${HOME}/.codex/config.json" <<'CODEXJSON'
|
|
504
|
-
{
|
|
505
|
-
"check_for_updates": false
|
|
506
|
-
}
|
|
507
|
-
CODEXJSON
|
|
508
|
-
chmod 600 "${HOME}/.codex/config.json"
|
|
509
|
-
|
|
510
|
-
# NPM wrapper to block Codex self-updates (no-op when Codex tries npm install -g @openai/codex)
|
|
511
|
-
mkdir -p "${HOME}/.local/bin"
|
|
512
|
-
cat > "${HOME}/.local/bin/npm" <<'NPMWRAPPER'
|
|
513
|
-
#!/usr/bin/env bash
|
|
514
|
-
if [[ "$1" == "install" && "$2" == "-g" && "$3" == @openai/codex* ]]; then
|
|
515
|
-
echo "npm wrapper: skipping Codex self-update (auto-update disabled)" >&2
|
|
516
|
-
exit 0
|
|
517
|
-
fi
|
|
518
|
-
exec /usr/local/bin/npm "$@"
|
|
519
|
-
NPMWRAPPER
|
|
520
|
-
chmod +x "${HOME}/.local/bin/npm"
|
|
521
|
-
|
|
522
|
-
# Codex CLI expects ~/.codex/auth.json for credentials
|
|
523
|
-
# Format: { tokens: { access_token: "...", refresh_token: "...", ... } }
|
|
524
|
-
if [[ -n "${OPENAI_TOKEN:-}" ]]; then
|
|
525
|
-
log "Configuring Codex credentials..."
|
|
526
|
-
cat > "${HOME}/.codex/auth.json" <<EOF
|
|
527
|
-
{
|
|
528
|
-
"tokens": {
|
|
529
|
-
"access_token": "${OPENAI_TOKEN}",
|
|
530
|
-
"refresh_token": "${OPENAI_REFRESH_TOKEN:-}"
|
|
531
|
-
}
|
|
532
|
-
}
|
|
533
|
-
EOF
|
|
534
|
-
chmod 600 "${HOME}/.codex/auth.json"
|
|
535
|
-
fi
|
|
536
|
-
|
|
537
|
-
# Google/Gemini - uses application default credentials
|
|
538
|
-
if [[ -n "${GOOGLE_TOKEN:-}" ]]; then
|
|
539
|
-
log "Configuring Google credentials..."
|
|
540
|
-
mkdir -p "${HOME}/.config/gcloud"
|
|
541
|
-
cat > "${HOME}/.config/gcloud/application_default_credentials.json" <<EOF
|
|
542
|
-
{
|
|
543
|
-
"type": "authorized_user",
|
|
544
|
-
"access_token": "${GOOGLE_TOKEN}"
|
|
545
|
-
}
|
|
546
|
-
EOF
|
|
547
|
-
chmod 600 "${HOME}/.config/gcloud/application_default_credentials.json"
|
|
548
|
-
fi
|
|
549
|
-
|
|
550
|
-
# ============================================================================
|
|
551
|
-
# Detect workspace path and start daemon
|
|
552
|
-
# The daemon must start from the same directory that spawned agents will use
|
|
553
|
-
# to ensure consistent socket paths
|
|
554
|
-
# ============================================================================
|
|
555
|
-
|
|
556
|
-
# Function to detect the actual workspace path (same logic as project-namespace.ts)
|
|
557
|
-
detect_workspace_path() {
|
|
558
|
-
local base_dir="${1}"
|
|
559
|
-
|
|
560
|
-
# 1. Explicit override via env var
|
|
561
|
-
if [[ -n "${WORKSPACE_CWD:-}" ]]; then
|
|
562
|
-
echo "${WORKSPACE_CWD}"
|
|
563
|
-
return
|
|
564
|
-
fi
|
|
565
|
-
|
|
566
|
-
# 2. Check if base_dir itself is a git repo
|
|
567
|
-
if [[ -d "${base_dir}/.git" ]]; then
|
|
568
|
-
echo "${base_dir}"
|
|
569
|
-
return
|
|
570
|
-
fi
|
|
571
|
-
|
|
572
|
-
# 3. Scan for cloned repos (directories with .git)
|
|
573
|
-
local first_repo=""
|
|
574
|
-
for dir in "${base_dir}"/*/; do
|
|
575
|
-
if [[ -d "${dir}.git" ]]; then
|
|
576
|
-
# Use first repo found (alphabetically sorted by bash glob)
|
|
577
|
-
first_repo="${dir%/}"
|
|
578
|
-
break
|
|
579
|
-
fi
|
|
580
|
-
done
|
|
581
|
-
|
|
582
|
-
if [[ -n "${first_repo}" ]]; then
|
|
583
|
-
echo "${first_repo}"
|
|
584
|
-
return
|
|
585
|
-
fi
|
|
586
|
-
|
|
587
|
-
# 4. Fall back to base_dir
|
|
588
|
-
echo "${base_dir}"
|
|
589
|
-
}
|
|
590
|
-
|
|
591
|
-
# Detect the actual workspace path
|
|
592
|
-
ACTUAL_WORKSPACE=$(detect_workspace_path "${WORKSPACE_DIR}")
|
|
593
|
-
log "Detected workspace path: ${ACTUAL_WORKSPACE}"
|
|
594
|
-
|
|
595
|
-
# Change to the detected workspace before starting daemon
|
|
596
|
-
cd "${ACTUAL_WORKSPACE}"
|
|
597
|
-
|
|
598
|
-
# Set RELAY_PROJECT from WORKSPACE_ID at runtime (MCP socket discovery uses this)
|
|
599
|
-
export RELAY_PROJECT="${WORKSPACE_ID:-${RELAY_PROJECT:-default}}"
|
|
600
|
-
|
|
601
|
-
# Ensure node can resolve modules from /app when running from workspace directory
|
|
602
|
-
# Without this, @agent-relay/dashboard won't be found since it's in /app/node_modules
|
|
603
|
-
export NODE_PATH="/app/node_modules"
|
|
604
|
-
|
|
605
|
-
log "Starting agent-relay daemon on port ${PORT} from ${ACTUAL_WORKSPACE}"
|
|
606
|
-
args=(/app/dist/src/cli/index.js up --dashboard --port "${PORT}")
|
|
607
|
-
|
|
608
|
-
if [[ "${SUPERVISOR_ENABLED:-true}" == "true" ]]; then
|
|
609
|
-
args+=("--watch")
|
|
610
|
-
fi
|
|
611
|
-
|
|
612
|
-
exec node "${args[@]}"
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
#
|
|
3
|
-
# GitHub CLI Credential Helper for Agent Relay Workspaces
|
|
4
|
-
#
|
|
5
|
-
# This credential helper provides GitHub authentication tokens to the gh CLI
|
|
6
|
-
# by fetching from the cloud API. It works in non-interactive container
|
|
7
|
-
# environments without requiring manual gh auth login.
|
|
8
|
-
#
|
|
9
|
-
# Installation:
|
|
10
|
-
# gh config set -h github.com credential-helper gh-credential-relay
|
|
11
|
-
#
|
|
12
|
-
# Environment variables (auto-set by workspace entrypoint):
|
|
13
|
-
# CLOUD_API_URL - Cloud API base URL
|
|
14
|
-
# WORKSPACE_ID - Workspace identifier
|
|
15
|
-
# WORKSPACE_TOKEN - Bearer token for cloud API auth
|
|
16
|
-
|
|
17
|
-
set -euo pipefail
|
|
18
|
-
|
|
19
|
-
# Debug logging (enable with GH_CREDENTIAL_DEBUG=1)
|
|
20
|
-
debug() {
|
|
21
|
-
if [[ "${GH_CREDENTIAL_DEBUG:-}" == "1" ]]; then
|
|
22
|
-
echo "gh-credential-relay: $*" >&2
|
|
23
|
-
fi
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
debug "Called with args: $*"
|
|
27
|
-
|
|
28
|
-
# Only handle 'get' operation for storing credentials
|
|
29
|
-
if [[ "${1:-}" != "get" ]]; then
|
|
30
|
-
debug "Ignoring non-get operation: ${1:-}"
|
|
31
|
-
exit 0
|
|
32
|
-
fi
|
|
33
|
-
|
|
34
|
-
# Read input from gh CLI (host, protocol, etc)
|
|
35
|
-
declare -A input
|
|
36
|
-
while IFS='=' read -r key value; do
|
|
37
|
-
[[ -z "$key" ]] && break
|
|
38
|
-
input["$key"]="$value"
|
|
39
|
-
done
|
|
40
|
-
|
|
41
|
-
host="${input[host]:-}"
|
|
42
|
-
debug "Host: $host"
|
|
43
|
-
|
|
44
|
-
# Only provide credentials for github.com
|
|
45
|
-
if [[ "$host" != "github.com" ]]; then
|
|
46
|
-
debug "Not github.com, skipping"
|
|
47
|
-
exit 0
|
|
48
|
-
fi
|
|
49
|
-
|
|
50
|
-
# Check required environment variables
|
|
51
|
-
if [[ -z "${CLOUD_API_URL:-}" ]]; then
|
|
52
|
-
echo "gh-credential-relay: CLOUD_API_URL not set" >&2
|
|
53
|
-
exit 1
|
|
54
|
-
fi
|
|
55
|
-
|
|
56
|
-
if [[ -z "${WORKSPACE_ID:-}" ]]; then
|
|
57
|
-
echo "gh-credential-relay: WORKSPACE_ID not set" >&2
|
|
58
|
-
exit 1
|
|
59
|
-
fi
|
|
60
|
-
|
|
61
|
-
if [[ -z "${WORKSPACE_TOKEN:-}" ]]; then
|
|
62
|
-
echo "gh-credential-relay: WORKSPACE_TOKEN not set" >&2
|
|
63
|
-
exit 1
|
|
64
|
-
fi
|
|
65
|
-
|
|
66
|
-
debug "Fetching token from ${CLOUD_API_URL}/api/git/token?workspaceId=${WORKSPACE_ID}"
|
|
67
|
-
|
|
68
|
-
# Fetch fresh token from cloud API (5 second timeout)
|
|
69
|
-
response=$(curl -s --max-time 5 \
|
|
70
|
-
-H "Authorization: Bearer ${WORKSPACE_TOKEN}" \
|
|
71
|
-
"${CLOUD_API_URL}/api/git/token?workspaceId=${WORKSPACE_ID}" 2>/dev/null) || true
|
|
72
|
-
|
|
73
|
-
if [[ -z "$response" ]]; then
|
|
74
|
-
debug "No response from cloud API"
|
|
75
|
-
exit 1
|
|
76
|
-
fi
|
|
77
|
-
|
|
78
|
-
# Parse JSON response
|
|
79
|
-
token=$(echo "$response" | jq -r '.userToken // .token // empty' 2>/dev/null)
|
|
80
|
-
|
|
81
|
-
if [[ -z "$token" ]]; then
|
|
82
|
-
debug "No token in response"
|
|
83
|
-
exit 1
|
|
84
|
-
fi
|
|
85
|
-
|
|
86
|
-
# Output in git credential format (same as git-credential-relay)
|
|
87
|
-
echo "protocol=https"
|
|
88
|
-
echo "host=github.com"
|
|
89
|
-
echo "username=x-access-token"
|
|
90
|
-
echo "password=${token}"
|