ace-bundle 0.40.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/bundle/config.yml +28 -0
- data/.ace-defaults/bundle/presets/base.md +15 -0
- data/.ace-defaults/bundle/presets/code-review.md +61 -0
- data/.ace-defaults/bundle/presets/development.md +16 -0
- data/.ace-defaults/bundle/presets/documentation-review.md +52 -0
- data/.ace-defaults/bundle/presets/mixed-content-example.md +94 -0
- data/.ace-defaults/bundle/presets/project-context.md +79 -0
- data/.ace-defaults/bundle/presets/project.md +35 -0
- data/.ace-defaults/bundle/presets/section-example-simple.md +27 -0
- data/.ace-defaults/bundle/presets/security-review.md +53 -0
- data/.ace-defaults/bundle/presets/simple-project.md +43 -0
- data/.ace-defaults/bundle/presets/team.md +18 -0
- data/.ace-defaults/nav/protocols/wfi-sources/ace-bundle.yml +19 -0
- data/CHANGELOG.md +384 -0
- data/LICENSE +21 -0
- data/README.md +40 -0
- data/Rakefile +22 -0
- data/exe/ace-bundle +14 -0
- data/handbook/skills/as-bundle/SKILL.md +28 -0
- data/handbook/skills/as-onboard/SKILL.md +33 -0
- data/handbook/workflow-instructions/bundle.wf.md +111 -0
- data/handbook/workflow-instructions/onboard.wf.md +20 -0
- data/lib/ace/bundle/atoms/boundary_finder.rb +122 -0
- data/lib/ace/bundle/atoms/bundle_normalizer.rb +128 -0
- data/lib/ace/bundle/atoms/content_checker.rb +46 -0
- data/lib/ace/bundle/atoms/line_counter.rb +37 -0
- data/lib/ace/bundle/atoms/preset_list_formatter.rb +44 -0
- data/lib/ace/bundle/atoms/preset_validator.rb +69 -0
- data/lib/ace/bundle/atoms/section_validator.rb +215 -0
- data/lib/ace/bundle/atoms/typo_detector.rb +76 -0
- data/lib/ace/bundle/cli/commands/load.rb +347 -0
- data/lib/ace/bundle/cli.rb +26 -0
- data/lib/ace/bundle/models/bundle_data.rb +75 -0
- data/lib/ace/bundle/molecules/bundle_chunker.rb +280 -0
- data/lib/ace/bundle/molecules/bundle_file_writer.rb +269 -0
- data/lib/ace/bundle/molecules/bundle_merger.rb +248 -0
- data/lib/ace/bundle/molecules/preset_manager.rb +331 -0
- data/lib/ace/bundle/molecules/section_compressor.rb +249 -0
- data/lib/ace/bundle/molecules/section_formatter.rb +580 -0
- data/lib/ace/bundle/molecules/section_processor.rb +460 -0
- data/lib/ace/bundle/organisms/bundle_loader.rb +1436 -0
- data/lib/ace/bundle/organisms/pr_bundle_loader.rb +147 -0
- data/lib/ace/bundle/version.rb +7 -0
- data/lib/ace/bundle.rb +251 -0
- metadata +190 -0
data/CHANGELOG.md
ADDED
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to ace-bundle will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog][1], and this project adheres to [Semantic Versioning][2].
|
|
6
|
+
|
|
7
|
+
## [Unreleased]
|
|
8
|
+
|
|
9
|
+
## [0.40.0] - 2026-03-23
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
- Rewrote README tagline and description to reflect ace-bundle as a general-purpose source bundler (files, commands, git diffs) rather than project-context-only tool.
|
|
13
|
+
- Updated gemspec summary and description to match the broadened identity.
|
|
14
|
+
- Replaced demo tape scenes to showcase preset caching, protocol loading (`wfi://task/finder`), and task bundling (`task://t.0or`).
|
|
15
|
+
- Updated getting-started guide opening to describe general-purpose bundling.
|
|
16
|
+
|
|
17
|
+
## [0.39.1] - 2026-03-23
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
- Refreshed README presentation after shine review polish pass.
|
|
21
|
+
|
|
22
|
+
## [0.39.0] - 2026-03-23
|
|
23
|
+
|
|
24
|
+
### Changed
|
|
25
|
+
- Refreshed the README structure, navigation row, and section flow to align with the current ACE package documentation layout pattern.
|
|
26
|
+
|
|
27
|
+
## [0.38.1] - 2026-03-21
|
|
28
|
+
|
|
29
|
+
### Technical
|
|
30
|
+
- Documented why `BundleLoader` permits `Date` in `YAML.safe_load` for file, frontmatter, inline YAML, and template frontmatter parsing paths.
|
|
31
|
+
|
|
32
|
+
## [0.38.0] - 2026-03-18
|
|
33
|
+
|
|
34
|
+
### Changed
|
|
35
|
+
- Consolidated TS-BUNDLE-001 output-routing E2E coverage by merging threshold and explicit `--output` override checks into a single goal, reducing scenario test-case count from 6 to 5 while preserving behavior coverage.
|
|
36
|
+
- Reindexed CLI parity coverage from Goal 6 to Goal 5 and synchronized scenario/runner/verifier manifests to the 5-goal structure.
|
|
37
|
+
|
|
38
|
+
## [0.37.2] - 2026-03-18
|
|
39
|
+
|
|
40
|
+
### Fixed
|
|
41
|
+
- Fixed preset auto-format line counting to use raw content for plain files and frontmatter-preserved content, preventing short content from incorrectly being emitted as cached output.
|
|
42
|
+
|
|
43
|
+
## [0.37.1] - 2026-03-18
|
|
44
|
+
|
|
45
|
+
### Changed
|
|
46
|
+
- Migrated CLI namespace from `Ace::Core::CLI::*` to `Ace::Support::Cli::*` (ace-support-cli is now the canonical home for CLI infrastructure).
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
## [0.37.0] - 2026-03-18
|
|
50
|
+
|
|
51
|
+
### Changed
|
|
52
|
+
- Removed legacy backward-compatibility behavior as part of the 0.10 cleanup release.
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
## [0.36.7] - 2026-03-15
|
|
56
|
+
|
|
57
|
+
### Changed
|
|
58
|
+
- Migrated CLI framework from dry-cli to ace-support-cli
|
|
59
|
+
|
|
60
|
+
## [0.36.6] - 2026-03-13
|
|
61
|
+
|
|
62
|
+
### Technical
|
|
63
|
+
- Updated canonical onboarding skill metadata for in-project workflow execution flow.
|
|
64
|
+
|
|
65
|
+
## [0.36.5] - 2026-03-13
|
|
66
|
+
|
|
67
|
+
### Changed
|
|
68
|
+
- Updated the canonical bundle and onboarding skills to explicitly run bundled workflows in the current project and execute them end-to-end.
|
|
69
|
+
|
|
70
|
+
## [0.36.4] - 2026-03-13
|
|
71
|
+
|
|
72
|
+
### Fixed
|
|
73
|
+
- Avoided section compression failures when a frontmatter-only source appears in a fixture by preserving that file content and continuing to compress neighboring files.
|
|
74
|
+
|
|
75
|
+
## [0.36.3] - 2026-03-12
|
|
76
|
+
|
|
77
|
+
### Technical
|
|
78
|
+
- Added exact-mode enforcement in test execution paths so `ace-bundle` tests no longer rely on agent-mode compression by default.
|
|
79
|
+
|
|
80
|
+
## [0.36.2] - 2026-03-12
|
|
81
|
+
|
|
82
|
+
### Technical
|
|
83
|
+
- Added regression coverage to verify the newly registered `wfi://demo/create`, `wfi://demo/record`, `wfi://overseer`, and `wfi://prompt-prep` workflow targets resolve and load through `ace-bundle`.
|
|
84
|
+
|
|
85
|
+
## [0.36.1] - 2026-03-12
|
|
86
|
+
|
|
87
|
+
### Changed
|
|
88
|
+
- Updated handbook workflow guidance to use direct `ace-bundle` invocations instead of legacy slash-command examples.
|
|
89
|
+
|
|
90
|
+
## [0.36.0] - 2026-03-10
|
|
91
|
+
|
|
92
|
+
### Added
|
|
93
|
+
- Added canonical handbook-owned bundle and onboarding skills, including the new `wfi://onboard` workflow for package-owned onboarding context.
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
## [0.35.5] - 2026-03-09
|
|
97
|
+
|
|
98
|
+
### Technical
|
|
99
|
+
- Hardened the invalid `bundle.pr` loader test to stub `Ace::Git::Molecules::PrMetadataFetcher.fetch_diff`, preventing accidental live GitHub CLI/API access during `ace-bundle` test runs.
|
|
100
|
+
- Updated the regression fixture to use a frontmatter template file so `load_file` exercises the PR-processing path and validates graceful error handling explicitly.
|
|
101
|
+
|
|
102
|
+
## [0.35.4] - 2026-03-09
|
|
103
|
+
|
|
104
|
+
### Fixed
|
|
105
|
+
- Fixed post-format bundle compression so command-only and diff-only section bundles still compress when `compressor_mode: agent` is enabled.
|
|
106
|
+
- Fixed `SectionCompressor` reordering mixed `_processed_files` arrays so per-source and merged compression preserve the original user-specified file order.
|
|
107
|
+
|
|
108
|
+
## [0.35.3] - 2026-03-09
|
|
109
|
+
|
|
110
|
+
### Fixed
|
|
111
|
+
- Fixed `SectionCompressor` compatibility with the updated `ace-compressor` cache manifest API so bundle section compression no longer crashes on the removed `labels:` keyword.
|
|
112
|
+
- Fixed plain-markdown bundle fallback so `load_plain_markdown` also applies rendered-content compression when compression is enabled.
|
|
113
|
+
|
|
114
|
+
### Technical
|
|
115
|
+
- Updated plain-markdown integration coverage to enable compression explicitly per test instead of depending on ambient repository config state.
|
|
116
|
+
|
|
117
|
+
## [0.35.2] - 2026-03-09
|
|
118
|
+
|
|
119
|
+
### Fixed
|
|
120
|
+
- Fixed template bundles with command-only sections silently skipping compression by adding post-format in-memory compression via `compress_text` when `SectionCompressor` finds no `_processed_files` to compress.
|
|
121
|
+
|
|
122
|
+
## [0.35.1] - 2026-03-09
|
|
123
|
+
|
|
124
|
+
### Changed
|
|
125
|
+
- Refined the `project` preset output shape for compression testing by keeping the bundle-focused preset content aligned with the current compressor defaults and validation workflow.
|
|
126
|
+
|
|
127
|
+
### Technical
|
|
128
|
+
- Updated the runtime dependency constraint to `ace-compressor ~> 0.21` for the expanded in-memory agent compression API.
|
|
129
|
+
|
|
130
|
+
## [0.35.0] - 2026-03-09
|
|
131
|
+
|
|
132
|
+
### Added
|
|
133
|
+
- Added content-only bundle compression for plain markdown files loaded via `load_file` and `load_plain_markdown`, using the real resolved file path directly (no temp files) with native cache support.
|
|
134
|
+
|
|
135
|
+
### Changed
|
|
136
|
+
- Changed `SectionCompressor#call` to compress content-only bundles (no sections) when the default mode is not "off", using the source metadata path for stable cache keys.
|
|
137
|
+
- Changed plain markdown integration tests to verify compression behavior under default config instead of bypassing with `compressor: "off"`.
|
|
138
|
+
|
|
139
|
+
## [0.34.0] - 2026-03-09
|
|
140
|
+
|
|
141
|
+
### Added
|
|
142
|
+
- Added `--compressor on|off` CLI flag as a simple toggle to enable or disable section compression.
|
|
143
|
+
- Added `compressor:` section to global bundle config (`source_scope`, `mode`) so projects can set compressor defaults centrally instead of per-preset.
|
|
144
|
+
- Added `compressor_config`, `compressor_source_scope`, and `compressor_mode` config helper methods to `Ace::Bundle` module.
|
|
145
|
+
|
|
146
|
+
### Changed
|
|
147
|
+
- Changed `compress_bundle_sections` resolution chain to CLI > preset params > global config, with `--compressor off` as absolute kill switch and `--compressor on` force-enabling `per-source` scope.
|
|
148
|
+
|
|
149
|
+
## [0.33.0] - 2026-03-09
|
|
150
|
+
|
|
151
|
+
### Added
|
|
152
|
+
- Added native cache integration to `SectionCompressor` using compressor's `CacheStore` with stable label-based keys, eliminating redundant compression on repeated bundle runs with unchanged content.
|
|
153
|
+
|
|
154
|
+
## [0.32.0] - 2026-03-09
|
|
155
|
+
|
|
156
|
+
### Added
|
|
157
|
+
- Added `--compressor-mode` (`exact`, `agent`) and `--compressor-source-scope` (`off`, `per-source`, `merged`) CLI options for inline section compression.
|
|
158
|
+
- Added `SectionCompressor` molecule that compresses bundle section content using ace-compressor's file-based API, supporting both exact and agent engines.
|
|
159
|
+
- Added preset-level `compressor_mode` and `compressor_source_scope` configuration with CLI override precedence.
|
|
160
|
+
|
|
161
|
+
### Fixed
|
|
162
|
+
- Fixed `compressor_mode: agent` crashing with `ArgumentError` — agent mode now works through the same file-based compression path as exact mode.
|
|
163
|
+
|
|
164
|
+
## [0.31.12] - 2026-03-08
|
|
165
|
+
|
|
166
|
+
### Technical
|
|
167
|
+
- Align top-level preset composition integration coverage with the current `BundleData` contract by asserting composition metadata via `result.metadata` and merged rendered output via `result.content`.
|
|
168
|
+
|
|
169
|
+
## [0.31.11] - 2026-03-04
|
|
170
|
+
|
|
171
|
+
### Changed
|
|
172
|
+
- Bundle cache output now defaults to `.ace-local/bundle`; cache writes respect configured `cache_dir`.
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
## [0.31.10] - 2026-03-04
|
|
176
|
+
|
|
177
|
+
### Fixed
|
|
178
|
+
- README cache output path example corrected to short-name convention (`.ace-local/bundle/` not `.ace-local/ace-bundle/`)
|
|
179
|
+
|
|
180
|
+
## [0.31.9] - 2026-03-04
|
|
181
|
+
|
|
182
|
+
### Technical
|
|
183
|
+
- Update handbook reference: cache output path documented as `.ace-local/bundle/` (was `.cache/ace-bundle/`)
|
|
184
|
+
|
|
185
|
+
## [0.31.8] - 2026-03-04
|
|
186
|
+
|
|
187
|
+
### Fixed
|
|
188
|
+
- Guard against empty `base_content_resolved` replacing document content with nothing when base resolution fails
|
|
189
|
+
|
|
190
|
+
## [0.31.7] - 2026-03-04
|
|
191
|
+
|
|
192
|
+
### Fixed
|
|
193
|
+
- Resolve `cmd`-type protocol URIs (e.g., `task://`) in `ace-bundle` by capturing command output as a file path, enabling `ace-bundle task://...` to load task files correctly.
|
|
194
|
+
|
|
195
|
+
### Technical
|
|
196
|
+
- Add tests for `resolve_protocol` cmd-type fallback in `BundleLoaderTest`.
|
|
197
|
+
|
|
198
|
+
## [0.31.6] - 2026-03-03
|
|
199
|
+
|
|
200
|
+
### Fixed
|
|
201
|
+
- Preserve resolved `base` content when `embed_document_source` leaks from top-level preset merge, preventing base workflow content from being overwritten by raw config frontmatter.
|
|
202
|
+
|
|
203
|
+
## [0.31.5] - 2026-02-25
|
|
204
|
+
|
|
205
|
+
### Technical
|
|
206
|
+
- Bump runtime dependency constraint from `ace-git ~> 0.10` to `ace-git ~> 0.11`.
|
|
207
|
+
|
|
208
|
+
## [0.31.4] - 2026-02-25
|
|
209
|
+
|
|
210
|
+
### Fixed
|
|
211
|
+
- Ensure plain workflow files without YAML frontmatter load as bundle content instead of returning empty output (`ace-bundle wfi://...`).
|
|
212
|
+
|
|
213
|
+
### Technical
|
|
214
|
+
- Add regression coverage for non-frontmatter workflow loading and align loader tests with content-first behavior.
|
|
215
|
+
|
|
216
|
+
## [0.31.3] - 2026-02-24
|
|
217
|
+
|
|
218
|
+
### Technical
|
|
219
|
+
- Clarify TS-BUNDLE-001 CLI/API parity E2E runner instructions to treat API `result.metadata[:error]` as a non-zero failure in parity checks.
|
|
220
|
+
|
|
221
|
+
## [0.31.2] - 2026-02-23
|
|
222
|
+
|
|
223
|
+
### Fixed
|
|
224
|
+
- Resolve `./` prefixed file paths relative to template config directory instead of project root
|
|
225
|
+
|
|
226
|
+
## [0.31.1] - 2026-02-23
|
|
227
|
+
|
|
228
|
+
### Changed
|
|
229
|
+
- Centralized error class hierarchy: SectionValidationError and PresetLoadError now inherit from Ace::Bundle::Error
|
|
230
|
+
- Removed duplicate SectionValidationError definitions
|
|
231
|
+
|
|
232
|
+
### Technical
|
|
233
|
+
- Updated internal dependency version constraints to current releases
|
|
234
|
+
|
|
235
|
+
## [0.31.0] - 2026-02-22
|
|
236
|
+
|
|
237
|
+
### Changed
|
|
238
|
+
- **Breaking:** Migrated from multi-command Registry to single-command pattern (task 278)
|
|
239
|
+
- Removed `load` subcommand: `ace-bundle load project` → `ace-bundle project`
|
|
240
|
+
- Removed `list` subcommand: `ace-bundle list` → `ace-bundle --list-presets`
|
|
241
|
+
- Removed `version`/`help` subcommands: use `--version`/`--help` flags only
|
|
242
|
+
- Added `--version` and `--list-presets` flags to main command
|
|
243
|
+
- No backward compatibility (per ADR-024)
|
|
244
|
+
|
|
245
|
+
## [0.30.11] - 2026-02-22
|
|
246
|
+
|
|
247
|
+
### Changed
|
|
248
|
+
- Replace ace-nav subprocess call with in-process SDK (`NavigationEngine#resolve`) for protocol resolution
|
|
249
|
+
- Add `ace-support-nav` as runtime dependency (was only used via CLI subprocess)
|
|
250
|
+
|
|
251
|
+
### Technical
|
|
252
|
+
- Remove ace-nav command mock from test helper (no longer needed)
|
|
253
|
+
- Update integration test to use SDK directly instead of `CommandExecutor`
|
|
254
|
+
|
|
255
|
+
## [0.30.10] - 2026-02-22
|
|
256
|
+
|
|
257
|
+
### Changed
|
|
258
|
+
- Standardize `ace-bundle` docs and usage examples to explicit `load` subcommand invocation.
|
|
259
|
+
|
|
260
|
+
### Technical
|
|
261
|
+
- Update CLI routing tests to assert executable behavior (`Open3`), including no-arg help and no implicit default routing.
|
|
262
|
+
- Refresh `load` command examples to remove stale `--list` reference and use `--inspect-config`.
|
|
263
|
+
|
|
264
|
+
## [0.30.9] - 2026-02-22
|
|
265
|
+
|
|
266
|
+
### Technical
|
|
267
|
+
- Update `ace-bundle project` → `ace-bundle load project` in README and usage docs
|
|
268
|
+
- Update `ace-bundle project-base` → `ace-bundle load project-base` throughout usage guide
|
|
269
|
+
|
|
270
|
+
## [0.30.7] - 2026-02-22
|
|
271
|
+
|
|
272
|
+
### Changed
|
|
273
|
+
- Migrate skill naming and invocation references to hyphenated `ace-*` format (no underscores).
|
|
274
|
+
|
|
275
|
+
## [0.30.6] - 2026-02-19
|
|
276
|
+
|
|
277
|
+
### Technical
|
|
278
|
+
- Update protocol reference documentation to reflect namespaced wfi:// URIs
|
|
279
|
+
|
|
280
|
+
## [0.30.5] - 2026-02-15
|
|
281
|
+
|
|
282
|
+
### Fixed
|
|
283
|
+
- **SectionProcessor**: Fix typo `orde2` → `order` in comment (line 100)
|
|
284
|
+
- **SectionProcessor**: Fix indentation alignment in `merge_contents` method (line 240)
|
|
285
|
+
|
|
286
|
+
## [0.30.4] - 2026-02-15
|
|
287
|
+
|
|
288
|
+
### Fixed
|
|
289
|
+
- **SectionFormatter**: Fix typo in `format_sections_json_full` method name (`foRmat` → `format`)
|
|
290
|
+
|
|
291
|
+
## [0.30.3] - 2026-01-31
|
|
292
|
+
|
|
293
|
+
### Performance
|
|
294
|
+
- Moved CLI integration tests to E2E test suite (Task 251.06)
|
|
295
|
+
- Created `test/e2e/cli-api-parity.mt.md` for CLI/API output parity tests
|
|
296
|
+
- Created `test/e2e/cli-auto-format.mt.md` for auto-format behavior tests
|
|
297
|
+
- Removed `test/integration/cli_api_parity_test.rb` (1 test, ~0.94s)
|
|
298
|
+
- Removed `test/integration/cli_auto_format_test.rb` (6 tests, ~1.2s)
|
|
299
|
+
- Tests now run via `/ace:run-e2e-test ace-bundle MT-BUNDLE-002`
|
|
300
|
+
- Saves ~2.1s of subprocess overhead from regular test runs
|
|
301
|
+
|
|
302
|
+
## [0.30.2] - 2026-01-31
|
|
303
|
+
|
|
304
|
+
### Performance
|
|
305
|
+
- Moved section workflow integration tests to E2E test suite (Task 251.05)
|
|
306
|
+
- Created `test/e2e/MT-BUNDLE-001-section-workflow.mt.md` for section workflow tests
|
|
307
|
+
- Removed `test/integration/section_workflow_integration_test.rb` (2 tests)
|
|
308
|
+
- Tests now run via `/ace:run-e2e-test ace-bundle MT-BUNDLE-001`
|
|
309
|
+
- Existing molecule tests already use proper mocking patterns
|
|
310
|
+
|
|
311
|
+
## [0.30.1] - 2026-01-19
|
|
312
|
+
|
|
313
|
+
### Added
|
|
314
|
+
- Support `preset` and `presets` keys in template frontmatter (Task 217)
|
|
315
|
+
- Recognize preset/presets keys in workflow file frontmatter
|
|
316
|
+
- Process presets from frontmatter with error handling
|
|
317
|
+
- Store loaded presets and errors in bundle metadata
|
|
318
|
+
|
|
319
|
+
## [0.30.0] - 2026-01-16
|
|
320
|
+
|
|
321
|
+
### Changed
|
|
322
|
+
- Rename context: to bundle: keys in configuration files
|
|
323
|
+
|
|
324
|
+
## [0.29.1] - 2026-01-15
|
|
325
|
+
|
|
326
|
+
### Technical
|
|
327
|
+
- Patch version bump
|
|
328
|
+
|
|
329
|
+
## [0.29.0] - 2026-01-15
|
|
330
|
+
|
|
331
|
+
### Added
|
|
332
|
+
- Initial release as ace-bundle (renamed from ace-context)
|
|
333
|
+
- All module namespaces updated from `Ace::Context` to `Ace::Bundle`
|
|
334
|
+
- All requires updated from `ace/context` to `ace/bundle`
|
|
335
|
+
- Configuration directory renamed from `.ace-defaults/context/` to `.ace-defaults/bundle/`
|
|
336
|
+
|
|
337
|
+
## [0.28.2] - 2026-01-11
|
|
338
|
+
|
|
339
|
+
### Fixed
|
|
340
|
+
- **Chunked output header**: Added stats header (lines, size, chunk count) before listing chunk paths
|
|
341
|
+
- Previously showed bare paths with no context
|
|
342
|
+
|
|
343
|
+
## [0.28.1] - 2026-01-11
|
|
344
|
+
|
|
345
|
+
### Changed
|
|
346
|
+
- **Chunked output**: CLI now outputs chunk file paths directly (one per line) instead of index file path
|
|
347
|
+
- Agents can read chunks directly without first reading the index
|
|
348
|
+
- Non-chunked output still shows single file path
|
|
349
|
+
|
|
350
|
+
## [0.28.0] - 2026-01-11
|
|
351
|
+
|
|
352
|
+
### Added
|
|
353
|
+
- **ContextChunker**: Moved from ace-support-core (this package is the only consumer)
|
|
354
|
+
- `Ace::Bundle::Molecules::ContextChunker` for splitting large outputs
|
|
355
|
+
- `Ace::Bundle::Atoms::BoundaryFinder` for semantic XML boundary detection
|
|
356
|
+
- Preserves `<file>` and `<output>` element integrity when chunking
|
|
357
|
+
|
|
358
|
+
### Changed
|
|
359
|
+
- **BREAKING**: Config key `chunk_limit` renamed to `max_lines` for clarity
|
|
360
|
+
- Default max_lines changed from 150000 to 2000 (more practical default)
|
|
361
|
+
- Configuration now loaded via `Ace::Bundle.max_lines` instead of `Ace::Core.get(...)`
|
|
362
|
+
|
|
363
|
+
## [0.27.1] - 2026-01-09
|
|
364
|
+
|
|
365
|
+
### Changed
|
|
366
|
+
- **BREAKING**: Eliminate wrapper pattern in dry-cli commands
|
|
367
|
+
- Merged business logic directly into `Load` and `List` dry-cli command classes
|
|
368
|
+
- Deleted `load_command.rb` and `list_command.rb` wrapper files
|
|
369
|
+
- Simplified architecture by removing unnecessary delegation layer
|
|
370
|
+
- Added `PresetListFormatter` atom for reusable list formatting logic
|
|
371
|
+
|
|
372
|
+
## [0.27.0] - 2026-01-07
|
|
373
|
+
|
|
374
|
+
### Changed
|
|
375
|
+
- **BREAKING**: Migrated CLI framework from Thor to dry-cli (task 179.04)
|
|
376
|
+
- Replaced `thor` dependency with `dry-cli ~> 1.0`
|
|
377
|
+
- Converted CLI class to `Dry::CLI::Registry` pattern with explicit command registration
|
|
378
|
+
- Moved default command routing logic from method_missing to `CLI.start` method
|
|
379
|
+
|
|
380
|
+
|
|
381
|
+
## [0.30.8] - 2026-02-22
|
|
382
|
+
|
|
383
|
+
### Fixed
|
|
384
|
+
- Standardized quiet, verbose, debug option descriptions to canonical strings
|
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,40 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
<h1> ACE - Bundle </h1>
|
|
3
|
+
|
|
4
|
+
Assemble multiple sources into a single bundled file, with optional compression.
|
|
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-bundle"><img alt="Gem Version" src="https://img.shields.io/gem/v/ace-bundle.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
|
+
[Getting Started](docs/getting-started.md) | [Usage Guide](docs/usage.md) | [Handbook - Skills, Agents, Templates](docs/handbook.md)
|
|
18
|
+
|
|
19
|
+

|
|
20
|
+
|
|
21
|
+
`ace-bundle` assembles multiple sources — files, shell commands, and git diffs — into a single bundled file. Configure inputs through [presets](.ace-defaults/bundle/presets/project.md) or [frontmatter in any markdown file](../ace-task/handbook/workflow-instructions/task/finder.wf.md), with built-in support for protocol URLs (`wfi://`, `guide://`, `tmpl://`, `prompt://`, `task://`) resolved by [ace-support-nav](../ace-support-nav). Output goes to stdout or a cache file under `.ace-local/bundle/`, with optional compression through [ace-compressor](../ace-compressor).
|
|
22
|
+
|
|
23
|
+
## How It Works
|
|
24
|
+
|
|
25
|
+
1. Specify inputs as preset names (`project`, `code-review`), file paths, protocol URLs (`wfi://`, `guide://`, `task://`), or markdown files with [frontmatter configuration](.ace-defaults/bundle/presets/code-review.md).
|
|
26
|
+
2. ace-bundle resolves protocols via [ace-support-nav](../ace-support-nav), reads files, executes commands, generates diffs, and merges everything into structured section-based output.
|
|
27
|
+
3. Output is delivered to stdout or saved to `.ace-local/bundle/`, optionally compressed through [ace-compressor](../ace-compressor) for large payloads.
|
|
28
|
+
|
|
29
|
+
## Use Cases
|
|
30
|
+
|
|
31
|
+
**Load project context in one command** — run [`ace-bundle project`](docs/usage.md) to assemble architecture docs, repository state, and command output from a single [preset](.ace-defaults/bundle/presets/project.md) into a cached bundle.
|
|
32
|
+
|
|
33
|
+
**Pull workflow instructions by protocol URL** — run `ace-bundle wfi://task/finder` (or `guide://...`, `tmpl://...`, `prompt://...`) to resolve and load canonical handbook resources via [ace-support-nav](../ace-support-nav).
|
|
34
|
+
|
|
35
|
+
**Bundle task context for agent workflows** — run `ace-bundle task://t.0or --output cache` to assemble task-specific files, commands, and diffs into a single artifact for agent consumption.
|
|
36
|
+
|
|
37
|
+
**Compress large bundles for LLM workflows** — add `--compressor on` to reduce payload size through [ace-compressor](../ace-compressor), with `exact` and `agent` compression modes.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
[Getting Started](docs/getting-started.md) | [Usage Guide](docs/usage.md) | [Handbook - Skills, Agents, Templates](docs/handbook.md) | Part of [ACE](https://github.com/cs3b/ace)
|
data/Rakefile
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "bundler/gem_tasks"
|
|
4
|
+
require "rake/testtask"
|
|
5
|
+
|
|
6
|
+
# Standard test task using Rake::TestTask (works standalone)
|
|
7
|
+
Rake::TestTask.new(:test) do |t|
|
|
8
|
+
t.libs << "test"
|
|
9
|
+
t.libs << "lib"
|
|
10
|
+
t.test_files = FileList["test/**/*_test.rb"]
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# Alias for CI environments
|
|
14
|
+
task ci: :test
|
|
15
|
+
|
|
16
|
+
# Convenience task for mono-repo development (uses ace-test if available)
|
|
17
|
+
desc "Run tests using ace-test (mono-repo convenience)"
|
|
18
|
+
task :ace do
|
|
19
|
+
sh "ace-test"
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
task default: :test
|
data/exe/ace-bundle
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require "ace/bundle"
|
|
5
|
+
require "ace/support/cli"
|
|
6
|
+
|
|
7
|
+
# Start ace-support-cli single-command entrypoint with exception-based exit code handling (per ADR-023)
|
|
8
|
+
begin
|
|
9
|
+
args = ARGV.empty? ? ["--help"] : ARGV
|
|
10
|
+
Ace::Support::Cli::Runner.new(Ace::Bundle::CLI::Commands::Load).call(args: args)
|
|
11
|
+
rescue Ace::Support::Cli::Error => e
|
|
12
|
+
warn e.message
|
|
13
|
+
exit(e.exit_code)
|
|
14
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: as-bundle
|
|
3
|
+
description: Load project context from preset names, file paths, or protocol URLs
|
|
4
|
+
# bundle: wfi://bundle
|
|
5
|
+
# context: no-fork
|
|
6
|
+
# agent: general-purpose
|
|
7
|
+
user-invocable: true
|
|
8
|
+
allowed-tools:
|
|
9
|
+
- Bash(ace-bundle:*)
|
|
10
|
+
- Read
|
|
11
|
+
argument-hint: ["preset|file-path|protocol"]
|
|
12
|
+
last_modified: 2026-01-10
|
|
13
|
+
source: ace-bundle
|
|
14
|
+
integration:
|
|
15
|
+
targets:
|
|
16
|
+
- claude
|
|
17
|
+
- codex
|
|
18
|
+
- gemini
|
|
19
|
+
- opencode
|
|
20
|
+
- pi
|
|
21
|
+
providers: {}
|
|
22
|
+
skill:
|
|
23
|
+
kind: workflow
|
|
24
|
+
execution:
|
|
25
|
+
workflow: wfi://bundle
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
Load and run `ace-bundle wfi://bundle` in the current project, then follow the loaded workflow as the source of truth and execute it end-to-end instead of only summarizing it.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: as-onboard
|
|
3
|
+
description: Load full project context bundle for onboarding to the codebase
|
|
4
|
+
# bundle: wfi://onboard
|
|
5
|
+
# agent: general-purpose
|
|
6
|
+
user-invocable: true
|
|
7
|
+
allowed-tools:
|
|
8
|
+
- Bash(ace-bundle:*)
|
|
9
|
+
- Read
|
|
10
|
+
argument-hint: [preset]
|
|
11
|
+
last_modified: 2026-01-17
|
|
12
|
+
source: ace-bundle
|
|
13
|
+
integration:
|
|
14
|
+
targets:
|
|
15
|
+
- claude
|
|
16
|
+
- codex
|
|
17
|
+
- gemini
|
|
18
|
+
- opencode
|
|
19
|
+
- pi
|
|
20
|
+
providers: {}
|
|
21
|
+
assign:
|
|
22
|
+
source: wfi://onboard
|
|
23
|
+
steps:
|
|
24
|
+
- name: onboard
|
|
25
|
+
description: Load project context and understand the codebase
|
|
26
|
+
tags: [setup, context-loading]
|
|
27
|
+
skill:
|
|
28
|
+
kind: workflow
|
|
29
|
+
execution:
|
|
30
|
+
workflow: wfi://onboard
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
Load and run `ace-bundle wfi://onboard` in the current project, then follow the loaded workflow as the source of truth and execute it end-to-end instead of only summarizing it.
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
---
|
|
2
|
+
doc-type: workflow
|
|
3
|
+
title: Load Bundle Workflow Instruction
|
|
4
|
+
purpose: Documentation for ace-bundle/handbook/workflow-instructions/bundle.wf.md
|
|
5
|
+
ace-docs:
|
|
6
|
+
last-updated: 2026-03-12
|
|
7
|
+
last-checked: 2026-03-21
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Load Bundle Workflow Instruction
|
|
11
|
+
|
|
12
|
+
## Purpose
|
|
13
|
+
|
|
14
|
+
Load project context from flexible input sources: preset names, file paths, or protocol URLs.
|
|
15
|
+
|
|
16
|
+
## Prerequisites
|
|
17
|
+
|
|
18
|
+
- The `ace-bundle` tool is available (from ace-bundle gem)
|
|
19
|
+
|
|
20
|
+
## Variables
|
|
21
|
+
|
|
22
|
+
$input: project
|
|
23
|
+
|
|
24
|
+
## Instructions
|
|
25
|
+
|
|
26
|
+
### 1. Prepare Context
|
|
27
|
+
|
|
28
|
+
Run `ace-bundle` with the provided input. The tool automatically detects the input type:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
ace-bundle $input
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
**Input type detection:**
|
|
35
|
+
|
|
36
|
+
- **Presets**: Simple names without path separators (e.g., `project`, `base`)
|
|
37
|
+
- **Files**: Paths with `/`, `./`, `../`, or file extensions (e.g., `./context.md`, `/absolute/path.yml`)
|
|
38
|
+
- **Protocols**: URLs with `://` pattern (e.g., `wfi://workflow-name`, `guide://testing`)
|
|
39
|
+
|
|
40
|
+
### 2. Select and Load Context
|
|
41
|
+
|
|
42
|
+
**Available presets are listed above** in `<available_presets>`.
|
|
43
|
+
|
|
44
|
+
Based on the user's `$input` variable:
|
|
45
|
+
|
|
46
|
+
1. **Preset names** (simple names like "project", "base"):
|
|
47
|
+
- Verify preset exists in `<available_presets>` embedded above
|
|
48
|
+
- Run: `ace-bundle $input`
|
|
49
|
+
|
|
50
|
+
2. **File paths** (contains `/`, `./`, extensions):
|
|
51
|
+
- Run directly: `ace-bundle $input`
|
|
52
|
+
|
|
53
|
+
3. **Protocols** (contains `://`):
|
|
54
|
+
- Run directly: `ace-bundle $input`
|
|
55
|
+
- Note: Workflows with `embed_document_source: true` include their context
|
|
56
|
+
|
|
57
|
+
**After loading**, read the complete cached context file.
|
|
58
|
+
|
|
59
|
+
### 3. Prepare Summary
|
|
60
|
+
|
|
61
|
+
Analyze the loaded context and prepare a concise summary covering:
|
|
62
|
+
|
|
63
|
+
- Project purpose and objectives
|
|
64
|
+
- Technical architecture and design patterns
|
|
65
|
+
- Development conventions and standards
|
|
66
|
+
- Project structure and organization
|
|
67
|
+
- Available tools and workflows
|
|
68
|
+
|
|
69
|
+
## Usage
|
|
70
|
+
|
|
71
|
+
**Presets** - Standard project context, team-shared configurations:
|
|
72
|
+
> `ace-bundle project`
|
|
73
|
+
> "Load default project context"
|
|
74
|
+
|
|
75
|
+
> `ace-bundle base`
|
|
76
|
+
> "Load base preset"
|
|
77
|
+
|
|
78
|
+
**Files** - Task-specific context, custom one-off requirements:
|
|
79
|
+
> `ace-bundle .ace-taskflow/v.0.9.0/context/task-084.md`
|
|
80
|
+
> "Load task-specific context file"
|
|
81
|
+
|
|
82
|
+
> `ace-bundle /path/to/your/project/context.yml`
|
|
83
|
+
> "Load context from absolute path"
|
|
84
|
+
|
|
85
|
+
**Protocols** - Workflow-embedded context, dynamic discovery:
|
|
86
|
+
> `ace-bundle wfi://workflow-name`
|
|
87
|
+
> "Load context via protocol"
|
|
88
|
+
|
|
89
|
+
## Error Handling
|
|
90
|
+
|
|
91
|
+
| Error | Check | Fix |
|
|
92
|
+
|-------|-------|-----|
|
|
93
|
+
| File not found | Verify path: `ls -la <file-path>` | Check path is correct |
|
|
94
|
+
| Preset not found | List presets: `ace-bundle --list` | Verify preset name spelling |
|
|
95
|
+
| Permission denied | Check perms: `ls -la <file-path>` | Fix permissions: `chmod +r <file-path>` |
|
|
96
|
+
|
|
97
|
+
## Response Template
|
|
98
|
+
|
|
99
|
+
**Presets Loaded:** [List of input source(s)]
|
|
100
|
+
**Preset Stats:** [The size of the context - N lines, X KB]
|
|
101
|
+
|
|
102
|
+
Read the whole file from: [$contextFilePath]
|
|
103
|
+
|
|
104
|
+
**Understanding Achieved:** [Summary of project purpose, structure, and conventions]
|
|
105
|
+
|
|
106
|
+
## Success Criteria
|
|
107
|
+
|
|
108
|
+
- Context is successfully loaded from the specified input
|
|
109
|
+
- Full cached context file has been read completely (not just sampled)
|
|
110
|
+
- Clear understanding of project purpose, architecture, and conventions
|
|
111
|
+
- Ready to work with project-specific context
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
doc-type: workflow
|
|
3
|
+
title: Onboard Workflow
|
|
4
|
+
purpose: onboarding context workflow
|
|
5
|
+
ace-docs:
|
|
6
|
+
last-updated: 2026-03-12
|
|
7
|
+
last-checked: 2026-03-21
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Onboard Workflow
|
|
11
|
+
|
|
12
|
+
## Variables
|
|
13
|
+
|
|
14
|
+
- `$preset`: project
|
|
15
|
+
|
|
16
|
+
## Instructions
|
|
17
|
+
|
|
18
|
+
1. Run `ace-bundle $preset`.
|
|
19
|
+
2. Read the complete output, including any referenced files.
|
|
20
|
+
3. Summarize the current state of the project, focusing on architecture, active work, and conventions.
|