Skip to content

fix: remove CONFIG_DIR exclusion from zip stage to preserve dependency agentcore/ packages#1015

Merged
aidandaly24 merged 1 commit intomainfrom
fix/issue-843-zip-stage-agentcore-exclusion
Apr 29, 2026
Merged

fix: remove CONFIG_DIR exclusion from zip stage to preserve dependency agentcore/ packages#1015
aidandaly24 merged 1 commit intomainfrom
fix/issue-843-zip-stage-agentcore-exclusion

Conversation

@aidandaly24
Copy link
Copy Markdown
Contributor

Description

PR #844 fixed the flat name-based agentcore exclusion in copySourceTree by threading rootDir through the recursive traversal, so only the project-root agentcore/ config directory is excluded during the copy stage. However, the same CONFIG_DIR exclusion remained in collectFiles/collectFilesSync (the zip stage).

The zip stage operates on the staging directory — not the project root. When uv pip install --target stagingDir installs a dependency that contains a top-level agentcore/ Python package (e.g., langgraph-checkpoint-aws ships langgraph_checkpoint_aws/agentcore/), the check entry.name === CONFIG_DIR && resolve(directory) === resolve(rootDir) fires at the staging root, silently stripping the package from the deployment zip.

Fix: Remove the CONFIG_DIR exclusion from collectFiles and collectFilesSync entirely. The exclusion is only needed in copySourceTree (which copies from the project root into staging and already correctly filters the config dir). By the time we zip, the project config agentcore/ was already excluded — the only agentcore/ in staging is a legitimate dependency package.

Changes:

  1. Removed rootDir parameter and CONFIG_DIR check from collectFiles (async)
  2. Removed rootDir parameter and CONFIG_DIR check from collectFilesSync
  3. Updated callers (createZipFromDir, createZipFromDirSync) to drop the rootDir argument
  4. Updated 2 existing zip tests to reflect that the zip stage no longer excludes agentcore/
  5. Added 2 new tests simulating the real staging directory scenario where a dependency's agentcore/ subpackage must survive the zip step

Related Issue

Closes #843

Documentation PR

N/A

Type of Change

  • Bug fix
  • New feature
  • Breaking change
  • Documentation update
  • Other (please describe):

Testing

How have you tested the change?

  • I ran npm run test:unit and npm run test:integ
  • I ran npm run typecheck
  • I ran npm run lint
  • If I modified src/assets/, I ran npm run test:update-snapshots and committed the updated snapshots

Unit tests: 41/41 packaging tests pass (39 existing + 2 new staging-scenario tests).

End-to-end verification:

  1. Built and globally installed the patched CLI
  2. agentcore createagentcore add agent (Strands/Python)
  3. uv add langgraph-checkpoint-aws (installs v1.0.7 with agentcore/ subpackage)
  4. agentcore package → inspected zip: all 11 langgraph_checkpoint_aws/agentcore/* files present
  5. agentcore deployagentcore invoke → agent responded successfully, no ModuleNotFoundError

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.

…y agentcore/ packages

PR #844 correctly removed the flat name-based agentcore exclusion and
threaded rootDir through copySourceTree, but the same CONFIG_DIR check
remained in collectFiles/collectFilesSync (the zip stage). Since the zip
stage operates on the staging directory — not the project root — the
check incorrectly stripped any top-level agentcore/ Python package
installed by uv (e.g., langgraph_checkpoint_aws/agentcore/) from the
deployment artifact, causing ModuleNotFoundError at runtime.

The CONFIG_DIR exclusion is only needed in copySourceTree (which copies
from the project root into staging). By the time we zip, the project
config dir was already filtered out — the only agentcore/ in staging is
a legitimate dependency package.

Closes #843
@aidandaly24 aidandaly24 requested a review from a team April 29, 2026 14:23
@github-actions github-actions Bot added size/s PR size: S agentcore-harness-reviewing AgentCore Harness review in progress labels Apr 29, 2026
@agentcore-cli-automation
Copy link
Copy Markdown

LGTM — the change is correct and minimal.

Verified:

  • The only callers of createZipFromDir(Sync) are python.ts and node.ts, both passing a staging directory (never the project root).
  • copySourceTree already excludes <srcDir>/agentcore/ before the zip stage runs, so the project's config agentcore/ can never end up at the staging root.
  • Any top-level agentcore/ present in the staging root can therefore only be a dependency installed by uv pip install --target stagingDir and should be preserved.
  • CONFIG_DIR is still used elsewhere in the file, so the import is not orphaned.
  • Tests cover both the existing fixture (now asserting the zip preserves top-level agentcore/) and the real staging scenario.

One minor note on the PR description (not blocking): the end-to-end example uses langgraph-checkpoint-aws, whose agentcore/ is nested under langgraph_checkpoint_aws/ rather than sitting at the staging root. Nested agentcore/ directories were already preserved by the post-#844 zip code (the resolve(directory) === resolve(rootDir) guard wouldn't fire for them), so that specific package isn't actually a repro of the remaining bug. The fix is still valid — it closes a real gap for any dependency that would install a top-level agentcore/ package into staging — but the description's framing of which files were being stripped may be worth clarifying in the commit message for future archaeology.

@github-actions
Copy link
Copy Markdown
Contributor

Coverage Report

Status Category Percentage Covered / Total
🔵 Lines Unknown% 0 / 0
🔵 Statements Unknown% 0 / 0
🔵 Functions Unknown% 0 / 0
🔵 Branches Unknown% 0 / 0
Generated in workflow #2081 for commit 9c155d0 by the Vitest Coverage Report Action

@github-actions github-actions Bot removed the agentcore-harness-reviewing AgentCore Harness review in progress label Apr 29, 2026
@aidandaly24 aidandaly24 merged commit d1e5241 into main Apr 29, 2026
26 checks passed
@aidandaly24 aidandaly24 deleted the fix/issue-843-zip-stage-agentcore-exclusion branch April 29, 2026 15:41
aidandaly24 added a commit that referenced this pull request Apr 29, 2026
* chore: bump version to 0.12.0 (#1002)

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

* test: remove 44 render-only and framework-testing tests (#998)

* test: remove 44 render-only and framework-testing tests

Delete TUI component test files that only verify prop passthrough or
framework behavior (Ink rendering, setInterval lifecycle) without
testing any application logic:

- Cursor.test.tsx (5 tests): setInterval/clearInterval assertions
- Header.test.tsx (4 tests): title/subtitle string presence
- HelpText.test.tsx (2 tests): static string rendering
- AwsTargetConfigUI.test.tsx (7 tests): help text string lookups
- ConfirmReview.test.tsx (6 tests): field label rendering
- LogLink.test.tsx (4 tests): prop passthrough
- ScreenHeader.test.tsx (3 tests): prop passthrough
- FatalError.test.tsx (5 tests): prop passthrough

Trim Panel.test.tsx (6→3) and Screen.test.tsx (8→3), keeping only
tests that verify real logic: border structure, responsive width
adaptation, keyboard exit handling, and exitEnabled guard.

Remove tautological expect(true).toBe(true) tests from
assets.snapshot.test.ts; use describe.skipIf for empty asset dirs.

Kept all tests in StepIndicator, ScreenLayout, TwoColumn, NextSteps,
LogPanel, PathInput, and useFetchAccessFlow — audit flagged some as
framework tests but they verify real conditional/interaction logic.

* fix: restore AwsTargetConfigUI tests — pure function, not render test

getAwsConfigHelpText is a switch over AwsConfigPhase that maps states
to help strings. The undefined return for loading/terminal phases is a
contract consumed by DeployScreen.tsx via ?? HELP_TEXT.EXIT. These tests
guard that fallback, not framework rendering behavior.

* fix(import): use GatewayNameSchema for gateway import name validation (#1011)

The import gateway command used NAME_REGEX which only allowed
underscores and max 48 chars, rejecting valid gateway names with
hyphens like "agentcore-gateway". Switch to GatewayNameSchema which
matches the actual AWS API: alphanumeric with hyphens, up to 100 chars.

Constraint: AWS CreateGateway API allows [0-9a-zA-Z] with hyphens
Rejected: Updating NAME_REGEX | it is shared with other import commands that have different naming rules
Confidence: high
Scope-risk: narrow

* feat: add CloudWatch traces API for web UI (#997)

* fix: remove CONFIG_DIR exclusion from zip stage to preserve dependency agentcore/ packages (#1015)

PR #844 correctly removed the flat name-based agentcore exclusion and
threaded rootDir through copySourceTree, but the same CONFIG_DIR check
remained in collectFiles/collectFilesSync (the zip stage). Since the zip
stage operates on the staging directory — not the project root — the
check incorrectly stripped any top-level agentcore/ Python package
installed by uv (e.g., langgraph_checkpoint_aws/agentcore/) from the
deployment artifact, causing ModuleNotFoundError at runtime.

The CONFIG_DIR exclusion is only needed in copySourceTree (which copies
from the project root into staging). By the time we zip, the project
config dir was already filtered out — the only agentcore/ in staging is
a legitimate dependency package.

Closes #843

* ci: add coordinated main + preview release workflow (#995)

* ci: add coordinated main + preview release workflow

Adds a single workflow_dispatch that releases both branches together,
ensuring they stay in sync on npm.

* fix: address review — bump script compat, pre-publish verification, drop unused artifacts

- Preview bump now uses `prerelease --prerelease-tag preview` which the
  bump-version.ts script actually accepts
- Added verify-merges job that checks both main and preview have the
  expected versions before either publish runs (prevents drift)
- Both publish jobs now depend on verify-merges instead of each other,
  so neither publishes unless both PRs are confirmed merged
- Removed upload-artifact steps from test jobs since publish jobs
  rebuild from source post-merge

* fix: auto-rebase preview onto main in preflight step

Instead of failing when preview isn't rebased, the workflow now
rebases automatically. If there are conflicts, it aborts and
directs the user to resolve manually.

* ci: add sync-preview workflow, simplify release preflight

- New sync-preview.yml: runs on every push to main, auto-rebases
  preview onto main. Silently skips on conflicts (no failure).
- Release workflow preflight reverted to a simple check — relies
  on sync-preview having already done the rebase.

* fix: use merge instead of rebase for preview sync

Rebase overwrites preview-specific values (package version, tests).
Merge preserves preview's divergent files and only conflicts when
both branches touch the same lines.

* fix: concurrency control, conflict notifications, CDK tag TODO

- Add concurrency group to sync-preview to prevent parallel race
- On merge conflict, auto-create a GitHub issue (deduplicated) instead
  of silently skipping
- Add TODO comment for CDK preview dist-tag in prepare-preview

* fix: create PR with conflict markers instead of issue on merge conflict

On conflict, sync-preview now:
- Creates a branch with the merge conflict markers committed
- Opens a PR targeting preview with resolution instructions
- Tags the original commit author for visibility
- Deduplicates (skips if a sync PR is already open)

* fix: resolve merge conflicts for main → preview sync

Keep preview-specific values (version 1.0.0-preview.3, resolveAgentOrHarness,
harness CloudWatch trace support, preview changelog entries). Accept main's
changes for everything else (as RouteContext in test).

---------

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: Tejas Kashinath <42380254+tejaskash@users.noreply.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: Aidan Daly <99039782+aidandaly24@users.noreply.github.com>
Co-authored-by: Gitika <53349492+notgitika@users.noreply.github.com>
Co-authored-by: Aidan Daly <aidandal@amazon.com>
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 directory incorrectly excluded from CodeZip artifact when used as a Python package name

3 participants