mirror of
https://github.com/mr0xb/dotfiles.git
synced 2026-08-27 19:34:57 -04:00
99 lines
369 KiB
JSON
99 lines
369 KiB
JSON
{"type":"permission-mode","permissionMode":"default","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c"}
|
|
{"type":"file-history-snapshot","messageId":"0af07889-5c1c-427f-b646-6b443ec19d95","snapshot":{"messageId":"0af07889-5c1c-427f-b646-6b443ec19d95","trackedFileBackups":{},"timestamp":"2026-04-21T20:09:38.469Z"},"isSnapshotUpdate":false}
|
|
{"parentUuid":null,"isSidechain":false,"promptId":"f13cb523-6eae-4d75-9440-40f171c22a55","type":"user","message":{"role":"user","content":"Help me create a slackbot that integrates with teleport (so our team can approve teleport requests via slack), we also get on-call alerts for these teleport requests so I would like to add the ability to acknowledge and mark the Jira ticket that gets opened as \"Done\" with comment \"Request Approved\". Our typical response for these requests is approved, denied (with reason) or sometimes we need to request more information from the user (if they did not put any ticket details/number for what they are doing, etc)"},"uuid":"0af07889-5c1c-427f-b646-6b443ec19d95","timestamp":"2026-04-21T20:09:38.469Z","permissionMode":"default","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"parentUuid":"0af07889-5c1c-427f-b646-6b443ec19d95","isSidechain":false,"attachment":{"type":"deferred_tools_delta","addedNames":["AskUserQuestion","CronCreate","CronDelete","CronList","EnterPlanMode","EnterWorktree","ExitPlanMode","ExitWorktree","Monitor","NotebookEdit","PushNotification","RemoteTrigger","TaskCreate","TaskGet","TaskList","TaskOutput","TaskStop","TaskUpdate","WebFetch","WebSearch","mcp__claude_ai_Apollo_io__authenticate","mcp__claude_ai_Apollo_io__complete_authentication","mcp__claude_ai_Asana__authenticate","mcp__claude_ai_Asana__complete_authentication","mcp__claude_ai_Atlassian_2__authenticate","mcp__claude_ai_Atlassian_2__complete_authentication","mcp__claude_ai_Atlassian__authenticate","mcp__claude_ai_Atlassian__complete_authentication","mcp__claude_ai_Gmail__authenticate","mcp__claude_ai_Gmail__complete_authentication","mcp__claude_ai_Google_Calendar__authenticate","mcp__claude_ai_Google_Calendar__complete_authentication","mcp__claude_ai_Google_Drive__authenticate","mcp__claude_ai_Google_Drive__complete_authentication","mcp__claude_ai_Lucid__authenticate","mcp__claude_ai_Lucid__complete_authentication","mcp__claude_ai_Outreach__authenticate","mcp__claude_ai_Outreach__complete_authentication","mcp__claude_ai_Slack__authenticate","mcp__claude_ai_Slack__complete_authentication","mcp__claude_ai_Superhuman__authenticate","mcp__claude_ai_Superhuman__complete_authentication","mcp__claude_ai_Zoom_for_Claude__authenticate","mcp__claude_ai_Zoom_for_Claude__complete_authentication"],"addedLines":["AskUserQuestion","CronCreate","CronDelete","CronList","EnterPlanMode","EnterWorktree","ExitPlanMode","ExitWorktree","Monitor","NotebookEdit","PushNotification","RemoteTrigger","TaskCreate","TaskGet","TaskList","TaskOutput","TaskStop","TaskUpdate","WebFetch","WebSearch","mcp__claude_ai_Apollo_io__authenticate","mcp__claude_ai_Apollo_io__complete_authentication","mcp__claude_ai_Asana__authenticate","mcp__claude_ai_Asana__complete_authentication","mcp__claude_ai_Atlassian_2__authenticate","mcp__claude_ai_Atlassian_2__complete_authentication","mcp__claude_ai_Atlassian__authenticate","mcp__claude_ai_Atlassian__complete_authentication","mcp__claude_ai_Gmail__authenticate","mcp__claude_ai_Gmail__complete_authentication","mcp__claude_ai_Google_Calendar__authenticate","mcp__claude_ai_Google_Calendar__complete_authentication","mcp__claude_ai_Google_Drive__authenticate","mcp__claude_ai_Google_Drive__complete_authentication","mcp__claude_ai_Lucid__authenticate","mcp__claude_ai_Lucid__complete_authentication","mcp__claude_ai_Outreach__authenticate","mcp__claude_ai_Outreach__complete_authentication","mcp__claude_ai_Slack__authenticate","mcp__claude_ai_Slack__complete_authentication","mcp__claude_ai_Superhuman__authenticate","mcp__claude_ai_Superhuman__complete_authentication","mcp__claude_ai_Zoom_for_Claude__authenticate","mcp__claude_ai_Zoom_for_Claude__complete_authentication"],"removedNames":[]},"type":"attachment","uuid":"19b95c5e-bd80-418e-897b-90f4ca9c6f18","timestamp":"2026-04-21T20:09:38.469Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"parentUuid":"19b95c5e-bd80-418e-897b-90f4ca9c6f18","isSidechain":false,"attachment":{"type":"skill_listing","content":"- update-config: Use this skill to configure the Claude Code harness via settings.json. Automated behaviors (\"from now on when X\", \"each time X\", \"whenever X\", \"before/after X\") require hooks configured in settings.json - the harness executes these, not Claude, so memory/preferences cannot fulfill them. Also use for: permissions (\"allow X\", \"add permission\", \"move permission to\"), env vars (\"set X=Y\"), hook troubleshooting, or any changes to settings.json/settings.local.json files. Examples: \"allow npm commands\", \"add bq permission to global settings\", \"move permission to user settings\", \"set DEBUG=true\", \"when claude stops show X\". For simple settings like theme/model, use Config tool.\n- keybindings-help: Use when the user wants to customize keyboard shortcuts, rebind keys, add chord bindings, or modify ~/.claude/keybindings.json. Examples: \"rebind ctrl+s\", \"add a chord shortcut\", \"change the submit key\", \"customize keybindings\".\n- simplify: Review changed code for reuse, quality, and efficiency, then fix any issues found.\n- fewer-permission-prompts: Scan your transcripts for common read-only Bash and MCP tool calls, then add a prioritized allowlist to project .claude/settings.json to reduce permission prompts.\n- loop: Run a prompt or slash command on a recurring interval (e.g. /loop 5m /foo). Omit the interval to let the model self-pace. - When the user wants to set up a recurring task, poll for status, or run something repeatedly on an interval (e.g. \"check the deploy every 5 minutes\", \"keep running /babysit-prs\"). Do NOT invoke for one-off tasks.\n- schedule: Create, update, list, or run scheduled remote agents (triggers) that execute on a cron schedule. - When the user wants to schedule a recurring remote agent, set up automated tasks, create a cron job for Claude Code, or manage their scheduled agents/triggers.\n- claude-api: Build, debug, and optimize Claude API / Anthropic SDK apps. Apps built with this skill should include prompt caching. Also handles migrating existing Claude API code between Claude model versions (4.5 → 4.6, 4.6 → 4.7, retired-model replacements).\nTRIGGER when: code imports `anthropic`/`@anthropic-ai/sdk`; user asks for the Claude API, Anthropic SDK, or Managed Agents; user adds/modifies/tunes a Claude feature (caching, thinking, compaction, tool use, batch, files, citations, memory) or model (Opus/Sonnet/Haiku) in a file; questions about prompt caching / cache hit rate in an Anthropic SDK project.\nSKIP: file imports `openai`/other-provider SDK, filename like `*-openai.py`/`*-generic.py`, provider-neutral code, general programming/ML.\n- init: Initialize a new CLAUDE.md file with codebase documentation\n- review: Review a pull request\n- security-review: Complete a security review of the pending changes on the current branch","skillCount":10,"isInitial":true},"type":"attachment","uuid":"88de2682-1b90-438d-a5e7-26bca3c1a76a","timestamp":"2026-04-21T20:09:38.469Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"parentUuid":"88de2682-1b90-438d-a5e7-26bca3c1a76a","isSidechain":false,"message":{"model":"claude-sonnet-4-6","id":"msg_01ADqRW3VjcKqud37yfSvUkk","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"","signature":"Es4GClsIDBgCKkAd61v/S07wA1asM0KIfNQPcbUsZC57PuZZRClbjlKjzftCSHkujx+ktBogH1txlb6PJz4FAlDPh6j44IJEcQntMhFjbGF1ZGUtc29ubmV0LTQtNjgAEgxDDmX8FgEtJ/7C92AaDHzQyDijDQZikgDcoCIw0Rd7jhkmcMwlk01elWVY0se7kV4/Ms96N9hlIAodoA8MVt8j/N5tJr3EQlPQvu2AKqAFpqpEf+KOWZtrXFrtSfIypRxhAGLa4rS5D+mY8kDozEG14D2kJGJNtjv1JBhEsgLyv0xCP0pdFtZI9jqmAsfGz0RCrko3LLKxseK/UyXFS6Q6/CZiGJX0qBpOKZOW+Bjqnj2N5qPVzqsofIq1B2t1mVk4c5jcpOt3Q50rNbjNncX4lfLJpGR4ihvoa/j1Dzn9i8chw0NeQdlF3On+PYcB2kAokPwdfqjNl5CpipdoJghxcYl2ZV72IXfBaZvJvm0dqAMsUNmObcI2XMF1HqlVH/GR4dIHExsDMs6i4mnQx4Xjy/x7+6dDZ96YoDfFHBKMy8igLWXV2BXNt2Y5TzDQkDuQ81tEugUkGk7RHdvKUvJdT2SpT0Sv+XJH8w5xdZe0SGhmmiqbqw/WkbJmjEyn1ZNEehCM+6L8YFZqgXYeb2n3alOjwxkLR9ZKK6lqgfuPt3+CwnfbVK4mMVbZakoh3NjJ49tx4GTmEN7klv32oztJKNUCNlCO8xCTzA/LFJ5a1nbpQbxXb29FaACELgPzQJjuxscD/x2rUYVKskCekSKYVtPAn8YFGMlPgAU9HCZ8OmzRFUrz8tUrYaSBLSOTEsD5hr+yT5/LNXX0MCxXaoW+Mqv3uUo4WYd7E54QnpePykJVGf897xWmUX8ScwpuIn2hj7UpXuT4nPdvn3odlgFq8PwG8dSAJwlWYUc5LLzj9ObeTHM1lFUODNmq+C6rxRDsfArBcJ5hEmw617iGwJbCir7s3t+gC1SzcOHXwzSqm8auyoY5P96slBtFbCtRtGNRFQvoh49gc6yLaGA3hCCxRCN9nyZWoNXd7zK8JcA0iKbf6HldQs/dpl3hlAyu2PXz3vQI9+IjThIop41bV1R1moLvBcUBWx222QjW0rIoGAE="}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":7237,"cache_read_input_tokens":11755,"output_tokens":408,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":7237},"inference_geo":"","iterations":[{"input_tokens":3,"output_tokens":408,"cache_read_input_tokens":11755,"cache_creation_input_tokens":7237,"cache_creation":{"ephemeral_5m_input_tokens":7237,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaHXGxL3Bx98WaE4VBfsT","type":"assistant","uuid":"1eb8e017-c20a-47bc-8ac4-829978b320e5","timestamp":"2026-04-21T20:09:41.973Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"parentUuid":"1eb8e017-c20a-47bc-8ac4-829978b320e5","isSidechain":false,"message":{"model":"claude-sonnet-4-6","id":"msg_01ADqRW3VjcKqud37yfSvUkk","type":"message","role":"assistant","content":[{"type":"text","text":"Let me first explore the current directory to understand what's already there before planning."}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":7237,"cache_read_input_tokens":11755,"output_tokens":408,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":7237},"inference_geo":"","iterations":[{"input_tokens":3,"output_tokens":408,"cache_read_input_tokens":11755,"cache_creation_input_tokens":7237,"cache_creation":{"ephemeral_5m_input_tokens":7237,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaHXGxL3Bx98WaE4VBfsT","type":"assistant","uuid":"29e62795-3dea-4f93-8601-4841a56866ee","timestamp":"2026-04-21T20:09:42.351Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"parentUuid":"29e62795-3dea-4f93-8601-4841a56866ee","isSidechain":false,"type":"system","subtype":"local_command","content":"<command-name>/btw</command-name>\n <command-message>btw</command-message>\n <command-args></command-args>","level":"info","timestamp":"2026-04-21T20:09:43.153Z","uuid":"2fb7c203-739f-4cab-9dc1-1c998bdfabb6","isMeta":false,"userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"parentUuid":"2fb7c203-739f-4cab-9dc1-1c998bdfabb6","isSidechain":false,"type":"system","subtype":"local_command","content":"<local-command-stdout>Usage: /btw <your question></local-command-stdout>","level":"info","timestamp":"2026-04-21T20:09:43.153Z","uuid":"bd01673d-e136-432e-8af9-65a6d1b6fc27","isMeta":false,"userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"parentUuid":"bd01673d-e136-432e-8af9-65a6d1b6fc27","isSidechain":false,"message":{"model":"claude-sonnet-4-6","id":"msg_01ADqRW3VjcKqud37yfSvUkk","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01FMgzP4okxfQNkNQRNzGAnJ","name":"Agent","input":{"description":"Explore beammeup service directory","subagent_type":"Explore","prompt":"Explore the directory /Users/steve.briggs/projects/operations/services/beammeup and give me a thorough picture of what's there — all files, their purpose, key code patterns, existing integrations (Slack, Teleport, Jira), config files, and dependencies. I want to understand: is this already a Slackbot project? What language/framework is it using? What integrations are already wired up? Report back file tree, key code snippets, and a summary of what exists vs what would need to be built."},"caller":{"type":"direct"}}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":7237,"cache_read_input_tokens":11755,"output_tokens":408,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":7237},"inference_geo":"","iterations":[{"input_tokens":3,"output_tokens":408,"cache_read_input_tokens":11755,"cache_creation_input_tokens":7237,"cache_creation":{"ephemeral_5m_input_tokens":7237,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaHXGxL3Bx98WaE4VBfsT","type":"assistant","uuid":"4f6c1526-d07b-4e44-a626-b00c7ef251a6","timestamp":"2026-04-21T20:09:44.931Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"parentUuid":"4f6c1526-d07b-4e44-a626-b00c7ef251a6","isSidechain":false,"promptId":"f13cb523-6eae-4d75-9440-40f171c22a55","type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01FMgzP4okxfQNkNQRNzGAnJ","type":"tool_result","content":[{"type":"text","text":"Perfect. Now I have a thorough understanding. Let me generate the comprehensive report.\n\n## Thorough Exploration Report: Beammeup Service\n\nBased on my complete exploration of the operations repository, here's what I found:\n\n### Current State of Beammeup\n\n**Beammeup is currently an empty directory** with no code, only a Claude Code settings file. It exists as a placeholder in `/Users/steve.briggs/projects/operations/services/beammeup/` but contains no files besides `.claude/settings.local.json`.\n\n---\n\n### Overall Repository Architecture\n\nThis is **Immuta's operations repository**, primarily Go-based with the following structure:\n\n```\noperations/\n├── apps/ # Go CLI tools (pack, immanager, cluster-notifications)\n├── libs/ # Shared Go libraries (github, git, archive, kyverno-rules)\n├── services/ # Standalone microservices\n│ ├── crow/ # Terraform Module Registry (S3-backed)\n│ ├── fluxcannon/ # Flux → GitHub commit status bridge\n│ └── beammeup/ # [EMPTY - TO BE BUILT]\n├── kubernetes/ # Kubernetes manifests and kustomize overlays\n├── helm/ # Helm charts\n├── infrastructure/ # Terraform infrastructure code\n└── Makefile # Centralized build/test/deploy targets\n```\n\n---\n\n### Existing Services Pattern Analysis\n\n#### **Crow Service** (Terraform Module Registry)\n- **Language:** Go 1.25.5\n- **Framework:** Echo (HTTP router)\n- **Purpose:** Private Terraform Module Registry backed by AWS S3\n- **Key Features:**\n - Implements Terraform Module Registry Protocol\n - S3 backend with presigned URLs\n - Upload/download module endpoints\n - Health checks (`/health`, `/livez`, `/readyz`)\n - Configuration via environment variables\n \n**File Structure:**\n```\ncrow/\n├── main.go\n├── Dockerfile\n├── go.mod/go.sum\n├── docker-compose.yaml # Local dev with RustFS\n├── internal/\n│ ├── config/ # Config loading\n│ ├── registry/ # HTTP handlers\n│ └── storage/ # S3 client abstraction\n├── base/ # Kustomize base manifests\n│ ├── bootstrap/ # Namespace, RBAC\n│ └── services/ # Deployment, Service\n└── deploy/ # Environment-specific overlays\n ├── eks-test-nonprod-use1-1/\n └── eks-shared-infra-use1-2/\n```\n\n**Key Code Pattern (Handler registration):**\n```go\n// in main.go\nh := registry.NewHandler(store, cfg.PresignExpiry, cfg.MaxUploadSize)\nh.Register(e) // e = echo.Echo instance\n\n// in internal/registry/handler.go\nfunc (h *Handler) Register(e *echo.Echo) {\n e.GET(\"/.well-known/terraform.json\", h.ServiceDiscovery)\n e.GET(\"/v1/modules/*\", h.moduleGET)\n e.PUT(\"/v1/modules/*\", h.Upload)\n e.GET(\"/health\", h.Health)\n}\n```\n\n**Dependencies:**\n- `github.com/aws/aws-sdk-go-v2` - AWS S3 access\n- `github.com/labstack/echo/v4` - HTTP framework\n- `github.com/stretchr/testify` - Testing\n\n---\n\n#### **Fluxcannon Service** (Flux → GitHub Bridge)\n- **Language:** Go 1.25.2\n- **Framework:** Standard library `net/http` (ServeMux)\n- **Purpose:** Webhook receiver that bridges Flux deployment events to GitHub commit statuses\n- **Key Features:**\n - Receives Flux generic webhook events\n - Posts commit statuses to GitHub API\n - Rate-limit handling with in-memory queue\n - Graceful shutdown with queue draining\n \n**File Structure:**\n```\nfluxcannon/\n├── main.go\n├── Dockerfile\n├── go.mod/go.sum # Uses local libs/github\n├── internal/\n│ ├── config/ # Env-based config\n│ ├── webhook/ # HTTP handler\n│ └── queue/ # Rate-limit queue\n├── base/ # Kustomize base\n└── deploy/ # Environment overlays\n ├── eks-platform-mgmt-use1-1/\n └── eks-saas-nonprod-use1-1/\n```\n\n**Key Handler Pattern (std lib):**\n```go\n// in main.go\nmux := http.NewServeMux()\nh := webhook.NewHandler(cfg.GitHubToken, cfg.GitHubRepo, \"\", nil, q)\nh.Register(mux)\n\n// in internal/webhook/handler.go\nfunc (h *Handler) Register(mux *http.ServeMux) {\n mux.Handle(\"POST /webhook\", h)\n mux.HandleFunc(\"GET /healthz\", func(w http.ResponseWriter, _ *http.Request) {\n w.WriteHeader(http.StatusOK)\n })\n}\n\nfunc (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {\n // Parse JSON, validate fields, call GitHub lib\n}\n```\n\n**Dependencies:**\n- `github.com/immuta/operations/libs/github` - GitHub API client (local library)\n- `github.com/stretchr/testify` - Testing\n- Standard library only for HTTP\n\n---\n\n### No Existing Integrations Found\n\nI searched the entire codebase for:\n- **Slack:** No references to Slack SDKs or integration code\n- **Teleport:** Only infrastructure Terraform for Teleport agents (not service-side integration)\n- **Jira:** No references to Jira SDKs or integrations\n\nThese integrations would need to be built from scratch.\n\n---\n\n### Build, Test, and Deployment Patterns\n\n#### **Makefile Targets** (for services):\n```bash\nmake build-service DIR_NAME=crow # Build binary\nmake test-service DIR_NAME=crow # Run tests\nmake test-service-verbose DIR_NAME=crow # Verbose tests\nmake lint-service DIR_NAME=crow # Linting (golangci-lint)\nmake build-service-image DIR_NAME=crow # Build Docker image\nmake push-service DIR_NAME=crow # Push to Harbor (registry.ic-ops.net)\nmake ci-service DIR_NAME=crow # Full CI pipeline\n```\n\n#### **Configuration Pattern:**\nAll services use environment variables, loaded in `internal/config/config.go`:\n- Validation with defaults\n- Error on missing required values\n- No YAML/TOML files (env-only)\n\n#### **Docker Pattern:**\nMulti-stage builds:\n```dockerfile\nFROM golang:1.25-alpine AS builder\nWORKDIR /app\nCOPY services/{name}/go.mod services/{name}/go.sum ./\nRUN go mod download\nCOPY services/{name}/ .\nRUN CGO_ENABLED=0 go build -o {name} .\n\nFROM registry.ic-ops.net/base/rockylinux:9\nCOPY --from=builder /app/{name} /{name}\nENTRYPOINT [\"/{name}\"]\n```\n\n#### **Kubernetes Deployment Pattern:**\n- **Base manifest:** `base/services/deployment.yaml` (kustomize)\n- **Overlays:** Environment-specific in `deploy/{cluster}/`\n- **Image:** `registry.ic-ops.net/sre/{service-name}:latest`\n- **Probes:** `/livez` (liveness), `/healthz` or `/readyz` (readiness)\n- **Config:** ConfigMaps + Secrets\n- **RBAC:** ServiceAccounts in `base/bootstrap/`\n- **Network policies:** In `deploy/netpol/`\n\n---\n\n### Testing & Code Quality\n\nBoth services include:\n- **Unit tests** alongside source code (e.g., `handler_test.go`)\n- **Test patterns:**\n - Use `httptest` for HTTP handlers\n - Mock external services (GitHub API)\n - Mock internal dependencies\n - Use `testify/assert` for assertions\n - Tests cover error paths and edge cases\n\n**Example from fluxcannon:**\n```go\nfunc TestHandler_PostsCommitStatus(t *testing.T) {\n var capturedPath string\n var capturedBody map[string]any\n\n ghServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n capturedPath = r.URL.Path\n if err := json.NewDecoder(r.Body).Decode(&capturedBody); err != nil {\n http.Error(w, \"bad json\", http.StatusBadRequest)\n return\n }\n w.WriteHeader(http.StatusCreated)\n _, _ = w.Write([]byte(`{\"id\":1}`))\n }))\n defer ghServer.Close()\n\n q := queue.New(ghServer.URL, ghServer.Client())\n h := NewHandler(\"test-token\", \"immuta/application-deployment\", ghServer.URL, ghServer.Client(), q)\n // ... test assertions\n}\n```\n\n---\n\n### Local Libraries\n\n**`libs/github`** - Reusable GitHub API client:\n- `CreateCommitStatus()` - Post commit status\n- `CreatePullRequest()` - Create PR\n- `ListPullRequestsForCommit()` - List PRs for commit SHA\n- `RateLimitError` - Custom error type for rate limiting\n- Supports custom `BaseURL` for GitHub Enterprise\n\nThis library is used by fluxcannon; future services can reuse it.\n\n---\n\n### For Beammeup Development: What Needs to Be Built\n\nBased on the existing patterns, beammeup would need:\n\n1. **Core Structure**\n - `/services/beammeup/main.go` - Entry point with graceful shutdown\n - `/services/beammeup/go.mod` - Module definition\n - `/services/beammeup/internal/config/config.go` - Env-based config\n - `/services/beammeup/internal/{handler-name}/handler.go` - HTTP handlers\n\n2. **Integrations** (not yet built in this codebase)\n - Slack SDK integration (`github.com/slack-go/slack` or `slack-sdk-go`)\n - Teleport SDK integration (if needed beyond infrastructure)\n - Jira SDK integration (`github.com/andygrunwald/go-jira` or `jira-go-client`)\n\n3. **Build Artifacts**\n - `/services/beammeup/Dockerfile` - Multi-stage Docker build\n - `/services/beammeup/Dockerfile.test` - Optional test stage\n - `/services/beammeup/base/services/deployment.yaml` - Kustomize base\n - `/services/beammeup/base/bootstrap/` - RBAC, namespace\n - `/services/beammeup/deploy/{clusters}/` - Environment overlays\n\n4. **Tests**\n - `internal/{module}/*_test.go` - Unit tests alongside code\n - Use `httptest` for HTTP endpoints\n - Mock external APIs (Slack, Jira, Teleport)\n\n5. **Documentation**\n - `/services/beammeup/README.md` - API endpoints, configuration, deployment\n\n---\n\n### Summary: Is This a Slackbot Project?\n\n**Not yet.** Beammeup is currently empty. The operations repo has:\n- ✓ Strong Go microservice patterns (two existing services)\n- ✓ Kubernetes deployment infrastructure (kustomize + overlays)\n- ✓ Reusable library for GitHub API (could add Slack/Jira/Teleport libraries)\n- ✗ No Slack bot framework or code\n- ✗ No Slack, Teleport, or Jira integrations\n\n**To build beammeup as a Slackbot**, you would:\n1. Choose a Slack SDK (e.g., `slack-go/slack`)\n2. Follow the existing service pattern (config → handler → main)\n3. Add handlers for Slack slash commands, events, interactive components\n4. Integrate Teleport and/or Jira APIs as needed\n5. Add Dockerfile, kustomize manifests, and tests following the crow/fluxcannon pattern\n\nThe foundation and deployment infrastructure are already in place in this repo."}]}]},"uuid":"72c9e8b0-f9d9-4d31-8e1c-636cb4900310","timestamp":"2026-04-21T20:11:50.438Z","toolUseResult":{"status":"completed","prompt":"Explore the directory /Users/steve.briggs/projects/operations/services/beammeup and give me a thorough picture of what's there — all files, their purpose, key code patterns, existing integrations (Slack, Teleport, Jira), config files, and dependencies. I want to understand: is this already a Slackbot project? What language/framework is it using? What integrations are already wired up? Report back file tree, key code snippets, and a summary of what exists vs what would need to be built.","agentId":"a9dafeccf9bde7afd","agentType":"Explore","content":[{"type":"text","text":"Perfect. Now I have a thorough understanding. Let me generate the comprehensive report.\n\n## Thorough Exploration Report: Beammeup Service\n\nBased on my complete exploration of the operations repository, here's what I found:\n\n### Current State of Beammeup\n\n**Beammeup is currently an empty directory** with no code, only a Claude Code settings file. It exists as a placeholder in `/Users/steve.briggs/projects/operations/services/beammeup/` but contains no files besides `.claude/settings.local.json`.\n\n---\n\n### Overall Repository Architecture\n\nThis is **Immuta's operations repository**, primarily Go-based with the following structure:\n\n```\noperations/\n├── apps/ # Go CLI tools (pack, immanager, cluster-notifications)\n├── libs/ # Shared Go libraries (github, git, archive, kyverno-rules)\n├── services/ # Standalone microservices\n│ ├── crow/ # Terraform Module Registry (S3-backed)\n│ ├── fluxcannon/ # Flux → GitHub commit status bridge\n│ └── beammeup/ # [EMPTY - TO BE BUILT]\n├── kubernetes/ # Kubernetes manifests and kustomize overlays\n├── helm/ # Helm charts\n├── infrastructure/ # Terraform infrastructure code\n└── Makefile # Centralized build/test/deploy targets\n```\n\n---\n\n### Existing Services Pattern Analysis\n\n#### **Crow Service** (Terraform Module Registry)\n- **Language:** Go 1.25.5\n- **Framework:** Echo (HTTP router)\n- **Purpose:** Private Terraform Module Registry backed by AWS S3\n- **Key Features:**\n - Implements Terraform Module Registry Protocol\n - S3 backend with presigned URLs\n - Upload/download module endpoints\n - Health checks (`/health`, `/livez`, `/readyz`)\n - Configuration via environment variables\n \n**File Structure:**\n```\ncrow/\n├── main.go\n├── Dockerfile\n├── go.mod/go.sum\n├── docker-compose.yaml # Local dev with RustFS\n├── internal/\n│ ├── config/ # Config loading\n│ ├── registry/ # HTTP handlers\n│ └── storage/ # S3 client abstraction\n├── base/ # Kustomize base manifests\n│ ├── bootstrap/ # Namespace, RBAC\n│ └── services/ # Deployment, Service\n└── deploy/ # Environment-specific overlays\n ├── eks-test-nonprod-use1-1/\n └── eks-shared-infra-use1-2/\n```\n\n**Key Code Pattern (Handler registration):**\n```go\n// in main.go\nh := registry.NewHandler(store, cfg.PresignExpiry, cfg.MaxUploadSize)\nh.Register(e) // e = echo.Echo instance\n\n// in internal/registry/handler.go\nfunc (h *Handler) Register(e *echo.Echo) {\n e.GET(\"/.well-known/terraform.json\", h.ServiceDiscovery)\n e.GET(\"/v1/modules/*\", h.moduleGET)\n e.PUT(\"/v1/modules/*\", h.Upload)\n e.GET(\"/health\", h.Health)\n}\n```\n\n**Dependencies:**\n- `github.com/aws/aws-sdk-go-v2` - AWS S3 access\n- `github.com/labstack/echo/v4` - HTTP framework\n- `github.com/stretchr/testify` - Testing\n\n---\n\n#### **Fluxcannon Service** (Flux → GitHub Bridge)\n- **Language:** Go 1.25.2\n- **Framework:** Standard library `net/http` (ServeMux)\n- **Purpose:** Webhook receiver that bridges Flux deployment events to GitHub commit statuses\n- **Key Features:**\n - Receives Flux generic webhook events\n - Posts commit statuses to GitHub API\n - Rate-limit handling with in-memory queue\n - Graceful shutdown with queue draining\n \n**File Structure:**\n```\nfluxcannon/\n├── main.go\n├── Dockerfile\n├── go.mod/go.sum # Uses local libs/github\n├── internal/\n│ ├── config/ # Env-based config\n│ ├── webhook/ # HTTP handler\n│ └── queue/ # Rate-limit queue\n├── base/ # Kustomize base\n└── deploy/ # Environment overlays\n ├── eks-platform-mgmt-use1-1/\n └── eks-saas-nonprod-use1-1/\n```\n\n**Key Handler Pattern (std lib):**\n```go\n// in main.go\nmux := http.NewServeMux()\nh := webhook.NewHandler(cfg.GitHubToken, cfg.GitHubRepo, \"\", nil, q)\nh.Register(mux)\n\n// in internal/webhook/handler.go\nfunc (h *Handler) Register(mux *http.ServeMux) {\n mux.Handle(\"POST /webhook\", h)\n mux.HandleFunc(\"GET /healthz\", func(w http.ResponseWriter, _ *http.Request) {\n w.WriteHeader(http.StatusOK)\n })\n}\n\nfunc (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {\n // Parse JSON, validate fields, call GitHub lib\n}\n```\n\n**Dependencies:**\n- `github.com/immuta/operations/libs/github` - GitHub API client (local library)\n- `github.com/stretchr/testify` - Testing\n- Standard library only for HTTP\n\n---\n\n### No Existing Integrations Found\n\nI searched the entire codebase for:\n- **Slack:** No references to Slack SDKs or integration code\n- **Teleport:** Only infrastructure Terraform for Teleport agents (not service-side integration)\n- **Jira:** No references to Jira SDKs or integrations\n\nThese integrations would need to be built from scratch.\n\n---\n\n### Build, Test, and Deployment Patterns\n\n#### **Makefile Targets** (for services):\n```bash\nmake build-service DIR_NAME=crow # Build binary\nmake test-service DIR_NAME=crow # Run tests\nmake test-service-verbose DIR_NAME=crow # Verbose tests\nmake lint-service DIR_NAME=crow # Linting (golangci-lint)\nmake build-service-image DIR_NAME=crow # Build Docker image\nmake push-service DIR_NAME=crow # Push to Harbor (registry.ic-ops.net)\nmake ci-service DIR_NAME=crow # Full CI pipeline\n```\n\n#### **Configuration Pattern:**\nAll services use environment variables, loaded in `internal/config/config.go`:\n- Validation with defaults\n- Error on missing required values\n- No YAML/TOML files (env-only)\n\n#### **Docker Pattern:**\nMulti-stage builds:\n```dockerfile\nFROM golang:1.25-alpine AS builder\nWORKDIR /app\nCOPY services/{name}/go.mod services/{name}/go.sum ./\nRUN go mod download\nCOPY services/{name}/ .\nRUN CGO_ENABLED=0 go build -o {name} .\n\nFROM registry.ic-ops.net/base/rockylinux:9\nCOPY --from=builder /app/{name} /{name}\nENTRYPOINT [\"/{name}\"]\n```\n\n#### **Kubernetes Deployment Pattern:**\n- **Base manifest:** `base/services/deployment.yaml` (kustomize)\n- **Overlays:** Environment-specific in `deploy/{cluster}/`\n- **Image:** `registry.ic-ops.net/sre/{service-name}:latest`\n- **Probes:** `/livez` (liveness), `/healthz` or `/readyz` (readiness)\n- **Config:** ConfigMaps + Secrets\n- **RBAC:** ServiceAccounts in `base/bootstrap/`\n- **Network policies:** In `deploy/netpol/`\n\n---\n\n### Testing & Code Quality\n\nBoth services include:\n- **Unit tests** alongside source code (e.g., `handler_test.go`)\n- **Test patterns:**\n - Use `httptest` for HTTP handlers\n - Mock external services (GitHub API)\n - Mock internal dependencies\n - Use `testify/assert` for assertions\n - Tests cover error paths and edge cases\n\n**Example from fluxcannon:**\n```go\nfunc TestHandler_PostsCommitStatus(t *testing.T) {\n var capturedPath string\n var capturedBody map[string]any\n\n ghServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n capturedPath = r.URL.Path\n if err := json.NewDecoder(r.Body).Decode(&capturedBody); err != nil {\n http.Error(w, \"bad json\", http.StatusBadRequest)\n return\n }\n w.WriteHeader(http.StatusCreated)\n _, _ = w.Write([]byte(`{\"id\":1}`))\n }))\n defer ghServer.Close()\n\n q := queue.New(ghServer.URL, ghServer.Client())\n h := NewHandler(\"test-token\", \"immuta/application-deployment\", ghServer.URL, ghServer.Client(), q)\n // ... test assertions\n}\n```\n\n---\n\n### Local Libraries\n\n**`libs/github`** - Reusable GitHub API client:\n- `CreateCommitStatus()` - Post commit status\n- `CreatePullRequest()` - Create PR\n- `ListPullRequestsForCommit()` - List PRs for commit SHA\n- `RateLimitError` - Custom error type for rate limiting\n- Supports custom `BaseURL` for GitHub Enterprise\n\nThis library is used by fluxcannon; future services can reuse it.\n\n---\n\n### For Beammeup Development: What Needs to Be Built\n\nBased on the existing patterns, beammeup would need:\n\n1. **Core Structure**\n - `/services/beammeup/main.go` - Entry point with graceful shutdown\n - `/services/beammeup/go.mod` - Module definition\n - `/services/beammeup/internal/config/config.go` - Env-based config\n - `/services/beammeup/internal/{handler-name}/handler.go` - HTTP handlers\n\n2. **Integrations** (not yet built in this codebase)\n - Slack SDK integration (`github.com/slack-go/slack` or `slack-sdk-go`)\n - Teleport SDK integration (if needed beyond infrastructure)\n - Jira SDK integration (`github.com/andygrunwald/go-jira` or `jira-go-client`)\n\n3. **Build Artifacts**\n - `/services/beammeup/Dockerfile` - Multi-stage Docker build\n - `/services/beammeup/Dockerfile.test` - Optional test stage\n - `/services/beammeup/base/services/deployment.yaml` - Kustomize base\n - `/services/beammeup/base/bootstrap/` - RBAC, namespace\n - `/services/beammeup/deploy/{clusters}/` - Environment overlays\n\n4. **Tests**\n - `internal/{module}/*_test.go` - Unit tests alongside code\n - Use `httptest` for HTTP endpoints\n - Mock external APIs (Slack, Jira, Teleport)\n\n5. **Documentation**\n - `/services/beammeup/README.md` - API endpoints, configuration, deployment\n\n---\n\n### Summary: Is This a Slackbot Project?\n\n**Not yet.** Beammeup is currently empty. The operations repo has:\n- ✓ Strong Go microservice patterns (two existing services)\n- ✓ Kubernetes deployment infrastructure (kustomize + overlays)\n- ✓ Reusable library for GitHub API (could add Slack/Jira/Teleport libraries)\n- ✗ No Slack bot framework or code\n- ✗ No Slack, Teleport, or Jira integrations\n\n**To build beammeup as a Slackbot**, you would:\n1. Choose a Slack SDK (e.g., `slack-go/slack`)\n2. Follow the existing service pattern (config → handler → main)\n3. Add handlers for Slack slash commands, events, interactive components\n4. Integrate Teleport and/or Jira APIs as needed\n5. Add Dockerfile, kustomize manifests, and tests following the crow/fluxcannon pattern\n\nThe foundation and deployment infrastructure are already in place in this repo."}],"totalDurationMs":125501,"totalTokens":63660,"totalToolUseCount":37,"usage":{"input_tokens":1,"cache_creation_input_tokens":480,"cache_read_input_tokens":60130,"output_tokens":3049,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":480},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":3049,"cache_read_input_tokens":60130,"cache_creation_input_tokens":480,"cache_creation":{"ephemeral_5m_input_tokens":480,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"},"toolStats":{"readCount":20,"searchCount":0,"bashCount":17,"editFileCount":0,"linesAdded":0,"linesRemoved":0,"otherToolCount":0}},"sourceToolAssistantUUID":"4f6c1526-d07b-4e44-a626-b00c7ef251a6","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"type":"last-prompt","lastPrompt":"Help me create a slackbot that integrates with teleport (so our team can approve teleport requests via slack), we also get on-call alerts for these teleport requests so I would like to add the ability…","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c"}
|
|
{"type":"permission-mode","permissionMode":"default","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c"}
|
|
{"parentUuid":"72c9e8b0-f9d9-4d31-8e1c-636cb4900310","isSidechain":false,"message":{"model":"claude-sonnet-4-6","id":"msg_015N2hcJ4HeYRc53wroLPRsz","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"","signature":"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"}],"stop_reason":"end_turn","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":3467,"cache_read_input_tokens":18992,"output_tokens":5256,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":3467},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":5256,"cache_read_input_tokens":18992,"cache_creation_input_tokens":3467,"cache_creation":{"ephemeral_5m_input_tokens":3467,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaHXSg61G27caZG8SU3KL","type":"assistant","uuid":"5ed6263e-9ae7-4440-878f-68f5452c2b21","timestamp":"2026-04-21T20:13:11.168Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"parentUuid":"5ed6263e-9ae7-4440-878f-68f5452c2b21","isSidechain":false,"message":{"model":"claude-sonnet-4-6","id":"msg_015N2hcJ4HeYRc53wroLPRsz","type":"message","role":"assistant","content":[{"type":"text","text":"Good - `beammeup` is an empty directory. Before I start building, I have two quick questions that will significantly affect the architecture:\n\n1. **On-call alerting tool** — what system sends the on-call alerts when a Teleport request comes in? (PagerDuty, OpsGenie, VictorOps, something else?) I need this to implement the \"acknowledge\" step.\n\n2. **Teleport notification mode** — does your Teleport cluster currently send webhooks to anything for access requests, or is this starting from scratch? The two main approaches are: (a) configure Teleport to POST a webhook to beammeup, or (b) have beammeup run a long-lived gRPC watcher against the Teleport auth API. Which fits your setup better?\n\nThe Jira integration and Slack interactive buttons I can build straightforwardly. It's these two integration points where I need your specific stack to avoid rework."}],"stop_reason":"end_turn","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":3467,"cache_read_input_tokens":18992,"output_tokens":5256,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":3467},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":5256,"cache_read_input_tokens":18992,"cache_creation_input_tokens":3467,"cache_creation":{"ephemeral_5m_input_tokens":3467,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaHXSg61G27caZG8SU3KL","type":"assistant","uuid":"de9885c6-800f-4b73-97ab-2b731cf4d79e","timestamp":"2026-04-21T20:13:12.949Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"parentUuid":"de9885c6-800f-4b73-97ab-2b731cf4d79e","isSidechain":false,"type":"system","subtype":"turn_duration","durationMs":204372,"messageCount":11,"timestamp":"2026-04-21T20:13:13.463Z","uuid":"7fdb08bd-d471-4338-b367-b0596dfc19e4","isMeta":false,"userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"type":"file-history-snapshot","messageId":"afa4da8e-066e-43e9-9876-a49c593cc0af","snapshot":{"messageId":"afa4da8e-066e-43e9-9876-a49c593cc0af","trackedFileBackups":{},"timestamp":"2026-04-21T20:14:17.942Z"},"isSnapshotUpdate":false}
|
|
{"parentUuid":"7fdb08bd-d471-4338-b367-b0596dfc19e4","isSidechain":false,"promptId":"a0accf7b-6e1b-4fae-87b2-de9ccc45e05c","type":"user","message":{"role":"user","content":"jira sends the alert (opsgenie)"},"uuid":"afa4da8e-066e-43e9-9876-a49c593cc0af","timestamp":"2026-04-21T20:14:17.942Z","permissionMode":"default","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"parentUuid":"afa4da8e-066e-43e9-9876-a49c593cc0af","isSidechain":false,"message":{"model":"claude-sonnet-4-6","id":"msg_01PiCkrQTLgUPLbZMEijz5ZN","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"","signature":"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"}],"stop_reason":"end_turn","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":8323,"cache_read_input_tokens":19473,"output_tokens":1209,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":8323},"inference_geo":"","iterations":[{"input_tokens":3,"output_tokens":1209,"cache_read_input_tokens":19473,"cache_creation_input_tokens":8323,"cache_creation":{"ephemeral_5m_input_tokens":8323,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaHXdZ4tJN2n9kKR7vRB6","type":"assistant","uuid":"db3ad996-b66d-4ebe-bcfe-bc7e13923824","timestamp":"2026-04-21T20:14:35.080Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"parentUuid":"db3ad996-b66d-4ebe-bcfe-bc7e13923824","isSidechain":false,"message":{"model":"claude-sonnet-4-6","id":"msg_01PiCkrQTLgUPLbZMEijz5ZN","type":"message","role":"assistant","content":[{"type":"text","text":"Got it — so the chain is: **Teleport request → Jira ticket created → OpsGenie alert fires**.\n\nOne more question on the Teleport side: how should beammeup learn about access requests? The two viable approaches are:\n\n- **OpsGenie webhook** — OpsGenie POSTs to beammeup when an alert fires. The Teleport request ID would need to be in the Jira ticket (and therefore in the OpsGenie alert payload). This requires no direct Teleport API connection just to receive events.\n- **Teleport gRPC watcher** — beammeup holds a long-lived connection to the Teleport auth server and streams access request events directly. Requires a bot user with a client cert provisioned in Teleport.\n\nDo you have access to configure Teleport (to provision a bot identity/cert), or would it be easier to route through the OpsGenie webhook? And do the OpsGenie alerts include the Teleport request ID (either directly or via the linked Jira ticket)?"}],"stop_reason":"end_turn","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":8323,"cache_read_input_tokens":19473,"output_tokens":1209,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":8323},"inference_geo":"","iterations":[{"input_tokens":3,"output_tokens":1209,"cache_read_input_tokens":19473,"cache_creation_input_tokens":8323,"cache_creation":{"ephemeral_5m_input_tokens":8323,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaHXdZ4tJN2n9kKR7vRB6","type":"assistant","uuid":"7bbe0b08-5f61-4d9c-aa42-f581ad07ae66","timestamp":"2026-04-21T20:14:39.122Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"type":"last-prompt","lastPrompt":"jira sends the alert (opsgenie)","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c"}
|
|
{"type":"permission-mode","permissionMode":"default","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c"}
|
|
{"type":"file-history-snapshot","messageId":"1f1eb6e6-93d5-4598-8b2a-9a81ecaa3bcc","snapshot":{"messageId":"1f1eb6e6-93d5-4598-8b2a-9a81ecaa3bcc","trackedFileBackups":{},"timestamp":"2026-04-21T20:17:45.553Z"},"isSnapshotUpdate":false}
|
|
{"parentUuid":"7bbe0b08-5f61-4d9c-aa42-f581ad07ae66","isSidechain":false,"promptId":"3fbdd7ce-2e92-436c-abf5-20d376d8a038","type":"user","message":{"role":"user","content":"lets skip the jira integration altogether for now and just do the teleport request approval"},"uuid":"1f1eb6e6-93d5-4598-8b2a-9a81ecaa3bcc","timestamp":"2026-04-21T20:17:45.553Z","permissionMode":"default","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"parentUuid":"1f1eb6e6-93d5-4598-8b2a-9a81ecaa3bcc","isSidechain":false,"message":{"model":"claude-sonnet-4-6","id":"msg_01Rio5todSAnuxKyHsXeGS3H","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"","signature":"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"}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":1227,"cache_read_input_tokens":27796,"output_tokens":30111,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":1227},"inference_geo":"","iterations":[{"input_tokens":3,"output_tokens":30111,"cache_read_input_tokens":27796,"cache_creation_input_tokens":1227,"cache_creation":{"ephemeral_5m_input_tokens":1227,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaHXtrfUBxSJwvZPs2nWt","type":"assistant","uuid":"19bc1889-d94d-4a3b-8a8c-b12428c3618e","timestamp":"2026-04-21T20:23:28.003Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"parentUuid":"19bc1889-d94d-4a3b-8a8c-b12428c3618e","isSidechain":false,"message":{"model":"claude-sonnet-4-6","id":"msg_01Rio5todSAnuxKyHsXeGS3H","type":"message","role":"assistant","content":[{"type":"text","text":"Perfect, that simplifies things considerably. Let me explore what's in the existing services to match patterns exactly before writing any code."}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":1227,"cache_read_input_tokens":27796,"output_tokens":30111,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":1227},"inference_geo":"","iterations":[{"input_tokens":3,"output_tokens":30111,"cache_read_input_tokens":27796,"cache_creation_input_tokens":1227,"cache_creation":{"ephemeral_5m_input_tokens":1227,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaHXtrfUBxSJwvZPs2nWt","type":"assistant","uuid":"1380e296-abf3-4ecd-ad9d-406a4e1dcfba","timestamp":"2026-04-21T20:23:28.638Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"parentUuid":"1380e296-abf3-4ecd-ad9d-406a4e1dcfba","isSidechain":false,"message":{"model":"claude-sonnet-4-6","id":"msg_01Rio5todSAnuxKyHsXeGS3H","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01LTa6pXTX98ZQPZzaKQ5epy","name":"Agent","input":{"description":"Examine crow and fluxcannon service structure","subagent_type":"Explore","prompt":"Read the following files in full and report their exact contents — I need to match their patterns precisely when creating a new service:\n\n1. /Users/steve.briggs/projects/operations/services/crow/main.go\n2. /Users/steve.briggs/projects/operations/services/crow/go.mod\n3. /Users/steve.briggs/projects/operations/services/crow/Dockerfile\n4. /Users/steve.briggs/projects/operations/services/crow/internal/config/config.go\n5. /Users/steve.briggs/projects/operations/services/crow/base/services/deployment.yaml\n6. /Users/steve.briggs/projects/operations/services/crow/base/services/service.yaml\n7. /Users/steve.briggs/projects/operations/services/crow/base/services/kustomization.yaml\n8. /Users/steve.briggs/projects/operations/services/crow/base/bootstrap/kustomization.yaml\n9. /Users/steve.briggs/projects/operations/services/crow/base/bootstrap/namespace.yaml\n10. /Users/steve.briggs/projects/operations/services/crow/base/bootstrap/serviceaccount.yaml\n11. /Users/steve.briggs/projects/operations/services/fluxcannon/main.go\n12. /Users/steve.briggs/projects/operations/services/fluxcannon/go.mod\n\nReturn the complete file contents for all of them."},"caller":{"type":"direct"}}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":1227,"cache_read_input_tokens":27796,"output_tokens":30111,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":1227},"inference_geo":"","iterations":[{"input_tokens":3,"output_tokens":30111,"cache_read_input_tokens":27796,"cache_creation_input_tokens":1227,"cache_creation":{"ephemeral_5m_input_tokens":1227,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaHXtrfUBxSJwvZPs2nWt","type":"assistant","uuid":"6e4eb760-6c06-49fb-adae-781b93d0148f","timestamp":"2026-04-21T20:23:32.436Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"type":"last-prompt","lastPrompt":"lets skip the jira integration altogether for now and just do the teleport request approval","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c"}
|
|
{"type":"permission-mode","permissionMode":"default","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c"}
|
|
{"parentUuid":"6e4eb760-6c06-49fb-adae-781b93d0148f","isSidechain":false,"promptId":"3fbdd7ce-2e92-436c-abf5-20d376d8a038","type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01LTa6pXTX98ZQPZzaKQ5epy","type":"tool_result","content":[{"type":"text","text":"Perfect! Here are the exact contents of all the files:\n\n## 1. /Users/steve.briggs/projects/operations/services/crow/main.go\n```go\npackage main\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"log\"\n\t\"net/http\"\n\t\"os\"\n\t\"os/signal\"\n\t\"syscall\"\n\t\"time\"\n\n\tawsconfig \"github.com/aws/aws-sdk-go-v2/config\"\n\t\"github.com/aws/aws-sdk-go-v2/service/s3\"\n\t\"github.com/immuta/operations/services/crow/internal/config\"\n\t\"github.com/immuta/operations/services/crow/internal/registry\"\n\t\"github.com/immuta/operations/services/crow/internal/storage\"\n\t\"github.com/labstack/echo/v4\"\n\t\"github.com/labstack/echo/v4/middleware\"\n)\n\nfunc main() {\n\tcfg, err := config.Load()\n\tif err != nil {\n\t\tlog.Fatalf(\"configuration error: %v\", err)\n\t}\n\n\tawsCfg, err := awsconfig.LoadDefaultConfig(context.Background(),\n\t\tawsconfig.WithRegion(cfg.AWSRegion),\n\t)\n\tif err != nil {\n\t\tlog.Fatalf(\"failed to load AWS config: %v\", err)\n\t}\n\n\tvar s3Opts []func(*s3.Options)\n\tif cfg.S3PathStyle {\n\t\ts3Opts = append(s3Opts, func(o *s3.Options) {\n\t\t\to.UsePathStyle = true\n\t\t})\n\t}\n\n\tvar store storage.Client\n\tif cfg.S3PresignEndpoint != \"\" {\n\t\tstore = storage.NewS3ClientWithPresignEndpoint(awsCfg, cfg.S3BucketName, cfg.S3PresignEndpoint, s3Opts...)\n\t} else {\n\t\tstore = storage.NewS3Client(awsCfg, cfg.S3BucketName, s3Opts...)\n\t}\n\n\te := echo.New()\n\te.HideBanner = true\n\te.Use(middleware.RequestLogger())\n\te.Use(middleware.Recover())\n\n\th := registry.NewHandler(store, cfg.PresignExpiry, cfg.MaxUploadSize)\n\th.Register(e)\n\n\t// Graceful shutdown\n\tgo func() {\n\t\tif err := e.Start(\":\" + cfg.Port); err != nil && !errors.Is(err, http.ErrServerClosed) {\n\t\t\te.Logger.Fatal(\"shutting down the server\")\n\t\t}\n\t}()\n\n\tquit := make(chan os.Signal, 1)\n\tsignal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)\n\t<-quit\n\n\tctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)\n\tdefer cancel()\n\tif err := e.Shutdown(ctx); err != nil {\n\t\te.Logger.Fatal(err)\n\t}\n}\n```\n\n## 2. /Users/steve.briggs/projects/operations/services/crow/go.mod\n```\nmodule github.com/immuta/operations/services/crow\n\ngo 1.25.5\n\nrequire (\n\tgithub.com/aws/aws-sdk-go-v2 v1.41.1\n\tgithub.com/aws/aws-sdk-go-v2/config v1.32.9\n\tgithub.com/aws/aws-sdk-go-v2/service/s3 v1.96.0\n\tgithub.com/labstack/echo/v4 v4.15.0\n\tgithub.com/stretchr/testify v1.11.1\n)\n\nrequire (\n\tgithub.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.4 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/credentials v1.19.9 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.17 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/internal/configsources v1.4.17 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.17 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/internal/ini v1.8.4 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/internal/v4a v1.4.17 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.4 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.8 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.17 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.17 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/signin v1.0.5 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/sso v1.30.10 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.14 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/sts v1.41.6 // indirect\n\tgithub.com/aws/smithy-go v1.24.1 // indirect\n\tgithub.com/davecgh/go-spew v1.1.1 // indirect\n\tgithub.com/labstack/gommon v0.4.2 // indirect\n\tgithub.com/mattn/go-colorable v0.1.14 // indirect\n\tgithub.com/mattn/go-isatty v0.0.20 // indirect\n\tgithub.com/pmezard/go-difflib v1.0.0 // indirect\n\tgithub.com/stretchr/objx v0.5.3 // indirect\n\tgithub.com/valyala/bytebufferpool v1.0.0 // indirect\n\tgithub.com/valyala/fasttemplate v1.2.2 // indirect\n\tgolang.org/x/crypto v0.48.0 // indirect\n\tgolang.org/x/net v0.50.0 // indirect\n\tgolang.org/x/sys v0.41.0 // indirect\n\tgolang.org/x/text v0.34.0 // indirect\n\tgolang.org/x/time v0.14.0 // indirect\n\tgopkg.in/yaml.v3 v3.0.1 // indirect\n)\n```\n\n## 3. /Users/steve.briggs/projects/operations/services/crow/Dockerfile\n```dockerfile\nFROM golang:1.25-alpine AS builder\nWORKDIR /app\nCOPY services/crow/go.mod services/crow/go.sum ./\nRUN go mod download\nCOPY services/crow/ .\nRUN CGO_ENABLED=0 go build -o crow .\n\nFROM registry.ic-ops.net/base/rockylinux:9\nCOPY --from=builder /app/crow /crow\nENTRYPOINT [\"/crow\"]\n```\n\n## 4. /Users/steve.briggs/projects/operations/services/crow/internal/config/config.go\n```go\npackage config\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"strconv\"\n\t\"time\"\n)\n\nconst defaultMaxUploadSize = 10 * 1024 * 1024 // 10MB\n\ntype Config struct {\n\tPort string\n\tS3BucketName string\n\tAWSRegion string\n\tS3PresignEndpoint string\n\tPresignExpiry time.Duration\n\tMaxUploadSize int64\n\tS3PathStyle bool\n}\n\nfunc Load() (*Config, error) {\n\tcfg := &Config{\n\t\tPort: os.Getenv(\"PORT\"),\n\t\tS3BucketName: os.Getenv(\"S3_BUCKET_NAME\"),\n\t\tAWSRegion: os.Getenv(\"AWS_REGION\"),\n\t}\n\n\tcfg.S3PathStyle = os.Getenv(\"S3_PATH_STYLE\") == \"true\"\n\tcfg.S3PresignEndpoint = os.Getenv(\"S3_PRESIGN_ENDPOINT\")\n\n\tif v := os.Getenv(\"MAX_UPLOAD_SIZE\"); v != \"\" {\n\t\tn, err := strconv.ParseInt(v, 10, 64)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"MAX_UPLOAD_SIZE is invalid: %w\", err)\n\t\t}\n\t\tif n <= 0 {\n\t\t\treturn nil, errors.New(\"MAX_UPLOAD_SIZE must be positive\")\n\t\t}\n\t\tcfg.MaxUploadSize = n\n\t} else {\n\t\tcfg.MaxUploadSize = defaultMaxUploadSize\n\t}\n\n\tif cfg.Port == \"\" {\n\t\tcfg.Port = \"8080\"\n\t}\n\n\tif v := os.Getenv(\"PRESIGN_EXPIRY\"); v != \"\" {\n\t\td, err := time.ParseDuration(v)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"PRESIGN_EXPIRY is invalid: %w\", err)\n\t\t}\n\t\tcfg.PresignExpiry = d\n\t} else {\n\t\tcfg.PresignExpiry = 15 * time.Minute\n\t}\n\n\tif cfg.S3BucketName == \"\" {\n\t\treturn nil, errors.New(\"S3_BUCKET_NAME is required\")\n\t}\n\n\tif cfg.AWSRegion == \"\" {\n\t\treturn nil, errors.New(\"AWS_REGION is required\")\n\t}\n\n\treturn cfg, nil\n}\n```\n\n## 5. /Users/steve.briggs/projects/operations/services/crow/base/services/deployment.yaml\n```yaml\n---\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: crow\nspec:\n replicas: 1\n selector:\n matchLabels:\n app.kubernetes.io/name: crow\n app.kubernetes.io/component: service\n template:\n metadata:\n labels:\n app.kubernetes.io/name: crow\n app.kubernetes.io/component: service\n spec:\n serviceAccountName: crow-sa\n containers:\n - name: crow\n image: registry.ic-ops.net/sre/crow:latest\n ports:\n - containerPort: 8080\n name: http\n env:\n - name: PORT\n value: \"8080\"\n - name: S3_BUCKET_NAME\n valueFrom:\n configMapKeyRef:\n name: crow-config\n key: S3_BUCKET_NAME\n - name: AWS_REGION\n valueFrom:\n configMapKeyRef:\n name: crow-config\n key: AWS_REGION\n resources:\n requests:\n cpu: 100m\n memory: 128Mi\n livenessProbe:\n httpGet:\n path: /livez\n port: http\n initialDelaySeconds: 10\n periodSeconds: 600\n readinessProbe:\n httpGet:\n path: /readyz\n port: http\n initialDelaySeconds: 10\n periodSeconds: 600\n```\n\n## 6. /Users/steve.briggs/projects/operations/services/crow/base/services/service.yaml\n```yaml\n---\napiVersion: v1\nkind: Service\nmetadata:\n name: crow\nspec:\n ports:\n - port: 80\n targetPort: 8080\n protocol: TCP\n name: http\n selector:\n app.kubernetes.io/name: crow\n app.kubernetes.io/component: service\n type: ClusterIP\n```\n\n## 7. /Users/steve.briggs/projects/operations/services/crow/base/services/kustomization.yaml\n```yaml\n---\nnamespace: crow\n\nresources:\n - deployment.yaml\n - service.yaml\n```\n\n## 8. /Users/steve.briggs/projects/operations/services/crow/base/bootstrap/kustomization.yaml\n```yaml\n---\nnamespace: crow\n\nresources:\n - namespace.yaml\n - service-account.yaml\n\nlabels:\n - pairs:\n app.kubernetes.io/name: crow\n app.kubernetes.io/component: service\nconfigMapGenerator:\n - name: crow-config\n options:\n disableNameSuffixHash: true\n literals:\n - S3_BUCKET_NAME=\n - AWS_REGION=\n```\n\n## 9. /Users/steve.briggs/projects/operations/services/crow/base/bootstrap/namespace.yaml\n```yaml\n---\napiVersion: v1\nkind: Namespace\nmetadata:\n name: crow\n```\n\n## 10. /Users/steve.briggs/projects/operations/services/crow/base/bootstrap/service-account.yaml\n```yaml\n---\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n annotations:\n name: crow-sa\n```\n\n## 11. /Users/steve.briggs/projects/operations/services/fluxcannon/main.go\n```go\npackage main\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"log/slog\"\n\t\"net/http\"\n\t\"os\"\n\t\"os/signal\"\n\t\"syscall\"\n\t\"time\"\n\n\t\"github.com/immuta/operations/services/fluxcannon/internal/config\"\n\t\"github.com/immuta/operations/services/fluxcannon/internal/queue\"\n\t\"github.com/immuta/operations/services/fluxcannon/internal/webhook\"\n)\n\nfunc main() {\n\tlogger := slog.New(slog.NewJSONHandler(os.Stdout, nil))\n\tslog.SetDefault(logger)\n\n\tcfg, err := config.Load()\n\tif err != nil {\n\t\tslog.Error(\"configuration error\", \"error\", err)\n\t\tos.Exit(1)\n\t}\n\n\tq := queue.New(\"\", nil)\n\th := webhook.NewHandler(cfg.GitHubToken, cfg.GitHubRepo, \"\", nil, q)\n\n\tmux := http.NewServeMux()\n\th.Register(mux)\n\n\tserver := &http.Server{\n\t\tAddr: \":\" + cfg.Port,\n\t\tHandler: mux,\n\t\tReadHeaderTimeout: 10 * time.Second,\n\t}\n\n\tgo func() {\n\t\tslog.Info(\"listening\", \"port\", cfg.Port)\n\t\tif err := server.ListenAndServe(); err != nil && !errors.Is(err, http.ErrServerClosed) {\n\t\t\tslog.Error(\"server error\", \"error\", err)\n\t\t\tos.Exit(1)\n\t\t}\n\t}()\n\n\tquit := make(chan os.Signal, 1)\n\tsignal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)\n\t<-quit\n\n\tctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)\n\tdefer cancel()\n\tif err := server.Shutdown(ctx); err != nil {\n\t\tslog.Error(\"shutdown error\", \"error\", err)\n\t\tos.Exit(1)\n\t}\n\n\tq.LogAndClear(logger)\n}\n```\n\n## 12. /Users/steve.briggs/projects/operations/services/fluxcannon/go.mod\n```\nmodule github.com/immuta/operations/services/fluxcannon\n\ngo 1.25.2\n\nrequire (\n\tgithub.com/immuta/operations/libs/github v0.0.0-00010101000000-000000000000\n\tgithub.com/stretchr/testify v1.11.1\n)\n\nrequire (\n\tgithub.com/davecgh/go-spew v1.1.1 // indirect\n\tgithub.com/pmezard/go-difflib v1.0.0 // indirect\n\tgopkg.in/yaml.v3 v3.0.1 // indirect\n)\n\nreplace github.com/immuta/operations/libs/github => ../../libs/github\n```"}]}]},"uuid":"174f088f-bd36-4a4e-9613-e6c859085744","timestamp":"2026-04-21T20:23:59.963Z","toolUseResult":{"status":"completed","prompt":"Read the following files in full and report their exact contents — I need to match their patterns precisely when creating a new service:\n\n1. /Users/steve.briggs/projects/operations/services/crow/main.go\n2. /Users/steve.briggs/projects/operations/services/crow/go.mod\n3. /Users/steve.briggs/projects/operations/services/crow/Dockerfile\n4. /Users/steve.briggs/projects/operations/services/crow/internal/config/config.go\n5. /Users/steve.briggs/projects/operations/services/crow/base/services/deployment.yaml\n6. /Users/steve.briggs/projects/operations/services/crow/base/services/service.yaml\n7. /Users/steve.briggs/projects/operations/services/crow/base/services/kustomization.yaml\n8. /Users/steve.briggs/projects/operations/services/crow/base/bootstrap/kustomization.yaml\n9. /Users/steve.briggs/projects/operations/services/crow/base/bootstrap/namespace.yaml\n10. /Users/steve.briggs/projects/operations/services/crow/base/bootstrap/serviceaccount.yaml\n11. /Users/steve.briggs/projects/operations/services/fluxcannon/main.go\n12. /Users/steve.briggs/projects/operations/services/fluxcannon/go.mod\n\nReturn the complete file contents for all of them.","agentId":"a72d97058f87f6877","agentType":"Explore","content":[{"type":"text","text":"Perfect! Here are the exact contents of all the files:\n\n## 1. /Users/steve.briggs/projects/operations/services/crow/main.go\n```go\npackage main\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"log\"\n\t\"net/http\"\n\t\"os\"\n\t\"os/signal\"\n\t\"syscall\"\n\t\"time\"\n\n\tawsconfig \"github.com/aws/aws-sdk-go-v2/config\"\n\t\"github.com/aws/aws-sdk-go-v2/service/s3\"\n\t\"github.com/immuta/operations/services/crow/internal/config\"\n\t\"github.com/immuta/operations/services/crow/internal/registry\"\n\t\"github.com/immuta/operations/services/crow/internal/storage\"\n\t\"github.com/labstack/echo/v4\"\n\t\"github.com/labstack/echo/v4/middleware\"\n)\n\nfunc main() {\n\tcfg, err := config.Load()\n\tif err != nil {\n\t\tlog.Fatalf(\"configuration error: %v\", err)\n\t}\n\n\tawsCfg, err := awsconfig.LoadDefaultConfig(context.Background(),\n\t\tawsconfig.WithRegion(cfg.AWSRegion),\n\t)\n\tif err != nil {\n\t\tlog.Fatalf(\"failed to load AWS config: %v\", err)\n\t}\n\n\tvar s3Opts []func(*s3.Options)\n\tif cfg.S3PathStyle {\n\t\ts3Opts = append(s3Opts, func(o *s3.Options) {\n\t\t\to.UsePathStyle = true\n\t\t})\n\t}\n\n\tvar store storage.Client\n\tif cfg.S3PresignEndpoint != \"\" {\n\t\tstore = storage.NewS3ClientWithPresignEndpoint(awsCfg, cfg.S3BucketName, cfg.S3PresignEndpoint, s3Opts...)\n\t} else {\n\t\tstore = storage.NewS3Client(awsCfg, cfg.S3BucketName, s3Opts...)\n\t}\n\n\te := echo.New()\n\te.HideBanner = true\n\te.Use(middleware.RequestLogger())\n\te.Use(middleware.Recover())\n\n\th := registry.NewHandler(store, cfg.PresignExpiry, cfg.MaxUploadSize)\n\th.Register(e)\n\n\t// Graceful shutdown\n\tgo func() {\n\t\tif err := e.Start(\":\" + cfg.Port); err != nil && !errors.Is(err, http.ErrServerClosed) {\n\t\t\te.Logger.Fatal(\"shutting down the server\")\n\t\t}\n\t}()\n\n\tquit := make(chan os.Signal, 1)\n\tsignal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)\n\t<-quit\n\n\tctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)\n\tdefer cancel()\n\tif err := e.Shutdown(ctx); err != nil {\n\t\te.Logger.Fatal(err)\n\t}\n}\n```\n\n## 2. /Users/steve.briggs/projects/operations/services/crow/go.mod\n```\nmodule github.com/immuta/operations/services/crow\n\ngo 1.25.5\n\nrequire (\n\tgithub.com/aws/aws-sdk-go-v2 v1.41.1\n\tgithub.com/aws/aws-sdk-go-v2/config v1.32.9\n\tgithub.com/aws/aws-sdk-go-v2/service/s3 v1.96.0\n\tgithub.com/labstack/echo/v4 v4.15.0\n\tgithub.com/stretchr/testify v1.11.1\n)\n\nrequire (\n\tgithub.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.4 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/credentials v1.19.9 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.17 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/internal/configsources v1.4.17 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.17 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/internal/ini v1.8.4 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/internal/v4a v1.4.17 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.4 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.8 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.17 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.17 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/signin v1.0.5 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/sso v1.30.10 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.14 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/sts v1.41.6 // indirect\n\tgithub.com/aws/smithy-go v1.24.1 // indirect\n\tgithub.com/davecgh/go-spew v1.1.1 // indirect\n\tgithub.com/labstack/gommon v0.4.2 // indirect\n\tgithub.com/mattn/go-colorable v0.1.14 // indirect\n\tgithub.com/mattn/go-isatty v0.0.20 // indirect\n\tgithub.com/pmezard/go-difflib v1.0.0 // indirect\n\tgithub.com/stretchr/objx v0.5.3 // indirect\n\tgithub.com/valyala/bytebufferpool v1.0.0 // indirect\n\tgithub.com/valyala/fasttemplate v1.2.2 // indirect\n\tgolang.org/x/crypto v0.48.0 // indirect\n\tgolang.org/x/net v0.50.0 // indirect\n\tgolang.org/x/sys v0.41.0 // indirect\n\tgolang.org/x/text v0.34.0 // indirect\n\tgolang.org/x/time v0.14.0 // indirect\n\tgopkg.in/yaml.v3 v3.0.1 // indirect\n)\n```\n\n## 3. /Users/steve.briggs/projects/operations/services/crow/Dockerfile\n```dockerfile\nFROM golang:1.25-alpine AS builder\nWORKDIR /app\nCOPY services/crow/go.mod services/crow/go.sum ./\nRUN go mod download\nCOPY services/crow/ .\nRUN CGO_ENABLED=0 go build -o crow .\n\nFROM registry.ic-ops.net/base/rockylinux:9\nCOPY --from=builder /app/crow /crow\nENTRYPOINT [\"/crow\"]\n```\n\n## 4. /Users/steve.briggs/projects/operations/services/crow/internal/config/config.go\n```go\npackage config\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"strconv\"\n\t\"time\"\n)\n\nconst defaultMaxUploadSize = 10 * 1024 * 1024 // 10MB\n\ntype Config struct {\n\tPort string\n\tS3BucketName string\n\tAWSRegion string\n\tS3PresignEndpoint string\n\tPresignExpiry time.Duration\n\tMaxUploadSize int64\n\tS3PathStyle bool\n}\n\nfunc Load() (*Config, error) {\n\tcfg := &Config{\n\t\tPort: os.Getenv(\"PORT\"),\n\t\tS3BucketName: os.Getenv(\"S3_BUCKET_NAME\"),\n\t\tAWSRegion: os.Getenv(\"AWS_REGION\"),\n\t}\n\n\tcfg.S3PathStyle = os.Getenv(\"S3_PATH_STYLE\") == \"true\"\n\tcfg.S3PresignEndpoint = os.Getenv(\"S3_PRESIGN_ENDPOINT\")\n\n\tif v := os.Getenv(\"MAX_UPLOAD_SIZE\"); v != \"\" {\n\t\tn, err := strconv.ParseInt(v, 10, 64)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"MAX_UPLOAD_SIZE is invalid: %w\", err)\n\t\t}\n\t\tif n <= 0 {\n\t\t\treturn nil, errors.New(\"MAX_UPLOAD_SIZE must be positive\")\n\t\t}\n\t\tcfg.MaxUploadSize = n\n\t} else {\n\t\tcfg.MaxUploadSize = defaultMaxUploadSize\n\t}\n\n\tif cfg.Port == \"\" {\n\t\tcfg.Port = \"8080\"\n\t}\n\n\tif v := os.Getenv(\"PRESIGN_EXPIRY\"); v != \"\" {\n\t\td, err := time.ParseDuration(v)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"PRESIGN_EXPIRY is invalid: %w\", err)\n\t\t}\n\t\tcfg.PresignExpiry = d\n\t} else {\n\t\tcfg.PresignExpiry = 15 * time.Minute\n\t}\n\n\tif cfg.S3BucketName == \"\" {\n\t\treturn nil, errors.New(\"S3_BUCKET_NAME is required\")\n\t}\n\n\tif cfg.AWSRegion == \"\" {\n\t\treturn nil, errors.New(\"AWS_REGION is required\")\n\t}\n\n\treturn cfg, nil\n}\n```\n\n## 5. /Users/steve.briggs/projects/operations/services/crow/base/services/deployment.yaml\n```yaml\n---\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: crow\nspec:\n replicas: 1\n selector:\n matchLabels:\n app.kubernetes.io/name: crow\n app.kubernetes.io/component: service\n template:\n metadata:\n labels:\n app.kubernetes.io/name: crow\n app.kubernetes.io/component: service\n spec:\n serviceAccountName: crow-sa\n containers:\n - name: crow\n image: registry.ic-ops.net/sre/crow:latest\n ports:\n - containerPort: 8080\n name: http\n env:\n - name: PORT\n value: \"8080\"\n - name: S3_BUCKET_NAME\n valueFrom:\n configMapKeyRef:\n name: crow-config\n key: S3_BUCKET_NAME\n - name: AWS_REGION\n valueFrom:\n configMapKeyRef:\n name: crow-config\n key: AWS_REGION\n resources:\n requests:\n cpu: 100m\n memory: 128Mi\n livenessProbe:\n httpGet:\n path: /livez\n port: http\n initialDelaySeconds: 10\n periodSeconds: 600\n readinessProbe:\n httpGet:\n path: /readyz\n port: http\n initialDelaySeconds: 10\n periodSeconds: 600\n```\n\n## 6. /Users/steve.briggs/projects/operations/services/crow/base/services/service.yaml\n```yaml\n---\napiVersion: v1\nkind: Service\nmetadata:\n name: crow\nspec:\n ports:\n - port: 80\n targetPort: 8080\n protocol: TCP\n name: http\n selector:\n app.kubernetes.io/name: crow\n app.kubernetes.io/component: service\n type: ClusterIP\n```\n\n## 7. /Users/steve.briggs/projects/operations/services/crow/base/services/kustomization.yaml\n```yaml\n---\nnamespace: crow\n\nresources:\n - deployment.yaml\n - service.yaml\n```\n\n## 8. /Users/steve.briggs/projects/operations/services/crow/base/bootstrap/kustomization.yaml\n```yaml\n---\nnamespace: crow\n\nresources:\n - namespace.yaml\n - service-account.yaml\n\nlabels:\n - pairs:\n app.kubernetes.io/name: crow\n app.kubernetes.io/component: service\nconfigMapGenerator:\n - name: crow-config\n options:\n disableNameSuffixHash: true\n literals:\n - S3_BUCKET_NAME=\n - AWS_REGION=\n```\n\n## 9. /Users/steve.briggs/projects/operations/services/crow/base/bootstrap/namespace.yaml\n```yaml\n---\napiVersion: v1\nkind: Namespace\nmetadata:\n name: crow\n```\n\n## 10. /Users/steve.briggs/projects/operations/services/crow/base/bootstrap/service-account.yaml\n```yaml\n---\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n annotations:\n name: crow-sa\n```\n\n## 11. /Users/steve.briggs/projects/operations/services/fluxcannon/main.go\n```go\npackage main\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"log/slog\"\n\t\"net/http\"\n\t\"os\"\n\t\"os/signal\"\n\t\"syscall\"\n\t\"time\"\n\n\t\"github.com/immuta/operations/services/fluxcannon/internal/config\"\n\t\"github.com/immuta/operations/services/fluxcannon/internal/queue\"\n\t\"github.com/immuta/operations/services/fluxcannon/internal/webhook\"\n)\n\nfunc main() {\n\tlogger := slog.New(slog.NewJSONHandler(os.Stdout, nil))\n\tslog.SetDefault(logger)\n\n\tcfg, err := config.Load()\n\tif err != nil {\n\t\tslog.Error(\"configuration error\", \"error\", err)\n\t\tos.Exit(1)\n\t}\n\n\tq := queue.New(\"\", nil)\n\th := webhook.NewHandler(cfg.GitHubToken, cfg.GitHubRepo, \"\", nil, q)\n\n\tmux := http.NewServeMux()\n\th.Register(mux)\n\n\tserver := &http.Server{\n\t\tAddr: \":\" + cfg.Port,\n\t\tHandler: mux,\n\t\tReadHeaderTimeout: 10 * time.Second,\n\t}\n\n\tgo func() {\n\t\tslog.Info(\"listening\", \"port\", cfg.Port)\n\t\tif err := server.ListenAndServe(); err != nil && !errors.Is(err, http.ErrServerClosed) {\n\t\t\tslog.Error(\"server error\", \"error\", err)\n\t\t\tos.Exit(1)\n\t\t}\n\t}()\n\n\tquit := make(chan os.Signal, 1)\n\tsignal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)\n\t<-quit\n\n\tctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)\n\tdefer cancel()\n\tif err := server.Shutdown(ctx); err != nil {\n\t\tslog.Error(\"shutdown error\", \"error\", err)\n\t\tos.Exit(1)\n\t}\n\n\tq.LogAndClear(logger)\n}\n```\n\n## 12. /Users/steve.briggs/projects/operations/services/fluxcannon/go.mod\n```\nmodule github.com/immuta/operations/services/fluxcannon\n\ngo 1.25.2\n\nrequire (\n\tgithub.com/immuta/operations/libs/github v0.0.0-00010101000000-000000000000\n\tgithub.com/stretchr/testify v1.11.1\n)\n\nrequire (\n\tgithub.com/davecgh/go-spew v1.1.1 // indirect\n\tgithub.com/pmezard/go-difflib v1.0.0 // indirect\n\tgopkg.in/yaml.v3 v3.0.1 // indirect\n)\n\nreplace github.com/immuta/operations/libs/github => ../../libs/github\n```"}],"totalDurationMs":27518,"totalTokens":29412,"totalToolUseCount":14,"usage":{"input_tokens":6,"cache_creation_input_tokens":139,"cache_read_input_tokens":25206,"output_tokens":4061,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":139},"inference_geo":"","iterations":[{"input_tokens":6,"output_tokens":4061,"cache_read_input_tokens":25206,"cache_creation_input_tokens":139,"cache_creation":{"ephemeral_5m_input_tokens":139,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"},"toolStats":{"readCount":13,"searchCount":0,"bashCount":1,"editFileCount":0,"linesAdded":0,"linesRemoved":0,"otherToolCount":0}},"sourceToolAssistantUUID":"6e4eb760-6c06-49fb-adae-781b93d0148f","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"parentUuid":"174f088f-bd36-4a4e-9613-e6c859085744","isSidechain":false,"message":{"model":"claude-sonnet-4-6","id":"msg_01VhrXThq4XXzkKNY9k86UoX","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"","signature":"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"}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":51450,"cache_read_input_tokens":11755,"output_tokens":5143,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":51450},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":5143,"cache_read_input_tokens":11755,"cache_creation_input_tokens":51450,"cache_creation":{"ephemeral_5m_input_tokens":51450,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaHYNTHL1EjXiyR67kft9","type":"assistant","uuid":"e430561e-cd78-4a34-8577-b4adca2c6d64","timestamp":"2026-04-21T20:25:19.867Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"parentUuid":"e430561e-cd78-4a34-8577-b4adca2c6d64","isSidechain":false,"message":{"model":"claude-sonnet-4-6","id":"msg_01VhrXThq4XXzkKNY9k86UoX","type":"message","role":"assistant","content":[{"type":"text","text":"Good — now I have the exact patterns. Let me build the full service."}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":51450,"cache_read_input_tokens":11755,"output_tokens":5143,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":51450},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":5143,"cache_read_input_tokens":11755,"cache_creation_input_tokens":51450,"cache_creation":{"ephemeral_5m_input_tokens":51450,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaHYNTHL1EjXiyR67kft9","type":"assistant","uuid":"fee37bb2-f55e-49a6-883d-17a7130b965c","timestamp":"2026-04-21T20:25:20.313Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"parentUuid":"fee37bb2-f55e-49a6-883d-17a7130b965c","isSidechain":false,"message":{"model":"claude-sonnet-4-6","id":"msg_01VhrXThq4XXzkKNY9k86UoX","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01Fi5seJMZXUiNPcoWP8k1xD","name":"Write","input":{"file_path":"/Users/steve.briggs/projects/operations/services/beammeup/go.mod","content":"module github.com/immuta/operations/services/beammeup\n\ngo 1.25.5\n\nrequire (\n\t// Update this to match your Teleport cluster version, then run: go mod tidy\n\tgithub.com/gravitational/teleport/api v16.4.0\n\tgithub.com/labstack/echo/v4 v4.15.0\n\tgithub.com/slack-go/slack v0.15.0\n\tgithub.com/stretchr/testify v1.11.1\n)\n"},"caller":{"type":"direct"}}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":51450,"cache_read_input_tokens":11755,"output_tokens":5143,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":51450},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":5143,"cache_read_input_tokens":11755,"cache_creation_input_tokens":51450,"cache_creation":{"ephemeral_5m_input_tokens":51450,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaHYNTHL1EjXiyR67kft9","type":"assistant","uuid":"a09c456b-0cfa-4678-8257-469246980f7b","timestamp":"2026-04-21T20:25:21.761Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"type":"last-prompt","lastPrompt":"lets skip the jira integration altogether for now and just do the teleport request approval","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c"}
|
|
{"type":"permission-mode","permissionMode":"default","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c"}
|
|
{"type":"file-history-snapshot","messageId":"a09c456b-0cfa-4678-8257-469246980f7b","snapshot":{"messageId":"1f1eb6e6-93d5-4598-8b2a-9a81ecaa3bcc","trackedFileBackups":{"go.mod":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:34:38.184Z"}},"timestamp":"2026-04-21T20:17:45.553Z"},"isSnapshotUpdate":true}
|
|
{"parentUuid":"a09c456b-0cfa-4678-8257-469246980f7b","isSidechain":false,"promptId":"3fbdd7ce-2e92-436c-abf5-20d376d8a038","type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01Fi5seJMZXUiNPcoWP8k1xD","type":"tool_result","content":"File created successfully at: /Users/steve.briggs/projects/operations/services/beammeup/go.mod"}]},"uuid":"39dd8d27-5a66-459d-8484-fcabfe3b5801","timestamp":"2026-04-21T20:34:38.199Z","toolUseResult":{"type":"create","filePath":"/Users/steve.briggs/projects/operations/services/beammeup/go.mod","content":"module github.com/immuta/operations/services/beammeup\n\ngo 1.25.5\n\nrequire (\n\t// Update this to match your Teleport cluster version, then run: go mod tidy\n\tgithub.com/gravitational/teleport/api v16.4.0\n\tgithub.com/labstack/echo/v4 v4.15.0\n\tgithub.com/slack-go/slack v0.15.0\n\tgithub.com/stretchr/testify v1.11.1\n)\n","structuredPatch":[],"originalFile":null,"userModified":false},"sourceToolAssistantUUID":"a09c456b-0cfa-4678-8257-469246980f7b","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"parentUuid":"39dd8d27-5a66-459d-8484-fcabfe3b5801","isSidechain":false,"message":{"model":"claude-sonnet-4-6","id":"msg_01P2xjfmAYNyVd282UGsYpWt","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01Mw9sMVvUfEujK2qXHVjv5C","name":"Write","input":{"file_path":"/Users/steve.briggs/projects/operations/services/beammeup/main.go","content":"package main\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"log/slog\"\n\t\"net/http\"\n\t\"os\"\n\t\"os/signal\"\n\t\"syscall\"\n\t\"time\"\n\n\t\"github.com/immuta/operations/services/beammeup/internal/config\"\n\t\"github.com/immuta/operations/services/beammeup/internal/slack\"\n\t\"github.com/immuta/operations/services/beammeup/internal/state\"\n\t\"github.com/immuta/operations/services/beammeup/internal/teleport\"\n\t\"github.com/labstack/echo/v4\"\n\t\"github.com/labstack/echo/v4/middleware\"\n\tslackapi \"github.com/slack-go/slack\"\n)\n\nfunc main() {\n\tlogger := slog.New(slog.NewJSONHandler(os.Stdout, nil))\n\tslog.SetDefault(logger)\n\n\tcfg, err := config.Load()\n\tif err != nil {\n\t\tslog.Error(\"configuration error\", \"error\", err)\n\t\tos.Exit(1)\n\t}\n\n\tctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)\n\tdefer stop()\n\n\ttpClient, err := teleport.NewClient(ctx, cfg)\n\tif err != nil {\n\t\tslog.Error(\"teleport client error\", \"error\", err)\n\t\tos.Exit(1)\n\t}\n\tdefer tpClient.Close()\n\n\tstore := state.New()\n\tslackClient := slackapi.New(cfg.SlackBotToken)\n\th := slack.NewHandler(cfg, slackClient, tpClient, store)\n\n\tgo func() {\n\t\tif err := teleport.Watch(ctx, tpClient, func(req teleport.AccessRequest) {\n\t\t\tif err := h.PostAccessRequest(req); err != nil {\n\t\t\t\tslog.Error(\"failed to post access request\", \"error\", err, \"id\", req.ID)\n\t\t\t}\n\t\t}); err != nil {\n\t\t\tslog.Error(\"teleport watcher exited\", \"error\", err)\n\t\t\tstop()\n\t\t}\n\t}()\n\n\te := echo.New()\n\te.HideBanner = true\n\te.Use(middleware.Recover())\n\th.Register(e)\n\te.GET(\"/livez\", func(c echo.Context) error { return c.NoContent(http.StatusOK) })\n\te.GET(\"/readyz\", func(c echo.Context) error { return c.NoContent(http.StatusOK) })\n\n\tgo func() {\n\t\tslog.Info(\"listening\", \"port\", cfg.Port)\n\t\tif err := e.Start(\":\" + cfg.Port); err != nil && !errors.Is(err, http.ErrServerClosed) {\n\t\t\tslog.Error(\"server error\", \"error\", err)\n\t\t\tos.Exit(1)\n\t\t}\n\t}()\n\n\tquit := make(chan os.Signal, 1)\n\tsignal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)\n\t<-quit\n\n\tshutCtx, cancel := context.WithTimeout(context.Background(), 10*time.Second)\n\tdefer cancel()\n\tif err := e.Shutdown(shutCtx); err != nil {\n\t\tslog.Error(\"shutdown error\", \"error\", err)\n\t}\n}\n"},"caller":{"type":"direct"}}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":56632,"cache_read_input_tokens":11755,"output_tokens":923,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":56632},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":923,"cache_read_input_tokens":11755,"cache_creation_input_tokens":56632,"cache_creation":{"ephemeral_5m_input_tokens":56632,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaHZBXE2BnSRbYz3cvHSw","type":"assistant","uuid":"e5225643-bea2-443e-94fc-34b9d518f8fc","timestamp":"2026-04-21T20:34:48.288Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"type":"file-history-snapshot","messageId":"e5225643-bea2-443e-94fc-34b9d518f8fc","snapshot":{"messageId":"1f1eb6e6-93d5-4598-8b2a-9a81ecaa3bcc","trackedFileBackups":{"go.mod":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:34:38.184Z"},"main.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:35:01.021Z"}},"timestamp":"2026-04-21T20:17:45.553Z"},"isSnapshotUpdate":true}
|
|
{"parentUuid":"e5225643-bea2-443e-94fc-34b9d518f8fc","isSidechain":false,"promptId":"3fbdd7ce-2e92-436c-abf5-20d376d8a038","type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01Mw9sMVvUfEujK2qXHVjv5C","type":"tool_result","content":"File created successfully at: /Users/steve.briggs/projects/operations/services/beammeup/main.go"}]},"uuid":"8d77b581-cc88-46f5-92aa-796a5d9e3084","timestamp":"2026-04-21T20:35:01.023Z","toolUseResult":{"type":"create","filePath":"/Users/steve.briggs/projects/operations/services/beammeup/main.go","content":"package main\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"log/slog\"\n\t\"net/http\"\n\t\"os\"\n\t\"os/signal\"\n\t\"syscall\"\n\t\"time\"\n\n\t\"github.com/immuta/operations/services/beammeup/internal/config\"\n\t\"github.com/immuta/operations/services/beammeup/internal/slack\"\n\t\"github.com/immuta/operations/services/beammeup/internal/state\"\n\t\"github.com/immuta/operations/services/beammeup/internal/teleport\"\n\t\"github.com/labstack/echo/v4\"\n\t\"github.com/labstack/echo/v4/middleware\"\n\tslackapi \"github.com/slack-go/slack\"\n)\n\nfunc main() {\n\tlogger := slog.New(slog.NewJSONHandler(os.Stdout, nil))\n\tslog.SetDefault(logger)\n\n\tcfg, err := config.Load()\n\tif err != nil {\n\t\tslog.Error(\"configuration error\", \"error\", err)\n\t\tos.Exit(1)\n\t}\n\n\tctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)\n\tdefer stop()\n\n\ttpClient, err := teleport.NewClient(ctx, cfg)\n\tif err != nil {\n\t\tslog.Error(\"teleport client error\", \"error\", err)\n\t\tos.Exit(1)\n\t}\n\tdefer tpClient.Close()\n\n\tstore := state.New()\n\tslackClient := slackapi.New(cfg.SlackBotToken)\n\th := slack.NewHandler(cfg, slackClient, tpClient, store)\n\n\tgo func() {\n\t\tif err := teleport.Watch(ctx, tpClient, func(req teleport.AccessRequest) {\n\t\t\tif err := h.PostAccessRequest(req); err != nil {\n\t\t\t\tslog.Error(\"failed to post access request\", \"error\", err, \"id\", req.ID)\n\t\t\t}\n\t\t}); err != nil {\n\t\t\tslog.Error(\"teleport watcher exited\", \"error\", err)\n\t\t\tstop()\n\t\t}\n\t}()\n\n\te := echo.New()\n\te.HideBanner = true\n\te.Use(middleware.Recover())\n\th.Register(e)\n\te.GET(\"/livez\", func(c echo.Context) error { return c.NoContent(http.StatusOK) })\n\te.GET(\"/readyz\", func(c echo.Context) error { return c.NoContent(http.StatusOK) })\n\n\tgo func() {\n\t\tslog.Info(\"listening\", \"port\", cfg.Port)\n\t\tif err := e.Start(\":\" + cfg.Port); err != nil && !errors.Is(err, http.ErrServerClosed) {\n\t\t\tslog.Error(\"server error\", \"error\", err)\n\t\t\tos.Exit(1)\n\t\t}\n\t}()\n\n\tquit := make(chan os.Signal, 1)\n\tsignal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)\n\t<-quit\n\n\tshutCtx, cancel := context.WithTimeout(context.Background(), 10*time.Second)\n\tdefer cancel()\n\tif err := e.Shutdown(shutCtx); err != nil {\n\t\tslog.Error(\"shutdown error\", \"error\", err)\n\t}\n}\n","structuredPatch":[],"originalFile":null,"userModified":false},"sourceToolAssistantUUID":"e5225643-bea2-443e-94fc-34b9d518f8fc","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"parentUuid":"8d77b581-cc88-46f5-92aa-796a5d9e3084","isSidechain":false,"message":{"model":"claude-sonnet-4-6","id":"msg_01EigZNYtGS2wKQyKvVVxdr9","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01GbZdHA8Wo3uVp5Bh7YyhoK","name":"Write","input":{"file_path":"/Users/steve.briggs/projects/operations/services/beammeup/internal/config/config.go","content":"package config\n\nimport (\n\t\"errors\"\n\t\"os\"\n)\n\ntype Config struct {\n\tTeleportProxyAddr string\n\tTeleportIdentityFile string\n\tSlackBotToken string\n\tSlackSigningSecret string\n\tSlackChannel string\n\tPort string\n}\n\nfunc Load() (*Config, error) {\n\tcfg := &Config{\n\t\tTeleportProxyAddr: os.Getenv(\"TELEPORT_PROXY_ADDR\"),\n\t\tTeleportIdentityFile: os.Getenv(\"TELEPORT_IDENTITY_FILE\"),\n\t\tSlackBotToken: os.Getenv(\"SLACK_BOT_TOKEN\"),\n\t\tSlackSigningSecret: os.Getenv(\"SLACK_SIGNING_SECRET\"),\n\t\tSlackChannel: os.Getenv(\"SLACK_CHANNEL\"),\n\t\tPort: os.Getenv(\"PORT\"),\n\t}\n\n\tif cfg.Port == \"\" {\n\t\tcfg.Port = \"8080\"\n\t}\n\n\tvar errs []error\n\tif cfg.TeleportProxyAddr == \"\" {\n\t\terrs = append(errs, errors.New(\"TELEPORT_PROXY_ADDR is required\"))\n\t}\n\tif cfg.TeleportIdentityFile == \"\" {\n\t\terrs = append(errs, errors.New(\"TELEPORT_IDENTITY_FILE is required\"))\n\t}\n\tif cfg.SlackBotToken == \"\" {\n\t\terrs = append(errs, errors.New(\"SLACK_BOT_TOKEN is required\"))\n\t}\n\tif cfg.SlackSigningSecret == \"\" {\n\t\terrs = append(errs, errors.New(\"SLACK_SIGNING_SECRET required\"))\n\t}\n\tif cfg.SlackChannel == \"\" {\n\t\terrs = append(errs, errors.New(\"SLACK_CHANNEL is required\"))\n\t}\n\n\treturn cfg, errors.Join(errs...)\n}\n"},"caller":{"type":"direct"}}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":962,"cache_read_input_tokens":68387,"output_tokens":561,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":962},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":561,"cache_read_input_tokens":68387,"cache_creation_input_tokens":962,"cache_creation":{"ephemeral_5m_input_tokens":962,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaHZDBr17MHJWJyUSBr5f","type":"assistant","uuid":"44042cea-5db2-41ae-8585-816cb65a45f5","timestamp":"2026-04-21T20:35:06.915Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"type":"file-history-snapshot","messageId":"44042cea-5db2-41ae-8585-816cb65a45f5","snapshot":{"messageId":"1f1eb6e6-93d5-4598-8b2a-9a81ecaa3bcc","trackedFileBackups":{"go.mod":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:34:38.184Z"},"main.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:35:01.021Z"},"internal/config/config.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:35:26.735Z"}},"timestamp":"2026-04-21T20:17:45.553Z"},"isSnapshotUpdate":true}
|
|
{"parentUuid":"44042cea-5db2-41ae-8585-816cb65a45f5","isSidechain":false,"promptId":"3fbdd7ce-2e92-436c-abf5-20d376d8a038","type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01GbZdHA8Wo3uVp5Bh7YyhoK","type":"tool_result","content":"File created successfully at: /Users/steve.briggs/projects/operations/services/beammeup/internal/config/config.go"}]},"uuid":"116725eb-826b-4971-8aca-e0e8cb68358c","timestamp":"2026-04-21T20:35:26.737Z","toolUseResult":{"type":"create","filePath":"/Users/steve.briggs/projects/operations/services/beammeup/internal/config/config.go","content":"package config\n\nimport (\n\t\"errors\"\n\t\"os\"\n)\n\ntype Config struct {\n\tTeleportProxyAddr string\n\tTeleportIdentityFile string\n\tSlackBotToken string\n\tSlackSigningSecret string\n\tSlackChannel string\n\tPort string\n}\n\nfunc Load() (*Config, error) {\n\tcfg := &Config{\n\t\tTeleportProxyAddr: os.Getenv(\"TELEPORT_PROXY_ADDR\"),\n\t\tTeleportIdentityFile: os.Getenv(\"TELEPORT_IDENTITY_FILE\"),\n\t\tSlackBotToken: os.Getenv(\"SLACK_BOT_TOKEN\"),\n\t\tSlackSigningSecret: os.Getenv(\"SLACK_SIGNING_SECRET\"),\n\t\tSlackChannel: os.Getenv(\"SLACK_CHANNEL\"),\n\t\tPort: os.Getenv(\"PORT\"),\n\t}\n\n\tif cfg.Port == \"\" {\n\t\tcfg.Port = \"8080\"\n\t}\n\n\tvar errs []error\n\tif cfg.TeleportProxyAddr == \"\" {\n\t\terrs = append(errs, errors.New(\"TELEPORT_PROXY_ADDR is required\"))\n\t}\n\tif cfg.TeleportIdentityFile == \"\" {\n\t\terrs = append(errs, errors.New(\"TELEPORT_IDENTITY_FILE is required\"))\n\t}\n\tif cfg.SlackBotToken == \"\" {\n\t\terrs = append(errs, errors.New(\"SLACK_BOT_TOKEN is required\"))\n\t}\n\tif cfg.SlackSigningSecret == \"\" {\n\t\terrs = append(errs, errors.New(\"SLACK_SIGNING_SECRET required\"))\n\t}\n\tif cfg.SlackChannel == \"\" {\n\t\terrs = append(errs, errors.New(\"SLACK_CHANNEL is required\"))\n\t}\n\n\treturn cfg, errors.Join(errs...)\n}\n","structuredPatch":[],"originalFile":null,"userModified":false},"sourceToolAssistantUUID":"44042cea-5db2-41ae-8585-816cb65a45f5","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"parentUuid":"116725eb-826b-4971-8aca-e0e8cb68358c","isSidechain":false,"attachment":{"type":"task_reminder","content":[],"itemCount":0},"type":"attachment","uuid":"fdcaef40-dac9-466c-a959-b831d75a7d98","timestamp":"2026-04-21T20:35:26.752Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"parentUuid":"fdcaef40-dac9-466c-a959-b831d75a7d98","isSidechain":false,"message":{"model":"claude-sonnet-4-6","id":"msg_01BMx4TzaFE9p1p1zGKNYvYW","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_012CDxJNoU8xGjSdCyWewi64","name":"Write","input":{"file_path":"/Users/steve.briggs/projects/operations/services/beammeup/internal/state/store.go","content":"package state\n\nimport \"sync\"\n\ntype Entry struct {\n\tTeleportRequestID string\n\tSlackChannel string\n\tSlackMessageTS string\n\tRequester string\n\tRoles []string\n\tReason string\n}\n\ntype Store struct {\n\tmu sync.RWMutex\n\tidx map[string]*Entry\n}\n\nfunc New() *Store {\n\treturn &Store{idx: make(map[string]*Entry)}\n}\n\nfunc (s *Store) Set(e *Entry) {\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\ts.idx[e.TeleportRequestID] = e\n}\n\nfunc (s *Store) Get(id string) (*Entry, bool) {\n\ts.mu.RLock()\n\tdefer s.mu.RUnlock()\n\te, ok := s.idx[id]\n\treturn e, ok\n}\n\nfunc (s *Store) Delete(id string) {\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\tdelete(s.idx, id)\n}\n"},"caller":{"type":"direct"}}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":714,"cache_read_input_tokens":69349,"output_tokens":355,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":714},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":355,"cache_read_input_tokens":69349,"cache_creation_input_tokens":714,"cache_creation":{"ephemeral_5m_input_tokens":714,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaHZF5sPZfeRRT4hAogNa","type":"assistant","uuid":"85fcef7c-7e6b-4014-bf6e-48ddec615ae8","timestamp":"2026-04-21T20:35:30.763Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"type":"file-history-snapshot","messageId":"85fcef7c-7e6b-4014-bf6e-48ddec615ae8","snapshot":{"messageId":"1f1eb6e6-93d5-4598-8b2a-9a81ecaa3bcc","trackedFileBackups":{"go.mod":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:34:38.184Z"},"main.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:35:01.021Z"},"internal/config/config.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:35:26.735Z"},"internal/state/store.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:35:39.617Z"}},"timestamp":"2026-04-21T20:17:45.553Z"},"isSnapshotUpdate":true}
|
|
{"parentUuid":"85fcef7c-7e6b-4014-bf6e-48ddec615ae8","isSidechain":false,"promptId":"3fbdd7ce-2e92-436c-abf5-20d376d8a038","type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_012CDxJNoU8xGjSdCyWewi64","type":"tool_result","content":"File created successfully at: /Users/steve.briggs/projects/operations/services/beammeup/internal/state/store.go"}]},"uuid":"d809c9e7-edf4-4f8f-ac10-81bb0b40fe9a","timestamp":"2026-04-21T20:35:39.619Z","toolUseResult":{"type":"create","filePath":"/Users/steve.briggs/projects/operations/services/beammeup/internal/state/store.go","content":"package state\n\nimport \"sync\"\n\ntype Entry struct {\n\tTeleportRequestID string\n\tSlackChannel string\n\tSlackMessageTS string\n\tRequester string\n\tRoles []string\n\tReason string\n}\n\ntype Store struct {\n\tmu sync.RWMutex\n\tidx map[string]*Entry\n}\n\nfunc New() *Store {\n\treturn &Store{idx: make(map[string]*Entry)}\n}\n\nfunc (s *Store) Set(e *Entry) {\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\ts.idx[e.TeleportRequestID] = e\n}\n\nfunc (s *Store) Get(id string) (*Entry, bool) {\n\ts.mu.RLock()\n\tdefer s.mu.RUnlock()\n\te, ok := s.idx[id]\n\treturn e, ok\n}\n\nfunc (s *Store) Delete(id string) {\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\tdelete(s.idx, id)\n}\n","structuredPatch":[],"originalFile":null,"userModified":false},"sourceToolAssistantUUID":"85fcef7c-7e6b-4014-bf6e-48ddec615ae8","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"type":"file-history-snapshot","messageId":"66b50195-4679-4c7e-b00d-766123817aa6","snapshot":{"messageId":"1f1eb6e6-93d5-4598-8b2a-9a81ecaa3bcc","trackedFileBackups":{"go.mod":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:34:38.184Z"},"main.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:35:01.021Z"},"internal/config/config.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:35:26.735Z"},"internal/state/store.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:35:39.617Z"},"internal/teleport/client.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:36:01.778Z"}},"timestamp":"2026-04-21T20:17:45.553Z"},"isSnapshotUpdate":true}
|
|
{"parentUuid":"d809c9e7-edf4-4f8f-ac10-81bb0b40fe9a","isSidechain":false,"message":{"model":"claude-sonnet-4-6","id":"msg_01LBDMdWokzqMs6W3SMBjB5A","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01MoTJTigxta4KpReWdzhMpm","name":"Write","input":{"file_path":"/Users/steve.briggs/projects/operations/services/beammeup/internal/teleport/client.go","content":"package teleport\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/gravitational/teleport/api/client\"\n\t\"github.com/gravitational/teleport/api/types\"\n\t\"github.com/immuta/operations/services/beammeup/internal/config\"\n)\n\n// AccessRequest is a simplified view of a Teleport access request.\ntype AccessRequest struct {\n\tID string\n\tRequester string\n\tRoles []string\n\tReason string\n}\n\ntype Client struct {\n\tinner *client.Client\n}\n\nfunc NewClient(ctx context.Context, cfg *config.Config) (*Client, error) {\n\tclt, err := client.New(ctx, client.Config{\n\t\tAddrs: []string{cfg.TeleportProxyAddr},\n\t\tCredentials: []client.Credentials{client.LoadIdentityFile(cfg.TeleportIdentityFile)},\n\t})\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"connecting to teleport: %w\", err)\n\t}\n\treturn &Client{inner: clt}, nil\n}\n\nfunc (c *Client) Close() error {\n\treturn c.inner.Close()\n}\n\nfunc (c *Client) Approve(ctx context.Context, requestID, approver string) error {\n\treturn c.inner.SetAccessRequestState(ctx, types.AccessRequestUpdate{\n\t\tRequestID: requestID,\n\t\tState: types.RequestState_APPROVED,\n\t\tDelegator: approver,\n\t})\n}\n\nfunc (c *Client) Deny(ctx context.Context, requestID, reason, delegator string) error {\n\treturn c.inner.SetAccessRequestState(ctx, types.AccessRequestUpdate{\n\t\tRequestID: requestID,\n\t\tState: types.RequestState_DENIED,\n\t\tReason: reason,\n\t\tDelegator: delegator,\n\t})\n}\n"},"caller":{"type":"direct"}}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":398,"cache_read_input_tokens":70063,"output_tokens":557,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":398},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":557,"cache_read_input_tokens":70063,"cache_creation_input_tokens":398,"cache_creation":{"ephemeral_5m_input_tokens":398,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaHZG2eCYhz7subT6zpzQ","type":"assistant","uuid":"66b50195-4679-4c7e-b00d-766123817aa6","timestamp":"2026-04-21T20:35:46.336Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"parentUuid":"66b50195-4679-4c7e-b00d-766123817aa6","isSidechain":false,"promptId":"3fbdd7ce-2e92-436c-abf5-20d376d8a038","type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01MoTJTigxta4KpReWdzhMpm","type":"tool_result","content":"File created successfully at: /Users/steve.briggs/projects/operations/services/beammeup/internal/teleport/client.go"}]},"uuid":"89211deb-20ac-4087-bc74-b1fb17571c9b","timestamp":"2026-04-21T20:36:01.780Z","toolUseResult":{"type":"create","filePath":"/Users/steve.briggs/projects/operations/services/beammeup/internal/teleport/client.go","content":"package teleport\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/gravitational/teleport/api/client\"\n\t\"github.com/gravitational/teleport/api/types\"\n\t\"github.com/immuta/operations/services/beammeup/internal/config\"\n)\n\n// AccessRequest is a simplified view of a Teleport access request.\ntype AccessRequest struct {\n\tID string\n\tRequester string\n\tRoles []string\n\tReason string\n}\n\ntype Client struct {\n\tinner *client.Client\n}\n\nfunc NewClient(ctx context.Context, cfg *config.Config) (*Client, error) {\n\tclt, err := client.New(ctx, client.Config{\n\t\tAddrs: []string{cfg.TeleportProxyAddr},\n\t\tCredentials: []client.Credentials{client.LoadIdentityFile(cfg.TeleportIdentityFile)},\n\t})\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"connecting to teleport: %w\", err)\n\t}\n\treturn &Client{inner: clt}, nil\n}\n\nfunc (c *Client) Close() error {\n\treturn c.inner.Close()\n}\n\nfunc (c *Client) Approve(ctx context.Context, requestID, approver string) error {\n\treturn c.inner.SetAccessRequestState(ctx, types.AccessRequestUpdate{\n\t\tRequestID: requestID,\n\t\tState: types.RequestState_APPROVED,\n\t\tDelegator: approver,\n\t})\n}\n\nfunc (c *Client) Deny(ctx context.Context, requestID, reason, delegator string) error {\n\treturn c.inner.SetAccessRequestState(ctx, types.AccessRequestUpdate{\n\t\tRequestID: requestID,\n\t\tState: types.RequestState_DENIED,\n\t\tReason: reason,\n\t\tDelegator: delegator,\n\t})\n}\n","structuredPatch":[],"originalFile":null,"userModified":false},"sourceToolAssistantUUID":"66b50195-4679-4c7e-b00d-766123817aa6","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"type":"file-history-snapshot","messageId":"38077213-afd8-40d0-8b9a-8f4bfa68201d","snapshot":{"messageId":"1f1eb6e6-93d5-4598-8b2a-9a81ecaa3bcc","trackedFileBackups":{"go.mod":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:34:38.184Z"},"main.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:35:01.021Z"},"internal/config/config.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:35:26.735Z"},"internal/state/store.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:35:39.617Z"},"internal/teleport/client.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:36:01.778Z"},"internal/teleport/watcher.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:36:13.978Z"}},"timestamp":"2026-04-21T20:17:45.553Z"},"isSnapshotUpdate":true}
|
|
{"parentUuid":"89211deb-20ac-4087-bc74-b1fb17571c9b","isSidechain":false,"message":{"model":"claude-sonnet-4-6","id":"msg_012KrAdmc7yEvxjejpzAmHa1","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01VoLtTFUEyguemmBeZVDSo3","name":"Write","input":{"file_path":"/Users/steve.briggs/projects/operations/services/beammeup/internal/teleport/watcher.go","content":"package teleport\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"log/slog\"\n\t\"time\"\n\n\t\"github.com/gravitational/teleport/api/types\"\n)\n\n// Watch streams pending access requests and calls onRequest for each one.\n// Reconnects automatically on disconnect until ctx is cancelled.\nfunc Watch(ctx context.Context, c *Client, onRequest func(AccessRequest)) error {\n\tfor {\n\t\tif ctx.Err() != nil {\n\t\t\treturn nil\n\t\t}\n\t\tif err := watch(ctx, c, onRequest); err != nil {\n\t\t\tif ctx.Err() != nil {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\tslog.Warn(\"watcher disconnected, reconnecting in 5s\", \"error\", err)\n\t\t\tselect {\n\t\t\tcase <-ctx.Done():\n\t\t\t\treturn nil\n\t\t\tcase <-time.After(5 * time.Second):\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc watch(ctx context.Context, c *Client, onRequest func(AccessRequest)) error {\n\tw, err := c.inner.NewWatcher(ctx, types.Watch{\n\t\tKinds: []types.WatchKind{{Kind: types.KindAccessRequest}},\n\t})\n\tif err != nil {\n\t\treturn fmt.Errorf(\"new watcher: %w\", err)\n\t}\n\tdefer w.Close()\n\n\tfor {\n\t\tselect {\n\t\tcase <-ctx.Done():\n\t\t\treturn nil\n\t\tcase event := <-w.Events():\n\t\t\tif event.Type != types.OpPut {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treq, ok := event.Resource.(types.AccessRequest)\n\t\t\tif !ok || req.GetState() != types.RequestState_PENDING {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tonRequest(AccessRequest{\n\t\t\t\tID: req.GetName(),\n\t\t\t\tRequester: req.GetUser(),\n\t\t\t\tRoles: req.GetRoles(),\n\t\t\t\tReason: req.GetRequestReason(),\n\t\t\t})\n\t\tcase <-w.Done():\n\t\t\treturn w.Error()\n\t\t}\n\t}\n}\n"},"caller":{"type":"direct"}}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":601,"cache_read_input_tokens":70461,"output_tokens":598,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":601},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":598,"cache_read_input_tokens":70461,"cache_creation_input_tokens":601,"cache_creation":{"ephemeral_5m_input_tokens":601,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaHZHfjf8z4uJnRSkhax6","type":"assistant","uuid":"38077213-afd8-40d0-8b9a-8f4bfa68201d","timestamp":"2026-04-21T20:36:09.225Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"parentUuid":"38077213-afd8-40d0-8b9a-8f4bfa68201d","isSidechain":false,"promptId":"3fbdd7ce-2e92-436c-abf5-20d376d8a038","type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01VoLtTFUEyguemmBeZVDSo3","type":"tool_result","content":"File created successfully at: /Users/steve.briggs/projects/operations/services/beammeup/internal/teleport/watcher.go"}]},"uuid":"f4759706-bbe8-4c35-be6c-9064c4b686b8","timestamp":"2026-04-21T20:36:13.980Z","toolUseResult":{"type":"create","filePath":"/Users/steve.briggs/projects/operations/services/beammeup/internal/teleport/watcher.go","content":"package teleport\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"log/slog\"\n\t\"time\"\n\n\t\"github.com/gravitational/teleport/api/types\"\n)\n\n// Watch streams pending access requests and calls onRequest for each one.\n// Reconnects automatically on disconnect until ctx is cancelled.\nfunc Watch(ctx context.Context, c *Client, onRequest func(AccessRequest)) error {\n\tfor {\n\t\tif ctx.Err() != nil {\n\t\t\treturn nil\n\t\t}\n\t\tif err := watch(ctx, c, onRequest); err != nil {\n\t\t\tif ctx.Err() != nil {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\tslog.Warn(\"watcher disconnected, reconnecting in 5s\", \"error\", err)\n\t\t\tselect {\n\t\t\tcase <-ctx.Done():\n\t\t\t\treturn nil\n\t\t\tcase <-time.After(5 * time.Second):\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc watch(ctx context.Context, c *Client, onRequest func(AccessRequest)) error {\n\tw, err := c.inner.NewWatcher(ctx, types.Watch{\n\t\tKinds: []types.WatchKind{{Kind: types.KindAccessRequest}},\n\t})\n\tif err != nil {\n\t\treturn fmt.Errorf(\"new watcher: %w\", err)\n\t}\n\tdefer w.Close()\n\n\tfor {\n\t\tselect {\n\t\tcase <-ctx.Done():\n\t\t\treturn nil\n\t\tcase event := <-w.Events():\n\t\t\tif event.Type != types.OpPut {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treq, ok := event.Resource.(types.AccessRequest)\n\t\t\tif !ok || req.GetState() != types.RequestState_PENDING {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tonRequest(AccessRequest{\n\t\t\t\tID: req.GetName(),\n\t\t\t\tRequester: req.GetUser(),\n\t\t\t\tRoles: req.GetRoles(),\n\t\t\t\tReason: req.GetRequestReason(),\n\t\t\t})\n\t\tcase <-w.Done():\n\t\t\treturn w.Error()\n\t\t}\n\t}\n}\n","structuredPatch":[],"originalFile":null,"userModified":false},"sourceToolAssistantUUID":"38077213-afd8-40d0-8b9a-8f4bfa68201d","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"type":"file-history-snapshot","messageId":"4e715c01-9251-4d9f-a188-5d8371f02737","snapshot":{"messageId":"1f1eb6e6-93d5-4598-8b2a-9a81ecaa3bcc","trackedFileBackups":{"go.mod":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:34:38.184Z"},"main.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:35:01.021Z"},"internal/config/config.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:35:26.735Z"},"internal/state/store.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:35:39.617Z"},"internal/teleport/client.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:36:01.778Z"},"internal/teleport/watcher.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:36:13.978Z"},"internal/slack/messages.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:36:37.574Z"}},"timestamp":"2026-04-21T20:17:45.553Z"},"isSnapshotUpdate":true}
|
|
{"parentUuid":"f4759706-bbe8-4c35-be6c-9064c4b686b8","isSidechain":false,"message":{"model":"claude-sonnet-4-6","id":"msg_01AT13BUME9ascDzfLVD7TA6","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01HtwEUmCwrwyVydwREsQaHn","name":"Write","input":{"file_path":"/Users/steve.briggs/projects/operations/services/beammeup/internal/slack/messages.go","content":"package slack\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\n\tslackapi \"github.com/slack-go/slack\"\n)\n\nconst (\n\tactionApprove = \"approve\"\n\tactionDeny = \"deny\"\n\tactionMoreInfo = \"more_info\"\n\tcallbackBlock = \"access_request\"\n\tcallbackDeny = \"deny_modal\"\n\tcallbackInfo = \"more_info_modal\"\n)\n\nfunc buildRequestBlocks(id, requester, reason string, roles []string) []slackapi.Block {\n\tif reason == \"\" {\n\t\treason = \"_no reason provided_\"\n\t}\n\treturn []slackapi.Block{\n\t\tslackapi.NewSectionBlock(\n\t\t\tslackapi.NewTextBlockObject(\"mrkdwn\", \":key: *New Teleport Access Request*\", false, false),\n\t\t\tnil, nil,\n\t\t),\n\t\tslackapi.NewSectionBlock(nil, []*slackapi.TextBlockObject{\n\t\t\tslackapi.NewTextBlockObject(\"mrkdwn\", fmt.Sprintf(\"*Requester*\\n%s\", requester), false, false),\n\t\t\tslackapi.NewTextBlockObject(\"mrkdwn\", fmt.Sprintf(\"*Roles*\\n%s\", formatRoles(roles)), false, false),\n\t\t\tslackapi.NewTextBlockObject(\"mrkdwn\", fmt.Sprintf(\"*Reason*\\n%s\", reason), false, false),\n\t\t\tslackapi.NewTextBlockObject(\"mrkdwn\", fmt.Sprintf(\"*Request ID*\\n`%s`\", id), false, false),\n\t\t}, nil),\n\t\tslackapi.NewActionBlock(\n\t\t\tcallbackBlock,\n\t\t\tslackapi.NewButtonBlockElement(actionApprove, id,\n\t\t\t\tslackapi.NewTextBlockObject(\"plain_text\", \"✓ Approve\", true, false),\n\t\t\t).WithStyle(slackapi.StylePrimary),\n\t\t\tslackapi.NewButtonBlockElement(actionDeny, id,\n\t\t\t\tslackapi.NewTextBlockObject(\"plain_text\", \"✗ Deny\", true, false),\n\t\t\t).WithStyle(slackapi.StyleDanger),\n\t\t\tslackapi.NewButtonBlockElement(actionMoreInfo, id,\n\t\t\t\tslackapi.NewTextBlockObject(\"plain_text\", \"? Need More Info\", true, false),\n\t\t\t),\n\t\t),\n\t}\n}\n\nfunc buildApprovedBlocks(requester, approver string, roles []string) []slackapi.Block {\n\treturn []slackapi.Block{\n\t\tslackapi.NewSectionBlock(\n\t\t\tslackapi.NewTextBlockObject(\"mrkdwn\",\n\t\t\t\tfmt.Sprintf(\":white_check_mark: *Access Approved*\\n*Requester:* %s *Roles:* %s *Approved by:* %s\",\n\t\t\t\t\trequester, formatRoles(roles), approver),\n\t\t\t\tfalse, false),\n\t\t\tnil, nil,\n\t\t),\n\t}\n}\n\nfunc buildDeniedBlocks(requester, denier, reason string, roles []string) []slackapi.Block {\n\treturn []slackapi.Block{\n\t\tslackapi.NewSectionBlock(\n\t\t\tslackapi.NewTextBlockObject(\"mrkdwn\",\n\t\t\t\tfmt.Sprintf(\":x: *Access Denied*\\n*Requester:* %s *Roles:* %s *Denied by:* %s\\n*Reason:* %s\",\n\t\t\t\t\trequester, formatRoles(roles), denier, reason),\n\t\t\t\tfalse, false),\n\t\t\tnil, nil,\n\t\t),\n\t}\n}\n\nfunc buildMoreInfoBlocks(asker, question string) []slackapi.Block {\n\treturn []slackapi.Block{\n\t\tslackapi.NewSectionBlock(\n\t\t\tslackapi.NewTextBlockObject(\"mrkdwn\",\n\t\t\t\tfmt.Sprintf(\":question: *More information requested by %s:*\\n%s\\n_Request is still pending._\",\n\t\t\t\t\tasker, question),\n\t\t\t\tfalse, false),\n\t\t\tnil, nil,\n\t\t),\n\t}\n}\n\nfunc denyModal(requestID string) slackapi.ModalViewRequest {\n\treturn slackapi.ModalViewRequest{\n\t\tType: slackapi.VTModal,\n\t\tCallbackID: callbackDeny,\n\t\tPrivateMetadata: requestID,\n\t\tTitle: slackapi.NewTextBlockObject(\"plain_text\", \"Deny Access Request\", false, false),\n\t\tSubmit: slackapi.NewTextBlockObject(\"plain_text\", \"Deny\", false, false),\n\t\tClose: slackapi.NewTextBlockObject(\"plain_text\", \"Cancel\", false, false),\n\t\tBlocks: slackapi.Blocks{BlockSet: []slackapi.Block{\n\t\t\tslackapi.NewInputBlock(\"reason_block\",\n\t\t\t\tslackapi.NewTextBlockObject(\"plain_text\", \"Reason for denial\", false, false),\n\t\t\t\tnil,\n\t\t\t\tslackapi.NewPlainTextInputBlockElement(\n\t\t\t\t\tslackapi.NewTextBlockObject(\"plain_text\", \"Why is this request being denied?\", false, false),\n\t\t\t\t\t\"reason\",\n\t\t\t\t),\n\t\t\t),\n\t\t}},\n\t}\n}\n\nfunc moreInfoModal(requestID string) slackapi.ModalViewRequest {\n\treturn slackapi.ModalViewRequest{\n\t\tType: slackapi.VTModal,\n\t\tCallbackID: callbackInfo,\n\t\tPrivateMetadata: requestID,\n\t\tTitle: slackapi.NewTextBlockObject(\"plain_text\", \"Request More Info\", false, false),\n\t\tSubmit: slackapi.NewTextBlockObject(\"plain_text\", \"Send\", false, false),\n\t\tClose: slackapi.NewTextBlockObject(\"plain_text\", \"Cancel\", false, false),\n\t\tBlocks: slackapi.Blocks{BlockSet: []slackapi.Block{\n\t\t\tslackapi.NewInputBlock(\"question_block\",\n\t\t\t\tslackapi.NewTextBlockObject(\"plain_text\", \"What do you need to know?\", false, false),\n\t\t\t\tnil,\n\t\t\t\tslackapi.NewPlainTextInputBlockElement(\n\t\t\t\t\tslackapi.NewTextBlockObject(\"plain_text\", \"e.g. Please provide a Jira ticket number for this request.\", false, false),\n\t\t\t\t\t\"question\",\n\t\t\t\t),\n\t\t\t),\n\t\t}},\n\t}\n}\n\nfunc formatRoles(roles []string) string {\n\tif len(roles) == 0 {\n\t\treturn \"_none_\"\n\t}\n\tparts := make([]string, len(roles))\n\tfor i, r := range roles {\n\t\tparts[i] = \"`\" + r + \"`\"\n\t}\n\treturn strings.Join(parts, \", \")\n}\n"},"caller":{"type":"direct"}}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":643,"cache_read_input_tokens":71062,"output_tokens":1746,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":643},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":1746,"cache_read_input_tokens":71062,"cache_creation_input_tokens":643,"cache_creation":{"ephemeral_5m_input_tokens":643,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaHZJZRBMkQ5mDyD2PqkV","type":"assistant","uuid":"4e715c01-9251-4d9f-a188-5d8371f02737","timestamp":"2026-04-21T20:36:32.309Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"parentUuid":"4e715c01-9251-4d9f-a188-5d8371f02737","isSidechain":false,"promptId":"3fbdd7ce-2e92-436c-abf5-20d376d8a038","type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01HtwEUmCwrwyVydwREsQaHn","type":"tool_result","content":"File created successfully at: /Users/steve.briggs/projects/operations/services/beammeup/internal/slack/messages.go"}]},"uuid":"399d9c8a-984b-4f59-b85b-f070fedd2895","timestamp":"2026-04-21T20:36:37.575Z","toolUseResult":{"type":"create","filePath":"/Users/steve.briggs/projects/operations/services/beammeup/internal/slack/messages.go","content":"package slack\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\n\tslackapi \"github.com/slack-go/slack\"\n)\n\nconst (\n\tactionApprove = \"approve\"\n\tactionDeny = \"deny\"\n\tactionMoreInfo = \"more_info\"\n\tcallbackBlock = \"access_request\"\n\tcallbackDeny = \"deny_modal\"\n\tcallbackInfo = \"more_info_modal\"\n)\n\nfunc buildRequestBlocks(id, requester, reason string, roles []string) []slackapi.Block {\n\tif reason == \"\" {\n\t\treason = \"_no reason provided_\"\n\t}\n\treturn []slackapi.Block{\n\t\tslackapi.NewSectionBlock(\n\t\t\tslackapi.NewTextBlockObject(\"mrkdwn\", \":key: *New Teleport Access Request*\", false, false),\n\t\t\tnil, nil,\n\t\t),\n\t\tslackapi.NewSectionBlock(nil, []*slackapi.TextBlockObject{\n\t\t\tslackapi.NewTextBlockObject(\"mrkdwn\", fmt.Sprintf(\"*Requester*\\n%s\", requester), false, false),\n\t\t\tslackapi.NewTextBlockObject(\"mrkdwn\", fmt.Sprintf(\"*Roles*\\n%s\", formatRoles(roles)), false, false),\n\t\t\tslackapi.NewTextBlockObject(\"mrkdwn\", fmt.Sprintf(\"*Reason*\\n%s\", reason), false, false),\n\t\t\tslackapi.NewTextBlockObject(\"mrkdwn\", fmt.Sprintf(\"*Request ID*\\n`%s`\", id), false, false),\n\t\t}, nil),\n\t\tslackapi.NewActionBlock(\n\t\t\tcallbackBlock,\n\t\t\tslackapi.NewButtonBlockElement(actionApprove, id,\n\t\t\t\tslackapi.NewTextBlockObject(\"plain_text\", \"✓ Approve\", true, false),\n\t\t\t).WithStyle(slackapi.StylePrimary),\n\t\t\tslackapi.NewButtonBlockElement(actionDeny, id,\n\t\t\t\tslackapi.NewTextBlockObject(\"plain_text\", \"✗ Deny\", true, false),\n\t\t\t).WithStyle(slackapi.StyleDanger),\n\t\t\tslackapi.NewButtonBlockElement(actionMoreInfo, id,\n\t\t\t\tslackapi.NewTextBlockObject(\"plain_text\", \"? Need More Info\", true, false),\n\t\t\t),\n\t\t),\n\t}\n}\n\nfunc buildApprovedBlocks(requester, approver string, roles []string) []slackapi.Block {\n\treturn []slackapi.Block{\n\t\tslackapi.NewSectionBlock(\n\t\t\tslackapi.NewTextBlockObject(\"mrkdwn\",\n\t\t\t\tfmt.Sprintf(\":white_check_mark: *Access Approved*\\n*Requester:* %s *Roles:* %s *Approved by:* %s\",\n\t\t\t\t\trequester, formatRoles(roles), approver),\n\t\t\t\tfalse, false),\n\t\t\tnil, nil,\n\t\t),\n\t}\n}\n\nfunc buildDeniedBlocks(requester, denier, reason string, roles []string) []slackapi.Block {\n\treturn []slackapi.Block{\n\t\tslackapi.NewSectionBlock(\n\t\t\tslackapi.NewTextBlockObject(\"mrkdwn\",\n\t\t\t\tfmt.Sprintf(\":x: *Access Denied*\\n*Requester:* %s *Roles:* %s *Denied by:* %s\\n*Reason:* %s\",\n\t\t\t\t\trequester, formatRoles(roles), denier, reason),\n\t\t\t\tfalse, false),\n\t\t\tnil, nil,\n\t\t),\n\t}\n}\n\nfunc buildMoreInfoBlocks(asker, question string) []slackapi.Block {\n\treturn []slackapi.Block{\n\t\tslackapi.NewSectionBlock(\n\t\t\tslackapi.NewTextBlockObject(\"mrkdwn\",\n\t\t\t\tfmt.Sprintf(\":question: *More information requested by %s:*\\n%s\\n_Request is still pending._\",\n\t\t\t\t\tasker, question),\n\t\t\t\tfalse, false),\n\t\t\tnil, nil,\n\t\t),\n\t}\n}\n\nfunc denyModal(requestID string) slackapi.ModalViewRequest {\n\treturn slackapi.ModalViewRequest{\n\t\tType: slackapi.VTModal,\n\t\tCallbackID: callbackDeny,\n\t\tPrivateMetadata: requestID,\n\t\tTitle: slackapi.NewTextBlockObject(\"plain_text\", \"Deny Access Request\", false, false),\n\t\tSubmit: slackapi.NewTextBlockObject(\"plain_text\", \"Deny\", false, false),\n\t\tClose: slackapi.NewTextBlockObject(\"plain_text\", \"Cancel\", false, false),\n\t\tBlocks: slackapi.Blocks{BlockSet: []slackapi.Block{\n\t\t\tslackapi.NewInputBlock(\"reason_block\",\n\t\t\t\tslackapi.NewTextBlockObject(\"plain_text\", \"Reason for denial\", false, false),\n\t\t\t\tnil,\n\t\t\t\tslackapi.NewPlainTextInputBlockElement(\n\t\t\t\t\tslackapi.NewTextBlockObject(\"plain_text\", \"Why is this request being denied?\", false, false),\n\t\t\t\t\t\"reason\",\n\t\t\t\t),\n\t\t\t),\n\t\t}},\n\t}\n}\n\nfunc moreInfoModal(requestID string) slackapi.ModalViewRequest {\n\treturn slackapi.ModalViewRequest{\n\t\tType: slackapi.VTModal,\n\t\tCallbackID: callbackInfo,\n\t\tPrivateMetadata: requestID,\n\t\tTitle: slackapi.NewTextBlockObject(\"plain_text\", \"Request More Info\", false, false),\n\t\tSubmit: slackapi.NewTextBlockObject(\"plain_text\", \"Send\", false, false),\n\t\tClose: slackapi.NewTextBlockObject(\"plain_text\", \"Cancel\", false, false),\n\t\tBlocks: slackapi.Blocks{BlockSet: []slackapi.Block{\n\t\t\tslackapi.NewInputBlock(\"question_block\",\n\t\t\t\tslackapi.NewTextBlockObject(\"plain_text\", \"What do you need to know?\", false, false),\n\t\t\t\tnil,\n\t\t\t\tslackapi.NewPlainTextInputBlockElement(\n\t\t\t\t\tslackapi.NewTextBlockObject(\"plain_text\", \"e.g. Please provide a Jira ticket number for this request.\", false, false),\n\t\t\t\t\t\"question\",\n\t\t\t\t),\n\t\t\t),\n\t\t}},\n\t}\n}\n\nfunc formatRoles(roles []string) string {\n\tif len(roles) == 0 {\n\t\treturn \"_none_\"\n\t}\n\tparts := make([]string, len(roles))\n\tfor i, r := range roles {\n\t\tparts[i] = \"`\" + r + \"`\"\n\t}\n\treturn strings.Join(parts, \", \")\n}\n","structuredPatch":[],"originalFile":null,"userModified":false},"sourceToolAssistantUUID":"4e715c01-9251-4d9f-a188-5d8371f02737","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"type":"last-prompt","lastPrompt":"lets skip the jira integration altogether for now and just do the teleport request approval","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c"}
|
|
{"type":"permission-mode","permissionMode":"default","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c"}
|
|
{"parentUuid":"399d9c8a-984b-4f59-b85b-f070fedd2895","isSidechain":false,"message":{"model":"claude-sonnet-4-6","id":"msg_013wwheGuVbJTPqyqrb7MuMe","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01QvdG3BfrBr6eWg2uaoPAma","name":"Write","input":{"file_path":"/Users/steve.briggs/projects/operations/services/beammeup/internal/slack/handler.go","content":"package slack\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"log/slog\"\n\t\"net/http\"\n\t\"net/url\"\n\n\t\"github.com/immuta/operations/services/beammeup/internal/config\"\n\t\"github.com/immuta/operations/services/beammeup/internal/state\"\n\t\"github.com/immuta/operations/services/beammeup/internal/teleport\"\n\t\"github.com/labstack/echo/v4\"\n\tslackapi \"github.com/slack-go/slack\"\n)\n\ntype Handler struct {\n\tcfg *config.Config\n\tslack *slackapi.Client\n\tteleport *teleport.Client\n\tstore *state.Store\n}\n\nfunc NewHandler(cfg *config.Config, slackClient *slackapi.Client, tpClient *teleport.Client, store *state.Store) *Handler {\n\treturn &Handler{cfg: cfg, slack: slackClient, teleport: tpClient, store: store}\n}\n\nfunc (h *Handler) Register(e *echo.Echo) {\n\te.POST(\"/slack/interactive\", h.interactive)\n}\n\nfunc (h *Handler) PostAccessRequest(req teleport.AccessRequest) error {\n\tblocks := buildRequestBlocks(req.ID, req.Requester, req.Reason, req.Roles)\n\t_, ts, err := h.slack.PostMessage(h.cfg.SlackChannel, slackapi.MsgOptionBlocks(blocks...))\n\tif err != nil {\n\t\treturn fmt.Errorf(\"post message: %w\", err)\n\t}\n\th.store.Set(&state.Entry{\n\t\tTeleportRequestID: req.ID,\n\t\tSlackChannel: h.cfg.SlackChannel,\n\t\tSlackMessageTS: ts,\n\t\tRequester: req.Requester,\n\t\tRoles: req.Roles,\n\t\tReason: req.Reason,\n\t})\n\treturn nil\n}\n\nfunc (h *Handler) interactive(c echo.Context) error {\n\tr := c.Request()\n\n\tsv, err := slackapi.NewSecretsVerifier(r.Header, h.cfg.SlackSigningSecret)\n\tif err != nil {\n\t\treturn c.NoContent(http.StatusUnauthorized)\n\t}\n\tbody, err := io.ReadAll(io.TeeReader(r.Body, &sv))\n\tif err != nil {\n\t\treturn c.NoContent(http.StatusBadRequest)\n\t}\n\tif err = sv.Ensure(); err != nil {\n\t\tslog.Warn(\"slack signature verification failed\", \"error\", err)\n\t\treturn c.NoContent(http.StatusUnauthorized)\n\t}\n\n\tvals, err := url.ParseQuery(string(body))\n\tif err != nil {\n\t\treturn c.NoContent(http.StatusBadRequest)\n\t}\n\n\tvar payload slackapi.InteractionCallback\n\tif err = json.Unmarshal([]byte(vals.Get(\"payload\")), &payload); err != nil {\n\t\treturn c.NoContent(http.StatusBadRequest)\n\t}\n\n\tswitch payload.Type {\n\tcase slackapi.InteractionTypeBlockActions:\n\t\treturn h.handleBlockAction(c, payload)\n\tcase slackapi.InteractionTypeViewSubmission:\n\t\treturn h.handleModalSubmission(c, payload)\n\t}\n\treturn c.NoContent(http.StatusOK)\n}\n\nfunc (h *Handler) handleBlockAction(c echo.Context, p slackapi.InteractionCallback) error {\n\tif len(p.ActionCallback.BlockActions) == 0 {\n\t\treturn c.NoContent(http.StatusOK)\n\t}\n\taction := p.ActionCallback.BlockActions[0]\n\tactor := p.User.Name\n\n\tswitch action.ActionID {\n\tcase actionApprove:\n\t\tentry, ok := h.store.Get(action.Value)\n\t\tif !ok {\n\t\t\treturn c.NoContent(http.StatusOK) // already handled\n\t\t}\n\t\t// Respond to Slack immediately; Teleport call happens async.\n\t\tgo h.doApprove(entry, actor)\n\n\tcase actionDeny:\n\t\t// TriggerID expires in 3s — open the modal before responding.\n\t\tif _, err := h.slack.OpenView(p.TriggerID, denyModal(action.Value)); err != nil {\n\t\t\tslog.Error(\"open deny modal\", \"error\", err)\n\t\t\treturn c.NoContent(http.StatusInternalServerError)\n\t\t}\n\n\tcase actionMoreInfo:\n\t\tif _, err := h.slack.OpenView(p.TriggerID, moreInfoModal(action.Value)); err != nil {\n\t\t\tslog.Error(\"open more_info modal\", \"error\", err)\n\t\t\treturn c.NoContent(http.StatusInternalServerError)\n\t\t}\n\t}\n\treturn c.NoContent(http.StatusOK)\n}\n\nfunc (h *Handler) handleModalSubmission(c echo.Context, p slackapi.InteractionCallback) error {\n\trequestID := p.View.PrivateMetadata\n\tactor := p.User.Name\n\n\tswitch p.View.CallbackID {\n\tcase callbackDeny:\n\t\treason := p.View.State.Values[\"reason_block\"][\"reason\"].Value\n\t\tentry, ok := h.store.Get(requestID)\n\t\tif !ok {\n\t\t\treturn c.NoContent(http.StatusOK)\n\t\t}\n\t\tgo h.doDeny(entry, actor, reason)\n\n\tcase callbackInfo:\n\t\tquestion := p.View.State.Values[\"question_block\"][\"question\"].Value\n\t\tentry, ok := h.store.Get(requestID)\n\t\tif !ok {\n\t\t\treturn c.NoContent(http.StatusOK)\n\t\t}\n\t\tgo h.doMoreInfo(entry, actor, question)\n\t}\n\treturn c.NoContent(http.StatusOK)\n}\n\nfunc (h *Handler) doApprove(entry *state.Entry, actor string) {\n\tif err := h.teleport.Approve(context.Background(), entry.TeleportRequestID, actor); err != nil {\n\t\tslog.Error(\"approve failed\", \"error\", err, \"id\", entry.TeleportRequestID)\n\t\treturn\n\t}\n\th.updateMessage(entry, buildApprovedBlocks(entry.Requester, actor, entry.Roles))\n\th.store.Delete(entry.TeleportRequestID)\n}\n\nfunc (h *Handler) doDeny(entry *state.Entry, actor, reason string) {\n\tif err := h.teleport.Deny(context.Background(), entry.TeleportRequestID, reason, actor); err != nil {\n\t\tslog.Error(\"deny failed\", \"error\", err, \"id\", entry.TeleportRequestID)\n\t\treturn\n\t}\n\th.updateMessage(entry, buildDeniedBlocks(entry.Requester, actor, reason, entry.Roles))\n\th.store.Delete(entry.TeleportRequestID)\n}\n\nfunc (h *Handler) doMoreInfo(entry *state.Entry, actor, question string) {\n\tblocks := buildMoreInfoBlocks(actor, question)\n\t// Post as a thread reply so the original message (with buttons) stays actionable.\n\tif _, _, err := h.slack.PostMessage(\n\t\tentry.SlackChannel,\n\t\tslackapi.MsgOptionBlocks(blocks...),\n\t\tslackapi.MsgOptionTS(entry.SlackMessageTS),\n\t); err != nil {\n\t\tslog.Error(\"post more_info thread\", \"error\", err, \"id\", entry.TeleportRequestID)\n\t}\n}\n\nfunc (h *Handler) updateMessage(entry *state.Entry, blocks []slackapi.Block) {\n\tif _, _, _, err := h.slack.UpdateMessage(\n\t\tentry.SlackChannel,\n\t\tentry.SlackMessageTS,\n\t\tslackapi.MsgOptionBlocks(blocks...),\n\t); err != nil {\n\t\tslog.Error(\"update message failed\", \"error\", err, \"id\", entry.TeleportRequestID)\n\t}\n}\n"},"caller":{"type":"direct"}}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":1789,"cache_read_input_tokens":71705,"output_tokens":2086,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":1789},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":2086,"cache_read_input_tokens":71705,"cache_creation_input_tokens":1789,"cache_creation":{"ephemeral_5m_input_tokens":1789,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaHZLJgxWm3XH97XxzDFK","type":"assistant","uuid":"ed6af6fa-0729-4eb3-982b-c35fcd998ab4","timestamp":"2026-04-21T20:36:58.250Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"type":"file-history-snapshot","messageId":"ed6af6fa-0729-4eb3-982b-c35fcd998ab4","snapshot":{"messageId":"1f1eb6e6-93d5-4598-8b2a-9a81ecaa3bcc","trackedFileBackups":{"go.mod":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:34:38.184Z"},"main.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:35:01.021Z"},"internal/config/config.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:35:26.735Z"},"internal/state/store.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:35:39.617Z"},"internal/teleport/client.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:36:01.778Z"},"internal/teleport/watcher.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:36:13.978Z"},"internal/slack/messages.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:36:37.574Z"},"internal/slack/handler.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:37:09.672Z"}},"timestamp":"2026-04-21T20:17:45.553Z"},"isSnapshotUpdate":true}
|
|
{"parentUuid":"ed6af6fa-0729-4eb3-982b-c35fcd998ab4","isSidechain":false,"promptId":"3fbdd7ce-2e92-436c-abf5-20d376d8a038","type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01QvdG3BfrBr6eWg2uaoPAma","type":"tool_result","content":"File created successfully at: /Users/steve.briggs/projects/operations/services/beammeup/internal/slack/handler.go"}]},"uuid":"18292f60-7daf-4012-ba1e-b254b1b326c4","timestamp":"2026-04-21T20:37:09.681Z","toolUseResult":{"type":"create","filePath":"/Users/steve.briggs/projects/operations/services/beammeup/internal/slack/handler.go","content":"package slack\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"log/slog\"\n\t\"net/http\"\n\t\"net/url\"\n\n\t\"github.com/immuta/operations/services/beammeup/internal/config\"\n\t\"github.com/immuta/operations/services/beammeup/internal/state\"\n\t\"github.com/immuta/operations/services/beammeup/internal/teleport\"\n\t\"github.com/labstack/echo/v4\"\n\tslackapi \"github.com/slack-go/slack\"\n)\n\ntype Handler struct {\n\tcfg *config.Config\n\tslack *slackapi.Client\n\tteleport *teleport.Client\n\tstore *state.Store\n}\n\nfunc NewHandler(cfg *config.Config, slackClient *slackapi.Client, tpClient *teleport.Client, store *state.Store) *Handler {\n\treturn &Handler{cfg: cfg, slack: slackClient, teleport: tpClient, store: store}\n}\n\nfunc (h *Handler) Register(e *echo.Echo) {\n\te.POST(\"/slack/interactive\", h.interactive)\n}\n\nfunc (h *Handler) PostAccessRequest(req teleport.AccessRequest) error {\n\tblocks := buildRequestBlocks(req.ID, req.Requester, req.Reason, req.Roles)\n\t_, ts, err := h.slack.PostMessage(h.cfg.SlackChannel, slackapi.MsgOptionBlocks(blocks...))\n\tif err != nil {\n\t\treturn fmt.Errorf(\"post message: %w\", err)\n\t}\n\th.store.Set(&state.Entry{\n\t\tTeleportRequestID: req.ID,\n\t\tSlackChannel: h.cfg.SlackChannel,\n\t\tSlackMessageTS: ts,\n\t\tRequester: req.Requester,\n\t\tRoles: req.Roles,\n\t\tReason: req.Reason,\n\t})\n\treturn nil\n}\n\nfunc (h *Handler) interactive(c echo.Context) error {\n\tr := c.Request()\n\n\tsv, err := slackapi.NewSecretsVerifier(r.Header, h.cfg.SlackSigningSecret)\n\tif err != nil {\n\t\treturn c.NoContent(http.StatusUnauthorized)\n\t}\n\tbody, err := io.ReadAll(io.TeeReader(r.Body, &sv))\n\tif err != nil {\n\t\treturn c.NoContent(http.StatusBadRequest)\n\t}\n\tif err = sv.Ensure(); err != nil {\n\t\tslog.Warn(\"slack signature verification failed\", \"error\", err)\n\t\treturn c.NoContent(http.StatusUnauthorized)\n\t}\n\n\tvals, err := url.ParseQuery(string(body))\n\tif err != nil {\n\t\treturn c.NoContent(http.StatusBadRequest)\n\t}\n\n\tvar payload slackapi.InteractionCallback\n\tif err = json.Unmarshal([]byte(vals.Get(\"payload\")), &payload); err != nil {\n\t\treturn c.NoContent(http.StatusBadRequest)\n\t}\n\n\tswitch payload.Type {\n\tcase slackapi.InteractionTypeBlockActions:\n\t\treturn h.handleBlockAction(c, payload)\n\tcase slackapi.InteractionTypeViewSubmission:\n\t\treturn h.handleModalSubmission(c, payload)\n\t}\n\treturn c.NoContent(http.StatusOK)\n}\n\nfunc (h *Handler) handleBlockAction(c echo.Context, p slackapi.InteractionCallback) error {\n\tif len(p.ActionCallback.BlockActions) == 0 {\n\t\treturn c.NoContent(http.StatusOK)\n\t}\n\taction := p.ActionCallback.BlockActions[0]\n\tactor := p.User.Name\n\n\tswitch action.ActionID {\n\tcase actionApprove:\n\t\tentry, ok := h.store.Get(action.Value)\n\t\tif !ok {\n\t\t\treturn c.NoContent(http.StatusOK) // already handled\n\t\t}\n\t\t// Respond to Slack immediately; Teleport call happens async.\n\t\tgo h.doApprove(entry, actor)\n\n\tcase actionDeny:\n\t\t// TriggerID expires in 3s — open the modal before responding.\n\t\tif _, err := h.slack.OpenView(p.TriggerID, denyModal(action.Value)); err != nil {\n\t\t\tslog.Error(\"open deny modal\", \"error\", err)\n\t\t\treturn c.NoContent(http.StatusInternalServerError)\n\t\t}\n\n\tcase actionMoreInfo:\n\t\tif _, err := h.slack.OpenView(p.TriggerID, moreInfoModal(action.Value)); err != nil {\n\t\t\tslog.Error(\"open more_info modal\", \"error\", err)\n\t\t\treturn c.NoContent(http.StatusInternalServerError)\n\t\t}\n\t}\n\treturn c.NoContent(http.StatusOK)\n}\n\nfunc (h *Handler) handleModalSubmission(c echo.Context, p slackapi.InteractionCallback) error {\n\trequestID := p.View.PrivateMetadata\n\tactor := p.User.Name\n\n\tswitch p.View.CallbackID {\n\tcase callbackDeny:\n\t\treason := p.View.State.Values[\"reason_block\"][\"reason\"].Value\n\t\tentry, ok := h.store.Get(requestID)\n\t\tif !ok {\n\t\t\treturn c.NoContent(http.StatusOK)\n\t\t}\n\t\tgo h.doDeny(entry, actor, reason)\n\n\tcase callbackInfo:\n\t\tquestion := p.View.State.Values[\"question_block\"][\"question\"].Value\n\t\tentry, ok := h.store.Get(requestID)\n\t\tif !ok {\n\t\t\treturn c.NoContent(http.StatusOK)\n\t\t}\n\t\tgo h.doMoreInfo(entry, actor, question)\n\t}\n\treturn c.NoContent(http.StatusOK)\n}\n\nfunc (h *Handler) doApprove(entry *state.Entry, actor string) {\n\tif err := h.teleport.Approve(context.Background(), entry.TeleportRequestID, actor); err != nil {\n\t\tslog.Error(\"approve failed\", \"error\", err, \"id\", entry.TeleportRequestID)\n\t\treturn\n\t}\n\th.updateMessage(entry, buildApprovedBlocks(entry.Requester, actor, entry.Roles))\n\th.store.Delete(entry.TeleportRequestID)\n}\n\nfunc (h *Handler) doDeny(entry *state.Entry, actor, reason string) {\n\tif err := h.teleport.Deny(context.Background(), entry.TeleportRequestID, reason, actor); err != nil {\n\t\tslog.Error(\"deny failed\", \"error\", err, \"id\", entry.TeleportRequestID)\n\t\treturn\n\t}\n\th.updateMessage(entry, buildDeniedBlocks(entry.Requester, actor, reason, entry.Roles))\n\th.store.Delete(entry.TeleportRequestID)\n}\n\nfunc (h *Handler) doMoreInfo(entry *state.Entry, actor, question string) {\n\tblocks := buildMoreInfoBlocks(actor, question)\n\t// Post as a thread reply so the original message (with buttons) stays actionable.\n\tif _, _, err := h.slack.PostMessage(\n\t\tentry.SlackChannel,\n\t\tslackapi.MsgOptionBlocks(blocks...),\n\t\tslackapi.MsgOptionTS(entry.SlackMessageTS),\n\t); err != nil {\n\t\tslog.Error(\"post more_info thread\", \"error\", err, \"id\", entry.TeleportRequestID)\n\t}\n}\n\nfunc (h *Handler) updateMessage(entry *state.Entry, blocks []slackapi.Block) {\n\tif _, _, _, err := h.slack.UpdateMessage(\n\t\tentry.SlackChannel,\n\t\tentry.SlackMessageTS,\n\t\tslackapi.MsgOptionBlocks(blocks...),\n\t); err != nil {\n\t\tslog.Error(\"update message failed\", \"error\", err, \"id\", entry.TeleportRequestID)\n\t}\n}\n","structuredPatch":[],"originalFile":null,"userModified":false},"sourceToolAssistantUUID":"ed6af6fa-0729-4eb3-982b-c35fcd998ab4","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"type":"file-history-snapshot","messageId":"9362ec31-9347-43a0-8b45-7dcfd8aef25f","snapshot":{"messageId":"1f1eb6e6-93d5-4598-8b2a-9a81ecaa3bcc","trackedFileBackups":{"go.mod":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:34:38.184Z"},"main.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:35:01.021Z"},"internal/config/config.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:35:26.735Z"},"internal/state/store.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:35:39.617Z"},"internal/teleport/client.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:36:01.778Z"},"internal/teleport/watcher.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:36:13.978Z"},"internal/slack/messages.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:36:37.574Z"},"internal/slack/handler.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:37:09.672Z"},"Dockerfile":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:37:19.467Z"}},"timestamp":"2026-04-21T20:17:45.553Z"},"isSnapshotUpdate":true}
|
|
{"parentUuid":"18292f60-7daf-4012-ba1e-b254b1b326c4","isSidechain":false,"message":{"model":"claude-sonnet-4-6","id":"msg_015kBPRsBuJKEgtGkQfYjmnC","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_017L8y8AoQevddupXoeWKyZ2","name":"Write","input":{"file_path":"/Users/steve.briggs/projects/operations/services/beammeup/Dockerfile","content":"FROM golang:1.25-alpine AS builder\nWORKDIR /app\nCOPY services/beammeup/go.mod services/beammeup/go.sum ./\nRUN go mod download\nCOPY services/beammeup/ .\nRUN CGO_ENABLED=0 go build -o beammeup .\n\nFROM registry.ic-ops.net/base/rockylinux:9\nCOPY --from=builder /app/beammeup /beammeup\nENTRYPOINT [\"/beammeup\"]\n"},"caller":{"type":"direct"}}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":2129,"cache_read_input_tokens":73494,"output_tokens":216,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":2129},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":216,"cache_read_input_tokens":73494,"cache_creation_input_tokens":2129,"cache_creation":{"ephemeral_5m_input_tokens":2129,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaHZNfuDR86UnU3AjkP3t","type":"assistant","uuid":"9362ec31-9347-43a0-8b45-7dcfd8aef25f","timestamp":"2026-04-21T20:37:13.481Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"parentUuid":"9362ec31-9347-43a0-8b45-7dcfd8aef25f","isSidechain":false,"promptId":"3fbdd7ce-2e92-436c-abf5-20d376d8a038","type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_017L8y8AoQevddupXoeWKyZ2","type":"tool_result","content":"File created successfully at: /Users/steve.briggs/projects/operations/services/beammeup/Dockerfile"}]},"uuid":"3c999a40-7134-4885-a09f-a0c15fda3199","timestamp":"2026-04-21T20:37:19.477Z","toolUseResult":{"type":"create","filePath":"/Users/steve.briggs/projects/operations/services/beammeup/Dockerfile","content":"FROM golang:1.25-alpine AS builder\nWORKDIR /app\nCOPY services/beammeup/go.mod services/beammeup/go.sum ./\nRUN go mod download\nCOPY services/beammeup/ .\nRUN CGO_ENABLED=0 go build -o beammeup .\n\nFROM registry.ic-ops.net/base/rockylinux:9\nCOPY --from=builder /app/beammeup /beammeup\nENTRYPOINT [\"/beammeup\"]\n","structuredPatch":[],"originalFile":null,"userModified":false},"sourceToolAssistantUUID":"9362ec31-9347-43a0-8b45-7dcfd8aef25f","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"parentUuid":"3c999a40-7134-4885-a09f-a0c15fda3199","isSidechain":false,"message":{"model":"claude-sonnet-4-6","id":"msg_01XjGrnRqStSFcUVD65Ki86k","type":"message","role":"assistant","content":[{"type":"text","text":"Now the Kubernetes manifests:"}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":254,"cache_read_input_tokens":75623,"output_tokens":126,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":254},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":126,"cache_read_input_tokens":75623,"cache_creation_input_tokens":254,"cache_creation":{"ephemeral_5m_input_tokens":254,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaHZPPSJ2zY3YpYTpuHFZ","type":"assistant","uuid":"5a69eba1-7014-44b0-8694-6557c043b844","timestamp":"2026-04-21T20:37:21.262Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"parentUuid":"5a69eba1-7014-44b0-8694-6557c043b844","isSidechain":false,"message":{"model":"claude-sonnet-4-6","id":"msg_01XjGrnRqStSFcUVD65Ki86k","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01X6DdPNTP5hVLc9rdR1DkT1","name":"Write","input":{"file_path":"/Users/steve.briggs/projects/operations/services/beammeup/base/bootstrap/namespace.yaml","content":"---\napiVersion: v1\nkind: Namespace\nmetadata:\n name: beammeup\n"},"caller":{"type":"direct"}}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":254,"cache_read_input_tokens":75623,"output_tokens":126,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":254},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":126,"cache_read_input_tokens":75623,"cache_creation_input_tokens":254,"cache_creation":{"ephemeral_5m_input_tokens":254,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaHZPPSJ2zY3YpYTpuHFZ","type":"assistant","uuid":"f0036ff2-5e8d-4a70-8384-2aaabdbdce1f","timestamp":"2026-04-21T20:37:21.768Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"type":"file-history-snapshot","messageId":"f0036ff2-5e8d-4a70-8384-2aaabdbdce1f","snapshot":{"messageId":"1f1eb6e6-93d5-4598-8b2a-9a81ecaa3bcc","trackedFileBackups":{"go.mod":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:34:38.184Z"},"main.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:35:01.021Z"},"internal/config/config.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:35:26.735Z"},"internal/state/store.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:35:39.617Z"},"internal/teleport/client.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:36:01.778Z"},"internal/teleport/watcher.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:36:13.978Z"},"internal/slack/messages.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:36:37.574Z"},"internal/slack/handler.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:37:09.672Z"},"Dockerfile":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:37:19.467Z"},"base/bootstrap/namespace.yaml":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:39:57.471Z"}},"timestamp":"2026-04-21T20:17:45.553Z"},"isSnapshotUpdate":true}
|
|
{"parentUuid":"f0036ff2-5e8d-4a70-8384-2aaabdbdce1f","isSidechain":false,"promptId":"3fbdd7ce-2e92-436c-abf5-20d376d8a038","type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01X6DdPNTP5hVLc9rdR1DkT1","type":"tool_result","content":"File created successfully at: /Users/steve.briggs/projects/operations/services/beammeup/base/bootstrap/namespace.yaml"}]},"uuid":"d29e8532-433a-4aba-a81e-e503e0741f69","timestamp":"2026-04-21T20:39:57.476Z","toolUseResult":{"type":"create","filePath":"/Users/steve.briggs/projects/operations/services/beammeup/base/bootstrap/namespace.yaml","content":"---\napiVersion: v1\nkind: Namespace\nmetadata:\n name: beammeup\n","structuredPatch":[],"originalFile":null,"userModified":false},"sourceToolAssistantUUID":"f0036ff2-5e8d-4a70-8384-2aaabdbdce1f","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"type":"file-history-snapshot","messageId":"e3020592-1aa1-4fc0-adf8-332386a0b163","snapshot":{"messageId":"1f1eb6e6-93d5-4598-8b2a-9a81ecaa3bcc","trackedFileBackups":{"go.mod":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:34:38.184Z"},"main.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:35:01.021Z"},"internal/config/config.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:35:26.735Z"},"internal/state/store.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:35:39.617Z"},"internal/teleport/client.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:36:01.778Z"},"internal/teleport/watcher.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:36:13.978Z"},"internal/slack/messages.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:36:37.574Z"},"internal/slack/handler.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:37:09.672Z"},"Dockerfile":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:37:19.467Z"},"base/bootstrap/namespace.yaml":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:39:57.471Z"},"base/bootstrap/service-account.yaml":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:40:01.848Z"}},"timestamp":"2026-04-21T20:17:45.553Z"},"isSnapshotUpdate":true}
|
|
{"parentUuid":"d29e8532-433a-4aba-a81e-e503e0741f69","isSidechain":false,"message":{"model":"claude-sonnet-4-6","id":"msg_01K8SSRpLKMjLmNmtn2UUZuf","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01P6pb3X5L4o1BNZpwgJKhhU","name":"Write","input":{"file_path":"/Users/steve.briggs/projects/operations/services/beammeup/base/bootstrap/service-account.yaml","content":"---\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n name: beammeup-sa\n"},"caller":{"type":"direct"}}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":169,"cache_read_input_tokens":75877,"output_tokens":122,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":169},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":122,"cache_read_input_tokens":75877,"cache_creation_input_tokens":169,"cache_creation":{"ephemeral_5m_input_tokens":169,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaHZb3LQ1h4AUCqKpWS3W","type":"assistant","uuid":"e3020592-1aa1-4fc0-adf8-332386a0b163","timestamp":"2026-04-21T20:39:59.756Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"parentUuid":"e3020592-1aa1-4fc0-adf8-332386a0b163","isSidechain":false,"promptId":"3fbdd7ce-2e92-436c-abf5-20d376d8a038","type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01P6pb3X5L4o1BNZpwgJKhhU","type":"tool_result","content":"File created successfully at: /Users/steve.briggs/projects/operations/services/beammeup/base/bootstrap/service-account.yaml"}]},"uuid":"7345ee01-ef12-49c5-ae16-76ab480d672b","timestamp":"2026-04-21T20:40:01.850Z","toolUseResult":{"type":"create","filePath":"/Users/steve.briggs/projects/operations/services/beammeup/base/bootstrap/service-account.yaml","content":"---\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n name: beammeup-sa\n","structuredPatch":[],"originalFile":null,"userModified":false},"sourceToolAssistantUUID":"e3020592-1aa1-4fc0-adf8-332386a0b163","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"type":"file-history-snapshot","messageId":"8883dcc9-16ca-49c7-85c8-cc307e9a5f76","snapshot":{"messageId":"1f1eb6e6-93d5-4598-8b2a-9a81ecaa3bcc","trackedFileBackups":{"go.mod":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:34:38.184Z"},"main.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:35:01.021Z"},"internal/config/config.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:35:26.735Z"},"internal/state/store.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:35:39.617Z"},"internal/teleport/client.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:36:01.778Z"},"internal/teleport/watcher.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:36:13.978Z"},"internal/slack/messages.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:36:37.574Z"},"internal/slack/handler.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:37:09.672Z"},"Dockerfile":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:37:19.467Z"},"base/bootstrap/namespace.yaml":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:39:57.471Z"},"base/bootstrap/service-account.yaml":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:40:01.848Z"},"base/bootstrap/kustomization.yaml":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:40:12.029Z"}},"timestamp":"2026-04-21T20:17:45.553Z"},"isSnapshotUpdate":true}
|
|
{"parentUuid":"7345ee01-ef12-49c5-ae16-76ab480d672b","isSidechain":false,"message":{"model":"claude-sonnet-4-6","id":"msg_01RJJtvFDhdnTmXrN1eDYmsH","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_012koxogU16xCgmRQbhnvLQq","name":"Write","input":{"file_path":"/Users/steve.briggs/projects/operations/services/beammeup/base/bootstrap/kustomization.yaml","content":"---\nnamespace: beammeup\n\nresources:\n - namespace.yaml\n - service-account.yaml\n\nlabels:\n - pairs:\n app.kubernetes.io/name: beammeup\n app.kubernetes.io/component: service\n\nconfigMapGenerator:\n - name: beammeup-config\n options:\n disableNameSuffixHash: true\n literals:\n - TELEPORT_PROXY_ADDR=\n - TELEPORT_IDENTITY_FILE=/etc/teleport/identity\n - SLACK_CHANNEL=\n"},"caller":{"type":"direct"}}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":167,"cache_read_input_tokens":76046,"output_tokens":230,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":167},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":230,"cache_read_input_tokens":76046,"cache_creation_input_tokens":167,"cache_creation":{"ephemeral_5m_input_tokens":167,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaHZbMfTuXoWcbQAf6GPN","type":"assistant","uuid":"8883dcc9-16ca-49c7-85c8-cc307e9a5f76","timestamp":"2026-04-21T20:40:05.564Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"parentUuid":"8883dcc9-16ca-49c7-85c8-cc307e9a5f76","isSidechain":false,"promptId":"3fbdd7ce-2e92-436c-abf5-20d376d8a038","type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_012koxogU16xCgmRQbhnvLQq","type":"tool_result","content":"File created successfully at: /Users/steve.briggs/projects/operations/services/beammeup/base/bootstrap/kustomization.yaml"}]},"uuid":"4b169ce3-2249-42f0-b23a-1471efe666d6","timestamp":"2026-04-21T20:40:12.030Z","toolUseResult":{"type":"create","filePath":"/Users/steve.briggs/projects/operations/services/beammeup/base/bootstrap/kustomization.yaml","content":"---\nnamespace: beammeup\n\nresources:\n - namespace.yaml\n - service-account.yaml\n\nlabels:\n - pairs:\n app.kubernetes.io/name: beammeup\n app.kubernetes.io/component: service\n\nconfigMapGenerator:\n - name: beammeup-config\n options:\n disableNameSuffixHash: true\n literals:\n - TELEPORT_PROXY_ADDR=\n - TELEPORT_IDENTITY_FILE=/etc/teleport/identity\n - SLACK_CHANNEL=\n","structuredPatch":[],"originalFile":null,"userModified":false},"sourceToolAssistantUUID":"8883dcc9-16ca-49c7-85c8-cc307e9a5f76","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"parentUuid":"4b169ce3-2249-42f0-b23a-1471efe666d6","isSidechain":false,"attachment":{"type":"task_reminder","content":[],"itemCount":0},"type":"attachment","uuid":"2d9bde61-39d0-4b56-86ae-acf5b446b822","timestamp":"2026-04-21T20:40:12.031Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"type":"last-prompt","lastPrompt":"lets skip the jira integration altogether for now and just do the teleport request approval","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c"}
|
|
{"type":"permission-mode","permissionMode":"default","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c"}
|
|
{"parentUuid":"2d9bde61-39d0-4b56-86ae-acf5b446b822","isSidechain":false,"message":{"model":"claude-sonnet-4-6","id":"msg_01EqikBkLAmi4K4VQq4WxXQg","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01RycpX91fvs1GZ7FGPPHq9T","name":"Write","input":{"file_path":"/Users/steve.briggs/projects/operations/services/beammeup/base/services/deployment.yaml","content":"---\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: beammeup\nspec:\n replicas: 1\n selector:\n matchLabels:\n app.kubernetes.io/name: beammeup\n app.kubernetes.io/component: service\n template:\n metadata:\n labels:\n app.kubernetes.io/name: beammeup\n app.kubernetes.io/component: service\n spec:\n serviceAccountName: beammeup-sa\n containers:\n - name: beammeup\n image: registry.ic-ops.net/sre/beammeup:latest\n ports:\n - containerPort: 8080\n name: http\n env:\n - name: PORT\n value: \"8080\"\n - name: TELEPORT_PROXY_ADDR\n valueFrom:\n configMapKeyRef:\n name: beammeup-config\n key: TELEPORT_PROXY_ADDR\n - name: TELEPORT_IDENTITY_FILE\n valueFrom:\n configMapKeyRef:\n name: beammeup-config\n key: TELEPORT_IDENTITY_FILE\n - name: SLACK_CHANNEL\n valueFrom:\n configMapKeyRef:\n name: beammeup-config\n key: SLACK_CHANNEL\n - name: SLACK_BOT_TOKEN\n valueFrom:\n secretKeyRef:\n name: beammeup-secret\n key: SLACK_BOT_TOKEN\n - name: SLACK_SIGNING_SECRET\n valueFrom:\n secretKeyRef:\n name: beammeup-secret\n key: SLACK_SIGNING_SECRET\n volumeMounts:\n - name: teleport-identity\n mountPath: /etc/teleport\n readOnly: true\n resources:\n requests:\n cpu: 50m\n memory: 64Mi\n livenessProbe:\n httpGet:\n path: /livez\n port: http\n initialDelaySeconds: 10\n periodSeconds: 60\n readinessProbe:\n httpGet:\n path: /readyz\n port: http\n initialDelaySeconds: 5\n periodSeconds: 30\n volumes:\n - name: teleport-identity\n secret:\n secretName: beammeup-teleport-identity\n"},"caller":{"type":"direct"}}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":385,"cache_read_input_tokens":76213,"output_tokens":689,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":385},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":689,"cache_read_input_tokens":76213,"cache_creation_input_tokens":385,"cache_creation":{"ephemeral_5m_input_tokens":385,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaHZc7BMYDVaykEyRq6mn","type":"assistant","uuid":"7fa543c7-9c13-4a2a-8c99-f14107a5d2b2","timestamp":"2026-04-21T20:40:19.122Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"type":"file-history-snapshot","messageId":"7fa543c7-9c13-4a2a-8c99-f14107a5d2b2","snapshot":{"messageId":"1f1eb6e6-93d5-4598-8b2a-9a81ecaa3bcc","trackedFileBackups":{"go.mod":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:34:38.184Z"},"main.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:35:01.021Z"},"internal/config/config.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:35:26.735Z"},"internal/state/store.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:35:39.617Z"},"internal/teleport/client.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:36:01.778Z"},"internal/teleport/watcher.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:36:13.978Z"},"internal/slack/messages.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:36:37.574Z"},"internal/slack/handler.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:37:09.672Z"},"Dockerfile":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:37:19.467Z"},"base/bootstrap/namespace.yaml":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:39:57.471Z"},"base/bootstrap/service-account.yaml":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:40:01.848Z"},"base/bootstrap/kustomization.yaml":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:40:12.029Z"},"base/services/deployment.yaml":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:40:33.612Z"}},"timestamp":"2026-04-21T20:17:45.553Z"},"isSnapshotUpdate":true}
|
|
{"parentUuid":"7fa543c7-9c13-4a2a-8c99-f14107a5d2b2","isSidechain":false,"promptId":"3fbdd7ce-2e92-436c-abf5-20d376d8a038","type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01RycpX91fvs1GZ7FGPPHq9T","type":"tool_result","content":"File created successfully at: /Users/steve.briggs/projects/operations/services/beammeup/base/services/deployment.yaml"}]},"uuid":"903d1f2d-4a8e-41b6-8ab8-6b4498ac7171","timestamp":"2026-04-21T20:40:33.615Z","toolUseResult":{"type":"create","filePath":"/Users/steve.briggs/projects/operations/services/beammeup/base/services/deployment.yaml","content":"---\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: beammeup\nspec:\n replicas: 1\n selector:\n matchLabels:\n app.kubernetes.io/name: beammeup\n app.kubernetes.io/component: service\n template:\n metadata:\n labels:\n app.kubernetes.io/name: beammeup\n app.kubernetes.io/component: service\n spec:\n serviceAccountName: beammeup-sa\n containers:\n - name: beammeup\n image: registry.ic-ops.net/sre/beammeup:latest\n ports:\n - containerPort: 8080\n name: http\n env:\n - name: PORT\n value: \"8080\"\n - name: TELEPORT_PROXY_ADDR\n valueFrom:\n configMapKeyRef:\n name: beammeup-config\n key: TELEPORT_PROXY_ADDR\n - name: TELEPORT_IDENTITY_FILE\n valueFrom:\n configMapKeyRef:\n name: beammeup-config\n key: TELEPORT_IDENTITY_FILE\n - name: SLACK_CHANNEL\n valueFrom:\n configMapKeyRef:\n name: beammeup-config\n key: SLACK_CHANNEL\n - name: SLACK_BOT_TOKEN\n valueFrom:\n secretKeyRef:\n name: beammeup-secret\n key: SLACK_BOT_TOKEN\n - name: SLACK_SIGNING_SECRET\n valueFrom:\n secretKeyRef:\n name: beammeup-secret\n key: SLACK_SIGNING_SECRET\n volumeMounts:\n - name: teleport-identity\n mountPath: /etc/teleport\n readOnly: true\n resources:\n requests:\n cpu: 50m\n memory: 64Mi\n livenessProbe:\n httpGet:\n path: /livez\n port: http\n initialDelaySeconds: 10\n periodSeconds: 60\n readinessProbe:\n httpGet:\n path: /readyz\n port: http\n initialDelaySeconds: 5\n periodSeconds: 30\n volumes:\n - name: teleport-identity\n secret:\n secretName: beammeup-teleport-identity\n","structuredPatch":[],"originalFile":null,"userModified":false},"sourceToolAssistantUUID":"7fa543c7-9c13-4a2a-8c99-f14107a5d2b2","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"type":"file-history-snapshot","messageId":"de489809-dbcc-4991-917a-b81bd33f6902","snapshot":{"messageId":"1f1eb6e6-93d5-4598-8b2a-9a81ecaa3bcc","trackedFileBackups":{"go.mod":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:34:38.184Z"},"main.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:35:01.021Z"},"internal/config/config.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:35:26.735Z"},"internal/state/store.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:35:39.617Z"},"internal/teleport/client.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:36:01.778Z"},"internal/teleport/watcher.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:36:13.978Z"},"internal/slack/messages.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:36:37.574Z"},"internal/slack/handler.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:37:09.672Z"},"Dockerfile":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:37:19.467Z"},"base/bootstrap/namespace.yaml":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:39:57.471Z"},"base/bootstrap/service-account.yaml":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:40:01.848Z"},"base/bootstrap/kustomization.yaml":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:40:12.029Z"},"base/services/deployment.yaml":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:40:33.612Z"},"base/services/service.yaml":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:40:42.664Z"}},"timestamp":"2026-04-21T20:17:45.553Z"},"isSnapshotUpdate":true}
|
|
{"parentUuid":"903d1f2d-4a8e-41b6-8ab8-6b4498ac7171","isSidechain":false,"message":{"model":"claude-sonnet-4-6","id":"msg_012QHLnjj7PQ1x7mkCkckWtf","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01PEGVAZQToV7LRftGtCWkMb","name":"Write","input":{"file_path":"/Users/steve.briggs/projects/operations/services/beammeup/base/services/service.yaml","content":"---\napiVersion: v1\nkind: Service\nmetadata:\n name: beammeup\nspec:\n ports:\n - port: 80\n targetPort: 8080\n protocol: TCP\n name: http\n selector:\n app.kubernetes.io/name: beammeup\n app.kubernetes.io/component: service\n type: ClusterIP\n"},"caller":{"type":"direct"}}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":732,"cache_read_input_tokens":76598,"output_tokens":185,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":732},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":185,"cache_read_input_tokens":76598,"cache_creation_input_tokens":732,"cache_creation":{"ephemeral_5m_input_tokens":732,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaHZdi2P1bMeYAGAGMEdx","type":"assistant","uuid":"de489809-dbcc-4991-917a-b81bd33f6902","timestamp":"2026-04-21T20:40:36.792Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"parentUuid":"de489809-dbcc-4991-917a-b81bd33f6902","isSidechain":false,"promptId":"3fbdd7ce-2e92-436c-abf5-20d376d8a038","type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01PEGVAZQToV7LRftGtCWkMb","type":"tool_result","content":"File created successfully at: /Users/steve.briggs/projects/operations/services/beammeup/base/services/service.yaml"}]},"uuid":"6ece85b1-82b4-4d6b-80d8-78b9969451c5","timestamp":"2026-04-21T20:40:42.665Z","toolUseResult":{"type":"create","filePath":"/Users/steve.briggs/projects/operations/services/beammeup/base/services/service.yaml","content":"---\napiVersion: v1\nkind: Service\nmetadata:\n name: beammeup\nspec:\n ports:\n - port: 80\n targetPort: 8080\n protocol: TCP\n name: http\n selector:\n app.kubernetes.io/name: beammeup\n app.kubernetes.io/component: service\n type: ClusterIP\n","structuredPatch":[],"originalFile":null,"userModified":false},"sourceToolAssistantUUID":"de489809-dbcc-4991-917a-b81bd33f6902","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"type":"file-history-snapshot","messageId":"450db4db-ce25-4560-a4aa-17e36eed6b48","snapshot":{"messageId":"1f1eb6e6-93d5-4598-8b2a-9a81ecaa3bcc","trackedFileBackups":{"go.mod":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:34:38.184Z"},"main.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:35:01.021Z"},"internal/config/config.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:35:26.735Z"},"internal/state/store.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:35:39.617Z"},"internal/teleport/client.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:36:01.778Z"},"internal/teleport/watcher.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:36:13.978Z"},"internal/slack/messages.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:36:37.574Z"},"internal/slack/handler.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:37:09.672Z"},"Dockerfile":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:37:19.467Z"},"base/bootstrap/namespace.yaml":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:39:57.471Z"},"base/bootstrap/service-account.yaml":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:40:01.848Z"},"base/bootstrap/kustomization.yaml":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:40:12.029Z"},"base/services/deployment.yaml":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:40:33.612Z"},"base/services/service.yaml":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:40:42.664Z"},"base/services/kustomization.yaml":{"backupFileName":null,"version":1,"backupTime":"2026-04-21T20:40:51.180Z"}},"timestamp":"2026-04-21T20:17:45.553Z"},"isSnapshotUpdate":true}
|
|
{"parentUuid":"6ece85b1-82b4-4d6b-80d8-78b9969451c5","isSidechain":false,"message":{"model":"claude-sonnet-4-6","id":"msg_016qNhN6R4MWNTHrr1N38QWM","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01BAPhK9QzaRCe5dm4jcXaZk","name":"Write","input":{"file_path":"/Users/steve.briggs/projects/operations/services/beammeup/base/services/kustomization.yaml","content":"---\nnamespace: beammeup\n\nresources:\n - deployment.yaml\n - service.yaml\n"},"caller":{"type":"direct"}}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":228,"cache_read_input_tokens":77330,"output_tokens":120,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":228},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":120,"cache_read_input_tokens":77330,"cache_creation_input_tokens":228,"cache_creation":{"ephemeral_5m_input_tokens":228,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaHZeNjJJFC3vgk2JJ6tz","type":"assistant","uuid":"450db4db-ce25-4560-a4aa-17e36eed6b48","timestamp":"2026-04-21T20:40:45.284Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"parentUuid":"450db4db-ce25-4560-a4aa-17e36eed6b48","isSidechain":false,"promptId":"3fbdd7ce-2e92-436c-abf5-20d376d8a038","type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01BAPhK9QzaRCe5dm4jcXaZk","type":"tool_result","content":"File created successfully at: /Users/steve.briggs/projects/operations/services/beammeup/base/services/kustomization.yaml"}]},"uuid":"2fe74ba5-5ab4-441a-b1ad-651a163cc6aa","timestamp":"2026-04-21T20:40:51.181Z","toolUseResult":{"type":"create","filePath":"/Users/steve.briggs/projects/operations/services/beammeup/base/services/kustomization.yaml","content":"---\nnamespace: beammeup\n\nresources:\n - deployment.yaml\n - service.yaml\n","structuredPatch":[],"originalFile":null,"userModified":false},"sourceToolAssistantUUID":"450db4db-ce25-4560-a4aa-17e36eed6b48","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"parentUuid":"2fe74ba5-5ab4-441a-b1ad-651a163cc6aa","isSidechain":false,"message":{"model":"claude-sonnet-4-6","id":"msg_01F2Vw4J7ty44gm5NDX5Pcaf","type":"message","role":"assistant","content":[{"type":"text","text":"Good — all files written. Let me verify the final structure looks right:"}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":165,"cache_read_input_tokens":77558,"output_tokens":120,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":165},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":120,"cache_read_input_tokens":77558,"cache_creation_input_tokens":165,"cache_creation":{"ephemeral_5m_input_tokens":165,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaHZezenSbPSS1rgJMYdD","type":"assistant","uuid":"7deb142c-c81c-4be8-9bf7-62236f719955","timestamp":"2026-04-21T20:40:53.377Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"parentUuid":"7deb142c-c81c-4be8-9bf7-62236f719955","isSidechain":false,"message":{"model":"claude-sonnet-4-6","id":"msg_01F2Vw4J7ty44gm5NDX5Pcaf","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01LyoTXNv1TEmeM4kvae22Ju","name":"Bash","input":{"command":"find /Users/steve.briggs/projects/operations/services/beammeup -not -path '*/.claude/*' | sort","description":"Show beammeup directory tree"},"caller":{"type":"direct"}}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":165,"cache_read_input_tokens":77558,"output_tokens":120,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":165},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":120,"cache_read_input_tokens":77558,"cache_creation_input_tokens":165,"cache_creation":{"ephemeral_5m_input_tokens":165,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaHZezenSbPSS1rgJMYdD","type":"assistant","uuid":"701fc457-42f4-478f-b01b-e8402c22d4f6","timestamp":"2026-04-21T20:40:53.842Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"parentUuid":"701fc457-42f4-478f-b01b-e8402c22d4f6","isSidechain":false,"promptId":"3fbdd7ce-2e92-436c-abf5-20d376d8a038","type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01LyoTXNv1TEmeM4kvae22Ju","type":"tool_result","content":"/Users/steve.briggs/projects/operations/services/beammeup\n/Users/steve.briggs/projects/operations/services/beammeup/.claude\n/Users/steve.briggs/projects/operations/services/beammeup/base\n/Users/steve.briggs/projects/operations/services/beammeup/base/bootstrap\n/Users/steve.briggs/projects/operations/services/beammeup/base/bootstrap/kustomization.yaml\n/Users/steve.briggs/projects/operations/services/beammeup/base/bootstrap/namespace.yaml\n/Users/steve.briggs/projects/operations/services/beammeup/base/bootstrap/service-account.yaml\n/Users/steve.briggs/projects/operations/services/beammeup/base/services\n/Users/steve.briggs/projects/operations/services/beammeup/base/services/deployment.yaml\n/Users/steve.briggs/projects/operations/services/beammeup/base/services/kustomization.yaml\n/Users/steve.briggs/projects/operations/services/beammeup/base/services/service.yaml\n/Users/steve.briggs/projects/operations/services/beammeup/Dockerfile\n/Users/steve.briggs/projects/operations/services/beammeup/go.mod\n/Users/steve.briggs/projects/operations/services/beammeup/internal\n/Users/steve.briggs/projects/operations/services/beammeup/internal/config\n/Users/steve.briggs/projects/operations/services/beammeup/internal/config/config.go\n/Users/steve.briggs/projects/operations/services/beammeup/internal/slack\n/Users/steve.briggs/projects/operations/services/beammeup/internal/slack/handler.go\n/Users/steve.briggs/projects/operations/services/beammeup/internal/slack/messages.go\n/Users/steve.briggs/projects/operations/services/beammeup/internal/state\n/Users/steve.briggs/projects/operations/services/beammeup/internal/state/store.go\n/Users/steve.briggs/projects/operations/services/beammeup/internal/teleport\n/Users/steve.briggs/projects/operations/services/beammeup/internal/teleport/client.go\n/Users/steve.briggs/projects/operations/services/beammeup/internal/teleport/watcher.go\n/Users/steve.briggs/projects/operations/services/beammeup/main.go","is_error":false}]},"uuid":"6b6828fa-b84b-45ad-93e0-70eb074834ce","timestamp":"2026-04-21T20:40:53.923Z","toolUseResult":{"stdout":"/Users/steve.briggs/projects/operations/services/beammeup\n/Users/steve.briggs/projects/operations/services/beammeup/.claude\n/Users/steve.briggs/projects/operations/services/beammeup/base\n/Users/steve.briggs/projects/operations/services/beammeup/base/bootstrap\n/Users/steve.briggs/projects/operations/services/beammeup/base/bootstrap/kustomization.yaml\n/Users/steve.briggs/projects/operations/services/beammeup/base/bootstrap/namespace.yaml\n/Users/steve.briggs/projects/operations/services/beammeup/base/bootstrap/service-account.yaml\n/Users/steve.briggs/projects/operations/services/beammeup/base/services\n/Users/steve.briggs/projects/operations/services/beammeup/base/services/deployment.yaml\n/Users/steve.briggs/projects/operations/services/beammeup/base/services/kustomization.yaml\n/Users/steve.briggs/projects/operations/services/beammeup/base/services/service.yaml\n/Users/steve.briggs/projects/operations/services/beammeup/Dockerfile\n/Users/steve.briggs/projects/operations/services/beammeup/go.mod\n/Users/steve.briggs/projects/operations/services/beammeup/internal\n/Users/steve.briggs/projects/operations/services/beammeup/internal/config\n/Users/steve.briggs/projects/operations/services/beammeup/internal/config/config.go\n/Users/steve.briggs/projects/operations/services/beammeup/internal/slack\n/Users/steve.briggs/projects/operations/services/beammeup/internal/slack/handler.go\n/Users/steve.briggs/projects/operations/services/beammeup/internal/slack/messages.go\n/Users/steve.briggs/projects/operations/services/beammeup/internal/state\n/Users/steve.briggs/projects/operations/services/beammeup/internal/state/store.go\n/Users/steve.briggs/projects/operations/services/beammeup/internal/teleport\n/Users/steve.briggs/projects/operations/services/beammeup/internal/teleport/client.go\n/Users/steve.briggs/projects/operations/services/beammeup/internal/teleport/watcher.go\n/Users/steve.briggs/projects/operations/services/beammeup/main.go","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false},"sourceToolAssistantUUID":"701fc457-42f4-478f-b01b-e8402c22d4f6","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"parentUuid":"6b6828fa-b84b-45ad-93e0-70eb074834ce","isSidechain":false,"message":{"model":"claude-sonnet-4-6","id":"msg_01A4JhVh9yJ6BMJhpNndMCwr","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"","signature":"EuwEClsIDBgCKkBRaFnt+8/NNnv/gD4XtV8qJ5zhG0tZmYiLAvsUCQICeJD2NxTxJd5/Eho4Wskd1H6W/WJQIU7OL7Vfnp+ltGxFMhFjbGF1ZGUtc29ubmV0LTQtNjgAEgzQdl3C5icbwrQhwYcaDB4nZ4UlWvo4hGmTciIwR+ybhZ4LBD7PhksxB564SdAatuYhlZDRIYLU9ZyFcTf8pF/LbsxKaQMwKB/5TrEWKr4DgSlDXDZNAZ8410n0RGye6UmW7dgMtHMqG0nXv6eN/awEUXomriTPlienB8n6j0J9bFTTWDkl9Jbo6rL/BFG04yeLXqt24cqspUs9I68DE34l0evSFplgvvyJVTYD2QSutQliNRpIaNAeNvV7FopkEdSMb/mJfvRMdQ2kSgK9PR0zXTCPUadkf+oXCT8zFZafK0ume1ECmep8RKETLAvqo43DERviUXP9KWql4fWJgjwwBedxaIpZfseVXv6a9hgZ859++Mx6r+PI0tph4a+NZ1ZWWId3sgVckrNundG8JJ4TZhL3CD/nWzlyRQLEzKVn3MeeJ/jgCUD/09IAqTkNU7Vu3xiA1kJpNHDyXem/E+6A5V6xvyg4VlDnhb22UqYAR7wB/ft9AaOhv8AuHMl/Ja8S6IrevK5v419NcQNWZzNcn6+9yPZ8VUy1LCFhhmHsRVUc/P1vOdV/12RZ19sOfHJqXwEWepjkcp12iGz7gWjMcxekGtMMt4Bt2GlxVG7QWAwPD/vacJ7lK7qneqKQZlbUpgSQ3Ur3ZszQIePQD496qWnTiyUwQa9d8mLs7KGA1ASbBLHf0ZFx7QUGD2MYAQ=="}],"stop_reason":"end_turn","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":752,"cache_read_input_tokens":77723,"output_tokens":806,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":752},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":806,"cache_read_input_tokens":77723,"cache_creation_input_tokens":752,"cache_creation":{"ephemeral_5m_input_tokens":752,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaHZfCNUeEupzs4EL3evm","type":"assistant","uuid":"8dc98b7e-3452-4940-a285-f2003a69b36d","timestamp":"2026-04-21T20:40:57.968Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"parentUuid":"8dc98b7e-3452-4940-a285-f2003a69b36d","isSidechain":false,"message":{"model":"claude-sonnet-4-6","id":"msg_01A4JhVh9yJ6BMJhpNndMCwr","type":"message","role":"assistant","content":[{"type":"text","text":"Here's a summary of what was built and what you need to do to get it running:\n\n---\n\n**What was built** — `services/beammeup/`:\n\n| Package | Purpose |\n|---|---|\n| `internal/teleport` | Long-lived gRPC watcher that streams pending access requests; `Approve`/`Deny` via `SetAccessRequestState` |\n| `internal/slack` | Posts formatted request cards with 3 buttons; handles interactive callbacks; opens modals for deny/more-info |\n| `internal/state` | In-memory map from Teleport request ID → Slack message (channel + timestamp) |\n| `internal/config` | Env-var config, fails fast on missing required values |\n\n**The interaction flow:**\n1. Teleport gets a pending access request → watcher fires → Slack card posted with [✓ Approve] [✗ Deny] [? Need More Info]\n2. **Approve** → async Teleport approval → message updated to outcome (buttons removed)\n3. **Deny** → modal opens for reason → async Teleport denial → message updated\n4. **Need More Info** → modal opens for question → posted as thread reply (original message + buttons stay live for later action)\n\n---\n\n**Setup steps before deploying:**\n\n**1. `go mod tidy`** — update `github.com/gravitational/teleport/api v16.4.0` in `go.mod` to match your Teleport cluster version first, then run:\n```bash\ncd services/beammeup && go mod tidy\n```\n\n**2. Teleport bot identity** — create a bot role and generate an identity file:\n```bash\n# Create a role that can read and approve/deny access requests\ntctl create -f bot-role.yaml\ntsh login --proxy=your-proxy:443 --user=beammeup-bot --out=identity\nkubectl create secret generic beammeup-teleport-identity \\\n --from-file=identity=./identity -n beammeup\n```\n\n**3. Slack app** — create an app at api.slack.com with:\n- OAuth scopes: `chat:write`, `chat:write.public`\n- Enable **Interactivity** → set Request URL to `https://your-ingress/slack/interactive`\n- Install to workspace, grab Bot Token + Signing Secret\n\n**4. Kubernetes secret** for Slack credentials:\n```bash\nkubectl create secret generic beammeup-secret \\\n --from-literal=SLACK_BOT_TOKEN=xoxb-... \\\n --from-literal=SLACK_SIGNING_SECRET=... -n beammeup\n```\n\n**5. Create a `deploy/` overlay** for your cluster (following the crow/fluxcannon pattern) and fill in `TELEPORT_PROXY_ADDR` and `SLACK_CHANNEL` in the configmap literals."}],"stop_reason":"end_turn","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":752,"cache_read_input_tokens":77723,"output_tokens":806,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":752},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":806,"cache_read_input_tokens":77723,"cache_creation_input_tokens":752,"cache_creation":{"ephemeral_5m_input_tokens":752,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaHZfCNUeEupzs4EL3evm","type":"assistant","uuid":"7bc8a227-dcaf-4987-85b3-2edff7c9a441","timestamp":"2026-04-21T20:41:09.701Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"parentUuid":"7bc8a227-dcaf-4987-85b3-2edff7c9a441","isSidechain":false,"type":"system","subtype":"turn_duration","durationMs":573441,"messageCount":60,"timestamp":"2026-04-21T20:41:09.731Z","uuid":"5a17ee26-420e-4944-88a7-034fdf9aa097","isMeta":false,"userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"parentUuid":"5a17ee26-420e-4944-88a7-034fdf9aa097","isSidechain":false,"type":"system","subtype":"away_summary","content":"Built a Slackbot service called beammeup that watches Teleport access requests and lets your team approve, deny, or request more info via Slack interactive buttons. Next: run go mod tidy after updating the teleport/api version in go.mod to match your cluster. (disable recaps in /config)","timestamp":"2026-04-21T20:44:13.232Z","uuid":"d13d1aa8-2afa-42e3-970f-65d0d61647ed","isMeta":false,"userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"type":"last-prompt","lastPrompt":"lets skip the jira integration altogether for now and just do the teleport request approval","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c"}
|
|
{"type":"permission-mode","permissionMode":"default","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c"}
|
|
{"parentUuid":"d13d1aa8-2afa-42e3-970f-65d0d61647ed","isSidechain":false,"promptId":"3fbdd7ce-2e92-436c-abf5-20d376d8a038","type":"user","message":{"role":"user","content":"<local-command-caveat>Caveat: The messages below were generated by the user while running local commands. DO NOT respond to these messages or otherwise consider them in your response unless the user explicitly asks you to.</local-command-caveat>"},"isMeta":true,"uuid":"8458ddc1-366d-4120-a60c-f62f20ea3585","timestamp":"2026-04-22T16:56:06.720Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"parentUuid":"8458ddc1-366d-4120-a60c-f62f20ea3585","isSidechain":false,"promptId":"3fbdd7ce-2e92-436c-abf5-20d376d8a038","type":"user","message":{"role":"user","content":"<command-name>/exit</command-name>\n <command-message>exit</command-message>\n <command-args></command-args>"},"uuid":"b1d12cea-1159-4b46-9e16-65c1a615a75c","timestamp":"2026-04-22T16:56:06.720Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"parentUuid":"b1d12cea-1159-4b46-9e16-65c1a615a75c","isSidechain":false,"promptId":"3fbdd7ce-2e92-436c-abf5-20d376d8a038","type":"user","message":{"role":"user","content":"<local-command-stdout>Catch you later!</local-command-stdout>"},"uuid":"5b7dc58d-4bd4-4496-8126-b396812bcf67","timestamp":"2026-04-22T16:56:06.720Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/operations/services/beammeup","sessionId":"62f772e3-4afa-46d0-8a31-68f4ea58fa5c","version":"2.1.116","gitBranch":"SRE-2757-crow"}
|
|
{"type":"file-history-snapshot","messageId":"b1d12cea-1159-4b46-9e16-65c1a615a75c","snapshot":{"messageId":"b1d12cea-1159-4b46-9e16-65c1a615a75c","trackedFileBackups":{"internal/state/store.go":{"backupFileName":"c58fd256c4b8c509@v2","version":2,"backupTime":"2026-04-22T16:56:06.753Z"},"base/bootstrap/kustomization.yaml":{"backupFileName":"a6c5f31125e63d1c@v2","version":2,"backupTime":"2026-04-22T16:56:06.753Z"},"main.go":{"backupFileName":"f4de01b8f32c0336@v2","version":2,"backupTime":"2026-04-22T16:56:06.753Z"},"internal/slack/messages.go":{"backupFileName":"f2e8e8e8360e2387@v2","version":2,"backupTime":"2026-04-22T16:56:06.753Z"},"base/services/service.yaml":{"backupFileName":"60bf5ba8da7cd193@v2","version":2,"backupTime":"2026-04-22T16:56:06.753Z"},"go.mod":{"backupFileName":"7855e872b17c4086@v2","version":2,"backupTime":"2026-04-22T16:56:06.753Z"},"Dockerfile":{"backupFileName":"cc204f7bb78fc32f@v2","version":2,"backupTime":"2026-04-22T16:56:06.753Z"},"base/bootstrap/service-account.yaml":{"backupFileName":"71cc67885243aa76@v2","version":2,"backupTime":"2026-04-22T16:56:06.753Z"},"internal/teleport/watcher.go":{"backupFileName":"9ef70819792e954b@v2","version":2,"backupTime":"2026-04-22T16:56:06.753Z"},"base/bootstrap/namespace.yaml":{"backupFileName":"98c0b81807e4f0ba@v2","version":2,"backupTime":"2026-04-22T16:56:06.753Z"},"internal/slack/handler.go":{"backupFileName":"1d9531458f978956@v2","version":2,"backupTime":"2026-04-22T16:56:06.753Z"},"base/services/kustomization.yaml":{"backupFileName":"e6092ca576a3b61b@v2","version":2,"backupTime":"2026-04-22T16:56:06.753Z"},"internal/teleport/client.go":{"backupFileName":"a344866818b86563@v2","version":2,"backupTime":"2026-04-22T16:56:06.753Z"},"internal/config/config.go":{"backupFileName":"988268b893814bd5@v2","version":2,"backupTime":"2026-04-22T16:56:06.753Z"},"base/services/deployment.yaml":{"backupFileName":"a39a6391ea81c4a7@v2","version":2,"backupTime":"2026-04-22T16:56:06.753Z"}},"timestamp":"2026-04-22T16:56:06.753Z"},"isSnapshotUpdate":false}
|