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 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