Skip to content

Add client steps implementation to support existing functionalities#6966

Open
alfonso-noriega wants to merge 2 commits into03-10-create_abstract_client_steps_infrastracture_to_externalize_the_ap_modules_client_configurationsfrom
03-10-add_client_steps_implementation_to_support_existing_functionalities
Open

Add client steps implementation to support existing functionalities#6966
alfonso-noriega wants to merge 2 commits into03-10-create_abstract_client_steps_infrastracture_to_externalize_the_ap_modules_client_configurationsfrom
03-10-add_client_steps_implementation_to_support_existing_functionalities

Conversation

@alfonso-noriega
Copy link
Contributor

@alfonso-noriega alfonso-noriega commented Mar 10, 2026

Add build step infrastructure for extension asset management

WHY are these changes introduced?

This introduces a flexible build step system to handle various asset copying and processing needs for different extension types, replacing hardcoded build logic with configurable steps.

WHAT is this pull request doing?

  • Adds 'admin' to the CONFIG_EXTENSION_IDS array for admin extensions
  • Creates new build step executors:
    • executeIncludeAssetsStep - handles pattern-based, static, and config-key-driven asset copying with comprehensive test coverage
    • executeCopyStaticAssetsStep - copies static assets defined in extension build manifests
    • executeCreateTaxStubStep - generates minimal JavaScript stub files for tax calculation extensions
  • Implements a centralized step router (executeStepByType) that dispatches to appropriate handlers based on step type
  • Supports multiple inclusion strategies:
    • Pattern-based file selection using glob patterns
    • Static file/directory copying with optional destination paths
    • Configuration key resolution for dynamic path discovery
    • Configurable structure preservation and flattening options

How to test your changes?

  1. Create an extension with various asset types (static files, pattern-matched files, config-driven paths)
  2. Configure build steps using the new include_assets step type with different inclusion strategies
  3. Run the build process and verify assets are copied correctly to output directories
  4. Test with admin extensions to ensure they're recognized as config extensions
  5. Run the comprehensive test suite for include-assets-step.test.ts

Measuring impact

How do we know this change was effective? Please choose one:

  • n/a - this doesn't need measurement, e.g. a linting rule or a bug-fix

Checklist

  • I've considered possible cross-platform impacts (Mac, Linux, Windows)
  • I've considered possible documentation changes

Copy link
Contributor Author

alfonso-noriega commented Mar 10, 2026

Warning

This pull request is not mergeable via GitHub because a downstack PR is open. Once all requirements are satisfied, merge this PR as a stack on Graphite.
Learn more

This stack of pull requests is managed by Graphite. Learn more about stacking.

@alfonso-noriega alfonso-noriega marked this pull request as ready for review March 10, 2026 08:35
@alfonso-noriega alfonso-noriega requested a review from a team as a code owner March 10, 2026 08:35
@github-actions
Copy link
Contributor

We detected some changes at packages/*/src and there are no updates in the .changeset.
If the changes are user-facing, run pnpm changeset add to track your changes and include them in the next release CHANGELOG.

Caution

DO NOT create changesets for features which you do not wish to be included in the public changelog of the next CLI release.

@github-actions
Copy link
Contributor

github-actions bot commented Mar 10, 2026

Coverage report

St.
Category Percentage Covered / Total
🟡 Statements 77.28% 14707/19031
🟡 Branches 70.83% 7286/10287
🟡 Functions 76.28% 3733/4894
🟡 Lines 78.77% 13907/17655

Test suite run success

3836 tests passing in 1483 suites.

Report generated by 🧪jest coverage report action from 4feb5ae

@alfonso-noriega alfonso-noriega force-pushed the 03-10-add_client_steps_implementation_to_support_existing_functionalities branch 2 times, most recently from 9c2e1fd to 7e48497 Compare March 10, 2026 09:04
@alfonso-noriega alfonso-noriega force-pushed the 03-10-create_abstract_client_steps_infrastracture_to_externalize_the_ap_modules_client_configurations branch from 16768f3 to 59f0139 Compare March 10, 2026 09:59
@alfonso-noriega alfonso-noriega force-pushed the 03-10-add_client_steps_implementation_to_support_existing_functionalities branch from 7e48497 to 159bb73 Compare March 10, 2026 09:59
@alfonso-noriega alfonso-noriega changed the base branch from 03-10-create_abstract_client_steps_infrastracture_to_externalize_the_ap_modules_client_configurations to graphite-base/6966 March 10, 2026 10:29
@alfonso-noriega alfonso-noriega force-pushed the 03-10-add_client_steps_implementation_to_support_existing_functionalities branch from 159bb73 to e6f3577 Compare March 10, 2026 10:29
@alfonso-noriega alfonso-noriega changed the base branch from graphite-base/6966 to 03-10-clean_up_module_outputfile_calculation_and_move_it_to_the_specifications March 10, 2026 10:29
config.inclusions.map(async (entry) => {
if (entry.type === 'pattern') {
const sourceDir = entry.baseDir ? joinPath(extension.directory, entry.baseDir) : extension.directory
const destinationDir = entry.destination ? joinPath(outputDir, entry.destination) : outputDir

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Path traversal: include_assets can write outside outputDir

joinPath(outputDir, entry.destination) is used directly with user-controlled config (destination). If destination is absolute (/etc) or contains ../.., it can escape outputDir and overwrite arbitrary files on the machine running the build (CI runner, developer machine). Same class of issue exists for entry.baseDir (controls sourceDir), copySourceEntry(...destination) (static destination), copyConfigKeyEntry(...destination) (configKey destination), and copyConfigKeyEntry where the config value itself can be ../../something.

Because build manifests/config are extension-provided, a malicious extension (or compromised repo) could cause the CLI to overwrite sensitive files or poison other build artifacts.

@binks-code-reviewer
Copy link

binks-code-reviewer bot commented Mar 10, 2026

🤖 Code Review · #projects-dev-ai for questions
React with 👍/👎 or reply — all feedback helps improve the agent.

Complete - 2 findings

📋 History

❌ Failed → ✅ 1 findings → ❌ Failed → ❌ Failed → ✅ 1 findings → ✅ 2 findings

@alfonso-noriega alfonso-noriega force-pushed the 03-10-clean_up_module_outputfile_calculation_and_move_it_to_the_specifications branch from bbc0817 to 7b68eb7 Compare March 10, 2026 11:05
@alfonso-noriega alfonso-noriega force-pushed the 03-10-add_client_steps_implementation_to_support_existing_functionalities branch from e6f3577 to 3f28156 Compare March 10, 2026 11:05
@alfonso-noriega alfonso-noriega changed the base branch from 03-10-clean_up_module_outputfile_calculation_and_move_it_to_the_specifications to graphite-base/6966 March 10, 2026 11:11
@alfonso-noriega alfonso-noriega force-pushed the 03-10-add_client_steps_implementation_to_support_existing_functionalities branch from 3f28156 to 44034c5 Compare March 10, 2026 11:11
@alfonso-noriega alfonso-noriega changed the base branch from graphite-base/6966 to 03-10-create_abstract_client_steps_infrastracture_to_externalize_the_ap_modules_client_configurations March 10, 2026 11:12
@alfonso-noriega alfonso-noriega force-pushed the 03-10-create_abstract_client_steps_infrastracture_to_externalize_the_ap_modules_client_configurations branch from f9f9e63 to 59dcaa7 Compare March 10, 2026 11:24
@alfonso-noriega alfonso-noriega force-pushed the 03-10-add_client_steps_implementation_to_support_existing_functionalities branch from 44034c5 to 094a68c Compare March 10, 2026 11:24
@alfonso-noriega alfonso-noriega force-pushed the 03-10-create_abstract_client_steps_infrastracture_to_externalize_the_ap_modules_client_configurations branch from 59dcaa7 to fb4c01d Compare March 10, 2026 11:35
@alfonso-noriega alfonso-noriega force-pushed the 03-10-add_client_steps_implementation_to_support_existing_functionalities branch 2 times, most recently from 0478573 to a8b39c0 Compare March 10, 2026 12:15
@alfonso-noriega alfonso-noriega force-pushed the 03-10-add_client_steps_implementation_to_support_existing_functionalities branch from be0c2a6 to 9d3a398 Compare March 12, 2026 10:30
@alfonso-noriega alfonso-noriega force-pushed the 03-10-create_abstract_client_steps_infrastracture_to_externalize_the_ap_modules_client_configurations branch 2 times, most recently from 903f8f5 to e614518 Compare March 12, 2026 10:45
@alfonso-noriega alfonso-noriega force-pushed the 03-10-add_client_steps_implementation_to_support_existing_functionalities branch from 9d3a398 to 2df6f2a Compare March 12, 2026 10:45
@alfonso-noriega alfonso-noriega force-pushed the 03-10-create_abstract_client_steps_infrastracture_to_externalize_the_ap_modules_client_configurations branch from e614518 to b534c43 Compare March 12, 2026 12:11
@alfonso-noriega alfonso-noriega force-pushed the 03-10-add_client_steps_implementation_to_support_existing_functionalities branch from 2df6f2a to 7dc49dc Compare March 12, 2026 12:11
@alfonso-noriega alfonso-noriega force-pushed the 03-10-create_abstract_client_steps_infrastracture_to_externalize_the_ap_modules_client_configurations branch from b534c43 to ac5fd70 Compare March 12, 2026 12:30
@alfonso-noriega alfonso-noriega force-pushed the 03-10-add_client_steps_implementation_to_support_existing_functionalities branch from 7dc49dc to 6ed0e29 Compare March 12, 2026 12:30
@alfonso-noriega alfonso-noriega force-pushed the 03-10-create_abstract_client_steps_infrastracture_to_externalize_the_ap_modules_client_configurations branch from ac5fd70 to dcbe359 Compare March 12, 2026 13:19
@alfonso-noriega alfonso-noriega force-pushed the 03-10-add_client_steps_implementation_to_support_existing_functionalities branch from 6ed0e29 to ba771b8 Compare March 12, 2026 13:19
@alfonso-noriega alfonso-noriega force-pushed the 03-10-create_abstract_client_steps_infrastracture_to_externalize_the_ap_modules_client_configurations branch from dcbe359 to e5c297b Compare March 16, 2026 10:53
@alfonso-noriega alfonso-noriega force-pushed the 03-10-add_client_steps_implementation_to_support_existing_functionalities branch from ba771b8 to ac63c6b Compare March 16, 2026 10:53
@alfonso-noriega alfonso-noriega force-pushed the 03-10-create_abstract_client_steps_infrastracture_to_externalize_the_ap_modules_client_configurations branch from e5c297b to 63f01da Compare March 16, 2026 11:17
@alfonso-noriega alfonso-noriega force-pushed the 03-10-add_client_steps_implementation_to_support_existing_functionalities branch from ac63c6b to 1a2349b Compare March 16, 2026 11:17
@alfonso-noriega alfonso-noriega force-pushed the 03-10-add_client_steps_implementation_to_support_existing_functionalities branch from 1a2349b to 54efb29 Compare March 17, 2026 10:08
@alfonso-noriega alfonso-noriega force-pushed the 03-10-create_abstract_client_steps_infrastracture_to_externalize_the_ap_modules_client_configurations branch from 63f01da to 576d4ea Compare March 17, 2026 10:08
@alfonso-noriega alfonso-noriega force-pushed the 03-10-create_abstract_client_steps_infrastracture_to_externalize_the_ap_modules_client_configurations branch from 576d4ea to 70b51d3 Compare March 17, 2026 11:02
@alfonso-noriega alfonso-noriega force-pushed the 03-10-add_client_steps_implementation_to_support_existing_functionalities branch from 54efb29 to 14298db Compare March 17, 2026 11:03
@alfonso-noriega alfonso-noriega force-pushed the 03-10-create_abstract_client_steps_infrastracture_to_externalize_the_ap_modules_client_configurations branch from 70b51d3 to f140406 Compare March 17, 2026 11:07
@alfonso-noriega alfonso-noriega force-pushed the 03-10-add_client_steps_implementation_to_support_existing_functionalities branch from 14298db to ac808f8 Compare March 17, 2026 11:07
@alfonso-noriega alfonso-noriega force-pushed the 03-10-create_abstract_client_steps_infrastracture_to_externalize_the_ap_modules_client_configurations branch from f140406 to 6b7f418 Compare March 17, 2026 11:19
@alfonso-noriega alfonso-noriega force-pushed the 03-10-add_client_steps_implementation_to_support_existing_functionalities branch from ac808f8 to 4ac5668 Compare March 17, 2026 11:19
@alfonso-noriega alfonso-noriega force-pushed the 03-10-add_client_steps_implementation_to_support_existing_functionalities branch from 4ac5668 to eb9a421 Compare March 17, 2026 11:20
@alfonso-noriega alfonso-noriega force-pushed the 03-10-create_abstract_client_steps_infrastracture_to_externalize_the_ap_modules_client_configurations branch from 6b7f418 to 3c9a3bb Compare March 17, 2026 11:20
…pattern copy

- Add sanitizeDestination() that strips '..' segments from destination
  fields and emits a warning when any are removed
- Sanitize entry.destination for all three inclusion types (pattern,
  static, configKey) before it reaches any path join
- Add copy-time bounds check in copyByPattern: skip any file whose
  resolved destPath escapes outputDir and warn

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants