ace-support-core 0.29.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.ace-defaults/core/settings.yml +36 -0
- data/CHANGELOG.md +460 -0
- data/LICENSE +21 -0
- data/README.md +34 -0
- data/Rakefile +14 -0
- data/lib/ace/core/atoms/command_executor.rb +239 -0
- data/lib/ace/core/atoms/config_summary.rb +220 -0
- data/lib/ace/core/atoms/env_parser.rb +76 -0
- data/lib/ace/core/atoms/file_reader.rb +184 -0
- data/lib/ace/core/atoms/glob_expander.rb +175 -0
- data/lib/ace/core/atoms/process_terminator.rb +39 -0
- data/lib/ace/core/atoms/template_parser.rb +222 -0
- data/lib/ace/core/cli/config_summary_mixin.rb +55 -0
- data/lib/ace/core/cli.rb +192 -0
- data/lib/ace/core/config_discovery.rb +176 -0
- data/lib/ace/core/errors.rb +14 -0
- data/lib/ace/core/models/config_templates.rb +87 -0
- data/lib/ace/core/molecules/env_loader.rb +128 -0
- data/lib/ace/core/molecules/file_aggregator.rb +196 -0
- data/lib/ace/core/molecules/frontmatter_free_policy.rb +34 -0
- data/lib/ace/core/molecules/output_formatter.rb +433 -0
- data/lib/ace/core/molecules/prompt_cache_manager.rb +141 -0
- data/lib/ace/core/organisms/config_diff.rb +187 -0
- data/lib/ace/core/organisms/config_initializer.rb +125 -0
- data/lib/ace/core/organisms/environment_manager.rb +142 -0
- data/lib/ace/core/version.rb +7 -0
- data/lib/ace/core.rb +144 -0
- metadata +115 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 4c20a482d34c00392df91a19c30457d4e1331881866b4b370f2a30357f21cf93
|
|
4
|
+
data.tar.gz: f611793d59417fec303b2bea1a5b75d3646567ea793826024c71c7d6107f6f58
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 1754e407e0104d2fc73015dd9462ea5e7a55a390fb13e19a7cc4957594e04b2ae2ffa6a68657f1baee39769394f89e712eedf1dbdf016b34c534ceab3132ca58
|
|
7
|
+
data.tar.gz: 3d1998c93d1d327f603eaaa00e3cde9e7c58c551fcbc2c2ecdbd60b9b75dce8ef9550502404672f764b30b5a39fe01f7d0fe4f06c5e27e77890853632e33903f
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# ace-support-core configuration
|
|
2
|
+
# Copy to .ace/core/settings.yml in your project and customize
|
|
3
|
+
#
|
|
4
|
+
# Configuration cascade (ADR-022):
|
|
5
|
+
# 1. .ace-defaults/core/settings.yml (gem defaults - this file)
|
|
6
|
+
# 2. ~/.ace/core/settings.yml (user defaults)
|
|
7
|
+
# 3. .ace/core/settings.yml (project overrides)
|
|
8
|
+
|
|
9
|
+
# Core component settings
|
|
10
|
+
core:
|
|
11
|
+
# CommandExecutor settings
|
|
12
|
+
command_executor:
|
|
13
|
+
timeout: 30 # Default timeout in seconds for command execution
|
|
14
|
+
|
|
15
|
+
ace:
|
|
16
|
+
# Project identification
|
|
17
|
+
project:
|
|
18
|
+
name: "your-project"
|
|
19
|
+
type: "application" # Options: application, gem, monorepo
|
|
20
|
+
|
|
21
|
+
# Configuration cascade settings (optional)
|
|
22
|
+
config_cascade:
|
|
23
|
+
merge_strategy: deep # How to merge configs: deep, shallow, replace
|
|
24
|
+
array_strategy: replace # How to handle arrays: replace, concat, union
|
|
25
|
+
|
|
26
|
+
# Environment variables (optional)
|
|
27
|
+
environment:
|
|
28
|
+
load_dotenv: true
|
|
29
|
+
dotenv_files:
|
|
30
|
+
- ".env.local" # Local overrides (gitignored)
|
|
31
|
+
- ".env" # Project defaults
|
|
32
|
+
|
|
33
|
+
# Project-specific settings (optional)
|
|
34
|
+
settings:
|
|
35
|
+
verbose_logging: false
|
|
36
|
+
cache_ttl: 3600 # 1 hour
|
data/CHANGELOG.md
ADDED
|
@@ -0,0 +1,460 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to ace-core will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
## [0.29.0] - 2026-03-23
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
- Refreshed README with "How It Works" section and `ace-framework` CLI reference in intro and footer navigation.
|
|
14
|
+
|
|
15
|
+
### Technical
|
|
16
|
+
- Removed phantom `handbook/**/*` glob from gemspec (no handbook directory exists).
|
|
17
|
+
|
|
18
|
+
## [0.28.3] - 2026-03-22
|
|
19
|
+
|
|
20
|
+
### Added
|
|
21
|
+
- Added `Ace::Core::Molecules::FrontmatterFreePolicy` to centralize frontmatter-free pattern defaults and path matching logic for cross-package reuse.
|
|
22
|
+
|
|
23
|
+
## [0.28.2] - 2026-03-22
|
|
24
|
+
|
|
25
|
+
### Technical
|
|
26
|
+
- Corrected README namespace and dependency references to match current `ace-support-config` API usage and gemspec version constraints.
|
|
27
|
+
|
|
28
|
+
## [0.28.1] - 2026-03-22
|
|
29
|
+
|
|
30
|
+
### Technical
|
|
31
|
+
- Refreshed README structure with consistent tagline, installation, basic usage, API overview, and ACE project footer
|
|
32
|
+
|
|
33
|
+
## [0.28.0] - 2026-03-18
|
|
34
|
+
|
|
35
|
+
### Changed
|
|
36
|
+
- Migrated CLI infrastructure classes (`Error`, `Base`, `StandardOptions`, `RegistryDsl`, `VersionCommand`, `HelpCommand`) to ace-support-cli. Consumers now use `Ace::Support::Cli::*` namespace directly.
|
|
37
|
+
- Removed thin wrappers (`HelpConcise`, `DefaultRouting`, `HelpRouter`, `CommandGroups`) that are no longer needed.
|
|
38
|
+
- Updated ace-support-cli dependency constraint from `~> 0.3` to `~> 0.6`.
|
|
39
|
+
- `ConfigSummaryMixin` remains in ace-support-core (depends on `Ace::Core::Atoms::ConfigSummary`).
|
|
40
|
+
|
|
41
|
+
## [0.27.0] - 2026-03-18
|
|
42
|
+
|
|
43
|
+
### Changed
|
|
44
|
+
- Removed legacy backward-compatibility behavior as part of the 0.10 cleanup release.
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
## [0.26.0] - 2026-03-15
|
|
48
|
+
|
|
49
|
+
### Changed
|
|
50
|
+
- Migrated CLI support modules from `Ace::Core::CLI::DryCli::*` to `Ace::Core::CLI::*` with new files under `lib/ace/core/cli/`.
|
|
51
|
+
- Replaced `dry-cli` runtime dependency with `ace-support-cli`.
|
|
52
|
+
- Updated `lib/ace/core.rb` requires to load new CLI module paths.
|
|
53
|
+
- Added backward-compatible `DryCli` constant shims and `dry_cli/` require stubs for downstream consumers pending migration.
|
|
54
|
+
|
|
55
|
+
### Removed
|
|
56
|
+
- Deleted original `lib/ace/core/cli/dry_cli/` implementation (formatter monkey-patches, `ArgvCoalescer`).
|
|
57
|
+
|
|
58
|
+
## [0.25.4] - 2026-03-13
|
|
59
|
+
|
|
60
|
+
### Added
|
|
61
|
+
- Added `dev/spikes/option_parser_cli_spike.rb` and `dev/spikes/run_option_parser_cli_spike.rb` to validate OptionParser end-to-end coercion, positional parsing, and error behavior for the upcoming `ace-support-cli` migration.
|
|
62
|
+
|
|
63
|
+
## [0.25.3] - 2026-03-12
|
|
64
|
+
|
|
65
|
+
### Fixed
|
|
66
|
+
- Re-exported `Ace::Core::Atoms::CommandExecutor` from `ace/core` so callers using the shared core entrypoint can access the command executor without an extra direct require.
|
|
67
|
+
|
|
68
|
+
## [0.25.2] - 2026-03-04
|
|
69
|
+
|
|
70
|
+
### Changed
|
|
71
|
+
- PromptCacheManager session paths now use `.ace-local/<short-name>/sessions`.
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
## [0.25.1] - 2026-03-04
|
|
75
|
+
|
|
76
|
+
### Changed
|
|
77
|
+
- Remove dependency on `ace-b36ts` and `ace-support-items` (no longer needed after moving `TmpWorkspace` to `ace-support-items`)
|
|
78
|
+
|
|
79
|
+
## [0.25.0] - 2026-02-26
|
|
80
|
+
|
|
81
|
+
### Added
|
|
82
|
+
- `ArgvCoalescer` utility for coalescing repeated CLI flags into comma-separated values, working around dry-cli's `type: :array` limitation
|
|
83
|
+
|
|
84
|
+
## [0.24.1] - 2026-02-23
|
|
85
|
+
|
|
86
|
+
### Removed
|
|
87
|
+
- Removed legacy ConfigResolver wrapper with deprecated search_paths/file_patterns API
|
|
88
|
+
- Removed legacy integration tests superseded by ace-support-config
|
|
89
|
+
|
|
90
|
+
### Technical
|
|
91
|
+
- Updated internal dependency version constraints to current releases
|
|
92
|
+
|
|
93
|
+
## [0.24.0] - 2026-02-22
|
|
94
|
+
|
|
95
|
+
### Added
|
|
96
|
+
- `HelpCommand.build` helper for creating standard top-level help commands in dry-cli registries
|
|
97
|
+
|
|
98
|
+
### Changed
|
|
99
|
+
- Drop DWIM default routing from `DefaultRouting` — empty args now show help instead of routing to a default command
|
|
100
|
+
- Simplify `DefaultRouting` and `HelpRouter` to thin compatibility shims
|
|
101
|
+
- Remove DWIM-dependent integration tests from usage_formatter_test
|
|
102
|
+
|
|
103
|
+
## [0.23.2] - 2026-02-22
|
|
104
|
+
|
|
105
|
+
### Added
|
|
106
|
+
- Integration tests for two-tier help routing (-h concise vs --help full) via DefaultRouting.start
|
|
107
|
+
|
|
108
|
+
### Technical
|
|
109
|
+
- Documented dry-cli 1.4.1 version coupling in COMPATIBILITY comments for monkey-patch modules
|
|
110
|
+
|
|
111
|
+
## [0.23.1] - 2026-02-22
|
|
112
|
+
|
|
113
|
+
### Fixed
|
|
114
|
+
- Clear `@_original_arguments` after use in help method to prevent state leakage across CLI calls
|
|
115
|
+
- Add nil-safe navigation (`command&.description`) for subcommand description access
|
|
116
|
+
- Standardize hidden check to use `respond_to?(:hidden)` guard in all usage_formatter locations
|
|
117
|
+
- Replace `instance_variable_set` on external dry-cli Node objects with local Hash mapping for command name tracking
|
|
118
|
+
- Fix CHANGELOG entry ordering (0.23.0 was appended at end instead of after [Unreleased])
|
|
119
|
+
|
|
120
|
+
## [0.23.0] - 2026-02-22
|
|
121
|
+
|
|
122
|
+
### Added
|
|
123
|
+
- Two-tier CLI help: `-h` shows concise format, `--help` shows full ALL-CAPS reference (NAME, USAGE, DESCRIPTION, ARGUMENTS, OPTIONS, EXAMPLES)
|
|
124
|
+
- `help_formatter.rb` - Monkey-patch `Dry::CLI::Banner` with ALL-CAPS sections and duplicate command name fix in examples
|
|
125
|
+
- `help_concise.rb` - Concise `-h` format with compact options (no descriptions), max 3 examples, footer
|
|
126
|
+
- `usage_formatter.rb` - Monkey-patch `Dry::CLI::Usage` with COMMANDS header, first-line-only descriptions, command group support
|
|
127
|
+
- `command_groups.rb` - Mixin for CLI registries to define COMMAND_GROUPS for grouped `--help` output
|
|
128
|
+
- `standard_options.rb` - Canonical description constants (QUIET_DESC, VERBOSE_DESC, DEBUG_DESC, HELP_DESC)
|
|
129
|
+
- Updated `default_routing.rb` to distinguish `-h` (concise) from `--help` (full) at registry level
|
|
130
|
+
|
|
131
|
+
### Fixed
|
|
132
|
+
- Duplicate command name in examples (Banner strips prefix automatically)
|
|
133
|
+
- Hidden subcommands now filtered from help output
|
|
134
|
+
|
|
135
|
+
### Changed
|
|
136
|
+
- `default_routing.rb` routes `-h` to concise format, `--help` to full format
|
|
137
|
+
- `base.rb` wires all new formatter modules
|
|
138
|
+
- Renamed `Ace::Core::CLI` class to `Ace::Core::FrameworkCLI` to avoid collision with CLI module
|
|
139
|
+
- Fixed ace-framework exe path and help output formatting
|
|
140
|
+
|
|
141
|
+
## [0.22.2] - 2026-01-31
|
|
142
|
+
|
|
143
|
+
### Fixed
|
|
144
|
+
- Preserve original message in `CLI::Error#message` while keeping "Error:" prefix only in `to_s`
|
|
145
|
+
- Fix Ruby 3 keyword argument handling in ConfigSummaryMixin tests (use explicit hash braces)
|
|
146
|
+
- Fix VersionCommandTest to use `AceTestCase` base class for `capture_stdout` access
|
|
147
|
+
- Fix `test_version_command_in_registry` to properly extend `Dry::CLI::Registry` module
|
|
148
|
+
|
|
149
|
+
## [0.22.1] - 2026-01-31
|
|
150
|
+
|
|
151
|
+
### Fixed
|
|
152
|
+
- Move GemClassMixin inside ConfigSummaryMixin to fix test isolation constant reference issues
|
|
153
|
+
|
|
154
|
+
## [0.20.1] - 2026-01-16
|
|
155
|
+
|
|
156
|
+
### Changed
|
|
157
|
+
- **ContextMerger moved to ace-bundle**: ContextMerger relocated to ace-bundle package as BundleMerger (task 206)
|
|
158
|
+
- Removed `lib/ace/core/molecules/context_merger.rb`
|
|
159
|
+
- Functionality now provided by `Ace::Bundle::Molecules::BundleMerger`
|
|
160
|
+
- Tests removed from ace-support-core test suite
|
|
161
|
+
|
|
162
|
+
## [0.20.0] - 2026-01-11
|
|
163
|
+
|
|
164
|
+
### Changed
|
|
165
|
+
- **ContextChunker moved to ace-context**: ContextChunker and BoundaryFinder relocated to ace-context package (only consumer)
|
|
166
|
+
- **Config key renamed**: `chunk_limit` renamed to `max_lines` for clarity
|
|
167
|
+
- Removed orphaned `context_chunker` section from settings.yml
|
|
168
|
+
|
|
169
|
+
## [0.19.1] - 2026-01-10
|
|
170
|
+
|
|
171
|
+
### Added
|
|
172
|
+
- **DefaultRouting Module**: Shared CLI routing logic for dry-cli based gems
|
|
173
|
+
- `Ace::Core::CLI::DryCli::DefaultRouting` module with `start` and `known_command?` methods
|
|
174
|
+
- Eliminates duplicate routing code across CLI gems
|
|
175
|
+
- Provides consistent default command routing behavior
|
|
176
|
+
- Used by ace-docs, ace-git-commit, ace-prompt, and others
|
|
177
|
+
|
|
178
|
+
### Removed
|
|
179
|
+
- **Thor base class deleted**: `Ace::Core::CLI::Base` removed as all gems now use dry-cli (task 179.16)
|
|
180
|
+
- Thor dependency removed from gemspec
|
|
181
|
+
- `lib/ace/core/cli/base.rb` deleted
|
|
182
|
+
- All CLI gems now use `Ace::Core::CLI::DryCli::Base` module instead
|
|
183
|
+
|
|
184
|
+
## [0.19.0] - 2026-01-07
|
|
185
|
+
|
|
186
|
+
### Added
|
|
187
|
+
- **dry-cli Infrastructure**: Foundation for dry-cli based CLIs (task 179.01)
|
|
188
|
+
- `Ace::Core::CLI::DryCli::Base` module with common CLI patterns
|
|
189
|
+
- Standard option checks (`verbose?`, `quiet?`, `debug?`)
|
|
190
|
+
- Exit code helpers (`exit_success`, `exit_failure`)
|
|
191
|
+
- Debug logging (`debug_log`)
|
|
192
|
+
- Option validation (`validate_required!`)
|
|
193
|
+
- Hash formatting (`format_pairs`)
|
|
194
|
+
- Reserved flags constant (`RESERVED_FLAGS`)
|
|
195
|
+
- `Ace::Core::CLI::DryCli::ConfigSummaryMixin` for config display integration
|
|
196
|
+
- `display_config_summary` method with quiet/verbose mode support
|
|
197
|
+
- `GemClassMixin` variant with gem class configuration support
|
|
198
|
+
- Integration with existing `Ace::Core::Atoms::ConfigSummary`
|
|
199
|
+
- `Ace::Core::CLI::DryCli::VersionCommand` helper for version commands
|
|
200
|
+
- `VersionCommand.build` factory for creating command classes
|
|
201
|
+
- `VersionCommand.module` for creating version mixins
|
|
202
|
+
- Supports both class-level and proc-based version strings
|
|
203
|
+
- Comprehensive test coverage: 3 test files with 26+ tests
|
|
204
|
+
- dry-cli ~> 1.1 dependency added to gemspec
|
|
205
|
+
- **convert_types helper**: Type conversion utility for dry-cli options
|
|
206
|
+
- Converts string options to specified types (integer, float, boolean)
|
|
207
|
+
- Handles dry-cli's string-only option return values
|
|
208
|
+
- Supports batch type conversion with keyword arguments
|
|
209
|
+
|
|
210
|
+
### Changed
|
|
211
|
+
- Updated `lib/ace/core.rb` to require dry-cli infrastructure modules
|
|
212
|
+
- Standardized dry-cli dependency to ~> 1.0 across all gems
|
|
213
|
+
|
|
214
|
+
## [0.18.0] - 2026-01-05
|
|
215
|
+
|
|
216
|
+
### Added
|
|
217
|
+
- `ConfigSummary.display_if_needed` method to conditionally display configuration
|
|
218
|
+
- Checks for help flags (`--help`, `-h`) before displaying config
|
|
219
|
+
- Added `ConfigSummary.help_requested?` helper to detect help flag presence
|
|
220
|
+
- Prevents config summary from polluting help text output
|
|
221
|
+
|
|
222
|
+
### Changed
|
|
223
|
+
- ConfigSummary now requires `--verbose` flag to display configuration details
|
|
224
|
+
- Standard command output remains clean and uncluttered
|
|
225
|
+
- Debug configuration available when explicitly requested
|
|
226
|
+
- Improved help text clarity by separating concerns
|
|
227
|
+
|
|
228
|
+
### Fixed
|
|
229
|
+
- Config summary output appearing with `--help` commands
|
|
230
|
+
- Configuration now only shows when both not in help mode AND verbose is enabled
|
|
231
|
+
- Added tests for `help_requested?` detection logic
|
|
232
|
+
|
|
233
|
+
## [0.17.0] - 2026-01-04
|
|
234
|
+
|
|
235
|
+
### Added
|
|
236
|
+
- `ConfigSummary` atom for standardized CLI configuration output to stderr
|
|
237
|
+
- Displays effective configuration state with config-diffing (only non-default values)
|
|
238
|
+
- Sensitive key filtering (keys ending with: token, password, secret, credential, key, api_key)
|
|
239
|
+
- Nested key flattening with dot notation (e.g., `llm.provider=google`)
|
|
240
|
+
- Allowlist support via `summary_keys` parameter
|
|
241
|
+
- Quiet mode support (suppress output with `--quiet`)
|
|
242
|
+
- Deterministic sorted key output
|
|
243
|
+
- 18 comprehensive tests covering all functionality
|
|
244
|
+
|
|
245
|
+
## [0.16.0] - 2026-01-03
|
|
246
|
+
|
|
247
|
+
### Added
|
|
248
|
+
- `BoundaryFinder` atom for semantic boundary detection in XML-structured content
|
|
249
|
+
- Parses content into semantic blocks (`<file>`, `<output>` elements)
|
|
250
|
+
- Ensures XML elements are never split mid-element during chunking
|
|
251
|
+
- Documents whitespace handling behavior
|
|
252
|
+
- `ContextChunker` integration tests for semantic boundary splitting
|
|
253
|
+
|
|
254
|
+
### Changed
|
|
255
|
+
- `ContextChunker.split_into_chunks` now uses semantic boundaries when content contains XML elements
|
|
256
|
+
- Falls back to line-based splitting for plain text content
|
|
257
|
+
- Single large elements kept whole even if exceeding chunk limit
|
|
258
|
+
|
|
259
|
+
## [0.15.0] - 2026-01-03
|
|
260
|
+
|
|
261
|
+
### Changed
|
|
262
|
+
- **BREAKING**: Minimum Ruby version raised to 3.3.0 (was 3.2.0)
|
|
263
|
+
- Standardized gemspec file patterns with deterministic Dir.glob
|
|
264
|
+
- Added MIT LICENSE file
|
|
265
|
+
|
|
266
|
+
## [0.14.2] - 2026-01-01
|
|
267
|
+
|
|
268
|
+
### Changed
|
|
269
|
+
|
|
270
|
+
* Add configurable timeouts and limits in `.ace-defaults/core/config.yml`
|
|
271
|
+
* Add `configured_timeout` to CommandExecutor for timeout configuration
|
|
272
|
+
|
|
273
|
+
## [0.14.1] - 2025-12-30
|
|
274
|
+
|
|
275
|
+
### Changed
|
|
276
|
+
|
|
277
|
+
* Add ace-config dependency for configuration cascade delegation
|
|
278
|
+
|
|
279
|
+
## [0.14.0] - 2025-12-30
|
|
280
|
+
|
|
281
|
+
### Changed
|
|
282
|
+
|
|
283
|
+
* Rename `.ace.example/` to `.ace-defaults/` for gem defaults directory
|
|
284
|
+
|
|
285
|
+
|
|
286
|
+
## [0.13.0] - 2025-12-30
|
|
287
|
+
|
|
288
|
+
### Changed
|
|
289
|
+
- **Configuration Cascade Migration**: Now powered by ace-config gem
|
|
290
|
+
- Configuration resolution delegated to ace-config with `.ace` and `.ace-defaults` directories
|
|
291
|
+
- Added resolver caching for improved performance (avoids repeated FS traversal)
|
|
292
|
+
- Added `Ace::Core.reset_config!` to clear cached resolver for test isolation
|
|
293
|
+
|
|
294
|
+
### Deprecated
|
|
295
|
+
- `Ace::Core.config(search_paths:, file_patterns:)` parameters are deprecated
|
|
296
|
+
- Use `Ace::Config.create(config_dir:, defaults_dir:)` for custom paths
|
|
297
|
+
- Deprecated parameters emit warning and are ignored
|
|
298
|
+
- **Will be removed in a future minor version**
|
|
299
|
+
- `Ace::Core::Organisms::ConfigResolver.new(search_paths:)` is deprecated
|
|
300
|
+
- Backward-compatible wrapper maintains old behavior with deprecation warning
|
|
301
|
+
- Use new API with `config_dir:` and `defaults_dir:` parameters
|
|
302
|
+
- **Will be removed in a future minor version**
|
|
303
|
+
|
|
304
|
+
### Added
|
|
305
|
+
- **Runtime Dependencies**: ace-config (~> 0.2), ace-support-fs (~> 0.1)
|
|
306
|
+
- ace-config provides generic configuration cascade management
|
|
307
|
+
- ace-support-fs provides filesystem utilities (added in v0.12.0)
|
|
308
|
+
- **Migration Fallback**: `.ace.example` fallback for gem defaults during migration period
|
|
309
|
+
- **Test Coverage**: Added deprecation warning and caching tests (10 new tests)
|
|
310
|
+
|
|
311
|
+
### Migration Guide
|
|
312
|
+
|
|
313
|
+
**Old API (deprecated, will be removed soon):**
|
|
314
|
+
```ruby
|
|
315
|
+
# Custom search paths (deprecated)
|
|
316
|
+
config = Ace::Core.config(search_paths: ['./.custom', '~/.myapp'])
|
|
317
|
+
|
|
318
|
+
# ConfigResolver with search_paths (deprecated)
|
|
319
|
+
resolver = Ace::Core::Organisms::ConfigResolver.new(
|
|
320
|
+
search_paths: ['./.ace', '~/.ace', '/defaults'],
|
|
321
|
+
file_patterns: ['*.yml']
|
|
322
|
+
)
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
**New API (recommended):**
|
|
326
|
+
```ruby
|
|
327
|
+
# Use Ace::Config directly for custom paths
|
|
328
|
+
resolver = Ace::Config.create(
|
|
329
|
+
config_dir: ".custom",
|
|
330
|
+
defaults_dir: ".custom-defaults"
|
|
331
|
+
)
|
|
332
|
+
config = resolver.resolve
|
|
333
|
+
|
|
334
|
+
# Standard ace configuration (no changes needed)
|
|
335
|
+
config = Ace::Core.config # Uses .ace and .ace-defaults
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
## [0.12.0] - 2025-12-29
|
|
339
|
+
|
|
340
|
+
### Changed
|
|
341
|
+
- Migrate internal components to use `Ace::Support::Fs` directly instead of local aliases
|
|
342
|
+
- Update ConfigFinder, EnvLoader, EnvironmentManager, FileAggregator, PromptCacheManager, and VirtualConfigResolver to import from ace-support-fs
|
|
343
|
+
|
|
344
|
+
### Removed
|
|
345
|
+
- **BREAKING**: Remove backward compatibility aliases for filesystem utilities
|
|
346
|
+
- Removed `Ace::Core::Atoms::PathExpander` (use `Ace::Support::Fs::Atoms::PathExpander`)
|
|
347
|
+
- Removed `Ace::Core::Molecules::ProjectRootFinder` (use `Ace::Support::Fs::Molecules::ProjectRootFinder`)
|
|
348
|
+
- Removed `Ace::Core::Molecules::DirectoryTraverser` (use `Ace::Support::Fs::Molecules::DirectoryTraverser`)
|
|
349
|
+
- Removed related test files for backward compatibility wrappers
|
|
350
|
+
|
|
351
|
+
## [0.11.1] - 2025-11-17
|
|
352
|
+
|
|
353
|
+
### Added
|
|
354
|
+
|
|
355
|
+
- **PromptCacheManager Error Handling**: Enhanced robustness and validation
|
|
356
|
+
- Added `PromptCacheError` custom exception for clearer error reporting
|
|
357
|
+
- Comprehensive argument validation for all public methods with descriptive error messages
|
|
358
|
+
- File operation error handling for permissions, disk space, and I/O issues
|
|
359
|
+
- Configurable timestamp formatting via optional `timestamp_formatter` parameter
|
|
360
|
+
- Metadata schema validation with required field checks (`timestamp`, `gem`, `operation`)
|
|
361
|
+
- Optional validation support with `validate: false` parameter for flexibility
|
|
362
|
+
- Field type validation ensuring data integrity
|
|
363
|
+
- Enhanced test coverage: 17 tests, 55 assertions covering all new functionality
|
|
364
|
+
|
|
365
|
+
### Changed
|
|
366
|
+
|
|
367
|
+
- **PromptCacheManager Refactoring**: Simplified to stateless utility class
|
|
368
|
+
- Removed instance methods and `initialize` - all methods are now class methods
|
|
369
|
+
- Eliminated unnecessary state (gem_name, project_root) from instance variables
|
|
370
|
+
- Clarified stateless nature of the utility in class documentation
|
|
371
|
+
- Updated all tests to use stateless API (no breaking changes to public API)
|
|
372
|
+
- Improved code clarity and maintainability per code review feedback
|
|
373
|
+
|
|
374
|
+
## [0.11.0] - 2025-11-16
|
|
375
|
+
|
|
376
|
+
### Added
|
|
377
|
+
|
|
378
|
+
- **PromptCacheManager Molecule**: Standardized prompt cache management for ace-* gems
|
|
379
|
+
- Provides `create_session(gem_name, operation)` for creating timestamped session directories
|
|
380
|
+
- Provides `save_system_prompt(content, session_dir)` for saving system prompts
|
|
381
|
+
- Provides `save_user_prompt(content, session_dir)` for saving user prompts
|
|
382
|
+
- Provides `save_metadata(metadata, session_dir)` for saving session metadata
|
|
383
|
+
- Uses standardized structure: `.cache/{gem}/sessions/{operation}-{timestamp}/`
|
|
384
|
+
- Uses standardized file names: `system.prompt.md`, `user.prompt.md`, `metadata.yml`
|
|
385
|
+
- Integrates with ProjectRootFinder for git worktree support
|
|
386
|
+
- Comprehensive test coverage: 9 tests, 25 assertions
|
|
387
|
+
|
|
388
|
+
### Changed
|
|
389
|
+
|
|
390
|
+
- **Code Style Improvement**: Refactored PromptCacheManager class method structure
|
|
391
|
+
- Updated from `private_class_method :save_prompt` to `class << self` block pattern
|
|
392
|
+
- Improved readability and follows common Ruby idioms
|
|
393
|
+
- Enhanced code organization for better maintainability
|
|
394
|
+
|
|
395
|
+
## [0.10.1] - 2025-11-15
|
|
396
|
+
|
|
397
|
+
### Added
|
|
398
|
+
|
|
399
|
+
- **Git Worktree Detection Test**: Added `test_finds_git_worktree_root` to ProjectRootFinder test suite
|
|
400
|
+
- Verifies ProjectRootFinder correctly handles `.git` as both file (worktree) and directory (main repo)
|
|
401
|
+
- Creates test worktree structure with `.git` file containing gitdir reference
|
|
402
|
+
- Confirms project root detection works from nested directories in worktrees
|
|
403
|
+
- Supports ace-review cache path resolution fix (task 111)
|
|
404
|
+
|
|
405
|
+
### Changed
|
|
406
|
+
|
|
407
|
+
- **Test Coverage**: Enhanced ProjectRootFinder test suite for worktree compatibility
|
|
408
|
+
- All 262 tests pass with comprehensive worktree scenario coverage
|
|
409
|
+
- No breaking changes to existing functionality
|
|
410
|
+
|
|
411
|
+
## [0.10.0] - 2025-10-26
|
|
412
|
+
|
|
413
|
+
### Added
|
|
414
|
+
|
|
415
|
+
- **Unified Path Resolution System**: PathExpander converted from module to class with instance-based API
|
|
416
|
+
- Factory methods: `PathExpander.for_file(source_file)` and `PathExpander.for_cli()` with automatic context inference
|
|
417
|
+
- Instance method: `resolve(path)` supporting source-relative, project-relative, absolute, env vars, and protocol URIs
|
|
418
|
+
- Protocol URI support via plugin system: `register_protocol_resolver(resolver)` for ace-nav integration
|
|
419
|
+
- Comprehensive test suite: 76 new tests covering all path resolution scenarios
|
|
420
|
+
- Full backward compatibility: All existing class methods (expand, join, dirname, basename, absolute?, relative, normalize) preserved
|
|
421
|
+
- Updated README with usage examples and documentation
|
|
422
|
+
|
|
423
|
+
### Changed
|
|
424
|
+
|
|
425
|
+
- **PathExpander Architecture**: Converted from module to class for context-aware path resolution
|
|
426
|
+
- Enables efficient resolution of multiple paths from single source with inferred context
|
|
427
|
+
- Provides consistent path handling across all ACE tools
|
|
428
|
+
- Supports wfi://, guide://, tmpl://, task://, prompt:// protocol URIs
|
|
429
|
+
|
|
430
|
+
## [0.9.3] - 2025-10-08
|
|
431
|
+
|
|
432
|
+
### Changed
|
|
433
|
+
|
|
434
|
+
- **Test Structure Reorganization**: Reorganized tests for consistency
|
|
435
|
+
- Moved `test/ace/core_test.rb` → `test/core_test.rb`
|
|
436
|
+
- Moved `test/config_discovery_path_resolution_test.rb` → `test/integration/`
|
|
437
|
+
- Aligns with standardized flat ATOM structure across all ACE packages
|
|
438
|
+
|
|
439
|
+
## [0.9.2] - 2025-10-07
|
|
440
|
+
|
|
441
|
+
### Changed
|
|
442
|
+
- **Test maintainability improvement**: Version tests now validate semantic versioning format instead of exact version values
|
|
443
|
+
- Prevents test failures on every version bump
|
|
444
|
+
- Uses regex pattern `/\A\d+\.\d+\.\d+/` to validate version format
|
|
445
|
+
|
|
446
|
+
## [0.9.1] - 2025-10-06
|
|
447
|
+
|
|
448
|
+
### Added
|
|
449
|
+
- **Git diff formatting support** in `OutputFormatter`
|
|
450
|
+
- Added diffs section rendering in `format_markdown` (with ```diff blocks)
|
|
451
|
+
- Added diffs section rendering in `format_xml` (<diffs> with CDATA)
|
|
452
|
+
- Added diffs section rendering in `format_markdown_xml` (<diff> with attributes)
|
|
453
|
+
- Supports rendering git diff output from ace-context
|
|
454
|
+
|
|
455
|
+
### Changed
|
|
456
|
+
- `OutputFormatter` now handles `data[:diffs]` array in all output formats
|
|
457
|
+
|
|
458
|
+
## [0.9.0] - 2025-10-05
|
|
459
|
+
|
|
460
|
+
Initial release with core functionality for ACE ecosystem.
|
data/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Michal Czyz
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
data/README.md
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
<h1> ACE - Support Core </h1>
|
|
3
|
+
|
|
4
|
+
Core infrastructure primitives shared by ACE support gems.
|
|
5
|
+
|
|
6
|
+
<img src="https://raw.githubusercontent.com/cs3b/ace/main/docs/brand/AgenticCodingEnvironment.Logo.XS.jpg" alt="ACE Logo" width="480">
|
|
7
|
+
<br><br>
|
|
8
|
+
|
|
9
|
+
<a href="https://rubygems.org/gems/ace-support-core"><img alt="Gem Version" src="https://img.shields.io/gem/v/ace-support-core.svg" /></a>
|
|
10
|
+
<a href="https://www.ruby-lang.org"><img alt="Ruby" src="https://img.shields.io/badge/Ruby-3.2+-CC342D?logo=ruby" /></a>
|
|
11
|
+
<a href="https://opensource.org/licenses/MIT"><img alt="License: MIT" src="https://img.shields.io/badge/License-MIT-blue.svg" /></a>
|
|
12
|
+
|
|
13
|
+
</div>
|
|
14
|
+
|
|
15
|
+
> Works with: Claude Code, Codex CLI, OpenCode, Gemini CLI, pi-agent, and more.
|
|
16
|
+
|
|
17
|
+
`ace-support-core` centralizes configuration loading, environment handling, and shared runtime behavior used by support libraries. It delegates config resolution through [ace-support-config](../ace-support-config) and exposes stable orchestration points that other `ace-support-*` gems build on. The `ace-framework` CLI manages per-package configuration setup.
|
|
18
|
+
|
|
19
|
+
## How It Works
|
|
20
|
+
|
|
21
|
+
1. Provide a shared bootstrap path for config, env, and runtime context so every `ace-support-*` gem starts from the same foundation.
|
|
22
|
+
2. Delegate cascaded configuration resolution through [ace-support-config](../ace-support-config) so packages inherit project, user, and gem-level defaults automatically.
|
|
23
|
+
3. Expose the `ace-framework` CLI for initializing, diffing, and listing gem configurations across the workspace.
|
|
24
|
+
|
|
25
|
+
## Use Cases
|
|
26
|
+
|
|
27
|
+
**Create consistent package startup behavior** - initialize config, env, and shared context once with core primitives, so gems like [ace-support-cli](../ace-support-cli) and [ace-support-fs](../ace-support-fs) share a single bootstrap path.
|
|
28
|
+
|
|
29
|
+
**Avoid duplicate configuration logic** - reuse one configuration and environment model across many gems instead of re-implementing loading and resolution in each package.
|
|
30
|
+
|
|
31
|
+
**Keep support libraries composable** - build package-specific features on top of stable core contracts that provide predictable runtime behavior.
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
[Configuration overview](docs/config.md) | [`ace-framework` CLI reference](docs/config.md) | Part of [ACE](https://github.com/cs3b/ace)
|
data/Rakefile
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "bundler/gem_tasks"
|
|
4
|
+
require "minitest/test_task"
|
|
5
|
+
|
|
6
|
+
desc "Run tests using ace-test"
|
|
7
|
+
task :test do
|
|
8
|
+
sh "ace-test"
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
desc "Run tests directly (CI mode)"
|
|
12
|
+
Minitest::TestTask.create(:ci)
|
|
13
|
+
|
|
14
|
+
task default: :test
|