Compare commits

..

17 Commits

Author SHA1 Message Date
Asher e950669f93 Use AgentAPI for additional Claude status reporting (#150)
Is it OK to add the flag like this or do we need to check the cli
version to determine whether the new flag is available? Or I could just
throw in an `||` to run the command again without the flag if it fails.

Blocked on adding AgentAPI to Claude.

Will need to do the same for Goose.
2025-06-17 19:14:42 +02:00
DevCats 3d78f5e262 Merge branch 'main' into claude-code-web 2025-06-16 20:02:40 -05:00
DevCats 960ec18d35 fix: clean up version-bump workflow script output handling (#153)
## Description

Removed unnecessary comments and added commands to reset the working
directory and clean untracked files in the version-bump workflow. This
improves the script's reliability by ensuring a clean state after
executing version checks.

---

## Type of Change

- [ ] New module
- [X] Bug fix
- [ ] Feature/enhancement
- [ ] Documentation
- [ ] Other

---

## Related Issues

None
2025-06-16 19:52:56 -05:00
DevCats eae64160bd fix: update GitHub Actions permissions in version-bump workflow (#152)
## Description

update GitHub Actions permissions in version-bump workflow by adding
issues permission for commenting on PR's

---

## Type of Change

- [ ] New module
- [X] Bug fix
- [ ] Feature/enhancement
- [ ] Documentation
- [ ] Other

---

## Related Issues

None
2025-06-16 14:32:09 -05:00
Hugo Dutka 1469373a50 uncomment the claude code app 2025-06-05 18:56:48 +02:00
Hugo Dutka 1551c17413 comment out the claude-code app temporarily 2025-06-05 18:53:36 +02:00
Hugo Dutka eac3e55537 add healthcheck to claude code web 2025-06-05 18:26:37 +02:00
Hugo Dutka c301da7e6b remove tee pipes - they make claude ignore actual terminal width and render 80 char lines 2025-06-04 19:03:41 +02:00
Hugo Dutka 7d64e7ea84 use agentapi attach 2025-06-04 17:53:07 +02:00
Hugo Dutka b5937c06a9 adjust agentapi terminal width and height 2025-06-04 15:41:33 +02:00
Hugo Dutka d2b91ae1a8 adjust agentapi terminal width and height 2025-06-04 14:32:27 +02:00
Hugo Dutka bd05d06a3b change claude code web app url 2025-06-04 13:19:05 +02:00
Ben Potter e340affe95 fix another typo 2025-06-03 18:36:50 -05:00
Ben Potter 16892d806e fix typo 2025-06-03 18:31:30 -05:00
Ben Potter 056f4b5a68 remove duplicate app 2025-06-03 18:29:28 -05:00
Ben Potter 1c99c57b6e add agentapi 2025-06-03 18:27:29 -05:00
BrunoQuaresma a0c1a051ed feat: add claude_code_web in claude-code 2025-06-03 20:54:58 +00:00
4 changed files with 62 additions and 96 deletions
+6 -4
View File
@@ -17,6 +17,7 @@ jobs:
permissions:
contents: read
pull-requests: write
issues: write
steps:
- name: Checkout code
uses: actions/checkout@v4
@@ -46,7 +47,6 @@ jobs:
- name: Check version bump requirements
id: version-check
run: |
# Run the script to check what versions should be
output_file=$(mktemp)
if ./.github/scripts/version-bump.sh "${{ steps.bump-type.outputs.type }}" origin/main > "$output_file" 2>&1; then
echo "Script completed successfully"
@@ -56,17 +56,14 @@ jobs:
exit 1
fi
# Store output for PR comment
{
echo "output<<EOF"
cat "$output_file"
echo "EOF"
} >> $GITHUB_OUTPUT
# Show output
cat "$output_file"
# Check if any files would be modified by the script
if git diff --quiet; then
echo "versions_up_to_date=true" >> $GITHUB_OUTPUT
echo "✅ All module versions are already up to date"
@@ -78,6 +75,10 @@ jobs:
echo ""
echo "Diff preview:"
git diff
git checkout .
git clean -fd
exit 1
fi
@@ -85,6 +86,7 @@ jobs:
if: failure() && steps.version-check.outputs.versions_up_to_date == 'false'
uses: actions/github-script@v7
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const output = `${{ steps.version-check.outputs.output }}`;
const bumpType = `${{ steps.bump-type.outputs.type }}`;
+48 -5
View File
@@ -131,9 +131,14 @@ resource "coder_script" "claude_code" {
npm install -g @anthropic-ai/claude-code@${var.claude_code_version}
fi
# Hardcoded for now: install AgentAPI
wget https://github.com/coder/agentapi/releases/download/preview/agentapi-linux-amd64
chmod +x agentapi-linux-amd64
sudo mv agentapi-linux-amd64 /usr/local/bin/agentapi
if [ "${var.experiment_report_tasks}" = "true" ]; then
echo "Configuring Claude Code to report tasks via Coder MCP..."
coder exp mcp configure claude-code ${var.folder}
coder exp mcp configure claude-code ${var.folder} --ai-agentapi-url http://localhost:3284
fi
# Run post-install script if provided
@@ -166,8 +171,24 @@ resource "coder_script" "claude_code" {
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
# Create a new tmux session in detached mode
tmux new-session -d -s claude-code -c ${var.folder} "claude --dangerously-skip-permissions \"$CODER_MCP_CLAUDE_TASK_PROMPT\""
# use low width to fit in the tasks UI sidebar. height is adjusted to ~match the default 80k (80x1000) characters
# visible in the terminal screen.
tmux new-session -d -s claude-code-agentapi -c ${var.folder} 'agentapi server --term-width 67 --term-height 1190 -- bash -c "claude --dangerously-skip-permissions \"$CODER_MCP_CLAUDE_TASK_PROMPT\""; exec bash'
echo "Waiting for agentapi server to start on port 3284..."
for i in $(seq 1 15); do
if lsof -i :3284 | grep -q 'LISTEN'; then
echo "agentapi server started on port 3284."
break
fi
echo "Waiting... ($i/15)"
sleep 1
done
if ! lsof -i :3284 | grep -q 'LISTEN'; then
echo "Error: agentapi server did not start on port 3284 after 15 seconds."
exit 1
fi
tmux new-session -d -s claude-code -c ${var.folder} "agentapi attach"
fi
@@ -217,6 +238,20 @@ resource "coder_script" "claude_code" {
run_on_start = true
}
resource "coder_app" "claude_code_web" {
slug = "claude-code-web"
display_name = "Claude Code Web"
agent_id = var.agent_id
url = "http://localhost:3284/"
icon = var.icon
subdomain = true
healthcheck {
url = "http://localhost:3284/status"
interval = 5
threshold = 3
}
}
resource "coder_app" "claude_code" {
slug = "claude-code"
display_name = "Claude Code"
@@ -229,12 +264,20 @@ resource "coder_app" "claude_code" {
export LC_ALL=en_US.UTF-8
if [ "${var.experiment_use_tmux}" = "true" ]; then
if ! tmux has-session -t claude-code-agentapi 2>/dev/null; then
echo "Starting a new Claude Code agentapi tmux session." | tee -a "$HOME/.claude-code.log"
# use low width to fit in the tasks UI sidebar. height is adjusted to ~match the default 80k (80x1000) characters
# visible in the terminal screen.
tmux new-session -d -s claude-code-agentapi -c ${var.folder} 'agentapi server --term-width 67 --term-height 1190 -- bash -c "claude --dangerously-skip-permissions"; exec bash'
fi
if tmux has-session -t claude-code 2>/dev/null; then
echo "Attaching to existing Claude Code tmux session." | tee -a "$HOME/.claude-code.log"
tmux attach-session -t claude-code
else
echo "Starting a new Claude Code tmux session." | tee -a "$HOME/.claude-code.log"
tmux new-session -s claude-code -c ${var.folder} "claude --dangerously-skip-permissions | tee -a \"$HOME/.claude-code.log\"; exec bash"
tmux new-session -s claude-code -c ${var.folder} "agentapi attach; exec bash"
fi
elif [ "${var.experiment_use_screen}" = "true" ]; then
if screen -list | grep -q "claude-code"; then
@@ -242,7 +285,7 @@ resource "coder_app" "claude_code" {
screen -xRR claude-code
else
echo "Starting a new Claude Code screen session." | tee -a "$HOME/.claude-code.log"
screen -S claude-code bash -c 'claude --dangerously-skip-permissions | tee -a "$HOME/.claude-code.log"; exec bash'
screen -S claude-code bash -c 'agentapi attach; exec bash'
fi
else
cd ${var.folder}
-24
View File
@@ -54,29 +54,6 @@ variable "subdomain" {
description = "Is subdomain sharing enabled in your cluster?"
}
variable "kasm_config" {
type = string
default = ""
description = <<-EOT
Additional KasmVNC configuration in YAML format. Can be used to set DLP policies and other advanced settings.
Example for DLP policies (according to KasmVNC documentation):
```yaml
data_loss_prevention:
clipboard:
server_to_client:
enabled: false
client_to_server:
enabled: false
printing: false
download: false
```
For more advanced configuration options, see the KasmVNC documentation:
https://kasmweb.com/docs/latest/how_to/kasmvnc_dlp_policies.html
EOT
}
resource "coder_script" "kasm_vnc" {
agent_id = var.agent_id
display_name = "KasmVNC"
@@ -88,7 +65,6 @@ resource "coder_script" "kasm_vnc" {
KASM_VERSION = var.kasm_version
SUBDOMAIN = tostring(var.subdomain)
PATH_VNC_HTML = var.subdomain ? "" : file("${path.module}/path_vnc.html")
KASM_CONFIG = var.kasm_config
})
}
+8 -63
View File
@@ -193,35 +193,19 @@ else
SUDO=""
echo "WARNING: Sudo access not available, using user config dir!"
# Always ensure the directory exists
mkdir -p "$HOME/.vnc"
# We'll handle existing configs differently - we'll merge instead of skipping
if [[ -f "$kasm_config_file" ]]; then
echo "INFO: Custom user KasmVNC config exists, will merge with new settings."
# Create a backup of the existing config
cp "$kasm_config_file" "$${kasm_config_file}.bak"
echo "WARNING: Custom user KasmVNC config exists, not overwriting!"
echo "WARNING: Ensure that you manually configure the appropriate settings."
kasm_config_file="/dev/stderr"
else
echo "WARNING: This may prevent custom user KasmVNC settings from applying!"
mkdir -p "$HOME/.vnc"
fi
fi
echo "Writing KasmVNC config to $kasm_config_file"
# Create a temporary file for our config
TEMP_CONFIG_FILE=$(mktemp)
# Check if existing config file exists and preserve its content
if [[ -f "$kasm_config_file" ]]; then
echo "Preserving existing KasmVNC configuration settings."
cp "$kasm_config_file" "$TEMP_CONFIG_FILE"
# Update only the network section
if grep -q "^network:" "$TEMP_CONFIG_FILE"; then
# Network section exists, update only the websocket_port
sed -i "s/\([ \t]*websocket_port:\).*/\1 ${PORT}/" "$TEMP_CONFIG_FILE"
else
# Network section doesn't exist, add it
cat >> "$TEMP_CONFIG_FILE" << EOF
$SUDO tee "$kasm_config_file" > /dev/null << EOF
network:
protocol: http
interface: 127.0.0.1
@@ -233,45 +217,6 @@ network:
udp:
public_ip: 127.0.0.1
EOF
fi
else
# Start with base network configuration for new config
cat > "$TEMP_CONFIG_FILE" << EOF
network:
protocol: http
interface: 127.0.0.1
websocket_port: ${PORT}
ssl:
require_ssl: false
pem_certificate:
pem_key:
udp:
public_ip: 127.0.0.1
EOF
fi
# Add additional KasmVNC configuration if provided
if [[ -n "${KASM_CONFIG}" ]]; then
echo "Adding custom KasmVNC configuration."
# Add a comment to mark the start of custom config
echo "" >> "$TEMP_CONFIG_FILE"
echo "# ---- START CUSTOM KASMVNC CONFIG ----" >> "$TEMP_CONFIG_FILE"
echo "" >> "$TEMP_CONFIG_FILE"
# Directly append the YAML configuration
echo "${KASM_CONFIG}" >> "$TEMP_CONFIG_FILE"
# Add a comment to mark the end of custom config
echo "" >> "$TEMP_CONFIG_FILE"
echo "# ---- END CUSTOM KASMVNC CONFIG ----" >> "$TEMP_CONFIG_FILE"
fi
# Apply the configuration
$SUDO cp "$TEMP_CONFIG_FILE" "$kasm_config_file"
# Clean up
rm "$TEMP_CONFIG_FILE"
# This password is not used since we start the server without auth.
# The server is protected via the Coder session token / tunnel