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.
Files changed (46) hide show
  1. checksums.yaml +7 -0
  2. data/.ace-defaults/bundle/config.yml +28 -0
  3. data/.ace-defaults/bundle/presets/base.md +15 -0
  4. data/.ace-defaults/bundle/presets/code-review.md +61 -0
  5. data/.ace-defaults/bundle/presets/development.md +16 -0
  6. data/.ace-defaults/bundle/presets/documentation-review.md +52 -0
  7. data/.ace-defaults/bundle/presets/mixed-content-example.md +94 -0
  8. data/.ace-defaults/bundle/presets/project-context.md +79 -0
  9. data/.ace-defaults/bundle/presets/project.md +35 -0
  10. data/.ace-defaults/bundle/presets/section-example-simple.md +27 -0
  11. data/.ace-defaults/bundle/presets/security-review.md +53 -0
  12. data/.ace-defaults/bundle/presets/simple-project.md +43 -0
  13. data/.ace-defaults/bundle/presets/team.md +18 -0
  14. data/.ace-defaults/nav/protocols/wfi-sources/ace-bundle.yml +19 -0
  15. data/CHANGELOG.md +384 -0
  16. data/LICENSE +21 -0
  17. data/README.md +40 -0
  18. data/Rakefile +22 -0
  19. data/exe/ace-bundle +14 -0
  20. data/handbook/skills/as-bundle/SKILL.md +28 -0
  21. data/handbook/skills/as-onboard/SKILL.md +33 -0
  22. data/handbook/workflow-instructions/bundle.wf.md +111 -0
  23. data/handbook/workflow-instructions/onboard.wf.md +20 -0
  24. data/lib/ace/bundle/atoms/boundary_finder.rb +122 -0
  25. data/lib/ace/bundle/atoms/bundle_normalizer.rb +128 -0
  26. data/lib/ace/bundle/atoms/content_checker.rb +46 -0
  27. data/lib/ace/bundle/atoms/line_counter.rb +37 -0
  28. data/lib/ace/bundle/atoms/preset_list_formatter.rb +44 -0
  29. data/lib/ace/bundle/atoms/preset_validator.rb +69 -0
  30. data/lib/ace/bundle/atoms/section_validator.rb +215 -0
  31. data/lib/ace/bundle/atoms/typo_detector.rb +76 -0
  32. data/lib/ace/bundle/cli/commands/load.rb +347 -0
  33. data/lib/ace/bundle/cli.rb +26 -0
  34. data/lib/ace/bundle/models/bundle_data.rb +75 -0
  35. data/lib/ace/bundle/molecules/bundle_chunker.rb +280 -0
  36. data/lib/ace/bundle/molecules/bundle_file_writer.rb +269 -0
  37. data/lib/ace/bundle/molecules/bundle_merger.rb +248 -0
  38. data/lib/ace/bundle/molecules/preset_manager.rb +331 -0
  39. data/lib/ace/bundle/molecules/section_compressor.rb +249 -0
  40. data/lib/ace/bundle/molecules/section_formatter.rb +580 -0
  41. data/lib/ace/bundle/molecules/section_processor.rb +460 -0
  42. data/lib/ace/bundle/organisms/bundle_loader.rb +1436 -0
  43. data/lib/ace/bundle/organisms/pr_bundle_loader.rb +147 -0
  44. data/lib/ace/bundle/version.rb +7 -0
  45. data/lib/ace/bundle.rb +251 -0
  46. 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
+ ![ace-bundle demo](docs/demo/ace-bundle-getting-started.gif)
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.