Skip to content

feat(sandbox): install AWS CLI v2 in sandbox image - #893

Merged
mslipper merged 2 commits into
paradigmxyz:mainfrom
johnsonjie:sandbox/install-aws-cli
Aug 4, 2026
Merged

feat(sandbox): install AWS CLI v2 in sandbox image#893
mslipper merged 2 commits into
paradigmxyz:mainfrom
johnsonjie:sandbox/install-aws-cli

Conversation

@johnsonjie

Copy link
Copy Markdown
Contributor

Summary

  • Install AWS CLI v2 in services/sandbox/Dockerfile, selecting the awscliv2 package matching the image's architecture (amd64x86_64, arm64aarch64), following the same arch-detection pattern already used for kubectl and Nushell in this file.
  • curl was already installed in the base package list; no change needed there.

Test plan

  • Validated the new RUN block's shell syntax with bash -n
  • CI image build (no outbound network access to Docker Hub in this sandboxed environment to run a full docker build locally)

🤖 Generated with Claude Code

Selects the awscliv2 package matching the image's dpkg architecture
(x86_64/aarch64), following the same pattern already used for kubectl
and Nushell in this Dockerfile.
@georgehao

Copy link
Copy Markdown

@mslipper could you review this pr? We use Centaur for testing on aws eks, need the AWS CLI to control the eks. This cli is really needed. I think it's a common cli

@mslipper
mslipper merged commit f98b2f8 into paradigmxyz:main Aug 4, 2026
15 of 23 checks passed
jamalavedra added a commit to openfort-xyz/centaur that referenced this pull request Aug 7, 2026
* test: cover Python workflow durability in CI (paradigmxyz#1236)

* feat: add raw company context queries (paradigmxyz#1237)

* fix(workflows): shut down Python host cleanly (paradigmxyz#1238)

* fix(workflows): shut down Python host cleanly

* fix(workflows): accept large host messages

* feat: scope company context reader user sources (paradigmxyz#1239)

* feat: scope company context reader user sources

* fix: retain Google subject context authorization

* test: strengthen company context reader RLS guards

* test(console): remove low-value view assertions (paradigmxyz#1241)

* fix(console): restore inline markdown links (paradigmxyz#1240)

* fix(console): restore inline markdown links

* fix(console): parse markdown placeholder indexes

* fix(console): preserve restored markdown fragments

* test(console): generalize markdown link regression

* fix(console): schedule Google Docs sync (paradigmxyz#1244)

* feat(console): promote principal identity fields (paradigmxyz#1249)

* feat(console): promote principal identity fields

* refactor(console): normalize principal identifiers

* revert(console): remove normalized principal identifiers

* fix(console): infer principal kinds from foreign IDs

* fix(console): require scoped Slack DM identifiers

* refactor(console): keep principal identity out of labels

* refactor(console): simplify principal label aliases

* fix(console): validate principal identity fields

* fix(console): support Slack enterprise identity scopes

* test: cover principal identity reconciliation

* fix: preserve principal identity compatibility

* fix: narrow principal kind backfill

* fix: validate reconciled Slack identities

* refactor: centralize principal identity promotion

* fix: validate MCP Slack identities

* fix: show principal identity labels in console

* fix(api-rs): label non-Slack principal kinds (paradigmxyz#1251)

* feat: add default role assignments (paradigmxyz#1250)

* feat: add default role assignments

* fix: preserve default roles when settings omit them

* feat(console): promote console user identity fields (paradigmxyz#1252)

* feat(console): promote console user identity fields

* fix(console): reference console users by database id

* fix(console): allow stale console user references

* refactor(console): centralize principal identity labels

* fix: require console and iron-proxy (paradigmxyz#1253)

* fix(chart): require console

* refactor(api-rs): always enable iron-proxy

* fix(chart): ignore removed enable values

* fix: use first-class principal identity fields (paradigmxyz#1263)

* chore: remove unused investmemos tool (paradigmxyz#1267)

Co-authored-by: Perry Dime <260989497+svc-paradigm@users.noreply.github.com>

* fix(console): keep active sidebar chats selected (paradigmxyz#1262)

* feat(sandbox): install AWS CLI v2 in sandbox image (paradigmxyz#893)

Selects the awscliv2 package matching the image's dpkg architecture
(x86_64/aarch64), following the same pattern already used for kubectl
and Nushell in this Dockerfile.

* chore: remove unused invest intake tool (paradigmxyz#1268)

Co-authored-by: Perry Dime <260989497+svc-paradigm@users.noreply.github.com>

* feat: add resumable Browserbase DocSend tooling (paradigmxyz#1272)

* fix: route DocSend CDP through HTTPS proxy (paradigmxyz#1276)

* fix(docsend): encode Browserbase session metadata (paradigmxyz#1277)

* fix(docsend): encode browserbase session metadata

* refactor(docsend): use base64 session metadata

* refactor(docsend): require encoded session metadata

* refactor(docsend): simplify base64 decoding

---------

Co-authored-by: Perry Dime <260989497+svc-paradigm@users.noreply.github.com>

* feat(slackbotv2): split response metadata controls (paradigmxyz#1275)

* feat(slackbotv2): decouple response metadata from Console

* feat(slackbotv2): split response metadata controls

* chore(chart): bump release to 0.1.110

* feat(slackbotv2): add response metadata modes

---------

Co-authored-by: Liam Horne <liam@lihorne.com>

* fix(docsend): allow Postmark verification links (paradigmxyz#1278)

* fix(slack): keep reactions when serializing messages (paradigmxyz#1264)

_serialize_message builds a fixed dict from the Slack payload and drops
everything it doesn't name, including the reactions array. Every read path
funnels through it (get_channel_history_page, get_thread_replies_page, and
the search fallback fetch), so no caller of the serialized shape can see
reaction signal at all.

That's a real blind spot in channels where people answer by reacting rather
than replying. A message with 12 check-marks and no replies serializes to
reply_count 0, which reads as "nobody responded" when the opposite is true.
An agent working off that shape either reports the reply count as the roster
or has to admit it can't answer.

The data is already on the wire and needs no new OAuth scope. reactions:read
gates the reactions.* methods, while the reactions array on a
conversations.history payload rides along with channels:history, which this
tool already requires. feedback.py:372 has been reading them straight off the
raw responses this way for its thumbsup/thumbsdown signal. Only the
serializer was throwing them away.

Consistent across both read paths: the API server proxy hands back an
untyped serde_json::Value, so reactions survive it and the proxy and direct
fetches agree.

Defaults to [] like reply_users so callers can index without a guard. Slack
caps the per-reaction users array, so count can exceed len(users); anyone
needing a complete reactor list on a heavily reacted message still wants
reactions.get and the reactions:read scope it requires. The comment says so
at the call site.

Co-authored-by: Aadharsh Pannirselvam <19518661+oddharsh@users.noreply.github.com>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>

* feat(githubbot): produce durable workflow events from CI and review webhooks (paradigmxyz#1248)

* feat(githubbot): produce durable workflow events from CI and review webhooks

Add a workflow-event producer module, independent of the owned-PR manager:
lifecycle webhooks are translated into curated durable events on api-rs
(POST /api/workflows/events) that workflows suspend on via
ctx.wait_for_event. Emission runs before any owned-PR gating, because
workflow waiters are not bot-owned PRs.

- ci-completed (<owner>/<repo>:<head_sha>, payload {failed, failing})
  fires once every check for the sha has settled. The settled evaluation
  reads GitHub's GraphQL statusCheckRollup — the same aggregate gh pr
  checks uses, covering check runs and commit statuses including EXPECTED
  — because fine-grained PATs get an ungrantable 403 on the REST
  check-runs list. An unreadable rollup is unknown, never settled, and a
  settled-green rollup is confirmed by one delayed re-read before
  emission: a push can read SUCCESS moments before the real suite
  registers.
- review-submitted (<owner>/<repo>:pr-<n>:<head_sha>:<reviewer>, payload
  {review_id, state}) fires on every submitted review. Author-scoped
  correlations give each reviewer an independent row, so a waiter keys on
  exactly the author it cares about with no emission-side config.

Durable events are immutable per correlation (first write wins), which
forces two curation rules documented in the module header: an event must
be semantically complete when emitted (the settled gate), and anything a
waiter filters on belongs in the correlation. Correlations are computable
from data the waiter already has and are lowercased so case drift between
a PR URL slug and repository.full_name can never miss.

The manager shares the settled evaluation so an owned PR is not evaluated
twice per CI event. Off by default (githubbot.workflowEvents /
GITHUBBOT_WORKFLOW_EVENTS); the api-rs URL and service token are already
wired for the session API.

* fix(githubbot): harden workflow event delivery

* refactor(githubbot): simplify workflow event code

* chore(deps): bump solid_queue from 1.5.0 to 1.6.0 in /services/console in the ruby-dependencies group (paradigmxyz#1259)

chore(deps): bump solid_queue

Bumps the ruby-dependencies group in /services/console with 1 update: [solid_queue](https://github.com/rails/solid_queue).


Updates `solid_queue` from 1.5.0 to 1.6.0
- [Release notes](https://github.com/rails/solid_queue/releases)
- [Commits](rails/solid_queue@v1.5.0...v1.6.0)

---
updated-dependencies:
- dependency-name: solid_queue
  dependency-version: 1.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: ruby-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Add Datadog observability tool (paradigmxyz#811)

* Add LLVM 22 to sandbox image (paradigmxyz#737)

* feat: add OpenAI workflow dependency (paradigmxyz#1284)

* feat: add OpenAI workflow dependency

* fix: require OpenAI SDK 2.53

* fix(proxy): preserve Codex routing headers (paradigmxyz#1034)

* fix: restore light code block contrast (paradigmxyz#1217)

* fix(sandbox-k8s): fail closed on resume capability NetworkPolicies (paradigmxyz#1197)

* fix(harness): use access token auth for Nanocodex (paradigmxyz#1289)

* fix(harness): use ChatGPT auth for Nanocodex

* fix(api): share Codex auth mode with Nanocodex

* fix(harness): reject unsupported chatgpt auth alias

---------

Co-authored-by: Liam Horne <liam@lihorne.com>

* feat(attio): add file uploads (paradigmxyz#1290)

* test: wait for workflow handler before removal (paradigmxyz#1292)

* feat: add company context embedding workflow (paradigmxyz#1286)

* feat: add company context embedding workflow

* test: avoid SQL implementation assertions

* chore: bump Helm chart version

* fix: use scoped database credentials for embeddings

* fix: limit embedding workflow database pool

* fix: prevent embedding pipeline starvation

* refactor: truncate embedding inputs by character count

* refactor: store embedding failures inline

* fix: allow manual embedding workflow runs

* fix: skip unused workflow host database pool

* Revert "fix: skip unused workflow host database pool"

This reverts commit 04e84b3.

* fix: use direct embedding database connection

* fix: preserve GitHub Git authentication scheme (paradigmxyz#1283)

* fix: preserve GitHub Git authentication scheme

* refactor: model GitHub credentials by kind

* fix: preserve credential kind on legacy updates

* feat(googlechatbot): match Slack response metadata controls

* test: align upstream compatibility checks

* test(sqlx): avoid duplicate RLS fixtures

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Matthew Slipper <me@matthewslipper.com>
Co-authored-by: Derek Cofausper <256792747+decofe@users.noreply.github.com>
Co-authored-by: Perry Dime <svc_ai@paradigm.xyz>
Co-authored-by: Perry Dime <260989497+svc-paradigm@users.noreply.github.com>
Co-authored-by: johnsonjie <32984960+johnsonjie@users.noreply.github.com>
Co-authored-by: Liam Horne <liam@lihorne.com>
Co-authored-by: Aadharsh  Pannirselvam <aadharsh2010@gmail.com>
Co-authored-by: Aadharsh Pannirselvam <19518661+oddharsh@users.noreply.github.com>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Co-authored-by: Connor Justice <connorjustice@gmail.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: odysseas.eth <odyslam@gmail.com>
Co-authored-by: Felix-Ayush <67006255+Ayush7614@users.noreply.github.com>
Co-authored-by: Akshaan Kakar <akshaan.crackers@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants