Skip to content

fix(dev): use mounted AWS login cache in containers - #2613

Closed
proton0210 wants to merge 1064 commits into
aws:refactorfrom
proton0210:fix/2606-container-login-cache
Closed

proton0210 wants to merge 1064 commits into
aws:refactorfrom
proton0210:fix/2606-container-login-cache

Conversation

@proton0210

@proton0210 proton0210 commented Oct 18, 2026 •

Copy link
Copy Markdown

Superseded by #2616, which targets refactor and ports this fix to its ContainerDevRunner implementation. Validation and the current code are in #2616.

Description

Container agents using aws login can fail with LoginTokenLoadError because botocore looks for its login cache under the container user's home even though the host AWS directory is mounted at /aws-config.

In ContainerDevRunner.run(), default AWS_LOGIN_CACHE_DIRECTORY to /aws-config/login/cache whenever that AWS directory is mounted. A caller-supplied container cache path takes precedence. The value is written to the existing protected environment file, and the credential directory stays mounted read-only.

This change targets refactor, based on c480abb (1.0.0-rc.6), as requested in #2606. The fix and regression tests use that branch's src/core/dev implementation and Bun test harness.

Related Issue

Closes #2606.

Documentation PR

Not applicable: restores an existing credential source without adding a CLI option.

Type of Change

  • Bug fix

Testing

  • Regression first: the shared-config assertion and all three Docker/Podman/Finch login-cache tests failed before the production change. All 34 container-runner tests pass with the fix, including explicit container cache overrides, environment-file cleanup, and existing explicit-credential behavior.

  • Full bun test: 4,578 tests passed across 307 files, 6 snapshots, zero failures.

  • bun run typecheck, bun run lint:check, bun run format:check, bun run build, and bun run secrets:check pass. git diff --check passes.

  • bun run audit: no vulnerabilities found across 797 packages, using the branch's existing single-advisory exclusion.

  • Built Node bundle smoke checks: --version reports 1.0.0-rc.6; --help succeeds.

  • Tested with Bun 1.4.0 and Node 24.19.0, using bun install --frozen-lockfile; no dependency or lockfile changes.

  • Relevant live AWS/container E2E tests were not run. The change is local credential-cache path configuration, covered through injected container-process boundaries with synthetic AWS config and temporary environment files. No real login tokens were read, refreshed, or modified.

  • I ran bun test

  • I ran the relevant end-to-end tests with bun run test:e2e, or explained why they are not applicable

  • I ran bun run typecheck

  • I ran bun run lint:check

  • I ran bun run format:check

  • I ran bun run build

Checklist

  • I have read the CONTRIBUTING document
  • I have added any necessary tests that prove my fix is effective or my feature works
  • I have updated the documentation accordingly
  • I have added an appropriate example to the documentation to outline the feature, or no new docs are needed
  • My changes generate no new warnings
  • Any dependent changes have been merged and published

By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

jesseturner21 and others added 30 commits May 29, 2026 17:20
Adds reference sections for commands that exist on main but were not
documented in docs/commands.md. The doc now covers every shipping CLI
verb plus the cb alias.

Added sections:
- add dataset / add config-bundle / add ab-test (resource subcommands)
- remove dataset / remove config-bundle / remove ab-test (in remove examples)
- run batch-evaluation, run recommendation, recommendations history
- stop (batch-evaluation, ab-test)
- archive (batch-evaluation, recommendation)
- ab-test (top-level details command)
- config-bundle (versions, diff, create-branch)
- dataset (download, publish-version, remove-version)
- cb alias added to the alias table

Format mirrors the existing sections: short description, example block,
flag table. Flag tables generated from --help output on main; preview
commands tagged with [preview].
* feat: instrument config command

* fix: simplify set path by validing the partial instead of the merged

* refactor: unify parsing logic with telemetry for common abstraction

* fix: adjust tests to include quotes for strings

* docs: update display text that telemetry is now active

* fix(config): avoid overwriting config when not parsable

* feat(telemetry): wire endpoint resolution with constant default and overrides

* test(config): exit non-zero on corrupt config

* fix(config): show friendly error with path on config read/write failures

* refactor(telemetry): remove enable/disable subcommands in favor of agentcore config

* fix(config): regenerate installationId when persisted value is not a valid UUID

* fix(telemetry): suppress first-run notice when telemetry is disabled

* test(integ): isolate spawned CLI from host telemetry env

* fix(telemetry): use .jsonl extension for audit files

* docs(telemetry): correct stale comment on OtelMetricSink try/catch

* test(config): remove redundant integ tests and fix type error

* docs: strip noisy comments from telemetry instrumentation

* fix(test): update telemetry helper to search the correct files

* chore(telemetry): remove dead commands from schema

* docs: remove double quote in comment

* fix: swap telemetry tests to existing metric
…s#1397)

* fix: Migrate Python Dockerfile from bookworm to trixie (CVE-2026-42010)

Switch base image from python:3.12-slim-bookworm to python:3.12-slim-trixie
to address CVE-2026-42010 (GnuTLS RSA-PSK authentication bypass, CVSS 9.8).

Debian Trixie (13) became stable on May 16, 2026 and includes the GnuTLS
security fix (DLA-4595-1). Bookworm full support ends June 2026.

sim: https://t.corp.amazon.com/D448133494

* fix: update hardcoded bookworm reference in import fallback Dockerfile

The inline Dockerfile generated during `agentcore import` for Container
builds (when no starter-toolkit Dockerfile exists) still referenced
bookworm, leaving users on that path vulnerable to CVE-2026-42010.

* feat: warn during deploy when Dockerfile uses deprecated bookworm base image

Emits a console warning during preflight validation if a Container
agent's Dockerfile still references slim-bookworm, guiding existing
customers to update for CVE-2026-42010.

* fix: scope deprecated base image warning to FROM lines and extract shared constant

- Only match deprecated images on FROM lines to avoid false positives from
  comments, labels, or ENV vars
- Make warning message generic ("Trixie-based variant") instead of
  Python-specific
- Extract PYTHON_BASE_IMAGE constant to avoid duplication across template
  and import action

* refactor: use map for deprecated base images with per-image messages

Addresses review feedback — each deprecated image now has its own
warning message, so future additions won't display unrelated CVE text.
feat: add invoke APIs for agent inspector (aws#1326)

Checks for `target=deployed` query param on invocation apis from agent inspector to wire requests through to deployed runtime instead of locally run agents
google-genai 2.0.0+ introduced breaking API changes (vertexai→enterprise
rename, new Interactions API structure). Fresh deploys on June 1 started
resolving to google-genai 2.7.0 via unpinned transitive dependencies,
causing runtime 500 errors on all Gemini-based e2e tests.

Pin google-genai to < 2.0.0 across all GoogleADK and LangGraph Gemini
templates to prevent the incompatible major version from being installed.
* fix: disable gemini invoke tests temporarily

* chore: fix formatting on e2e test files
* feat(workflows): add closed-PR comment redirect for COE AI-7

Add closed-pr-comment.yml: detects comments on closed PRs by
non-maintainers, posts a redirect to the issue tracker, and pages
oncall via the existing SLACK_WEBHOOK_URL.

Update slack-issue-notification.yml: switch to injection-safe
env+toJSON pattern and emit a uniform 20-key payload (with event_type
discriminator) so the Slack workflow can branch on event type.

COE AI-7: an external user reported the SDK SPII OTEL leak by
commenting on a closed revert PR; oncall does not monitor closed-PR
comments, so the report was missed for ~20 hours.

* fix(workflows): address reviewer feedback on closed-PR redirect

- Gate Slack notification on already_posted so oncall is paged only on
  the first external comment per PR. Subsequent comments don't page —
  the redirect comment has already directed the commenter to issues.
- Add per-PR concurrency group so the marker-comment dedup is race-free
  (cancel-in-progress: false to ensure later runs still execute against
  the just-posted marker).
- Inline steps.pr_state.outputs.state in the Slack payload directly
  rather than routing it through env: to avoid step-level evaluation
  ambiguity. The value is enum-typed (merged|closed) so injection-safe.

* refactor(workflows): consolidate GitHub->Slack notifications into one file

Address review feedback:
- Merge closed-pr-comment.yml and slack-issue-notification.yml into a
  single github-slack-notifications.yml with two triggers (issues +
  issue_comment) and two jobs. One central place to control the
  GitHub -> Slack integration, as requested in review.
- Remove internal incident references from the public workflow; the
  header now describes what the workflow does, not why it was created.

No behavior change: both jobs emit the same 20-key payload the Slack
workflow already consumes, gated and deduped exactly as before.
…ws#1442)

The release workflow's "Update snapshots" step fails because
withCommandRunTelemetry triggers real filesystem and network I/O
(createClient → getOrCreateInstallationId → mkdir/writeFile, plus
OtelMetricSink construction and flush) that doesn't resolve within
the 50-100ms test delays.

build-and-test.yml already sets AGENTCORE_TELEMETRY_DISABLED=1 at the
workflow level, preventing this. The release workflow was missing it.

Co-authored-by: jariy17 <tjariy+jariy17@users.noreply.github.com>
…ws#1444)

The prerelease-tarball workflow creates a floating `prerelease` tag on
every push to main. When bump-version.ts auto-generates the changelog,
`git describe --tags --abbrev=0` picks up this tag instead of the last
version tag, resulting in `git log prerelease..HEAD` returning 0 commits
and an empty changelog section.

Add `--match 'v*'` to only consider version tags.

Co-authored-by: jariy17 <tjariy+jariy17@users.noreply.github.com>
…ws#1424)

PR aws#1015 removed a stale CONFIG_DIR exclusion from the zip-stage
collectFiles helpers because the zip operates on the staging directory,
not the project root, and the project config dir is filtered out at the
copy stage. PR aws#1068 reintroduced the check via a merge resolution that
took the wrong side.

Any Python package whose top-level module is named agentcore (i.e.
staging/agentcore/) gets silently dropped from the deployment artifact
on main.

Restore the PR aws#1015 state: drop the CONFIG_DIR check from collectFiles
and collectFilesSync and drop the now-unused rootDir parameter and call
sites. Existing copy-stage exclusion for the project config dir is
unaffected.

Add zip-stage regression tests under issue aws#1408.

Closes aws#1408
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* fix: agentcore dev orphaned processes

* fix: windows issues

* fix: mock isWindows false
)

* refactor(telemetry): avoid rewrapping exceptions in results

* fix(import): use result type to wrap error on invalid config

* fix: avoid throws within blocks that return results

* fix(logs): catch loadDeployedProjectConfig throws and update telemetry tests for re-throw

* refactor(import): narrow addToProjectSpec return type to ImportResourceResult
* refactor: move command descriptions out of TUI module

* fix: avoid duplicate import from constants.ts

* fix(format): run npm run format
* feat: add EFS and S3 filesystem mount support (BYO agents and harness)

Adds session storage, EFS access point, and S3 Files access point
filesystem mounts across the full stack: CLI flags, TUI wizard steps,
schema validation, CDK IAM permissions, and generated agent templates.

CLI (agentcore create / add agent / add harness):
- --session-storage-mount-path, --efs-access-point-arn/--efs-mount-path,
  --s3-access-point-arn/--s3-mount-path flags on create and add agent
- Harness create path wires filesystem flags through to harness.json
- Sync validation: ARN format, paired flags, max mounts, VPC requirement
  in both validateCreateOptions and validateCreateHarnessOptions
- Async validation: L1 access point exists, L2 VPC/AZ topology, L3 SG
  in agent create, add agent, and harness create paths
- Level 3 SG check uses EFS/S3 ARN region (not agent region) for mount
  target SG queries; validation reads deployment region from aws-targets.json

TUI wizard:
- EFS/S3 two-step ARN→path entry with add/edit/remove review screens
- Shared useFilesystemMountState hook (generate wizard + BYO + harness)
- Shared buildMountListItems helper
- Session-storage advanced setting in harness wizard includes EFS/S3 steps
- VPC warning and validation on harness EFS/S3 ARN steps
- Harness TUI add flow forwards efsAccessPoints/s3AccessPoints to primitive

Schema:
- FilesystemConfigurationSchema union (sessionStorage | efsAccessPoint |
  s3FilesAccessPoint) with z.strictObject, duplicate path detection,
  max-count enforcement, VPC requirement
- EFS_ACCESS_POINT_ARN_PATTERN / S3_FILES_ACCESS_POINT_ARN_PATTERN
  constants shared between CLI validators and Zod schema
- HarnessSpec gains efsAccessPoints/s3AccessPoints with VPC enforcement
  and duplicate mount path validation

CDK / deploy:
- AgentCoreRuntime: typed filesystemConfigurations props (aws-cdk-lib 2.257)
- AgentCoreHarnessRole: EFS ClientMount/ClientWrite and S3 Files
  ClientMount/ClientWrite IAM policies when mounts are configured
- harness-mapper writes all three filesystem types; hasFilesystem uses
  correct boolean coercion; mount paths normalized (trailing slash stripped)
- Vended cdk-stack.ts and bin/cdk.ts include new HarnessConfig fields

Templates:
- HTTP, A2A, AGUI, MCP Python templates render file_read/file_write/
  list_files filesystem tools via {{#if needsOs}} blocks
- needsOs uses || not ?? so S3-only agents correctly generate tools
- EFS ARN regex constants shared (single source of truth)
- regionFromEfsArn/regionFromS3FilesArn merged into single regionFromArn

Tests:
- filesystem-utils.test.ts: ARN format, path validation, pairing, mounts
- filesystem-roundtrip.test.ts, filesystem-error-quality.test.ts: schema
- harness-mapper.test.ts: EFS, S3, combined filesystem mapping
- validate.test.ts: 16 new EFS/S3 validation cases for create path
- harness-validate.test.ts: 12 new cases for harness create path
- buildMountListItems.test.ts: 6 cases for mount list item builder
- schema-mapper.test.ts: 12 filesystem configuration mapping cases
- useFilesystemMountState.test.tsx: 15 hook handler tests
- computeByoSteps.test.ts: filesystem step inclusion
- useGenerateWizard.test.tsx: EFS/S3 flow, edit/remove, deselect

* fix: address PR review comments on filesystem mount support

- Extract duplicated EFS/S3 mount resolution and validation logic from
  handleCreateCLI and handleCreateHarnessCLI into a shared
  resolveAndValidateFilesystemMounts() helper in filesystem-utils.ts
- Fix path traversal vulnerability in _safe_resolve: append os.sep
  before startswith check to prevent prefix collision (e.g. /mnt/a
  incorrectly matching /mnt/abc/secret)
- Add JSDoc describing L1/L2/L3 validation levels on
  validateFilesystemMountsConfiguration
- Add tests for buildFilesystemConfigurations and
  resolveAndValidateFilesystemMounts
* fix(logs): throw modeled exceptions

* feat(cli): wire up logs telemetry
…1461)

* feat: add BYO filesystem e2e test and supporting infrastructure

- Add strands-bedrock-byo-filesystem.test.ts: e2e test for EFS and S3
  Files mounts with unique file content assertion
- Add e2e-tests/fixtures/filesystem/setup_byo_filesystem.py: one-time
  setup script to provision VPC, EFS, S3 Files access points in AWS
- Extend E2EConfig with apiKeyEnvVar, requiredEnvVars, efsAccessPoints,
  s3AccessPoints, networkConfig, invokePrompt, invokeResponseCheck
- Fix VPC warning in invoke action to suppress when --json is passed
- Add filesystem env vars to e2e-tests.yml env blocks
- Add filesystem resources fixture file

* fix: address PR review comments on byo-filesystem e2e test

- Fix invokeResponseCheck to assert response is truthy before running
  the check — previously silently skipped on empty/undefined response
- Extend filesystem test prompt to write and read unique tokens on both
  EFS (/mnt/efs) and S3 Files (/mnt/s3) mounts, asserting both appear
  in the response so a misconfigured S3 mount is caught
…54 (aws#1465)

aws-cdk-lib@2.258.0 (published 2026-06-04) bundles
cloud-assembly-schema ^54.0.0, so freshly-created CDK projects now write
schema-54 manifests. The CLI's bundled @aws-cdk/toolkit-lib@1.24.0 reads
only up to schema 53, so synth fails with AssemblyVersionMismatch
("Maximum schema version supported is 53.x.x, but found 54.0.0").

Bump @aws-cdk/toolkit-lib ^1.16.0 -> ^1.28.0 (resolves the bundled reader
to 1.28.0, whose nested cloud-assembly-schema is 54.2.0) and regenerate
npm-shrinkwrap.json. 1.28.0 reads schema 54 and all of 53 — forward
compatible — and is an API-compatible drop-in (no source changes).

Also bump the generated template's aws-cdk devDep 2.1100.1 -> 2.1126.0 so
the manual `npm run cdk` escape hatch can also read schema 54.

Verified by reproducing the customer scenario: a fresh project resolving
aws-cdk-lib@2.258.0 writes a 54.0.0 manifest, and `agentcore deploy
--dry-run` now synthesizes cleanly (Synthesize CloudFormation: SUCCESS).
…support (aws#1464)

* feat: add sync workflow

* fix: formatting

* fix: only sync to main branch

* fix: codeql permissions

* fix(ci): exclude .github/workflows/ from public repo sync (#54)

GITHUB_TOKEN lacks the 'workflows' permission, so pushing workflow
file changes from the public repo causes the sync to fail. Use
--no-commit --no-ff and restore .github/workflows/ from HEAD before
committing, in both the clean merge and conflict paths.

* chore: sync with public/main (2026-04-27) (#143)

* feat: add GitHub Action for automated PR review via AgentCore Harness (#934)

* feat: add GitHub Action for automated PR review via AgentCore Harness

Adds a workflow that reviews PRs using Bedrock AgentCore Harness.
The harness runs an AI agent in an isolated microVM with gh, git,
and pre-cloned repos that fetches PR diffs and posts review comments.

Workflow:
- Triggers on PR open/reopen for agentcore-cli-devs team members
- Supports manual workflow_dispatch for any PR URL
- Adds/removes ai-reviewing label during review
- Authenticates via GitHub OIDC to assume AWS role

Files:
- .github/workflows/pr-ai-review.yml — main workflow
- .github/scripts/python/harness_review.py — harness invocation script
- .github/scripts/python/harness_config.py — config from env vars
- .github/scripts/models/ — local boto3 service model (InvokeHarness
  not yet in standard boto3)

Required secrets:
- HARNESS_AWS_ROLE_ARN — IAM role ARN for OIDC
- HARNESS_ACCOUNT_ID — AWS account ID
- HARNESS_ID — Harness ID

* refactor: replace local service model with raw HTTP + SigV4 signing

Eliminates the 220KB bundled service model by using direct HTTP requests
with SigV4 authentication to invoke the harness endpoint. No extra
dependencies needed — urllib3, SigV4Auth, and EventStreamBuffer are all
part of botocore/boto3.

Rejected: invoke_agent_runtime API | server rejects harness ARNs with ResourceNotFoundException
Confidence: high
Scope-risk: moderate

* refactor: inline harness config into review script

Remove separate harness_config.py — env vars are read directly in
harness_review.py. One less file to maintain, config is still
driven entirely by environment variables set in the GitHub workflow.

* refactor: extract invoke_harness helper for cleaner main flow

* refactor: simplify config and improve script readability

- Replace HARNESS_ACCOUNT_ID + HARNESS_ID with single HARNESS_ARN env var
- Extract prompts into separate .md files in .github/scripts/prompts/
- Extract stream parsing into print_stream() function
- Add close_group() helper to deduplicate ::group:: bookkeeping

* refactor: separate event parsing from display logic

Extract parse_events() generator to handle binary stream decoding,
keeping print_stream() focused on formatting and log groups.

* docs: add explanatory comments to harness review functions

* refactor: derive region from HARNESS_ARN instead of separate env var

Eliminates HARNESS_REGION env var — the region is extracted from the
ARN directly, so there's no risk of a mismatch causing confusing
SigV4 auth errors.

* chore: rename label to agentcore-harness-reviewing

* refactor: move auth check to job level so entire review is skipped early

Split into authorize + ai-review jobs. The ai-review job only runs
if the PR author is authorized (team member or write access) or if
triggered via workflow_dispatch. Removes repeated if conditions from
every step.

* chore: exclude AI prompt templates from prettier

Prompt markdown files use intentional formatting that prettier
would reflow, breaking the prompt structure.

* fix: buffer streaming text to avoid per-token log lines in GitHub Actions (#946)

Each text delta from the harness was printed individually with flush,
creating a separate log line per token. Now text is buffered and
flushed as complete lines at block boundaries.

* fix: allow code-based evaluators in online eval configs (#947)

* fix: allow code-based evaluators in online eval configs

Remove restrictions that blocked code-based evaluators from being used
in online evaluation configs. The service now supports code-based
evaluators for online evaluation.

Changes:
- Remove code-based evaluator block in OnlineEvalConfigPrimitive
- Remove code-based evaluator validation in schema superRefine
- Remove code-based evaluator filter in TUI evaluator picker

* style: fix prettier formatting

* fix: add TTY detection before TUI fallbacks to prevent agent/CI hangs (#949)

* fix: add TTY detection before TUI fallbacks to prevent agent/CI hangs

When commands are invoked without flags in non-interactive environments
(CI, piped stdin, agent automation), the CLI falls through to Ink TUI
rendering which hangs indefinitely. Add a requireTTY() guard at every
TUI entry point that checks process.stdout.isTTY and exits with a
helpful error message directing users to --help for non-interactive flags.

Closes #685

* fix: check both stdin and stdout isTTY in requireTTY guard

The hang from #685 is caused by stdin not being a TTY (Ink reads
keyboard input from stdin), not stdout. Check both stdin and stdout
so the guard fires for piped stdin, redirected stdout, and CI
environments where both are non-TTY.

* fix: agentcore dev not working in windows (#951)

* fix: use pull_request_target for fork PR support (#958)

* fix: make label step non-blocking for fork PRs

Fork PRs get read-only GITHUB_TOKEN regardless of workflow permissions,
causing the addLabels API call to fail with 403. This crashed the entire
job before the review could run. continue-on-error lets the review
proceed even when labeling fails.

* fix: use pull_request_target for full write access on fork PRs

pull_request gives a read-only GITHUB_TOKEN for fork PRs, preventing
labels and secrets from working. pull_request_target runs in the base
repo context with full permissions. This is safe because we never
check out or execute fork code — the harness fetches the PR diff via
the GitHub API.

* fix: lower eventExpiryDuration minimum from 7 to 3 days (closes #744) (#956)

The AWS CreateMemory API allows a minimum of 3 days, but the CLI schema
was rejecting values below 7. Update the Zod schema, LLM compacted
types, import clamping logic, and all related tests.

* fix: display session ID after CLI invoke completes (#957)

* fix: display session ID after CLI invoke completes (closes #664)

The streaming and non-streaming invoke responses include a session ID
from the runtime, but the CLI paths discarded it. Now prints the
session ID and a resume command hint after invoke output.

* fix: include sessionId in AGUI protocol invoke result

* test: add browser tests for agent inspector (#938)

* feat: add telemetry schemas and client (#941)

* chore: bump version to 0.11.0 (#967)

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>

* fix(invoke): auto-generate session ID for bearer-token invocations (#953)

Closes #840

When invoking an agent with a bearer token (OAuth/CUSTOM_JWT) and no
session ID, `AgentCoreMemoryConfig` raised a Pydantic validation error
because `session_id=None` is rejected. Unlike SigV4 callers, bearer-token
callers do not get a server-side auto-generated runtime session ID.

Two-layer fix:

1. CLI synthesizes a UUID in `invoke` action when `--bearer-token` is set
   and `--session-id` is missing, using the existing `generateSessionId`
   helper. Covers both explicit `--bearer-token` and the CUSTOM_JWT
   auto-fetch path.

2. Strands memory session templates (http, agui, a2a) synthesize a UUID
   when `session_id` is falsy before constructing AgentCoreMemoryConfig.
   Protects direct runtime callers (curl, custom apps) who forget the
   `X-Amzn-Bedrock-AgentCore-Runtime-Session-Id` header.

Snapshot tests updated.

* fix: show 'Computing diff changes...' step during deploy diff phase (#952)

The deploy TUI appeared frozen for 5-15 seconds between preflight
completion and 'Publish assets' while cdkToolkitWrapper.diff() ran
silently with no step marked as running.

Add a dedicated pre-deploy diff step that transitions running -> success
around the diff call so StepProgress always has something to highlight.

Closes #781

* test: split browser tests into its own job, fix logs path (#975)

* feat(invoke): add --prompt-file and stdin support for long prompts (#974)

* feat(invoke): add --prompt-file and stdin support for long prompts

Long prompts hit shell argument limits (E2BIG, typically 128KB-2MB)
when passed as positional args. This adds two new sources:

- --prompt-file <path>: read prompt from a file
- piped stdin: when no prompt is given and stdin is not a TTY,
  read the prompt from stdin

Precedence is hybrid and backward-compatible:
  --prompt > positional > --prompt-file > stdin

--prompt-file combined with piped stdin content returns an explicit
collision error rather than silently picking one.

Closes #686

* docs(invoke): document --prompt-file and stdin support

* fix(import): remove experimental warning from import command (#977)

The import feature has stabilized and no longer needs the experimental label.

* fix: duplicate header flash and help menu truncation (closes #895, closes #637) (#955)

- Return null during brief transitional phases to prevent Ink from
  rendering a header that gets immediately replaced by a different frame
- Consolidate CreateScreen phases into a single Screen mount
- Make help menu description width responsive to terminal size
- Remove hardcoded 50-char description truncation limit

* test: configure git in browser tests workflow (#976)

* feat: add project-name option to create (#969)

* Add project-name option to create

* fix: address review feedback — restore name description and move backfill logic

* ci: bump the github-actions group across 1 directory with 4 updates (#964)

Bumps the github-actions group with 4 updates in the / directory: [aws-actions/configure-aws-credentials](https://github.com/aws-actions/configure-aws-credentials), [actions/github-script](https://github.com/actions/github-script), [softprops/action-gh-release](https://github.com/softprops/action-gh-release) and [slackapi/slack-github-action](https://github.com/slackapi/slack-github-action).


Updates `aws-actions/configure-aws-credentials` from 5 to 6
- [Changelog](https://github.com/aws-actions/configure-aws-credentials/blob/main/CHANGELOG.md)
- [Commits](https://github.com/aws-actions/configure-aws-credentials/compare/v5...v6)

Updates `actions/github-script` from 8 to 9
- [Commits](https://github.com/actions/github-script/compare/v8...v9)

Updates `softprops/action-gh-release` from 2 to 3
- [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md)
- [Commits](https://github.com/softprops/action-gh-release/compare/v2...v3)

Updates `slackapi/slack-github-action` from 3.0.1 to 3.0.2
- [Release notes](https://github.com/slackapi/slack-github-action/releases)
- [Changelog](https://github.com/slackapi/slack-github-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/slackapi/slack-github-action/compare/v3.0.1...v3.0.2)

---
updated-dependencies:
- dependency-name: actions/github-script
  dependency-version: '9'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
- dependency-name: aws-actions/configure-aws-credentials
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
- dependency-name: slackapi/slack-github-action
  dependency-version: 3.0.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
- dependency-name: softprops/action-gh-release
  dependency-version: '3'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
...

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

* chore(deps-dev): bump aws-cdk-lib (#962)

Bumps the aws-cdk group with 1 update in the / directory: [aws-cdk-lib](https://github.com/aws/aws-cdk/tree/HEAD/packages/aws-cdk-lib).


Updates `aws-cdk-lib` from 2.248.0 to 2.250.0
- [Release notes](https://github.com/aws/aws-cdk/releases)
- [Changelog](https://github.com/aws/aws-cdk/blob/main/CHANGELOG.v2.alpha.md)
- [Commits](https://github.com/aws/aws-cdk/commits/v2.250.0/packages/aws-cdk-lib)

---
updated-dependencies:
- dependency-name: aws-cdk-lib
  dependency-version: 2.250.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: aws-cdk
...

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

* chore(deps): bump postcss from 8.5.8 to 8.5.10 (#961)

Bumps [postcss](https://github.com/postcss/postcss) from 8.5.8 to 8.5.10.
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.5.8...8.5.10)

---
updated-dependencies:
- dependency-name: postcss
  dependency-version: 8.5.10
  dependency-type: indirect
...

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

* chore(deps-dev): bump secretlint from 11.4.1 to 12.2.0 (#916)

Bumps [secretlint](https://github.com/secretlint/secretlint) from 11.4.1 to 12.2.0.
- [Release notes](https://github.com/secretlint/secretlint/releases)
- [Commits](https://github.com/secretlint/secretlint/compare/v11.4.1...v12.2.0)

---
updated-dependencies:
- dependency-name: secretlint
  dependency-version: 12.2.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

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

* chore(deps-dev): bump @vitest/coverage-v8 from 4.1.2 to 4.1.5 (#915)

Bumps [@vitest/coverage-v8](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8) from 4.1.2 to 4.1.5.
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.5/packages/coverage-v8)

---
updated-dependencies:
- dependency-name: "@vitest/coverage-v8"
  dependency-version: 4.1.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

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

* chore(deps-dev): bump @secretlint/secretlint-rule-preset-recommend (#914)

Bumps [@secretlint/secretlint-rule-preset-recommend](https://github.com/secretlint/secretlint) from 11.4.1 to 12.2.0.
- [Release notes](https://github.com/secretlint/secretlint/releases)
- [Commits](https://github.com/secretlint/secretlint/compare/v11.4.1...v12.2.0)

---
updated-dependencies:
- dependency-name: "@secretlint/secretlint-rule-preset-recommend"
  dependency-version: 12.2.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

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

* chore(deps): bump the aws-sdk group across 1 directory with 14 updates (#912)

Bumps the aws-sdk group with 14 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [@aws-sdk/client-application-signals](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-application-signals) | `3.1036.0` | `3.1037.0` |
| [@aws-sdk/client-bedrock](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-bedrock) | `3.1036.0` | `3.1037.0` |
| [@aws-sdk/client-bedrock-agent](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-bedrock-agent) | `3.1036.0` | `3.1037.0` |
| [@aws-sdk/client-bedrock-agentcore](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-bedrock-agentcore) | `3.1036.0` | `3.1037.0` |
| [@aws-sdk/client-bedrock-agentcore-control](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-bedrock-agentcore-control) | `3.1036.0` | `3.1037.0` |
| [@aws-sdk/client-bedrock-runtime](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-bedrock-runtime) | `3.1036.0` | `3.1037.0` |
| [@aws-sdk/client-cloudformation](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-cloudformation) | `3.1036.0` | `3.1037.0` |
| [@aws-sdk/client-cloudwatch-logs](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-cloudwatch-logs) | `3.1036.0` | `3.1037.0` |
| [@aws-sdk/client-resource-groups-tagging-api](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-resource-groups-tagging-api) | `3.1036.0` | `3.1037.0` |
| [@aws-sdk/client-s3](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-s3) | `3.1036.0` | `3.1037.0` |
| [@aws-sdk/client-sts](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-sts) | `3.1036.0` | `3.1037.0` |
| [@aws-sdk/client-xray](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-xray) | `3.1036.0` | `3.1037.0` |
| [@aws-sdk/credential-providers](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/packages/credential-providers) | `3.1036.0` | `3.1037.0` |
| [@aws-sdk/client-cognito-identity-provider](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-cognito-identity-provider) | `3.1036.0` | `3.1037.0` |



Updates `@aws-sdk/client-application-signals` from 3.1036.0 to 3.1037.0
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-application-signals/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1037.0/clients/client-application-signals)

Updates `@aws-sdk/client-bedrock` from 3.1036.0 to 3.1037.0
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-bedrock/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1037.0/clients/client-bedrock)

Updates `@aws-sdk/client-bedrock-agent` from 3.1036.0 to 3.1037.0
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-bedrock-agent/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1037.0/clients/client-bedrock-agent)

Updates `@aws-sdk/client-bedrock-agentcore` from 3.1036.0 to 3.1037.0
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-bedrock-agentcore/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1037.0/clients/client-bedrock-agentcore)

Updates `@aws-sdk/client-bedrock-agentcore-control` from 3.1036.0 to 3.1037.0
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-bedrock-agentcore-control/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1037.0/clients/client-bedrock-agentcore-control)

Updates `@aws-sdk/client-bedrock-runtime` from 3.1036.0 to 3.1037.0
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-bedrock-runtime/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1037.0/clients/client-bedrock-runtime)

Updates `@aws-sdk/client-cloudformation` from 3.1036.0 to 3.1037.0
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-cloudformation/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1037.0/clients/client-cloudformation)

Updates `@aws-sdk/client-cloudwatch-logs` from 3.1036.0 to 3.1037.0
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-cloudwatch-logs/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1037.0/clients/client-cloudwatch-logs)

Updates `@aws-sdk/client-resource-groups-tagging-api` from 3.1036.0 to 3.1037.0
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-resource-groups-tagging-api/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1037.0/clients/client-resource-groups-tagging-api)

Updates `@aws-sdk/client-s3` from 3.1036.0 to 3.1037.0
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-s3/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1037.0/clients/client-s3)

Updates `@aws-sdk/client-sts` from 3.1036.0 to 3.1037.0
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-sts/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1037.0/clients/client-sts)

Updates `@aws-sdk/client-xray` from 3.1036.0 to 3.1037.0
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-xray/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1037.0/clients/client-xray)

Updates `@aws-sdk/credential-providers` from 3.1036.0 to 3.1037.0
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/packages/credential-providers/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1037.0/packages/credential-providers)

Updates `@aws-sdk/client-cognito-identity-provider` from 3.1036.0 to 3.1037.0
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-cognito-identity-provider/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1037.0/clients/client-cognito-identity-provider)

---
updated-dependencies:
- dependency-name: "@aws-sdk/client-application-signals"
  dependency-version: 3.1034.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: aws-sdk
- dependency-name: "@aws-sdk/client-bedrock"
  dependency-version: 3.1034.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: aws-sdk
- dependency-name: "@aws-sdk/client-bedrock-agent"
  dependency-version: 3.1034.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: aws-sdk
- dependency-name: "@aws-sdk/client-bedrock-agentcore"
  dependency-version: 3.1034.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: aws-sdk
- dependency-name: "@aws-sdk/client-bedrock-agentcore-control"
  dependency-version: 3.1034.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: aws-sdk
- dependency-name: "@aws-sdk/client-bedrock-runtime"
  dependency-version: 3.1034.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: aws-sdk
- dependency-name: "@aws-sdk/client-cloudformation"
  dependency-version: 3.1034.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: aws-sdk
- dependency-name: "@aws-sdk/client-cloudwatch-logs"
  dependency-version: 3.1034.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: aws-sdk
- dependency-name: "@aws-sdk/client-cognito-identity-provider"
  dependency-version: 3.1034.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: aws-sdk
- dependency-name: "@aws-sdk/client-resource-groups-tagging-api"
  dependency-version: 3.1034.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: aws-sdk
- dependency-name: "@aws-sdk/client-s3"
  dependency-version: 3.1034.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: aws-sdk
- dependency-name: "@aws-sdk/client-sts"
  dependency-version: 3.1034.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: aws-sdk
- dependency-name: "@aws-sdk/client-xray"
  dependency-version: 3.1034.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: aws-sdk
- dependency-name: "@aws-sdk/credential-providers"
  dependency-version: 3.1034.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: aws-sdk
...

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

* chore(deps-dev): bump hono from 4.12.12 to 4.12.14 (#868)

Bumps [hono](https://github.com/honojs/hono) from 4.12.12 to 4.12.14.
- [Release notes](https://github.com/honojs/hono/releases)
- [Commits](https://github.com/honojs/hono/compare/v4.12.12...v4.12.14)

---
updated-dependencies:
- dependency-name: hono
  dependency-version: 4.12.14
  dependency-type: indirect
...

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

* chore(deps-dev): bump esbuild from 0.27.4 to 0.28.0 (#862)

Bumps [esbuild](https://github.com/evanw/esbuild) from 0.27.4 to 0.28.0.
- [Release notes](https://github.com/evanw/esbuild/releases)
- [Changelog](https://github.com/evanw/esbuild/blob/main/CHANGELOG.md)
- [Commits](https://github.com/evanw/esbuild/compare/v0.27.4...v0.28.0)

---
updated-dependencies:
- dependency-name: esbuild
  dependency-version: 0.28.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

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

* test: speed up CI and fix mock cleanup gaps (#989)

* test: speed up CI and fix mock cleanup gaps

- Node 20 only on PRs (full matrix on main)
- 3-way vitest sharding for unit tests with blob report merging
- Pre-bundle heavy deps (AWS SDK, Smithy, zod, commander) via deps.optimizer
- Exclude tui-harness from unit test project (not production code)
- Add afterEach(vi.restoreAllMocks) to 3 files with mock cleanup gaps
- Move inline consoleSpy.mockRestore() to afterEach in logs-eval tests
- Skip PTY tests when node-pty spawn is unavailable

* style: fix prettier formatting in build-and-test.yml

* fix: enable include-hidden-files for blob artifact upload

upload-artifact@v7 defaults include-hidden-files to false, which
skips the .vitest-reports directory. Also fail loudly if no files found.

* feat: runtime endpoint support in AgentCore CLI (#979)

* feat: add runtime endpoint support to AgentCore CLI

- Schema: endpoints field on AgentEnvSpec, runtimeVersion in deployed state
- Primitive: RuntimeEndpointPrimitive with add/remove/preview
- TUI: Add and Remove flows with multi-field form
- Status: endpoints nested under agents with deployment badges
- Deploy: parseRuntimeEndpointOutputs + buildDeployedState pipeline

* fix: correct output key prefix for runtime endpoint parsing

The CFN output keys include the AgentEnvironment construct prefix
(Agent{PascalName}) which was missing from the parser pattern.

* fix: remove .omc state files and unused useCallback import

- Remove .omc/ from git tracking, add to .gitignore
- Remove unused useCallback import in AddRuntimeEndpointScreen.tsx

* fix: shorten runtime endpoint description to prevent TUI overflow

The description "Named endpoint (version alias) for a runtime" was too
long and wrapped to the next line in the Add Resource menu. Shortened
to "Named endpoint for a runtime".

* fix: validate runtime endpoint version is a positive integer

- Add explicit Number.isInteger check before schema validation
- Change Commander parser from parseInt to Number so floats like
  3.5 are caught instead of silently truncated

* fix: use agent/endpoint composite key to prevent React key collision

Endpoint names can collide across runtimes (e.g., both have "prod").
Changed React key from epName to agent.name/epName to prevent
duplicate key warnings that pollute the TUI viewport.

* fix: render runtime endpoints in status --type runtime-endpoint

When filtering by --type runtime-endpoint, agents array is empty so
the agents section (which nests endpoints) never renders. Added a
standalone Runtime Endpoints section that shows when endpoints exist
but agents don't (i.e., when type-filtering).

* fix: add runtime-endpoint to status --help --type documentation

The --type option help text was missing runtime-endpoint from the
list of valid resource types.

* fix: return richer JSON response from add runtime-endpoint

add now returns { success, endpointName, agent, version } instead of
sparse { success: true }, matching the richer response shape from
remove runtime-endpoint.

* fix: validate endpoint version against deployed runtime version

- TUI: show "Current deployed version: N" and valid range (1-N)
- TUI: reject version exceeding latest deployed version
- CLI: check deployed-state.json for max version, reject if exceeded
- If runtime not deployed, only positive integer check applies

* chore: remove planning and bug bash docs from PR

* fix: use composite key and parentName for endpoint identification

- Add parentName field to ResourceStatusEntry for structured parent linking
- Use runtimeName/endpointName composite key in remove/preview/getRemovable
- Status command filters endpoints by parentName instead of parsing detail string
- React keys use structured parentName/name instead of display strings

* test: add comprehensive unit tests for RuntimeEndpointPrimitive

23 tests covering add(), remove(), previewRemove(), getRemovable():
- Runtime lookup, duplicate detection, version validation
- Composite key removal targeting correct runtime
- Empty endpoints dict cleanup
- Version validation against deployed state
- Richer JSON response shape

* fix: remove dead findGatewayTargetReferences stub

* fix: use BasePrimitive configIO instead of ad-hoc ConfigIO in add()

* fix: use Number() instead of parseInt in TUI version validation

* chore: fix prettier formatting

* fix: use T[] instead of Array<T> to satisfy eslint array-type rule

* fix(ci): revert schema file to avoid schema-check guard

The schemas/ directory is auto-regenerated during the release workflow.
Direct modifications are blocked by CI.

* Revert "fix(ci): revert schema file to avoid schema-check guard"

This reverts commit 3615e37a0aaa71cd4d2c5c7b19e3ddb41eb2e07c.

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Jesse Turner <57651174+jesseturner21@users.noreply.github.com>
Co-authored-by: Avi Alpert <131792194+avi-alpert@users.noreply.github.com>
Co-authored-by: Gitika <53349492+notgitika@users.noreply.github.com>
Co-authored-by: Hweinstock <42325418+Hweinstock@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Aidan Daly <99039782+aidandaly24@users.noreply.github.com>
Co-authored-by: Tejas Kashinath <42380254+tejaskash@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore: add sync-preview job to sync public/preview into preview (#149)

* fix: use --track origin/preview to avoid ambiguous checkout (#152)

* 🔀 [Sync Conflict] Merge public/main → main (#165)

* feat: add GitHub Action for automated PR review via AgentCore Harness (#934)

* feat: add GitHub Action for automated PR review via AgentCore Harness

Adds a workflow that reviews PRs using Bedrock AgentCore Harness.
The harness runs an AI agent in an isolated microVM with gh, git,
and pre-cloned repos that fetches PR diffs and posts review comments.

Workflow:
- Triggers on PR open/reopen for agentcore-cli-devs team members
- Supports manual workflow_dispatch for any PR URL
- Adds/removes ai-reviewing label during review
- Authenticates via GitHub OIDC to assume AWS role

Files:
- .github/workflows/pr-ai-review.yml — main workflow
- .github/scripts/python/harness_review.py — harness invocation script
- .github/scripts/python/harness_config.py — config from env vars
- .github/scripts/models/ — local boto3 service model (InvokeHarness
  not yet in standard boto3)

Required secrets:
- HARNESS_AWS_ROLE_ARN — IAM role ARN for OIDC
- HARNESS_ACCOUNT_ID — AWS account ID
- HARNESS_ID — Harness ID

* refactor: replace local service model with raw HTTP + SigV4 signing

Eliminates the 220KB bundled service model by using direct HTTP requests
with SigV4 authentication to invoke the harness endpoint. No extra
dependencies needed — urllib3, SigV4Auth, and EventStreamBuffer are all
part of botocore/boto3.

Rejected: invoke_agent_runtime API | server rejects harness ARNs with ResourceNotFoundException
Confidence: high
Scope-risk: moderate

* refactor: inline harness config into review script

Remove separate harness_config.py — env vars are read directly in
harness_review.py. One less file to maintain, config is still
driven entirely by environment variables set in the GitHub workflow.

* refactor: extract invoke_harness helper for cleaner main flow

* refactor: simplify config and improve script readability

- Replace HARNESS_ACCOUNT_ID + HARNESS_ID with single HARNESS_ARN env var
- Extract prompts into separate .md files in .github/scripts/prompts/
- Extract stream parsing into print_stream() function
- Add close_group() helper to deduplicate ::group:: bookkeeping

* refactor: separate event parsing from display logic

Extract parse_events() generator to handle binary stream decoding,
keeping print_stream() focused on formatting and log groups.

* docs: add explanatory comments to harness review functions

* refactor: derive region from HARNESS_ARN instead of separate env var

Eliminates HARNESS_REGION env var — the region is extracted from the
ARN directly, so there's no risk of a mismatch causing confusing
SigV4 auth errors.

* chore: rename label to agentcore-harness-reviewing

* refactor: move auth check to job level so entire review is skipped early

Split into authorize + ai-review jobs. The ai-review job only runs
if the PR author is authorized (team member or write access) or if
triggered via workflow_dispatch. Removes repeated if conditions from
every step.

* chore: exclude AI prompt templates from prettier

Prompt markdown files use intentional formatting that prettier
would reflow, breaking the prompt structure.

* fix: buffer streaming text to avoid per-token log lines in GitHub Actions (#946)

Each text delta from the harness was printed individually with flush,
creating a separate log line per token. Now text is buffered and
flushed as complete lines at block boundaries.

* fix: allow code-based evaluators in online eval configs (#947)

* fix: allow code-based evaluators in online eval configs

Remove restrictions that blocked code-based evaluators from being used
in online evaluation configs. The service now supports code-based
evaluators for online evaluation.

Changes:
- Remove code-based evaluator block in OnlineEvalConfigPrimitive
- Remove code-based evaluator validation in schema superRefine
- Remove code-based evaluator filter in TUI evaluator picker

* style: fix prettier formatting

* fix: add TTY detection before TUI fallbacks to prevent agent/CI hangs (#949)

* fix: add TTY detection before TUI fallbacks to prevent agent/CI hangs

When commands are invoked without flags in non-interactive environments
(CI, piped stdin, agent automation), the CLI falls through to Ink TUI
rendering which hangs indefinitely. Add a requireTTY() guard at every
TUI entry point that checks process.stdout.isTTY and exits with a
helpful error message directing users to --help for non-interactive flags.

Closes #685

* fix: check both stdin and stdout isTTY in requireTTY guard

The hang from #685 is caused by stdin not being a TTY (Ink reads
keyboard input from stdin), not stdout. Check both stdin and stdout
so the guard fires for piped stdin, redirected stdout, and CI
environments where both are non-TTY.

* fix: agentcore dev not working in windows (#951)

* fix: use pull_request_target for fork PR support (#958)

* fix: make label step non-blocking for fork PRs

Fork PRs get read-only GITHUB_TOKEN regardless of workflow permissions,
causing the addLabels API call to fail with 403. This crashed the entire
job before the review could run. continue-on-error lets the review
proceed even when labeling fails.

* fix: use pull_request_target for full write access on fork PRs

pull_request gives a read-only GITHUB_TOKEN for fork PRs, preventing
labels and secrets from working. pull_request_target runs in the base
repo context with full permissions. This is safe because we never
check out or execute fork code — the harness fetches the PR diff via
the GitHub API.

* fix: lower eventExpiryDuration minimum from 7 to 3 days (closes #744) (#956)

The AWS CreateMemory API allows a minimum of 3 days, but the CLI schema
was rejecting values below 7. Update the Zod schema, LLM compacted
types, import clamping logic, and all related tests.

* fix: display session ID after CLI invoke completes (#957)

* fix: display session ID after CLI invoke completes (closes #664)

The streaming and non-streaming invoke responses include a session ID
from the runtime, but the CLI paths discarded it. Now prints the
session ID and a resume command hint after invoke output.

* fix: include sessionId in AGUI protocol invoke result

* test: add browser tests for agent inspector (#938)

* feat: add telemetry schemas and client (#941)

* chore: bump version to 0.11.0 (#967)

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>

* fix(invoke): auto-generate session ID for bearer-token invocations (#953)

Closes #840

When invoking an agent with a bearer token (OAuth/CUSTOM_JWT) and no
session ID, `AgentCoreMemoryConfig` raised a Pydantic validation error
because `session_id=None` is rejected. Unlike SigV4 callers, bearer-token
callers do not get a server-side auto-generated runtime session ID.

Two-layer fix:

1. CLI synthesizes a UUID in `invoke` action when `--bearer-token` is set
   and `--session-id` is missing, using the existing `generateSessionId`
   helper. Covers both explicit `--bearer-token` and the CUSTOM_JWT
   auto-fetch path.

2. Strands memory session templates (http, agui, a2a) synthesize a UUID
   when `session_id` is falsy before constructing AgentCoreMemoryConfig.
   Protects direct runtime callers (curl, custom apps) who forget the
   `X-Amzn-Bedrock-AgentCore-Runtime-Session-Id` header.

Snapshot tests updated.

* fix: show 'Computing diff changes...' step during deploy diff phase (#952)

The deploy TUI appeared frozen for 5-15 seconds between preflight
completion and 'Publish assets' while cdkToolkitWrapper.diff() ran
silently with no step marked as running.

Add a dedicated pre-deploy diff step that transitions running -> success
around the diff call so StepProgress always has something to highlight.

Closes #781

* test: split browser tests into its own job, fix logs path (#975)

* feat(invoke): add --prompt-file and stdin support for long prompts (#974)

* feat(invoke): add --prompt-file and stdin support for long prompts

Long prompts hit shell argument limits (E2BIG, typically 128KB-2MB)
when passed as positional args. This adds two new sources:

- --prompt-file <path>: read prompt from a file
- piped stdin: when no prompt is given and stdin is not a TTY,
  read the prompt from stdin

Precedence is hybrid and backward-compatible:
  --prompt > positional > --prompt-file > stdin

--prompt-file combined with piped stdin content returns an explicit
collision error rather than silently picking one.

Closes #686

* docs(invoke): document --prompt-file and stdin support

* fix(import): remove experimental warning from import command (#977)

The import feature has stabilized and no longer needs the experimental label.

* fix: duplicate header flash and help menu truncation (closes #895, closes #637) (#955)

- Return null during brief transitional phases to prevent Ink from
  rendering a header that gets immediately replaced by a different frame
- Consolidate CreateScreen phases into a single Screen mount
- Make help menu description width responsive to terminal size
- Remove hardcoded 50-char description truncation limit

* test: configure git in browser tests workflow (#976)

* feat: add project-name option to create (#969)

* Add project-name option to create

* fix: address review feedback — restore name description and move backfill logic

* ci: bump the github-actions group across 1 directory with 4 updates (#964)

Bumps the github-actions group with 4 updates in the / directory: [aws-actions/configure-aws-credentials](https://github.com/aws-actions/configure-aws-credentials), [actions/github-script](https://github.com/actions/github-script), [softprops/action-gh-release](https://github.com/softprops/action-gh-release) and [slackapi/slack-github-action](https://github.com/slackapi/slack-github-action).


Updates `aws-actions/configure-aws-credentials` from 5 to 6
- [Changelog](https://github.com/aws-actions/configure-aws-credentials/blob/main/CHANGELOG.md)
- [Commits](https://github.com/aws-actions/configure-aws-credentials/compare/v5...v6)

Updates `actions/github-script` from 8 to 9
- [Commits](https://github.com/actions/github-script/compare/v8...v9)

Updates `softprops/action-gh-release` from 2 to 3
- [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md)
- [Commits](https://github.com/softprops/action-gh-release/compare/v2...v3)

Updates `slackapi/slack-github-action` from 3.0.1 to 3.0.2
- [Release notes](https://github.com/slackapi/slack-github-action/releases)
- [Changelog](https://github.com/slackapi/slack-github-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/slackapi/slack-github-action/compare/v3.0.1...v3.0.2)

---
updated-dependencies:
- dependency-name: actions/github-script
  dependency-version: '9'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
- dependency-name: aws-actions/configure-aws-credentials
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
- dependency-name: slackapi/slack-github-action
  dependency-version: 3.0.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
- dependency-name: softprops/action-gh-release
  dependency-version: '3'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
...

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

* chore(deps-dev): bump aws-cdk-lib (#962)

Bumps the aws-cdk group with 1 update in the / directory: [aws-cdk-lib](https://github.com/aws/aws-cdk/tree/HEAD/packages/aws-cdk-lib).


Updates `aws-cdk-lib` from 2.248.0 to 2.250.0
- [Release notes](https://github.com/aws/aws-cdk/releases)
- [Changelog](https://github.com/aws/aws-cdk/blob/main/CHANGELOG.v2.alpha.md)
- [Commits](https://github.com/aws/aws-cdk/commits/v2.250.0/packages/aws-cdk-lib)

---
updated-dependencies:
- dependency-name: aws-cdk-lib
  dependency-version: 2.250.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: aws-cdk
...

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

* chore(deps): bump postcss from 8.5.8 to 8.5.10 (#961)

Bumps [postcss](https://github.com/postcss/postcss) from 8.5.8 to 8.5.10.
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.5.8...8.5.10)

---
updated-dependencies:
- dependency-name: postcss
  dependency-version: 8.5.10
  dependency-type: indirect
...

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

* chore(deps-dev): bump secretlint from 11.4.1 to 12.2.0 (#916)

Bumps [secretlint](https://github.com/secretlint/secretlint) from 11.4.1 to 12.2.0.
- [Release notes](https://github.com/secretlint/secretlint/releases)
- [Commits](https://github.com/secretlint/secretlint/compare/v11.4.1...v12.2.0)

---
updated-dependencies:
- dependency-name: secretlint
  dependency-version: 12.2.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

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

* chore(deps-dev): bump @vitest/coverage-v8 from 4.1.2 to 4.1.5 (#915)

Bumps [@vitest/coverage-v8](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8) from 4.1.2 to 4.1.5.
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.5/packages/coverage-v8)

---
updated-dependencies:
- dependency-name: "@vitest/coverage-v8"
  dependency-version: 4.1.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

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

* chore(deps-dev): bump @secretlint/secretlint-rule-preset-recommend (#914)

Bumps [@secretlint/secretlint-rule-preset-recommend](https://github.com/secretlint/secretlint) from 11.4.1 to 12.2.0.
- [Release notes](https://github.com/secretlint/secretlint/releases)
- [Commits](https://github.com/secretlint/secretlint/compare/v11.4.1...v12.2.0)

---
updated-dependencies:
- dependency-name: "@secretlint/secretlint-rule-preset-recommend"
  dependency-version: 12.2.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

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

* chore(deps): bump the aws-sdk group across 1 directory with 14 updates (#912)

Bumps the aws-sdk group with 14 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [@aws-sdk/client-application-signals](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-application-signals) | `3.1036.0` | `3.1037.0` |
| [@aws-sdk/client-bedrock](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-bedrock) | `3.1036.0` | `3.1037.0` |
| [@aws-sdk/client-bedrock-agent](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-bedrock-agent) | `3.1036.0` | `3.1037.0` |
| [@aws-sdk/client-bedrock-agentcore](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-bedrock-agentcore) | `3.1036.0` | `3.1037.0` |
| [@aws-sdk/client-bedrock-agentcore-control](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-bedrock-agentcore-control) | `3.1036.0` | `3.1037.0` |
| [@aws-sdk/client-bedrock-runtime](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-bedrock-runtime) | `3.1036.0` | `3.1037.0` |
| [@aws-sdk/client-cloudformation](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-cloudformation) | `3.1036.0` | `3.1037.0` |
| [@aws-sdk/client-cloudwatch-logs](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-cloudwatch-logs) | `3.1036.0` | `3.1037.0` |
| [@aws-sdk/client-resource-groups-tagging-api](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-resource-groups-tagging-api) | `3.1036.0` | `3.1037.0` |
| [@aws-sdk/client-s3](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-s3) | `3.1036.0` | `3.1037.0` |
| [@aws-sdk/client-sts](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-sts) | `3.1036.0` | `3.1037.0` |
| [@aws-sdk/client-xray](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-xray) | `3.1036.0` | `3.1037.0` |
| [@aws-sdk/credential-providers](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/packages/credential-providers) | `3.1036.0` | `3.1037.0` |
| [@aws-sdk/client-cognito-identity-provider](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-cognito-identity-provider) | `3.1036.0` | `3.1037.0` |



Updates `@aws-sdk/client-application-signals` from 3.1036.0 to 3.1037.0
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-application-signals/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1037.0/clients/client-application-signals)

Updates `@aws-sdk/client-bedrock` from 3.1036.0 to 3.1037.0
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-bedrock/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1037.0/clients/client-bedrock)

Updates `@aws-sdk/client-bedrock-agent` from 3.1036.0 to 3.1037.0
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-bedrock-agent/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1037.0/clients/client-bedrock-agent)

Updates `@aws-sdk/client-bedrock-agentcore` from 3.1036.0 to 3.1037.0
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-bedrock-agentcore/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1037.0/clients/client-bedrock-agentcore)

Updates `@aws-sdk/client-bedrock-agentcore-control` from 3.1036.0 to 3.1037.0
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-bedrock-agentcore-control/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1037.0/clients/client-bedrock-agentcore-control)

Updates `@aws-sdk/client-bedrock-runtime` from 3.1036.0 to 3.1037.0
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-bedrock-runtime/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1037.0/clients/client-bedrock-runtime)

Updates `@aws-sdk/client-cloudformation` from 3.1036.0 to 3.1037.0
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-cloudformation/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1037.0/clients/client-cloudformation)

Updates `@aws-sdk/client-cloudwatch-logs` from 3.1036.0 to 3.1037.0
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-cloudwatch-logs/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1037.0/clients/client-cloudwatch-logs)

Updates `@aws-sdk/client-resource-groups-tagging-api` from 3.1036.0 to 3.1037.0
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-resource-groups-tagging-api/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1037.0/clients/client-resource-groups-tagging-api)

Updates `@aws-sdk/client-s3` from 3.1036.0 to 3.1037.0
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-s3/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1037.0/clients/client-s3)

Updates `@aws-sdk/client-sts` from 3.1036.0 to 3.1037.0
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-sts/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1037.0/clients/client-sts)

Updates `@aws-sdk/client-xray` from 3.1036.0 to 3.1037.0
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-xray/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1037.0/clients/client-xray)

Updates `@aws-sdk/credential-providers` from 3.1036.0 to 3.1037.0
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/packages/credential-providers/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1037.0/packages/credential-providers)

Updates `@aws-sdk/client-cognito-identity-provider` from 3.1036.0 to 3.1037.0
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-cognito-identity-provider/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1037.0/clients/client-cognito-identity-provider)

---
updated-dependencies:
- dependency-name: "@aws-sdk/client-application-signals"
  dependency-version: 3.1034.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: aws-sdk
- dependency-name: "@aws-sdk/client-bedrock"
  dependency-version: 3.1034.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: aws-sdk
- dependency-name: "@aws-sdk/client-bedrock-agent"
  dependency-version: 3.1034.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: aws-sdk
- dependency-name: "@aws-sdk/client-bedrock-agentcore"
  dependency-version: 3.1034.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: aws-sdk
- dependency-name: "@aws-sdk/client-bedrock-agentcore-control"
  dependency-version: 3.1034.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: aws-sdk
- dependency-name: "@aws-sdk/client-bedrock-runtime"
  dependency-version: 3.1034.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: aws-sdk
- dependency-name: "@aws-sdk/client-cloudformation"
  dependency-version: 3.1034.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: aws-sdk
- dependency-name: "@aws-sdk/client-cloudwatch-logs"
  dependency-version: 3.1034.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: aws-sdk
- dependency-name: "@aws-sdk/client-cognito-identity-provider"
  dependency-version: 3.1034.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: aws-sdk
- dependency-name: "@aws-sdk/client-resource-groups-tagging-api"
  dependency-version: 3.1034.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: aws-sdk
- dependency-name: "@aws-sdk/client-s3"
  dependency-version: 3.1034.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: aws-sdk
- dependency-name: "@aws-sdk/client-sts"
  dependency-version: 3.1034.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: aws-sdk
- dependency-name: "@aws-sdk/client-xray"
  dependency-version: 3.1034.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: aws-sdk
- dependency-name: "@aws-sdk/credential-providers"
  dependency-version: 3.1034.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: aws-sdk
...

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

* chore(deps-dev): bump hono from 4.12.12 to 4.12.14 (#868)

Bumps [hono](https://github.com/honojs/hono) from 4.12.12 to 4.12.14.
- [Release notes](https://github.com/honojs/hono/releases)
- [Commits](https://github.com/honojs/hono/compare/v4.12.12...v4.12.14)

---
updated-dependencies:
- dependency-name: hono
  dependency-version: 4.12.14
  dependency-type: indirect
...

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

* chore(deps-dev): bump esbuild from 0.27.4 to 0.28.0 (#862)

Bumps [esbuild](https://github.com/evanw/esbuild) from 0.27.4 to 0.28.0.
- [Release notes](https://github.com/evanw/esbuild/releases)
- [Changelog](https://github.com/evanw/esbuild/blob/main/CHANGELOG.md)
- [Commits](https://github.com/evanw/esbuild/compare/v0.27.4...v0.28.0)

---
updated-dependencies:
- dependency-name: esbuild
  dependency-version: 0.28.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

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

* test: speed up CI and fix mock cleanup gaps (#989)

* test: speed up CI and fix mock cleanup gaps

- Node 20 only on PRs (full matrix on main)
- 3-way vitest sharding for unit tests with blob report merging
- Pre-bundle heavy deps (AWS SDK, Smithy, zod, commander) via deps.optimizer
- Exclude tui-harness from unit test project (not production code)
- Add afterEach(vi.restoreAllMocks) to 3 files with mock cleanup gaps
- Move inline consoleSpy.mockRestore() to afterEach in logs-eval tests
- Skip PTY tests when node-pty spawn is unavailable

* style: fix prettier formatting in build-and-test.yml

* fix: enable include-hidden-files for blob artifact upload

upload-artifact@v7 defaults include-hidden-files to false, which
skips the .vitest-reports directory. Also fail loudly if no files found.

* feat: runtime endpoint support in AgentCore CLI (#979)

* feat: add runtime endpoint support to AgentCore CLI

- Schema: endpoints field on AgentEnvSpec, runtimeVersion in deployed state
- Primitive: RuntimeEndpointPrimitive with add/remove/preview
- TUI: Add and Remove flows with multi-field form
- Status: endpoints nested under agents with deployment badges
- Deploy: parseRuntimeEndpointOutputs + buildDeployedState pipeline

* fix: correct output key prefix for runtime endpoint parsing

The CFN output keys include the AgentEnvironment construct prefix
(Agent{PascalName}) which was missing from the parser pattern.

* fix: remove .omc state files and unused useCallback import

- Remove .omc/ from git tracking, add to .gitignore
- Remove unused useCallback import in AddRuntimeEndpointScreen.tsx

* fix: shorten runtime endpoint description to prevent TUI overflow

The description "Named endpoint (version alias) for a runtime" was too
long and wrapped to the next line in the Add Resource menu. Shortened
to "Named endpoint for a runtime".

* fix: validate runtime endpoint version is a positive integer

- Add explicit Number.isInteger check before schema validation
- Change Commander parser from parseInt to Number so floats like
  3.5 are caught instead of silently truncated

* fix: use agent/endpoint composite key to prevent React key collision

Endpoint names can collide across runtimes (e.g., both have "prod").
Changed React key from epName to agent.name/epName to prevent
duplicate key warnings that pollute the TUI viewport.

* fix: render runtime endpoints in status --type runtime-endpoint

When filtering by --type runtime-endpoint, agents array is empty so
the agents section (which nests endpoints) never renders. Added a
standalone Runtime Endpoints section that shows when endpoints exist
but agents don't (i.e., when type-filtering).

* fix: add runtime-endpoint to status --help --type documentation

The --type option help text was missing runtime-endpoint from the
list of valid resource types.

* fix: return richer JSON response from add runtime-endpoint

add now returns { success, endpointName, agent, version } instead of
sparse { success: true }, matching the richer response shape from
remove runtime-endpoint.

* fix: validate endpoint version against deployed runtime version

- TUI: show "Current deployed version: N" and valid range (1-N)
- TUI: reject version exceeding latest deployed version
- CLI: check deployed-state.json for max version, reject if exceeded
- If runtime not deployed, only positive integer check applies

* chore: remove planning and bug bash docs from PR

* fix: use composite key and parentName for endpoint identification

- Add parentName field to ResourceStatusEntry for structured parent linking
- Use runtimeName/endpointName composite key in remove/preview/getRemovable
- Status command filters endpoints by parentName instead of parsing detail string
- React keys use structured parentName/name instead of display strings

* test: add comprehensive unit tests for RuntimeEndpointPrimitive

23 tests covering add(), remove(), previewRemove(), getRemovable():
- Runtime lookup, duplicate detection, version validation
- Composite key removal targeting correct runtime
- Empty endpoints dict cleanup
- Version validation against deployed state
- Richer JSON response shape

* fix: remove dead findGatewayTargetReferences stub

* fix: use BasePrimitive configIO instead of ad-hoc ConfigIO in add()

* fix: use Number() instead of parseInt in TUI version validation

* chore: fix prettier formatting

* fix: use T[] instead of Array<T> to satisfy eslint array-type rule

* feat: add gateway import command with executionRoleArn support (#855)

* feat: add gateway import command and unhide import from TUI

Add `agentcore import gateway --arn <arn>` to import existing AWS gateways
(with all targets) into a local CLI project. Also remove import from the
HIDDEN_FROM_TUI list so it appears in the interactive TUI.

- Add AWS SDK wrappers for gateway/target list/get APIs
- Add import-gateway.ts with multi-resource CFN import support
- Add resourceName schema field to preserve actual AWS gateway name during import
- Register gateway in TUI ImportSelectScreen and ImportProgressScreen
- Extend ARN pattern, deployed state, and CFN constants for gateway type

* fix: expand ARN input to show full resource ARN and add gateway support

The ARN text input was truncating long ARNs. Use the expandable prop to
wrap text across multiple lines. Also add gateway to the ARN validation
pattern and resource type labels.

* refactor: remove --name and --yes flags from import gateway command

Remove --name (confusing local rename) and --yes (no prompts to confirm)
from the gateway import command. The gateway's AWS name is used directly.

* feat: add e2e tests for import gateway command

Add end-to-end tests that create a real AWS gateway with an MCP server
target, import it via `agentcore import gateway --arn`, and verify the
resulting agentcore.json fields and deployed-state.json entries.

New files:
- e2e-tests/fixtures/import/setup_gateway.py: creates gateway + target
- e2e-tests/fixtures/import/common.py: gateway wait helpers
- e2e-tests/fixtures/import/cleanup_resources.py: gateway cleanup

Constraint: Tests follow the existing import-resources.test.ts pattern
Confidence: high
Scope-risk: narrow

* chore: gitignore bugbash-resources.json and .omc/

* feat: preserve gateway executionRoleArn during import

Extract roleArn from the AWS GetGateway response and map it to
executionRoleArn in agentcore.json. On deploy, CDK uses
iam.Role.fromRoleArn() instead of creating a new role, keeping the
original permissions intact.

Constraint: imported roles use mutable: false so CDK cannot modify them
Rejected: always create new role | breaks permissions on re-import
Confidence: high
Scope-risk: narrow

* refactor: export internal gateway import functions for unit testing

Add @internal exports for toGatewayTargetSpec, resolveOutboundAuth,
toGatewaySpec, and buildCredentialArnMap to enable direct unit testing
of the pure mapping functions in import-gateway.ts.

Confidence: high
Scope-risk: narrow

* test: add unit tests for mcpServer target mapping and credential resolution

Bugbash coverage for toGatewayTargetSpec and resolveOutboundAuth:
- mcpServer with no auth, OAuth, and API_KEY credentials
- Credential resolution warnings when ARNs not in project
- Targets with no MCP configuration
- OAuth scopes pass-through and empty scopes omission

8 tests, all passing.

Confidence: high
Scope-risk: narrow

* test: add unit tests for apiGateway, openApiSchema, smithyModel, lambda target mapping

Bugbash coverage for toGatewayTargetSpec non-mcpServer target types:
- apiGateway: restApiId, stage, toolFilters, toolOverrides mapping
- openApiSchema: S3 URI mapping, missing URI warning
- smithyModel: S3 URI mapping, missing URI warning
- lambda: S3 tool schema …
…ifests (aws#1468)

PR aws#1465 fixed the synth-time reader (@aws-cdk/toolkit-lib 1.16 -> 1.28)
but the asset-publish phase uses a separate package, @aws-cdk/cdk-assets-lib,
that was still pinned to 1.4.2 in the shrinkwrap. 1.4.2's
@aws-cdk/cloud-assembly-schema floor is >=53.8.0 — it cannot read schema 54
asset manifests written by aws-cdk-lib@2.258.0+.

Symptom: e2e (main, 6/6) failed after the rerun of aws#1465 with
"Cannot read asset manifest 'cdk.out/...assets.json':
Cloud assembly schema version mismatch: Maximum schema version supported
is 53.x.x, but found 54.0.0" on byo-custom-jwt deploy. (Dataset tests passed
because dataset stacks have no file/zip/docker assets.)

Adding @aws-cdk/cdk-assets-lib as a direct dependency at ^1.4.10 forces the
shrinkwrap to resolve the asset-publisher reader to a version whose
cloud-assembly-schema floor is >=54.2.0. toolkit-lib's wide ^1 transitive
range was insufficient to upgrade past 1.4.2 during the previous regen.

Verified locally: end-to-end agentcore deploy of a BYO Strands agent against
aws-cdk-lib@2.258.0 (writes schema 54) now succeeds — synth, asset publish,
CFN deploy all pass.
…solution (aws#1469)

PRs aws#1465 and aws#1468 fixed the bundled CLI's readers (toolkit-lib + cdk-assets-lib)
to handle schema 54. Customer deploys via the global CLI install work correctly.

However, the e2e test `byo-custom-jwt.test.ts` uses `runLocalCLI`, which spawns
`node dist/cli/index.mjs` from the workspace root. From there, Node's module
resolution sees the workspace's own `aws-cdk-lib: ^2.248.0` (resolved to 2.257.0)
which has a peer-dep `cloud-assembly-schema: ^53.25.0`, hoisting schema 53.28.0
at the top level. `@aws-cdk/cloud-assembly-api` (also hoisted) binds to that
top-level schema rather than the nested 54.2.0 copies under toolkit-lib and
cdk-assets-lib — so synth still throws AssemblyVersionMismatch in CI.

Bumping aws-cdk-lib from ^2.248.0 to ^2.258.0 makes its peer-dep
`cloud-assembly-schema: ^54.0.0`, allowing schema 54.2.0 to hoist top-level
and cloud-assembly-api to bind to it.

Verified: byo-custom-jwt deploy assertion now passes locally against
aws-cdk-lib@2.258.0 (writes schema 54). End-user CLI behavior is unchanged
(global install resolution was already correct after aws#1465/aws#1468).
…1470)

The Secrets Manager step retrieves E2E_EFS_ACCESS_POINT_ARN,
E2E_S3_ACCESS_POINT_ARN, E2E_FILESYSTEM_SUBNET_ID, and
E2E_FILESYSTEM_SECURITY_GROUP_ID at job scope, but the "Run E2E tests"
step's env: block does not propagate them to the vitest subprocess.
GitHub Actions does not auto-inherit job-level env vars into step
subprocesses, so strands-bedrock-byo-filesystem.test.ts saw undefined
values and failed at agentcore create.

Symptom on run 27041082542: shards (main, 5/6) and (npm, 5/6) failed
with "Create failed:" — only stderr (a Node version warning) was in the
assertion message; the actual JSON error went to stdout which the test
did not print.

The PR-trigger workflow (e2e-tests.yml) already passes these env vars in
its Run E2E tests env: block. This change brings e2e-tests-full.yml in
line so the byo-filesystem test has the inputs it needs.
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* fix: redact sensitive tokens from invoke CLI output

Restores redactSensitiveText() that was present on the preview branch
but dropped during the preview→main consolidation. Prevents bearer
tokens and client secrets from appearing in --json output or error
messages printed to stderr.

* fix: address review feedback for redactSensitiveText

- Widen regexes to match JSON-quoted forms ("client_secret":"...",
  "token":"...", "access_token":"...")
- Apply redaction to error paths (outer catch block and early exit)
- Add table-driven unit tests covering plain text and JSON shapes

* fix: address PR review comments for redactSensitiveText

- Remove unnecessary redactSensitiveText wrapper on static error message
  (addresses jariy17's review comment)
- Fix type errors in agentcore-control.ts where SDK types lack
  indexedKeys and kmsKeyArn fields not yet in installed SDK version
* fix(e2e): avoid coupling regex to exact phrasing of error

* feat(e2e): add more detailed logging on failures

* fix(e2e): add back other cases to the regex for other types of errors

---------

Co-authored-by: Local E2E <ci@local>
jariy17 and others added 20 commits September 9, 2026 16:31
Point the reusable workflow `uses:` refs at the latest devtools main
(51d084b0bf4585725bf370f31cd1e30c4dddfd93) to pick up the hardened event-context handling. No behavior change.

Co-authored-by: jariy17 <tjariy+jariy17@users.noreply.github.com>
* Bump PR-review-notification reusable to codebuild-default pin

Point the caller at the agentcore-devx-devtools commit whose reusable
workflow defaults `runner` to codebuild, moving PR-review Slack
notifications onto the self-hosted CodeBuild fleet.

* Re-pin to devtools main SHA after aws#4 merged

Point at 70f0e50 (merged aws/agentcore-devx-devtools#4) instead of the
pre-merge branch commit.

---------

Co-authored-by: jariy17 <tjariy+jariy17@users.noreply.github.com>
)

Pins the ADOT distro to the 0.18.x line (runtime ships
telemetry.auto.version 0.18.0-aws) for the Strands, LangChain/LangGraph,
and OpenAIAgents templates across the http, a2a, and agui protocols.

GoogleADK templates are intentionally left on their existing ADOT pin:
0.18.0 requires opentelemetry-api 1.42.1, but google-adk < 2.0.0 caps
opentelemetry-api at <= 1.41.1, making the two unsatisfiable together.
Moving GoogleADK to 0.18.0 would require a google-adk 1.x -> 2.x major
bump (breaking changes), which is out of scope here.

Co-authored-by: jariy17 <tjariy+jariy17@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
CloudFormation stamps aws:cloudformation:{stack-id,stack-name,logical-id}
on every resource it provisions. A resource retained after its stack is
deleted keeps these as orphans, and they are not customer-writable.

The import commands copied all tags from the source resource verbatim into
agentcore.json. Any aws:-prefixed key then fails TagKeySchema ("aws:" is
reserved) during config validation, blocking the import before any AWS call:

  runtimes[0].tags.aws:cloudformation:stack-name: Invalid key in record

Add a shared stripReservedTags() helper and apply it at all four import
read-paths (runtime, memory, gateway, evaluator). User tags are preserved;
reserved tags are dropped and stay untouched on the resource in AWS.

Co-authored-by: jariy17 <tjariy+jariy17@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* fix: make esbuild available at runtime

* chore: update shrinkwrap with latest version

---------

Co-authored-by: Nicolas <nborges.aws@gmail.com>
Co-authored-by: Nicolas Borges <nickdb@amazon.com>
Co-authored-by: Abhimanyu Siwach <siwabhi@amazon.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* fix(runtime): update shell session wire protocol

* fix(runtime): harden shell connect close-code & missing shellId handling

* fix(runtime): treat abnormal shell WS close as transport failure

An abnormal WebSocket close (e.g. 1006) can occur before the shell is
usable, since connectShell now resolves as soon as the socket opens.
Previously any non-1000/4000 close with no STATUS termination frame was
mapped to shell exit code 1, which printed "session closed" and
suppressed the reconnect command.

Treat such closes as a transport failure instead: return success:false
with exitCode left null so the reconnect hint is shown and the remote
shell (which may still be alive) can be reconnected to.

Addresses review feedback on PR aws#1968.

* fix(runtime): drop redundant null guard in shell cleanup exit check

CodeQL flagged the `code !== null && code >= 128` sub-expression as an
unreachable comparison: `code === null` is already handled by the
preceding clause, so `code !== null` is always true there.

Remove the redundant wrapper, keeping the `code === null` case (reached
via the 4000 kick path, which must resolve success + reconnect hint).
Behavior is unchanged for all close-code paths.
… an older system Python (aws#2491)

Without requires-python, uv can pick the macOS system Python 3.9 for
client.py, and the openai dependency does not install on it. The image
still installs the latest Python before it copies pyproject.toml, so the
minimum does not pin the image.

Co-authored-by: Abhimanyu Siwach <siwabhi@amazon.com>
…e_arn

BMA needs a session role to call the model and the ACR. The template did
not create it, so a new account failed on CreateAgentSession until the
reader created BedrockManagedAgentsPreviewInferenceServiceRole by hand.

client.py now creates or repairs BmaSessionRole-<region> from
policies/bma-session-trust.json and policies/bma-session-policy.json,
and sends its ARN with extra_body role_arn. --role-arn uses a role that
the reader created. The ACR policy moves to policies/ with no change.

Also override brace-expansion ^5.0.12, fast-uri ^3.1.8 and @humanfs/node ^0.16.8 so that
npm audit --omit=dev passes (GHSA-q2hr-2g5m-vwhr, GHSA-qhr7-859c-m2p7, GHSA-6j4f-fj2g-mc7p,
GHSA-hrr3-gc8f-f4qj, GHSA-p498-v437-472g).
fix(bma): create the BMA session role in client.py and pass it as role_arn
…s#2496)

* fix(templates): allow patched MCP 1.x releases

* fix(templates): require patched AgentCore Python SDK versions

* fix(container): apply Debian package updates during builds

* fix(container): omit uv cache from runtime images

* fix(container): remove uv after dependency installation

* fix(templates): honor SDK Strands integration dependencies

* fix(deps): refresh audited transitive dependencies

* docs: remove container guide changes from security fix
* fix(import): reuse the hardened Python container template

* fix(export): harden custom Dockerfile build-layer guidance

* fix(export): remove uv build artifacts from container image layers
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* ci: port refactor E2E reusable workflow to main

* ci: add canary(refactor) scheduled workflow

* ci: emit metrics for canary(refactor)

* ci: test rc artifact with latest refactor E2E tests
@proton0210
proton0210 requested a review from a team October 18, 2026 05:29
@github-actions github-actions Bot added the size/s PR size: S label Oct 18, 2026
@proton0210
proton0210 changed the base branch from main to refactor October 18, 2026 15:53
@proton0210 proton0210 closed this Oct 18, 2026
@github-actions github-actions Bot added size/s PR size: S and removed size/s PR size: S labels Oct 18, 2026
@github-actions github-actions Bot added size/s PR size: S and removed size/s PR size: S labels Oct 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/s PR size: S

Projects

None yet

Development

Successfully merging this pull request may close these issues.

agentcore dev container fails with LoginTokenLoadError when using aws login credentials