Conversation
* Align registry names with AWS CLI conventions Rename 7 services to match AWS CLI naming: - computeoptimizer → compute-optimizer - cognito → cognito-idp - config → configservice - costexplorer → ce - eventbridge → events - macie → macie2 - sfn → stepfunctions Old names preserved as aliases for backward compatibility. Closes #65 * Fix pseudo-ARN prefix to match registry service name (ce) * Add comment explaining pseudo-ARN format for Cost Explorer * Rename directories to align with AWS CLI conventions - Service dirs: costexplorer→ce, eventbridge→events, sfn→stepfunctions, cognito→cognito-idp, config→configservice, macie→macie2, computeoptimizer→compute-optimizer, servicequotas→service-quotas, licensemanager→license-manager, networkfirewall→network-firewall - Resource dirs: hyphenate compound names (e.g., loggroups→log-groups) - Update imports and ARN mappings Closes #65 * Rename bedrock dirs to kebab-case for AWS CLI consistency * Fix DAO error strings and deduplicate client helpers * Fix error strings and deduplicate client helpers * Fix package names to match directory names (events, stepfunctions) * Add develop branch to CI triggers
* feat: support ALL_PROXY environment variable (#69) * feat: propagate ALL_PROXY to HTTP_PROXY and configure NO_PROXY Extend proxy support based on issue #69 feedback: - Propagate ALL_PROXY to both HTTP_PROXY and HTTPS_PROXY - Auto-configure NO_PROXY for AWS credential endpoints: - 169.254.169.254 (EC2 IMDS) - 169.254.170.2 (ECS Task Role) - 169.254.170.23 (EKS Pod Identity) - Preserve existing NO_PROXY entries, only add missing endpoints Refs #69, #67 * fix: default NO_PROXY to IMDS only and remove proxy value from logs - NO_PROXY now only includes EC2 IMDS (169.254.169.254) by default - ECS/EKS endpoints can be added via config (TODO #67) - Remove proxy URL from log output to avoid credential exposure * refactor: simplify splitNoProxy and use tagged switch in parseFlags * refactor: separate NO_PROXY config from ALL_PROXY propagation configureNoProxy() now runs independently when any proxy is set, not tied to ALL_PROXY propagation. Cleaner separation of concerns. * refactor: remove lowercase env var support for simplicity * refactor: remove NO_PROXY auto-configuration * refactor: skip proxy propagation for --help/--version and cleanup test * test: add test case for lowercase all_proxy not supported
* feat: add alias completion in command mode (#70) Include aliases in GetSuggestions() so :cost+Tab suggests cost-explorer. Self-referential aliases (sfn→sfn) excluded from suggestions. * refactor: use prefix+fuzzy for diff completion * refactor: use CutPrefix and cache GetAliases * refactor: extract match functions to shared module - Move fuzzyMatch and matchNamesWithFallback to match.go - Make :tag/:tags clear behavior explicit - Sort suggestions alphabetically (services + aliases) * refactor: cache GetAliasesForService and sort match results * refactor: unify command parser pattern for sort and login * test: add cache concurrency tests and improve comments * refactor: use CutPrefix in ecs tasks render * refactor: use CutSuffix in parseNumericValue * fix: quote profile name in error message for clarity * fix: lowercase pattern in fuzzyMatch for case insensitivity * chore: remove .claude symlink * chore: add .claude to gitignore * fix: lowercase pattern in matchNamesWithFallback prefix check * fix: return defensive copy from alias cache methods
…79) * feat: add config.yaml support for timeouts, concurrency, persistence (#67, #50) - Add ~/.config/claws/config.yaml for configurable timeouts/concurrency - Add --persist/--no-persist flags for region/profile persistence - Persist disabled by default, startup values always loaded - Replace hardcoded timeout constants with config values * docs: add config file docs, use config for max concurrent fetches * refactor: remove unused ReloadFile, add negative value validation * refactor: unify mutex pattern in config package * refactor: add thread safety to Save, unify GetStartup lock pattern * refactor: add shared lock helpers, atomic config save * refactor: rename NoPersist to PersistEnabled for clarity * refactor: add MetricsWindow config, consolidate lock helpers - Add MetricsWindow (15m default) to FileConfig for CloudWatch metrics - Move lock helpers from internal/sync to internal/config - Update cloudwatch.go to use config.File().MetricsWindow() * refactor: move MetricsWindow to cloudwatch section, unify PersistenceEnabled naming * refactor: unify PersistenceEnabled to FileConfig, copy slice in GetStartup * fix: deep copy Regions in Save(), refactor startup config logic - Fix data race in Save() by deep copying Startup.Regions slice - Extract applyStartupConfig() helper for cleaner precedence handling - Reduce GetStartup() calls from 2 to 1 Addresses PR #79 review feedback. * fix: apply startup regions regardless of profile source
* Align naming conventions with AWS CLI (#71) * Align registry names with AWS CLI conventions Rename 7 services to match AWS CLI naming: - computeoptimizer → compute-optimizer - cognito → cognito-idp - config → configservice - costexplorer → ce - eventbridge → events - macie → macie2 - sfn → stepfunctions Old names preserved as aliases for backward compatibility. Closes #65 * Fix pseudo-ARN prefix to match registry service name (ce) * Add comment explaining pseudo-ARN format for Cost Explorer * Rename directories to align with AWS CLI conventions - Service dirs: costexplorer→ce, eventbridge→events, sfn→stepfunctions, cognito→cognito-idp, config→configservice, macie→macie2, computeoptimizer→compute-optimizer, servicequotas→service-quotas, licensemanager→license-manager, networkfirewall→network-firewall - Resource dirs: hyphenate compound names (e.g., loggroups→log-groups) - Update imports and ARN mappings Closes #65 * Rename bedrock dirs to kebab-case for AWS CLI consistency * Fix DAO error strings and deduplicate client helpers * Fix error strings and deduplicate client helpers * Fix package names to match directory names (events, stepfunctions) * Add develop branch to CI triggers * feat: propagate ALL_PROXY to HTTP_PROXY/HTTPS_PROXY (#74) * feat: support ALL_PROXY environment variable (#69) * feat: propagate ALL_PROXY to HTTP_PROXY and configure NO_PROXY Extend proxy support based on issue #69 feedback: - Propagate ALL_PROXY to both HTTP_PROXY and HTTPS_PROXY - Auto-configure NO_PROXY for AWS credential endpoints: - 169.254.169.254 (EC2 IMDS) - 169.254.170.2 (ECS Task Role) - 169.254.170.23 (EKS Pod Identity) - Preserve existing NO_PROXY entries, only add missing endpoints Refs #69, #67 * fix: default NO_PROXY to IMDS only and remove proxy value from logs - NO_PROXY now only includes EC2 IMDS (169.254.169.254) by default - ECS/EKS endpoints can be added via config (TODO #67) - Remove proxy URL from log output to avoid credential exposure * refactor: simplify splitNoProxy and use tagged switch in parseFlags * refactor: separate NO_PROXY config from ALL_PROXY propagation configureNoProxy() now runs independently when any proxy is set, not tied to ALL_PROXY propagation. Cleaner separation of concerns. * refactor: remove lowercase env var support for simplicity * refactor: remove NO_PROXY auto-configuration * refactor: skip proxy propagation for --help/--version and cleanup test * test: add test case for lowercase all_proxy not supported * feat: add alias completion in command mode (#76) * feat: add alias completion in command mode (#70) Include aliases in GetSuggestions() so :cost+Tab suggests cost-explorer. Self-referential aliases (sfn→sfn) excluded from suggestions. * refactor: use prefix+fuzzy for diff completion * refactor: use CutPrefix and cache GetAliases * refactor: extract match functions to shared module - Move fuzzyMatch and matchNamesWithFallback to match.go - Make :tag/:tags clear behavior explicit - Sort suggestions alphabetically (services + aliases) * refactor: cache GetAliasesForService and sort match results * refactor: unify command parser pattern for sort and login * test: add cache concurrency tests and improve comments * refactor: use CutPrefix in ecs tasks render * refactor: use CutSuffix in parseNumericValue * fix: quote profile name in error message for clarity * fix: lowercase pattern in fuzzyMatch for case insensitivity * chore: remove .claude symlink * chore: add .claude to gitignore * fix: lowercase pattern in matchNamesWithFallback prefix check * fix: return defensive copy from alias cache methods
Sync main into develop (merge commit)
PR Review: Release v0.6.1This is a well-structured release that adds several valuable features. Below is a comprehensive review covering code quality, potential issues, performance, security, and test coverage. ✅ Strengths1. Excellent Code Quality
2. Good Design Patterns
3. Proper Precedence HandlingThe
|
| Category | Rating | Notes |
|---|---|---|
| Code Quality | ⭐⭐⭐⭐⭐ | Excellent structure, clean code, good practices |
| Test Coverage | ⭐⭐⭐⭐☆ | Very good, but missing concurrency tests |
| Security | ⭐⭐⭐⭐☆ | Good, minor DoS risk with unbounded arrays |
| Performance | ⭐⭐⭐⭐☆ | Good design, could optimize frequent saves |
| Documentation | ⭐⭐⭐⭐⭐ | Excellent README updates with examples |
💡 Recommendations Summary
High Priority
- Add upper bounds validation for concurrency and timeout values
- Add validation for config file values (regions, profiles)
- Consider debouncing
Save()calls to reduce I/O
Medium Priority
- Add concurrency tests for config file operations
- Document the double-default-check pattern or simplify it
- Limit maximum number of startup regions
Low Priority
- Add comments explaining file write error handling strategy
- Consider caching timeout values to reduce lock contention
- Make YAML
omitemptyusage consistent
✨ Conclusion
This is a high-quality PR that adds valuable functionality with excellent test coverage and clean architecture. The issues identified are mostly minor refinements rather than critical bugs. The atomic file writes, thread-safe access, and graceful fallbacks demonstrate mature engineering practices.
Recommendation: Approve with minor suggestions for follow-up improvements.
Great work! 🚀
Generated by Claude Code PR Review
Summary
Changes
~/.config/claws/config.yamlfor persistent settingssfn→stepfunctions)