ace-demo 0.18.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 (47) hide show
  1. checksums.yaml +7 -0
  2. data/.ace-defaults/demo/config.yml +3 -0
  3. data/.ace-defaults/demo/tapes/hello.tape +12 -0
  4. data/.ace-defaults/nav/protocols/wfi-sources/ace-demo.yml +19 -0
  5. data/CHANGELOG.md +310 -0
  6. data/LICENSE +21 -0
  7. data/README.md +69 -0
  8. data/Rakefile +16 -0
  9. data/exe/ace-demo +14 -0
  10. data/handbook/skills/as-demo-create/SKILL.md +27 -0
  11. data/handbook/skills/as-demo-record/SKILL.md +27 -0
  12. data/handbook/workflow-instructions/demo/create.wf.md +89 -0
  13. data/handbook/workflow-instructions/demo/record.wf.md +146 -0
  14. data/lib/ace/demo/atoms/attach_output_printer.rb +22 -0
  15. data/lib/ace/demo/atoms/demo_comment_formatter.rb +25 -0
  16. data/lib/ace/demo/atoms/demo_name_sanitizer.rb +21 -0
  17. data/lib/ace/demo/atoms/demo_yaml_parser.rb +148 -0
  18. data/lib/ace/demo/atoms/playback_speed_parser.rb +30 -0
  19. data/lib/ace/demo/atoms/tape_content_generator.rb +37 -0
  20. data/lib/ace/demo/atoms/tape_metadata_parser.rb +42 -0
  21. data/lib/ace/demo/atoms/tape_search_dirs.rb +19 -0
  22. data/lib/ace/demo/atoms/vhs_command_builder.rb +15 -0
  23. data/lib/ace/demo/atoms/vhs_tape_compiler.rb +38 -0
  24. data/lib/ace/demo/cli/commands/attach.rb +33 -0
  25. data/lib/ace/demo/cli/commands/create.rb +69 -0
  26. data/lib/ace/demo/cli/commands/list.rb +35 -0
  27. data/lib/ace/demo/cli/commands/record.rb +214 -0
  28. data/lib/ace/demo/cli/commands/retime.rb +46 -0
  29. data/lib/ace/demo/cli/commands/show.rb +72 -0
  30. data/lib/ace/demo/cli.rb +70 -0
  31. data/lib/ace/demo/models/execution_result.rb +22 -0
  32. data/lib/ace/demo/molecules/demo_comment_poster.rb +54 -0
  33. data/lib/ace/demo/molecules/demo_sandbox_builder.rb +121 -0
  34. data/lib/ace/demo/molecules/demo_teardown_executor.rb +48 -0
  35. data/lib/ace/demo/molecules/gh_asset_uploader.rb +101 -0
  36. data/lib/ace/demo/molecules/inline_recorder.rb +62 -0
  37. data/lib/ace/demo/molecules/media_retimer.rb +81 -0
  38. data/lib/ace/demo/molecules/tape_resolver.rb +51 -0
  39. data/lib/ace/demo/molecules/tape_scanner.rb +148 -0
  40. data/lib/ace/demo/molecules/tape_writer.rb +34 -0
  41. data/lib/ace/demo/molecules/vhs_executor.rb +38 -0
  42. data/lib/ace/demo/organisms/demo_attacher.rb +44 -0
  43. data/lib/ace/demo/organisms/demo_recorder.rb +95 -0
  44. data/lib/ace/demo/organisms/tape_creator.rb +68 -0
  45. data/lib/ace/demo/version.rb +7 -0
  46. data/lib/ace/demo.rb +84 -0
  47. metadata +204 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 05dccf36768772abb152a0b5494c5248f7c2ace0a1109618d1e66394d48d5a19
4
+ data.tar.gz: 5f78333a34958fbfec8e7694016e7511ec2b1bafe55f8a75cfb2d809b23e5e18
5
+ SHA512:
6
+ metadata.gz: 0deee155122d67606f4fdfbdab863b639a31c191cbd0ef6d0cee352c36f32abf17404ed2deebdd1a8923619a5cc66e442a7b572c97dabb920cbe3d66f193b74f
7
+ data.tar.gz: 74725ee58385d06c0ca31cdafe9c4d42effde8c6eea50ca4f7d67c0a226fc0e20deb0ec86e23cae5ddba0295f24d727f07f76880d517d9385fe864cbdd0848cc
@@ -0,0 +1,3 @@
1
+ vhs_bin: vhs
2
+ output_dir: .ace-local/demo
3
+ sandbox_dir: .ace-local/demo/sandbox
@@ -0,0 +1,12 @@
1
+ # Description: Built-in echo demo
2
+ # Tags: example, getting-started
3
+
4
+ Output .ace-local/demo/hello.gif
5
+
6
+ Set FontSize 14
7
+ Set Width 800
8
+ Set Height 400
9
+
10
+ Type "echo 'Hello from ace-demo!'"
11
+ Enter
12
+ Sleep 2s
@@ -0,0 +1,19 @@
1
+ ---
2
+ # WFI Sources Protocol Configuration for ace-demo gem
3
+ # This enables workflow discovery from the installed ace-demo gem
4
+
5
+ name: ace-demo
6
+ type: gem
7
+ description: Workflow instructions from ace-demo gem
8
+ priority: 10
9
+
10
+ # Configuration for workflow discovery within the gem
11
+ config:
12
+ # Relative path within the gem (default: handbook/workflow-instructions)
13
+ relative_path: handbook/workflow-instructions
14
+
15
+ # Pattern for finding workflow files (default: *.wf.md)
16
+ pattern: "*.wf.md"
17
+
18
+ # Enable discovery
19
+ enabled: true
data/CHANGELOG.md ADDED
@@ -0,0 +1,310 @@
1
+ # Changelog
2
+
3
+ All notable changes to ace-demo 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.18.0] - 2026-03-23
11
+
12
+ ### Added
13
+ - New "Tape Format" section in README explaining the `.tape.yml` YAML spec (setup, scenes, teardown, settings).
14
+ - Comprehensive YAML tape tutorial in getting-started.md (step 7) covering setup directives, multi-scene recordings, teardown, and fixture provisioning.
15
+ - Re-recorded getting-started demo GIF using a sandbox-based YAML tape with setup/teardown and multiple scenes.
16
+
17
+ ### Changed
18
+ - Reframed README and gemspec around proof-of-work evidence delivery for agent-driven workflows.
19
+ - Updated getting-started demo tape to demonstrate sandbox setup, git-init, multi-scene recording, and teardown cleanup.
20
+ - Consolidated README use cases: merged overlapping PR attachment and code review paragraphs.
21
+
22
+ ### Fixed
23
+ - Corrected `.tape` → `.tape.yml` file extension in four places in usage.md to match actual implementation output.
24
+
25
+ ## [0.17.4] - 2026-03-23
26
+
27
+ ### Changed
28
+ - Refreshed `README.md` with the new package layout pattern, including top-level docs navigation, use-case-led content, and quick-start commands.
29
+
30
+ ### Technical
31
+ - Added setup-doc discoverability in README navigation and aligned package footer/handbook labels with current ACE conventions.
32
+
33
+ ## [0.17.3] - 2026-03-22
34
+
35
+ ### Fixed
36
+ - Updated `record --dry-run` tape-mode previews to resolve YAML tape specs before reporting preview format/output behavior.
37
+
38
+ ### Changed
39
+ - Switched generated `.tape.yml` template rendering to structured YAML serialization for safer escaping and multiline handling.
40
+ - Removed default `copy-fixtures` from generated project tape templates to avoid guaranteed no-op setup warnings.
41
+
42
+ ### Technical
43
+ - Updated command/organism test expectations and added dry-run YAML format coverage for the new preview/serialization behavior.
44
+
45
+ ## [0.17.2] - 2026-03-22
46
+
47
+ ### Changed
48
+ - Removed the legacy `YamlDemoRecorder`/`DemoSetupExecutor` pipeline and consolidated YAML recording on the production `DemoRecorder` sandbox flow.
49
+ - Updated getting-started docs to reflect `.tape.yml` output paths for created and inline tapes.
50
+
51
+ ### Technical
52
+ - Removed obsolete legacy YAML parser/content-generator compatibility files and their test coverage.
53
+ - Added production-path regression coverage for `DemoRecorder` YAML execution, teardown behavior, and migrated getting-started tape smoke checks.
54
+
55
+ ## [0.17.1] - 2026-03-22
56
+
57
+ ### Fixed
58
+ - Honored YAML `settings.format` during `ace-demo record` tape-mode execution when `--format` is omitted.
59
+ - Cleaned up sandbox directories on setup failures and preserved `ArgumentError` type for invalid setup directives.
60
+ - Guarded missing YAML `setup`/`teardown` sections and normalized `.tape.yaml` compiled tape naming.
61
+
62
+ ### Technical
63
+ - Added regression tests for CLI format passthrough, YAML compiled naming, and sandbox-builder failure cleanup behavior.
64
+
65
+ ## [0.17.0] - 2026-03-22
66
+
67
+ ### Changed
68
+ - Removed the built-in non-CLI `ace-test` demo tape from default demo inventory so `ace-demo list` only shows CLI-relevant demos.
69
+ - Updated getting-started guidance and list/scan test fixtures to reflect the cleaned built-in tape set.
70
+
71
+ ## [0.16.0] - 2026-03-22
72
+
73
+ ### Added
74
+ - Added `DemoYamlParser` and `VhsTapeCompiler` atoms for strict `.tape.yml` schema validation and VHS script compilation.
75
+ - Added `DemoSandboxBuilder` and `DemoTeardownExecutor` molecules for sandbox lifecycle management, fixture setup, and teardown execution.
76
+
77
+ ### Changed
78
+ - Updated `DemoRecorder` to support unified `.tape`/`.tape.yml` routing with YAML pipeline execution.
79
+ - Updated `TapeResolver` and `TapeScanner` to support dual-format discovery and YAML-first extensionless resolution.
80
+ - Updated `ace-demo create`/`TapeCreator` to generate `.tape.yml` templates as the default authoring format.
81
+ - Updated CLI `list` and `show` output to include tape format and YAML metadata details.
82
+ - Added `sandbox_dir` default configuration (`.ace-local/demo/sandbox`).
83
+
84
+ ### Technical
85
+ - Added and updated tests across atoms, molecules, organisms, and commands for the new YAML engine path and compatibility shims.
86
+
87
+ ## [0.15.0] - 2026-03-22
88
+
89
+ ### Added
90
+ - Added YAML demo recording support in `ace-demo record` for `.tape.yml` inputs, including YAML parsing, scene compilation, sandbox setup execution, and teardown cleanup.
91
+ - Added demo spike artifacts for `ace-task` YAML recording (`ace-task-getting-started.tape.yml`) and fixture-based setup support.
92
+
93
+ ### Changed
94
+ - Updated `VhsExecutor#run` to support sandbox-scoped execution via optional `chdir:`.
95
+ - Updated usage docs to include `.tape.yml` recording workflow.
96
+
97
+ ### Technical
98
+ - Added parser/compiler/setup/recorder test coverage for the YAML demo pipeline and CLI routing.
99
+
100
+ ## [0.14.2] - 2026-03-22
101
+
102
+ ### Fixed
103
+ - Corrected `ace-demo create` usage syntax to show options before `--`, matching CLI argument parsing behavior.
104
+
105
+ ## [0.14.1] - 2026-03-22
106
+
107
+ ### Fixed
108
+ - Removed the duplicated `0.13.0` changelog section that repeated `0.14.0` release notes.
109
+
110
+ ## [0.14.0] - 2026-03-22
111
+
112
+ ### Changed
113
+ - Refreshed package README and documentation with landing-focused messaging for agent workflows.
114
+ - Expanded command usage coverage in `docs/usage.md` and added new getting-started and handbook guides.
115
+ - Added a reusable example tape asset at `.ace/demo/tapes/my-demo.tape` and updated project docs for inline demo creation.
116
+
117
+ ## [0.12.0] - 2026-03-21
118
+
119
+ ### Changed
120
+ - Added initial `TS-DEMO-001` value-gated smoke E2E coverage for CLI help surface, tape create/show lifecycle, inline record dry-run preview, and attach validation error behavior.
121
+ - Added `e2e-decision-record.md` with explicit ADD/SKIP decisions and unit-coverage evidence for retained and deferred E2E candidates.
122
+
123
+ ## [0.11.1] - 2026-03-18
124
+
125
+ ### Changed
126
+ - Migrated CLI namespace from `Ace::Core::CLI::*` to `Ace::Support::Cli::*` (ace-support-cli is now the canonical home for CLI infrastructure).
127
+
128
+
129
+ ## [0.11.0] - 2026-03-18
130
+
131
+ ### Changed
132
+ - Removed legacy backward-compatibility behavior as part of the 0.10 cleanup release.
133
+
134
+
135
+ ## [0.10.4] - 2026-03-15
136
+
137
+ ### Changed
138
+ - Migrated CLI framework from dry-cli to ace-support-cli
139
+
140
+ ## [0.10.3] - 2026-03-13
141
+
142
+ ### Changed
143
+ - Updated canonical demo skills to explicitly run bundled workflows in the current project and execute them end-to-end.
144
+
145
+ ## [0.10.2] - 2026-03-13
146
+
147
+ ### Changed
148
+ - Removed the Codex-specific delegated execution metadata from the canonical `as-demo-create` and `as-demo-record` skills so provider projections now inherit the canonical skill body unchanged.
149
+
150
+ ## [0.10.1] - 2026-03-12
151
+
152
+ ### Fixed
153
+ - Registered the package WFI source so `wfi://demo/create` and `wfi://demo/record` resolve for the canonical demo skills.
154
+
155
+ ## [0.10.0] - 2026-03-12
156
+
157
+ ### Added
158
+ - Added Codex-specific delegated execution metadata to the canonical `as-demo-create` and `as-demo-record` skills so the generated Codex skills run in fork context on `gpt-5.3-codex-spark`.
159
+
160
+ ## [0.9.0] - 2026-03-10
161
+
162
+ ### Added
163
+ - Added canonical handbook-owned demo skills for tape creation and recording workflows.
164
+
165
+
166
+ ## [0.8.0] - 2026-03-08
167
+
168
+ ### Added
169
+ - Added `retime` command: `ace-demo retime <file> --playback-speed <1x|2x|4x|8x>` to postprocess GIF/MP4/WebM recordings into faster playback variants.
170
+ - Added playback speed parser and media retime engine (`ffmpeg`-based) with strict speed validation and format-aware processing.
171
+ - Added `assign-drive-showcase` project demo tape under `.ace/demo/tapes/` for delegation/drive walkthrough recording.
172
+
173
+ ### Changed
174
+ - Extended `record` with `--playback-speed` and config fallback (`record.postprocess.playback_speed`) to auto-generate retimed artifacts while preserving originals.
175
+ - Updated `record --pr` behavior to attach the retimed artifact when playback postprocess is active.
176
+ - Updated docs/workflows (`README`, `docs/usage.md`, `docs/setup.md`, `demo/record.wf.md`) to cover retime usage and postprocess configuration.
177
+
178
+ ## [0.7.2] - 2026-03-05
179
+
180
+ ### Fixed
181
+ - Fixed `AttachOutputPrinter` printing full comment body to stdout in live mode — now only shown in dry-run preview.
182
+ - Fixed `--output` option being silently ignored in inline recording mode — now wired through to `InlineRecorder`.
183
+ - Fixed `--pr` with non-GIF formats producing broken image markdown — `DemoCommentFormatter` now uses link format for MP4/WebM.
184
+ - Fixed dry-run with `--pr` not previewing attachment step — both tape and inline modes now show attachment preview.
185
+ - Fixed dry-run inline preview using unsanitized name in output path placeholder.
186
+ - Renamed `gif_path:` parameter to `file_path:` in `GhAssetUploader` for format-neutral naming.
187
+ - Changed "GIF not found" error messages to "Recording file not found" in `DemoAttacher` and `GhAssetUploader`.
188
+ - Updated `attach` command description and argument help to be format-neutral.
189
+ - Fixed incorrect env var passing example in `demo/record` workflow (`TEST_PATH=... ace-demo` instead of positional arg).
190
+ - Fixed `docs/usage.md` expected output examples for `list` and `show` commands to match actual implementation.
191
+ - Removed redundant project-level WFI source registration (gem default suffices).
192
+
193
+ ### Added
194
+ - Added dedicated `DemoNameSanitizer` unit tests covering edge cases: empty input, path traversal, special characters, max length boundary.
195
+ - Added escaping regression test for `TapeContentGenerator` double-quote and backslash handling.
196
+ - Added `DemoCommentFormatter` test for non-GIF format link rendering.
197
+
198
+ ## [0.7.1] - 2026-03-05
199
+
200
+ ### Added
201
+ - Added handbook workflow instructions for tape creation (`demo/create`) and recording (`demo/record`).
202
+ - Added skills integration (`ace-demo-create`, `ace-demo-record`) for agent workflow routing via `wfi://` protocol.
203
+ - Added WFI source registration for `ace-bundle wfi://demo/*` discovery.
204
+ - Added `handbook/**/*` to gemspec `spec.files` per project convention.
205
+
206
+ ### Fixed
207
+ - Fixed command escaping in `TapeContentGenerator` — double quotes and backslashes in commands are now properly escaped in `Type` directives.
208
+ - Fixed path traversal vulnerability in `TapeCreator` — tape names are now sanitized via `DemoNameSanitizer` before use in file paths.
209
+ - Fixed `--dry-run` in tape recording mode — now skips VHS execution entirely instead of only dry-running PR attachment.
210
+ - Narrowed auth error detection in `GhAssetUploader` and `DemoCommentPoster` to match specific patterns (`authentication required`, `authentication token`) instead of broad `authentication` substring.
211
+ - Removed unused `format:` parameter from `VhsCommandBuilder.build`.
212
+
213
+ ## [0.7.0] - 2026-03-05
214
+
215
+ ### Added
216
+ - Added `Atoms::DemoNameSanitizer` for sanitizing user-supplied demo names to filesystem-safe slugs (lowercase, alphanumeric/hyphen, max 55 chars).
217
+ - Added `ace-b36ts` runtime dependency for compact 6-character base36 session IDs.
218
+ - Replaced `YYYYMMDD-HHMMSS` timestamp session IDs with `Ace::B36ts.now` 6-character b36ts tokens in `InlineRecorder`.
219
+ - Name passed to `record` is now sanitized via `DemoNameSanitizer` before use in tape/output paths.
220
+
221
+ ## [0.6.0] - 2026-03-05
222
+
223
+ ### Added
224
+ - Added inline recording to `record` command: `ace-demo record <name> -- <commands...>` generates a session-local tape and records it in one step.
225
+ - Added `Molecules::InlineRecorder` for session-scoped tape generation and VHS execution with timestamped output directories (`.ace-local/demo/<session_id>/`).
226
+ - Added create-style options to `record` command for inline mode: `--timeout`, `--desc`, `--tags`, `--width`, `--height`, `--font-size`.
227
+ - Added stdin support for piping commands into `record` (one command per line).
228
+ - Added dry-run support for inline recording that previews tape content without executing VHS.
229
+ - Added tests for inline recorder molecule and CLI inline record integration.
230
+
231
+ ## [0.5.0] - 2026-03-05
232
+
233
+ ### Added
234
+ - Added `create` command: `ace-demo create <name> [--timeout] [--desc] [--tags] [--width] [--height] [--font-size] [--format] [--force] [--dry-run] -- <commands...>` for generating tape files from shell commands.
235
+ - Added tape creation pipeline components:
236
+ - `Atoms::TapeContentGenerator` for pure tape content generation from structured params.
237
+ - `Molecules::TapeWriter` for conflict-aware file I/O to `.ace/demo/tapes/`.
238
+ - `Organisms::TapeCreator` for orchestrating content generation and file writing.
239
+ - Added `TapeAlreadyExistsError` for conflict detection with `--force` override.
240
+ - Added stdin support for piping commands into `create` (one command per line).
241
+ - Added tests for generator, writer, creator, and CLI command behavior.
242
+ - Updated defaults to 960x480px at font size 16 (~100 columns) for better terminal rendering.
243
+
244
+ ## [0.4.3] - 2026-03-05
245
+
246
+ ### Fixed
247
+ - Extracted shared tape search directory construction to `Atoms::TapeSearchDirs` and reused it in tape scanner/resolver paths.
248
+ - Extracted shared attach output rendering to `Atoms::AttachOutputPrinter` and reused it across `record` and `attach` commands.
249
+ - Hardened PR-not-found detection in demo comment posting to avoid broad stderr misclassification.
250
+ - Applied runtime config defaults (`vhs_bin`, `output_dir`) in demo recording execution paths and added coverage for configured defaults.
251
+
252
+ ## [0.4.2] - 2026-03-05
253
+
254
+ ### Fixed
255
+ - Moved `ExecutionResult` from molecules to models and updated recorder/executor references for ATOM layer consistency.
256
+ - Optimized `TapeScanner#find` to use direct layered lookup instead of full tape-list scans for single-name lookups.
257
+ - Updated config load fallback to emit a warning when loading fails, improving diagnostics for invalid config states.
258
+ - Added regression coverage for direct lookup behavior and config-fallback warning behavior.
259
+
260
+ ## [0.4.1] - 2026-03-05
261
+
262
+ ### Fixed
263
+ - Fixed tape precedence handling to consistently prefer project tapes over home and gem defaults.
264
+ - Removed redundant VHS availability pre-check and now report missing VHS from the actual execution path.
265
+ - Updated dry-run attach behavior to avoid `gh` CLI/network/auth calls.
266
+ - Removed unsupported `--format` emission from VHS command construction.
267
+ - Removed duplicate `Error:` message prefixing in CLI command error propagation.
268
+ - Added debug-mode diagnostics when config loading fails instead of silently swallowing all errors.
269
+
270
+ ## [0.4.0] - 2026-03-05
271
+
272
+ ### Added
273
+ - Added demo tape discovery commands:
274
+ - `ace-demo list` to enumerate available tapes with description and source path.
275
+ - `ace-demo show <name>` to display tape metadata and full tape contents.
276
+ - Added tape library components:
277
+ - `Atoms::TapeMetadataParser` for parsing VHS comment metadata.
278
+ - `Molecules::TapeScanner` for config-cascade discovery with override semantics and direct-path lookup.
279
+ - Added built-in default tapes in `.ace-defaults/demo/tapes/`:
280
+ - `hello.tape`
281
+ - `ace-test.tape`
282
+ - Added tests for parser/scanner behavior and new CLI commands.
283
+
284
+ ## [0.3.0] - 2026-03-05
285
+
286
+ ### Added
287
+ - Added `attach` command: `ace-demo attach <file> --pr <number> [--dry-run]` for uploading GIFs to the `demo-assets` release and posting inline PR comments.
288
+ - Added PR-attachment ATOM components:
289
+ - `Atoms::DemoCommentFormatter`
290
+ - `Molecules::GhAssetUploader`
291
+ - `Molecules::DemoCommentPoster`
292
+ - `Organisms::DemoAttacher`
293
+ - Added `record --pr <number>` flow to record and attach in one command.
294
+ - Added package tests for formatter, uploader, comment poster, attacher, and CLI integration.
295
+
296
+ ## [0.2.0] - 2026-03-05
297
+
298
+ ### Added
299
+ - Added new `ace-demo` gem scaffold with executable, module loading, and dry-cli integration.
300
+ - Added `record` command: `ace-demo record <tape> [--output] [--format gif|mp4|webm]`.
301
+ - Added VHS recording pipeline components:
302
+ - `Atoms::VhsCommandBuilder`
303
+ - `Molecules::TapeResolver`
304
+ - `Molecules::VhsExecutor`
305
+ - `Organisms::DemoRecorder`
306
+ - Added `.ace-defaults/demo/` config and tape preset structure.
307
+ - Added package test suite for atom, molecules, organism, and CLI command behavior.
308
+
309
+ ### Fixed
310
+ - Added explicit error handling for missing tape files, missing VHS binary, unsupported formats, and VHS execution failures with actionable messages.
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,69 @@
1
+ <div align="center">
2
+ <h1> ACE - Demo </h1>
3
+
4
+ Record terminal sessions as proof-of-work evidence for pull requests.
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-demo"><img alt="Gem Version" src="https://img.shields.io/gem/v/ace-demo.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-demo demo](docs/demo/ace-demo-getting-started.gif)
20
+
21
+ `ace-demo` records terminal sessions as proof-of-work evidence for agent-driven workflows. Tapes define what to capture — either as simple [VHS](https://github.com/charmbracelet/vhs) scripts (`.tape`) or as YAML specs (`.tape.yml`) with sandbox setup, scenes, and teardown.
22
+
23
+ Recordings attach directly to GitHub pull requests as reviewable evidence. Requires `vhs`, `chromium`, and `ttyd` for deterministic rendering (see [setup requirements](docs/setup.md)).
24
+
25
+ ## How It Works
26
+
27
+ 1. **Define a tape** — inline commands, a VHS `.tape` script, or a `.tape.yml` with sandbox setup, recording scenes, and teardown cleanup.
28
+ 2. **Record** — ace-demo compiles the tape to VHS, executes in an isolated sandbox, and produces a GIF, MP4, or WebM artifact.
29
+ 3. **Deliver evidence** — attach the recording to a GitHub pull request with `--pr`, where it serves as proof-of-work for code review or assignment verification.
30
+
31
+ ## Tape Format
32
+
33
+ A `.tape.yml` file defines a self-contained recording scenario:
34
+
35
+ ```yaml
36
+ setup:
37
+ - sandbox # create isolated working directory
38
+ - git-init # initialize a git repo in the sandbox
39
+ - copy-fixtures # copy fixture files from adjacent fixtures/ dir
40
+
41
+ scenes:
42
+ - name: Main flow
43
+ commands:
44
+ - type: ace-demo list
45
+ sleep: 4s
46
+ - type: ace-demo record hello
47
+ sleep: 6s
48
+
49
+ teardown:
50
+ - cleanup # remove sandbox directory
51
+ ```
52
+
53
+ - **setup** — sandbox isolation, git init, fixture copying, or arbitrary shell via `run: <cmd>`
54
+ - **scenes** — named command sequences compiled to VHS directives (`Type`, `Enter`, `Sleep`)
55
+ - **teardown** — cleanup directives that always run (even on failure)
56
+ - **settings** — optional `font_size`, `width`, `height`, `format` overrides
57
+
58
+ Legacy `.tape` files use raw VHS syntax directly. See the [Usage Guide](docs/usage.md) for the full tape specification.
59
+
60
+ ## Use Cases
61
+
62
+ **Deliver proof-of-work for agent tasks** — pair with [ace-assign](../ace-assign) for scoped task workflows that require demo evidence, using [ace-bundle](../ace-bundle) for loading workflow context that drives repeatable demo scenarios.
63
+
64
+ **Attach visual evidence to pull requests** — record a tape with [`ace-demo record --pr`](docs/usage.md) or attach an existing file with [`ace-demo attach`](docs/usage.md) so reviewers see actual terminal output. Use `/as-demo-record` for agent-driven recording sessions.
65
+
66
+ *Future: web interaction recording is planned alongside terminal capture.*
67
+
68
+ ---
69
+ [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,16 @@
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 spec: :test
15
+
16
+ task default: :test
data/exe/ace-demo ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require_relative "../lib/ace/demo"
5
+ require "ace/support/cli"
6
+
7
+ args = ARGV.empty? ? ["--help"] : ARGV
8
+
9
+ begin
10
+ Ace::Support::Cli::Runner.new(Ace::Demo::CLI).call(args: args)
11
+ rescue Ace::Support::Cli::Error => e
12
+ warn e.message
13
+ exit(e.exit_code)
14
+ end
@@ -0,0 +1,27 @@
1
+ ---
2
+ name: as-demo-create
3
+ description: Create or update VHS demo tapes from shell commands
4
+ # bundle: wfi://demo/create
5
+ # agent: general-purpose
6
+ user-invocable: true
7
+ allowed-tools:
8
+ - Bash(ace-demo:*)
9
+ - Bash(ace-bundle:*)
10
+ - Read
11
+ argument-hint: "<name> [--force] -- <commands...>"
12
+ last_modified: 2026-03-05
13
+ source: ace-demo
14
+ integration:
15
+ targets:
16
+ - claude
17
+ - codex
18
+ - gemini
19
+ - opencode
20
+ - pi
21
+ skill:
22
+ kind: workflow
23
+ execution:
24
+ workflow: wfi://demo/create
25
+ ---
26
+
27
+ Load and run `ace-bundle wfi://demo/create` 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,27 @@
1
+ ---
2
+ name: as-demo-record
3
+ description: Record terminal demos from VHS tapes or inline commands
4
+ # bundle: wfi://demo/record
5
+ # agent: general-purpose
6
+ user-invocable: true
7
+ allowed-tools:
8
+ - Bash(ace-demo:*)
9
+ - Bash(ace-bundle:*)
10
+ - Read
11
+ argument-hint: "<tape|name> [--pr <number>] [-- commands...]"
12
+ last_modified: 2026-03-05
13
+ source: ace-demo
14
+ integration:
15
+ targets:
16
+ - claude
17
+ - codex
18
+ - gemini
19
+ - opencode
20
+ - pi
21
+ skill:
22
+ kind: workflow
23
+ execution:
24
+ workflow: wfi://demo/record
25
+ ---
26
+
27
+ Load and run `ace-bundle wfi://demo/record` 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,89 @@
1
+ ---
2
+ doc-type: workflow
3
+ title: Create Demo Tape Workflow
4
+ purpose: tape creation workflow instruction
5
+ ace-docs:
6
+ last-updated: 2026-03-05
7
+ last-checked: 2026-03-21
8
+ ---
9
+
10
+ # Create Demo Tape Workflow
11
+
12
+ ## Purpose
13
+
14
+ Create or update VHS demo tapes using `ace-demo create`. Tapes are stored in `.ace/demo/tapes/` and define terminal recordings as reproducible scripts.
15
+
16
+ ## Context
17
+
18
+ Tapes are VHS script files that define terminal sessions: commands to type, timing, and display settings. Once created, tapes can be recorded with `ace-demo record`.
19
+
20
+ **Tape discovery cascade** (highest to lowest priority):
21
+ 1. Direct file path
22
+ 2. `.ace/demo/tapes/` — project-specific (committed)
23
+ 3. `~/.ace/demo/tapes/` — user-wide
24
+ 4. `.ace-defaults/demo/tapes/` — built-in
25
+
26
+ ## Variables
27
+
28
+ - `$ARGUMENTS`: Tape name, options, and commands (everything after `--`)
29
+
30
+ ## Instructions
31
+
32
+ 1. **Preview the tape** before writing:
33
+
34
+ ```bash
35
+ ace-demo create <name> --dry-run -- "cmd1" "cmd2"
36
+ ```
37
+
38
+ This prints the generated tape content without writing any file.
39
+
40
+ 2. **Create the tape**:
41
+
42
+ ```bash
43
+ ace-demo create <name> -- "cmd1" "cmd2"
44
+ ```
45
+
46
+ Add metadata for discoverability:
47
+ ```bash
48
+ ace-demo create <name> --desc "What this demo shows" --tags "feature,setup" -- "cmd1" "cmd2"
49
+ ```
50
+
51
+ 3. **Update an existing tape** (overwrite):
52
+
53
+ ```bash
54
+ ace-demo create <name> --force -- "cmd1" "cmd2"
55
+ ```
56
+
57
+ 4. **Verify** the created tape:
58
+
59
+ ```bash
60
+ ace-demo show <name>
61
+ ```
62
+
63
+ This displays metadata and full tape contents.
64
+
65
+ 5. **List all available tapes** to confirm visibility:
66
+
67
+ ```bash
68
+ ace-demo list
69
+ ```
70
+
71
+ ## Options Reference
72
+
73
+ | Option | Description |
74
+ |--------|-------------|
75
+ | `--desc/-D <text>` | Description metadata |
76
+ | `--tags/-T <tags>` | Comma-separated tags |
77
+ | `--format/-f <fmt>` | Output format: gif, mp4, webm (default: gif) |
78
+ | `--timeout/-t <dur>` | Wait time after each command (default: 2s) |
79
+ | `--width <px>` | Terminal width in pixels (default: 960) |
80
+ | `--height <px>` | Terminal height in pixels (default: 480) |
81
+ | `--font-size <n>` | Font size (default: 16) |
82
+ | `--force` | Overwrite existing tape |
83
+ | `--dry-run/-n` | Preview content without writing |
84
+
85
+ ## Success Criteria
86
+
87
+ - Tape file created at `.ace/demo/tapes/<name>.tape`
88
+ - `ace-demo show <name>` displays correct metadata and commands
89
+ - `ace-demo list` shows the new tape