-
Notifications
You must be signed in to change notification settings - Fork 7
Upgrade baton-sdk to v0.4.0. #65
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
WalkthroughAdded context-aware frontend bootstrap and improved error reporting in pkg/explorer/controller.go; updated module dependencies and Go version in go.mod (baton-sdk → v0.4.0, Go → 1.25, grpc/protobuf and other deps added/upgraded). Changes
Sequence Diagram(s)sequenceDiagram
participant Router
participant runNpmInstallAndBuild
participant npm
participant openBrowser
rect rgb(235,245,255)
Router->>runNpmInstallAndBuild: ctx, projectPath
runNpmInstallAndBuild->>npm: exec.CommandContext(ctx, "npm", "install")
npm-->>runNpmInstallAndBuild: output / error
runNpmInstallAndBuild->>npm: exec.CommandContext(ctx, "npm", "run", "build")
npm-->>runNpmInstallAndBuild: output / error
end
rect rgb(235,255,235)
Router->>openBrowser: ctx, url
openBrowser->>openBrowser: exec.CommandContext(ctx, OS-specific cmd)
openBrowser-->>Router: success / error
end
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Possibly related PRs
Poem
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✨ Finishing touches
🧪 Generate unit tests
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (64)
cmd/baton/diff.gois excluded by none and included by nonecmd/baton/stats.gois excluded by none and included by nonego.sumis excluded by!**/*.sumand included by nonevendor/github.com/conductorone/baton-sdk/pb/c1/config/v1/config.pb.gois excluded by!**/*.pb.go,!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pb/c1/config/v1/config.pb.validate.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pb/c1/connector/v2/annotation_external_ticket.pb.gois excluded by!**/*.pb.go,!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pb/c1/connector/v2/annotation_external_ticket.pb.validate.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pb/c1/connector/v2/annotation_resource_tree.pb.gois excluded by!**/*.pb.go,!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pb/c1/connector/v2/annotation_resource_tree.pb.validate.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pb/c1/connector/v2/annotation_sync_id.pb.gois excluded by!**/*.pb.go,!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pb/c1/connector/v2/annotation_sync_id.pb.validate.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pb/c1/connector/v2/connector.pb.gois excluded by!**/*.pb.go,!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pb/c1/connector/v2/event_feed.pb.gois excluded by!**/*.pb.go,!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pb/c1/connector/v2/event_feed.pb.validate.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pb/c1/connector/v2/event_feed_grpc.pb.gois excluded by!**/*.pb.go,!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pb/c1/connector/v2/resource.pb.gois excluded by!**/*.pb.go,!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pb/c1/connector/v2/resource.pb.validate.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/annotations/annotations.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/connectorstore/connectorstore.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/dotc1z/c1file.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/dotc1z/c1file_attached.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/dotc1z/clone_sync.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/dotc1z/decoder.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/dotc1z/diff.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/dotc1z/dotc1z.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/dotc1z/entitlements.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/dotc1z/file.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/dotc1z/grants.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/dotc1z/manager/local/local.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/dotc1z/manager/manager.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/dotc1z/manager/s3/s3.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/dotc1z/resouce_types.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/dotc1z/resources.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/dotc1z/sql_helpers.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/dotc1z/sync_runs.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/ratelimit/http.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/ratelimit/mem_ratelimiter.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/sdk/empty_connector.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/sdk/version.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/uhttp/dbcache.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/uhttp/gocache.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/uhttp/transport.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/uhttp/wrapper.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/us3/s3.gois excluded by!vendor/**and included by nonevendor/github.com/klauspost/compress/README.mdis excluded by!vendor/**and included by nonevendor/github.com/klauspost/compress/huff0/bitreader.gois excluded by!vendor/**and included by nonevendor/github.com/klauspost/compress/internal/le/le.gois excluded by!vendor/**and included by nonevendor/github.com/klauspost/compress/internal/le/unsafe_disabled.gois excluded by!vendor/**and included by nonevendor/github.com/klauspost/compress/internal/le/unsafe_enabled.gois excluded by!vendor/**and included by nonevendor/github.com/klauspost/compress/s2sx.modis excluded by!vendor/**and included by nonevendor/github.com/klauspost/compress/zstd/README.mdis excluded by!vendor/**and included by nonevendor/github.com/klauspost/compress/zstd/bitreader.gois excluded by!vendor/**and included by nonevendor/github.com/klauspost/compress/zstd/blockdec.gois excluded by!vendor/**and included by nonevendor/github.com/klauspost/compress/zstd/blockenc.gois excluded by!vendor/**and included by nonevendor/github.com/klauspost/compress/zstd/decoder.gois excluded by!vendor/**and included by nonevendor/github.com/klauspost/compress/zstd/enc_base.gois excluded by!vendor/**and included by nonevendor/github.com/klauspost/compress/zstd/matchlen_generic.gois excluded by!vendor/**and included by nonevendor/github.com/klauspost/compress/zstd/seqdec.gois excluded by!vendor/**and included by nonevendor/github.com/klauspost/compress/zstd/seqdec_amd64.sis excluded by!vendor/**and included by nonevendor/github.com/klauspost/compress/zstd/seqdec_generic.gois excluded by!vendor/**and included by nonevendor/github.com/klauspost/compress/zstd/seqenc.gois excluded by!vendor/**and included by nonevendor/github.com/klauspost/compress/zstd/snappy.gois excluded by!vendor/**and included by nonevendor/github.com/klauspost/compress/zstd/zstd.gois excluded by!vendor/**and included by nonevendor/modules.txtis excluded by!vendor/**and included by none
📒 Files selected for processing (1)
go.mod(3 hunks)
🔇 Additional comments (3)
go.mod (3)
64-64: Verify klauspost/compress v1.18.0 compatibility.
- Changelog: no explicit breaking changes, but includes new unsafe little-endian loaders; internal flate and s2 changes (L4–L6 loading, matchlen adjustments, asm removal); deprecates Go 1.21 and adds Go 1.24 support.
- Action: run the full test suite and CI across your supported Go versions/architectures (include race detector); confirm no regressions for code relying on asm or unsafe paths and that go.mod/CI Go versions match library support; pin to v1.17.11 if you cannot validate.
6-6: Verify baton-sdk v0.4.0 compatibilityRepository imports baton-sdk pb v2 packages and uses the baton client API — confirm v0.4.0 didn't change any types/signatures used here and update callsites if needed.
- pkg/storecache/storecache.go — imports: github.com/conductorone/baton-sdk/pb/c1/connector/v2, github.com/conductorone/baton-sdk/pb/c1/reader/v2, github.com/conductorone/baton-sdk/pkg/connectorstore
- pkg/explorer/baton_service.go — imports: pb/c1/connector/v2, pb/c1/reader/v2
- pkg/explorer/resources_handler.go — ctrl.baton.GetResources(...)
- pkg/explorer/resource_handler.go — ctrl.baton.GetResourceById(...)
- pkg/explorer/principals_handler.go — ctrl.baton.GetResourcesWithPrincipalCount(...)
Run
go build ./...to surface compile errors and consult the baton-sdk v0.4.0 release notes for any breaking changes before approving the upgrade.
3-3: Go 1.25 is released — original warning is outdated.Go 1.25 was released August 2025; go.mod's
go 1.25is valid. Ensure CI/toolchain uses Go 1.25 and rungo mod tidy+ the full test suite to confirm dependency compatibility. File: go.mod (line 3).Likely an incorrect or invalid review comment.
go.mod
Outdated
| modernc.org/sqlite v1.35.0 // indirect | ||
| ) | ||
|
|
||
| replace github.com/conductorone/baton-sdk => ../baton-sdk |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
Development-only replace directive detected.
The replace directive points to a local path (../baton-sdk) which is typically used for development. Ensure this is intentional and consider whether this should be removed before merging to production.
🏁 Script executed:
#!/bin/bash
# Description: Check if ../baton-sdk directory exists and verify this is intended for development
# Expected: Confirm the local baton-sdk directory exists and understand the development setup
echo "=== Checking if ../baton-sdk directory exists ==="
if [ -d "../baton-sdk" ]; then
echo "✓ ../baton-sdk directory exists"
echo "Contents:"
ls -la ../baton-sdk/ 2>/dev/null | head -10
else
echo "✗ ../baton-sdk directory does not exist"
fi
echo -e "\n=== Checking for other replace directives in Go modules in parent directory ==="
find .. -name "go.mod" -exec echo "=== {} ===" \; -exec grep -n "replace.*baton-sdk" {} \; 2>/dev/null || echo "No other go.mod files with baton-sdk replace directives found"Length of output: 254
Fix/remove development-only replace directive (../git/go.mod:109)
The directive replace github.com/conductorone/baton-sdk => ../baton-sdk points to a non-existent local path (../baton-sdk); remove it or replace with a published module version or a CI-accessible path to avoid breaking builds.
🤖 Prompt for AI Agents
In go.mod around line 109, the replace directive "replace
github.com/conductorone/baton-sdk => ../baton-sdk" points to a non-existent
local path; remove this development-only replace or change it to a published
module version or a CI-accessible path (for example specify a semantic version
like github.com/conductorone/baton-sdk vX.Y.Z) and then run "go mod tidy" to
update module files and ensure the build resolves correctly.
2fe446c to
a2ed332
Compare
a2ed332 to
993cd6e
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (1)
pkg/explorer/controller.go (1)
97-97: Consider using a more appropriate context.Using
context.Background()creates a context that cannot be cancelled. Consider using a context with timeout or cancellation capabilities for better resource management, especially for potentially long-running npm operations.- ctx := context.Background() + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Minute) + defer cancel()You'll also need to import the
timepackage for this change.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (86)
.github/workflows/ci.yamlis excluded by none and included by none.github/workflows/main.yamlis excluded by none and included by none.github/workflows/release.yamlis excluded by none and included by none.golangci.ymlis excluded by none and included by none.gon-amd64.jsonis excluded by none and included by none.gon-arm64.jsonis excluded by none and included by none.goreleaser.docker.yamlis excluded by none and included by none.goreleaser.yamlis excluded by none and included by nonecmd/baton/diff.gois excluded by none and included by nonecmd/baton/explorer.gois excluded by none and included by nonecmd/baton/stats.gois excluded by none and included by nonego.sumis excluded by!**/*.sumand included by nonetools/rules.gois excluded by none and included by nonevendor/github.com/conductorone/baton-sdk/pb/c1/config/v1/config.pb.gois excluded by!**/*.pb.go,!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pb/c1/config/v1/config.pb.validate.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pb/c1/connector/v2/annotation_external_ticket.pb.gois excluded by!**/*.pb.go,!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pb/c1/connector/v2/annotation_external_ticket.pb.validate.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pb/c1/connector/v2/annotation_resource_tree.pb.gois excluded by!**/*.pb.go,!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pb/c1/connector/v2/annotation_resource_tree.pb.validate.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pb/c1/connector/v2/annotation_sync_id.pb.gois excluded by!**/*.pb.go,!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pb/c1/connector/v2/annotation_sync_id.pb.validate.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pb/c1/connector/v2/connector.pb.gois excluded by!**/*.pb.go,!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pb/c1/connector/v2/event_feed.pb.gois excluded by!**/*.pb.go,!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pb/c1/connector/v2/event_feed.pb.validate.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pb/c1/connector/v2/event_feed_grpc.pb.gois excluded by!**/*.pb.go,!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pb/c1/connector/v2/resource.pb.gois excluded by!**/*.pb.go,!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pb/c1/connector/v2/resource.pb.validate.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/annotations/annotations.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/connectorstore/connectorstore.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/dotc1z/c1file.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/dotc1z/c1file_attached.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/dotc1z/clone_sync.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/dotc1z/decoder.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/dotc1z/diff.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/dotc1z/dotc1z.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/dotc1z/entitlements.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/dotc1z/file.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/dotc1z/grants.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/dotc1z/manager/local/local.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/dotc1z/manager/manager.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/dotc1z/manager/s3/s3.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/dotc1z/resouce_types.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/dotc1z/resources.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/dotc1z/sql_helpers.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/dotc1z/sync_runs.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/ratelimit/http.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/ratelimit/mem_ratelimiter.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/sdk/empty_connector.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/sdk/version.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/uhttp/dbcache.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/uhttp/transport.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/uhttp/wrapper.gois excluded by!vendor/**and included by nonevendor/github.com/conductorone/baton-sdk/pkg/us3/s3.gois excluded by!vendor/**and included by nonevendor/github.com/ennyjfrick/ruleguard-logfatal/.gitignoreis excluded by!vendor/**and included by nonevendor/github.com/ennyjfrick/ruleguard-logfatal/LICENSEis excluded by!vendor/**and included by nonevendor/github.com/ennyjfrick/ruleguard-logfatal/README.mdis excluded by!vendor/**and included by nonevendor/github.com/ennyjfrick/ruleguard-logfatal/rules.gois excluded by!vendor/**and included by nonevendor/github.com/klauspost/compress/README.mdis excluded by!vendor/**and included by nonevendor/github.com/klauspost/compress/huff0/bitreader.gois excluded by!vendor/**and included by nonevendor/github.com/klauspost/compress/internal/le/le.gois excluded by!vendor/**and included by nonevendor/github.com/klauspost/compress/internal/le/unsafe_disabled.gois excluded by!vendor/**and included by nonevendor/github.com/klauspost/compress/internal/le/unsafe_enabled.gois excluded by!vendor/**and included by nonevendor/github.com/klauspost/compress/s2sx.modis excluded by!vendor/**and included by nonevendor/github.com/klauspost/compress/zstd/README.mdis excluded by!vendor/**and included by nonevendor/github.com/klauspost/compress/zstd/bitreader.gois excluded by!vendor/**and included by nonevendor/github.com/klauspost/compress/zstd/blockdec.gois excluded by!vendor/**and included by nonevendor/github.com/klauspost/compress/zstd/blockenc.gois excluded by!vendor/**and included by nonevendor/github.com/klauspost/compress/zstd/decoder.gois excluded by!vendor/**and included by nonevendor/github.com/klauspost/compress/zstd/enc_base.gois excluded by!vendor/**and included by nonevendor/github.com/klauspost/compress/zstd/matchlen_generic.gois excluded by!vendor/**and included by nonevendor/github.com/klauspost/compress/zstd/seqdec.gois excluded by!vendor/**and included by nonevendor/github.com/klauspost/compress/zstd/seqdec_amd64.sis excluded by!vendor/**and included by nonevendor/github.com/klauspost/compress/zstd/seqdec_generic.gois excluded by!vendor/**and included by nonevendor/github.com/klauspost/compress/zstd/seqenc.gois excluded by!vendor/**and included by nonevendor/github.com/klauspost/compress/zstd/snappy.gois excluded by!vendor/**and included by nonevendor/github.com/klauspost/compress/zstd/zstd.gois excluded by!vendor/**and included by nonevendor/github.com/quasilyte/go-ruleguard/dsl/LICENSEis excluded by!vendor/**and included by nonevendor/github.com/quasilyte/go-ruleguard/dsl/bundle.gois excluded by!vendor/**and included by nonevendor/github.com/quasilyte/go-ruleguard/dsl/do.gois excluded by!vendor/**and included by nonevendor/github.com/quasilyte/go-ruleguard/dsl/dsl.gois excluded by!vendor/**and included by nonevendor/github.com/quasilyte/go-ruleguard/dsl/filter.gois excluded by!vendor/**and included by nonevendor/github.com/quasilyte/go-ruleguard/dsl/internal.gois excluded by!vendor/**and included by nonevendor/github.com/quasilyte/go-ruleguard/dsl/types/ext.gois excluded by!vendor/**and included by nonevendor/github.com/quasilyte/go-ruleguard/dsl/types/type_impl.gois excluded by!vendor/**and included by nonevendor/github.com/quasilyte/go-ruleguard/dsl/types/types.gois excluded by!vendor/**and included by nonevendor/modules.txtis excluded by!vendor/**and included by none
📒 Files selected for processing (2)
go.mod(2 hunks)pkg/explorer/controller.go(5 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
- go.mod
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: Cursor Bugbot
🔇 Additional comments (6)
pkg/explorer/controller.go (6)
62-62: LGTM! Context parameter addition improves cancellation support.The function now accepts a context parameter, enabling proper cancellation and timeout handling for the npm operations.
66-66: Good use of context-aware command execution.Both npm install and npm run build commands now use
CommandContextwhich enables proper cancellation and timeout handling.Also applies to: 82-82
101-101: Excellent context propagation.The context is properly passed to both
runNpmInstallAndBuildandopenBrowserfunctions, maintaining consistency in the cancellation chain.Also applies to: 112-112
135-135: LGTM! Context parameter addition enables cancellation.The
openBrowserfunction signature update aligns with the context-aware pattern used throughout the changes.
139-139: Good use of context-aware command execution for browser launching.All platform-specific browser launch commands now use
CommandContext, enabling proper cancellation support across different operating systems.Also applies to: 141-141, 143-143
69-76: Enhanced error handling and logging improves debugging.The addition of error logging with command output and success messages provides better visibility into npm operation status, which will be helpful for troubleshooting frontend setup issues.
Also applies to: 85-92
Summary by CodeRabbit