-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathentrypoint.sh
More file actions
executable file
·130 lines (113 loc) · 6.87 KB
/
entrypoint.sh
File metadata and controls
executable file
·130 lines (113 loc) · 6.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#!/bin/bash
set -e
# ── GitHub CLI auth ────────────────────────────────────────────────────────────
if [[ -n "${GH_TOKEN:-}" ]]; then
if su - agentbox -c "echo '$GH_TOKEN' | gh auth login --with-token" 2>/dev/null; then
echo "✅ GitHub CLI authenticated"
else
echo "⚠️ GitHub CLI auth failed (token may be expired)"
fi
echo "export GITHUB_TOKEN='$GH_TOKEN'" >> /home/agentbox/.zshrc
echo "export GH_TOKEN='$GH_TOKEN'" >> /home/agentbox/.zshrc
fi
# ── playwright-cli skills (per-user install) ──────────────────────────────────
if su - agentbox -c "playwright-cli install --skills" 2>/dev/null; then
echo "✅ Playwright skills installed"
else
echo "⚠️ Playwright skills install skipped"
fi
# ── az devops extension (idempotent) ──────────────────────────────────────────
az extension add --name azure-devops --yes 2>/dev/null && echo "✅ ADO extension ready" || echo "⚠️ ADO extension already present"
# ── Welcome message ───────────────────────────────────────────────────────────
cat > /etc/motd << 'EOF'
┌─────────────────────────────────────────────┐
│ AgentBox • ephemeral │
│ │
│ copilot GitHub Copilot CLI │
│ playwright-cli Browser automation │
│ az Azure CLI │
│ gh GitHub CLI │
│ python / node Runtimes │
│ │
│ Workspace: ~/workspace │
│ VS Code: http://localhost/ │
│ Terminal: http://localhost/terminal/ │
│ │
│ ── Workflow ────────────────────────── │
│ copilot Start Copilot CLI │
│ Shift+Tab Cycle: std → plan → auto │
│ Close browser Sessions keep running │
│ Reconnect Picker shows sessions │
│ copilot --resume Reconnect to session │
│ │
│ ── tmux shortcuts ──────────────────── │
│ Ctrl+B, D Detach (session lives) │
│ Ctrl+B, C New window │
│ Ctrl+B, [0-9] Switch window │
│ Ctrl+B, | Split horizontal │
│ Ctrl+B, - Split vertical │
└─────────────────────────────────────────────┘
EOF
# ── Template nginx config with proxy secret ───────────────────────────────────
export proxy_secret="${PROXY_SECRET:-}"
envsubst '${proxy_secret}' < /etc/nginx/sites-available/default.template > /etc/nginx/sites-available/default
ln -sf /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default 2>/dev/null || true
# ── Start nginx reverse proxy ─────────────────────────────────────────────────
nginx
sleep 0.5
if pgrep -x nginx > /dev/null; then
echo "✅ nginx running on port 80"
else
echo "❌ nginx failed to start" >&2
fi
# ── Start code-server in background ───────────────────────────────────────────
su - agentbox -c "code-server --bind-addr 127.0.0.1:8080 /home/agentbox/workspace &"
sleep 1
if pgrep -f "code-server" > /dev/null; then
echo "✅ code-server running on port 8080"
else
echo "⚠️ code-server failed to start" >&2
fi
# ── Start sshd on port 2222 (if CA key is provisioned) ────────────────────────
if [[ -f /etc/ssh/trusted_ca_keys.pub ]]; then
/usr/sbin/sshd -D -p 2222 &
sleep 0.5
if pgrep -x sshd > /dev/null; then
echo "🔐 SSH available on port 2222 (certificate auth only)"
else
echo "❌ sshd failed to start" >&2
fi
fi
# ── Copilot GitHub Token (shared account for unlicensed users) ─────────────────
if [[ -n "${COPILOT_GITHUB_TOKEN:-}" ]]; then
echo "export COPILOT_GITHUB_TOKEN='$COPILOT_GITHUB_TOKEN'" >> /home/agentbox/.zshrc
echo "🤖 Copilot CLI token configured"
fi
# ── SharePoint Reader credentials ─────────────────────────────────────────────
if [[ -n "${SP_CLIENT_ID:-}" ]]; then
echo "export SP_CLIENT_ID='$SP_CLIENT_ID'" >> /home/agentbox/.zshrc
echo "export SP_TENANT_ID='$SP_TENANT_ID'" >> /home/agentbox/.zshrc
fi
# ── ADO token ──────────────────────────────────────────────────────────────────
if [[ -n "${ADO_TOKEN:-}" ]]; then
echo "export AZURE_DEVOPS_EXT_PAT='$ADO_TOKEN'" >> /home/agentbox/.zshrc
fi
# ── JSM token ──────────────────────────────────────────────────────────────────
if [[ -n "${JIRA_TOKEN:-}" ]]; then
echo "export JIRA_TOKEN='$JIRA_TOKEN'" >> /home/agentbox/.zshrc
fi
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo " AgentBox ready"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
# ── Start session manager daemon ───────────────────────────────────────────────
python3 /usr/local/bin/session-manager.py &
sleep 0.5
if pgrep -f "session-manager.py" > /dev/null; then
echo "✅ Session manager running on port 8081"
else
echo "⚠️ Session manager failed to start" >&2
fi
# ── Web terminal (foreground — keeps container alive) ─────────────────────────
exec su - agentbox -c "ttyd --writable -p 7681 -i 127.0.0.1 /usr/local/bin/session-picker.py"