ace-handbook 0.27.4 → 0.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: de6c88b47a7fafffa19ef76352db0569c3fa5b3139a661b925616d1cbc7b0774
4
- data.tar.gz: d6e990ead6a32aebb44a20a630d422dd704d88c2ab6bebb17d6a1e32a593476d
3
+ metadata.gz: 72ea6d4981e8c7686fa38ae9f12c868bb0d910b148ee8150d4de55b7d5ccc07e
4
+ data.tar.gz: aa19a72eb4faca05a8ddc78bfdff8dd1a19c7e5875ffae32da1d59097aec8630
5
5
  SHA512:
6
- metadata.gz: bd5418f90557c7666854e07450cabc08a572a6a8b73129a100f17be8e2154b6bf4ed7414aa8986cfff0163ab9367566e388478728093f8e91ef715991438b7e1
7
- data.tar.gz: 2f15096be8f24d52ea63116ad6e380130a924f823283732941ff3bed8581c0d3e3cf8c86a23455a1f9e516621d9e08db71fe20be340826e21cc6b828502f8825
6
+ metadata.gz: 1c0ba11fdb8f55c87ce15642d34746c994b38480e920f98f2c3bfb447092fdaba2e9e69efac60d4a13e588242326db28c99d2b9b130093d9e331f05fd7862233
7
+ data.tar.gz: 82ccfe66ee207de57e86524684a28ba4f518a1c8ca252c49cc89dab3706ac7f305ddf56532883ffe64cc26ff8a7d8a0b618f22a48d247553387182414bd9e59f
@@ -1,4 +1,5 @@
1
1
  sync:
2
2
  providers:
3
- enabled: []
3
+ enabled:
4
+ - agents
4
5
  disabled: []
@@ -0,0 +1,2 @@
1
+ provider: agents
2
+ output_dir: .agents/skills
data/CHANGELOG.md CHANGED
@@ -7,6 +7,31 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.29.0] - 2026-06-30
11
+
12
+ ### Added
13
+ - Added the built-in `agents` skill projection target, generating `.agents/skills/` for default handbook sync.
14
+
15
+ ### Changed
16
+ - Changed plain `ace-handbook sync` and `ace-handbook status` to use the default/enabled projection set, with `agents` as the default when no providers are configured.
17
+ - Allowed explicit provider sync, such as `ace-handbook sync --provider codex`, even when the provider is not part of the default enabled set unless it is explicitly disabled.
18
+
19
+ ### Technical
20
+ - Added regression coverage for default `.agents/skills` projection, explicit Codex projection, disabled-provider blocking, and default status filtering.
21
+
22
+ ## [0.28.1] - 2026-04-23
23
+
24
+ ### Changed
25
+ - Updated the monorepo setup cookbook to use `ace-config sync ace-llm-providers-cli` before handbook sync.
26
+
27
+ ## [0.28.0] - 2026-04-22
28
+
29
+ ### Changed
30
+ - **ace-handbook v0.28.0**: Added the local release workflow (`release/local`) and switched the package release workflow to a local-only preparation flow.
31
+
32
+ ### Technical
33
+ - **ace-handbook v0.28.0**: Kept `as-release` behavior focused on local release prep without publishing to RubyGems.
34
+
10
35
  ## [0.27.4] - 2026-04-16
11
36
 
12
37
  ### Technical
data/README.md CHANGED
@@ -34,9 +34,9 @@
34
34
 
35
35
  **Coordinate larger handbook deliveries** - use `/as-handbook-update-docs` to plan, execute, and synthesize multi-step documentation changes across package handbook assets.
36
36
 
37
- **Integrate with resource discovery and context loading** - pair with [ace-nav](../ace-support-nav) for workflow and resource discovery, [ace-bundle](../ace-bundle) for loading complete workflow instructions, and provider integrations (`ace-handbook-integration-*`) that project canonical handbook skills into provider-native folders.
37
+ **Integrate with resource discovery and context loading** - pair with [ace-nav](../ace-support-nav) for workflow and resource discovery, [ace-bundle](../ace-bundle) for loading complete workflow instructions, and provider integrations (`ace-handbook-integration-*`) that can project canonical handbook skills into harness-native folders on request.
38
38
 
39
- **Sync and inspect provider integrations** - run `ace-handbook sync` to project canonical skills into provider-native folders and `ace-handbook status` to check integration health across all configured providers.
39
+ **Sync and inspect skill projections** - run `ace-handbook sync` to project canonical skills into `.agents/skills/` by default, or use `ace-handbook sync --provider PROVIDER` for harness-native folders such as `.codex/skills/`.
40
40
 
41
41
  **Extend handbook content in normal projects** - put project-specific workflows, guides, cookbooks, templates, and skills under `.ace-handbook/` and discover them with protocol URLs (`wfi://`, `guide://`, `cookbook://`, `tmpl://`, `skill://`). See [Usage Guide](docs/usage.md) for path conventions.
42
42
 
@@ -32,7 +32,7 @@ This cookbook distills monorepo setup patterns from ACE package conventions and
32
32
  - Add one monorepo quickstart page that covers prerequisites, workspace bootstrap, and E2E smoke checks.
33
33
  - Add a short troubleshooting section for permission and timeout pitfalls during E2E runs.
34
34
  - Agent guidance updates to apply:
35
- - Add concise rules only: "use `ace-test` (not bundle exec)", "run `ace-config init` + `ace-handbook sync` before nav/bundle checks", and "scope E2E scenarios to monorepo-level concerns".
35
+ - Add concise rules only: "use `ace-test` (not bundle exec)", "run `ace-config sync ace-llm-providers-cli` + `ace-handbook sync` before nav/bundle checks", and "scope E2E scenarios to monorepo-level concerns".
36
36
  - Summary-only propagation target notes (do not copy full cookbook body):
37
37
  - `README.md`
38
38
  - `docs/quick-start.md`
@@ -64,7 +64,7 @@ rg --files | rg "handbook/"
64
64
  **Commands/Actions:**
65
65
 
66
66
  ```bash
67
- ace-config init
67
+ ace-config sync ace-llm-providers-cli
68
68
  ace-handbook sync
69
69
  ```
70
70
 
@@ -125,7 +125,7 @@ Document these defaults in repo docs and concise agent guidance:
125
125
  **Validation:**
126
126
 
127
127
  ```bash
128
- rg -n "ace-config init|ace-handbook sync|ace-test-e2e" README.md docs AGENTS.md
128
+ rg -n "ace-config sync|ace-handbook sync|ace-test-e2e" README.md docs AGENTS.md
129
129
  ```
130
130
 
131
131
  ## Validation & Testing
@@ -328,6 +328,6 @@ For projects without public repositories, use internal tracking systems or omit
328
328
 
329
329
  - [Version Control Message Guide](./version-control-system-message.g.md) (Commit message standards)
330
330
  - [Project Management Guide](./project-management.g.md) (Release workflow integration)
331
- - [Publish Release Workflow](wfi://release/publish) (Release process overview and step-by-step actions)
331
+ - [Release Workflow (Local)](wfi://release/local) (Release process overview and step-by-step actions)
332
332
  - [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) (External reference)
333
333
  - [Semantic Versioning](https://semver.org/) (Versioning standards)
@@ -236,11 +236,12 @@ Review these refactored workflow instructions that demonstrate self-containment
236
236
 
237
237
  ### Command Reference Example
238
238
 
239
- `wfi://release/publish`:
239
+ `wfi://release/local`:
240
240
 
241
241
  - Embeds package registry commands for all major platforms
242
242
  - Includes changelog format specification
243
- - Contains complete release process without external references
243
+ - Contains complete multi-package release preparation process without external references
244
+ - `wfi://release/publish` remains a compatibility alias that forwards to this workflow.
244
245
 
245
246
  ## Key Refactoring Principles
246
247
 
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: as-release
3
3
  description: Release modified ACE packages with coordinated package and root changelog updates
4
- # bundle: wfi://release/publish
4
+ # bundle: wfi://release/local
5
5
  # agent: general-purpose
6
6
  user-invocable: true
7
7
  allowed-tools:
@@ -29,7 +29,7 @@ integration:
29
29
  skill:
30
30
  kind: workflow
31
31
  execution:
32
- workflow: wfi://release/publish
32
+ workflow: wfi://release/local
33
33
  ---
34
34
 
35
35
  ## Arguments
@@ -43,7 +43,8 @@ None
43
43
  ## Execution
44
44
 
45
45
  - You are working in the current project.
46
- - Run `ace-bundle wfi://release/publish` in the current project to load the workflow instructions.
46
+ - This is a local release-preparation workflow and does **not** publish to RubyGems.
47
+ - Run `ace-bundle wfi://release/local` in the current project to load the workflow instructions.
47
48
  - Read the loaded workflow and execute it end-to-end in this project.
48
49
  - Follow the workflow as the source of truth.
49
50
  - Do the work described by the workflow instead of only summarizing it.
@@ -39,7 +39,7 @@ Execute complete delivery workflow for a task with automatic step tracking, ensu
39
39
  * [ ] Enter plan mode if implementation required
40
40
  * [ ] Execute implementation via `ace-bundle wfi://task/work` or inline instructions
41
41
  * [ ] Commit all changes (`ace-git-commit`)
42
- * [ ] Release modified packages (`ace-bundle wfi://release/publish` if applicable)
42
+ * [ ] Release modified packages (`ace-bundle wfi://release/local` if applicable)
43
43
  * [ ] Mark task done and push to remote
44
44
 
45
45
  ### Phase 2: PR & Initial Review
@@ -76,7 +76,7 @@ Execute complete delivery workflow for a task with automatic step tracking, ensu
76
76
  ```
77
77
  1. Implement task (via `ace-bundle wfi://task/work` or inline)
78
78
  2. Commit all changes (`ace-git-commit`)
79
- 3. Release modified packages (`ace-bundle wfi://release/publish`)
79
+ 3. Release modified packages (`ace-bundle wfi://release/local`)
80
80
  4. Mark task done and push to remote
81
81
  5. Create/update PR (`ace-bundle wfi://github/pr/create`)
82
82
  6. Initial review (`ace-bundle wfi://review/pr`)
@@ -109,7 +109,7 @@ Execute complete delivery workflow for a task with automatic step tracking, ensu
109
109
  * Use descriptive commit message
110
110
 
111
111
  5. **Release Packages (if applicable):**
112
- * Load `ace-bundle wfi://release/publish` when a release is required
112
+ * Load `ace-bundle wfi://release/local` when a release is required
113
113
  * Follow versioning conventions
114
114
 
115
115
  6. **Complete Task:**
@@ -7,13 +7,10 @@ module Ace
7
7
  module Handbook
8
8
  module Atoms
9
9
  class ProviderRegistry
10
- LOCAL_MANIFEST_GLOB = File.join(
11
- "ace-handbook-integration-*",
12
- ".ace-defaults",
13
- "handbook",
14
- "providers",
15
- "*.yml"
16
- ).freeze
10
+ LOCAL_MANIFEST_GLOBS = [
11
+ File.join("ace-handbook", ".ace-defaults", "handbook", "providers", "*.yml"),
12
+ File.join("ace-handbook-integration-*", ".ace-defaults", "handbook", "providers", "*.yml")
13
+ ].freeze
17
14
 
18
15
  attr_reader :project_root
19
16
 
@@ -54,12 +51,14 @@ module Ace
54
51
  private
55
52
 
56
53
  def local_manifest_paths
57
- Dir.glob(File.join(project_root, LOCAL_MANIFEST_GLOB)).sort
54
+ LOCAL_MANIFEST_GLOBS.flat_map do |glob|
55
+ Dir.glob(File.join(project_root, glob))
56
+ end.sort
58
57
  end
59
58
 
60
59
  def installed_manifest_paths
61
60
  Gem::Specification.find_all.filter_map do |spec|
62
- next unless spec.name.start_with?("ace-handbook-integration-")
61
+ next unless spec.name == "ace-handbook" || spec.name.start_with?("ace-handbook-integration-")
63
62
 
64
63
  Dir.glob(File.join(spec.full_gem_path, ".ace-defaults", "handbook", "providers", "*.yml"))
65
64
  end.flatten.sort
@@ -73,30 +73,45 @@ module Ace
73
73
  end
74
74
 
75
75
  def providers_to_sync(requested_provider)
76
- providers = if requested_provider
77
- [requested_provider.to_s]
78
- else
79
- registry.providers
76
+ if requested_provider
77
+ provider = requested_provider.to_s
78
+ raise ArgumentError, "Unknown provider: #{provider}" unless registry.known?(provider)
79
+ if provider_disabled?(provider)
80
+ raise ArgumentError, "Provider '#{provider}' is disabled in handbook sync config"
81
+ end
82
+
83
+ return [provider]
80
84
  end
81
85
 
86
+ providers = default_sync_providers
82
87
  unknown = providers.reject { |provider| registry.known?(provider) }
83
88
  raise ArgumentError, "Unknown provider: #{unknown.join(", ")}" if unknown.any?
84
89
 
85
- enabled = providers.select { |provider| provider_enabled?(provider) }
86
- return enabled if requested_provider.nil? || enabled.any?
90
+ providers.reject { |provider| provider_disabled?(provider) }
91
+ end
92
+
93
+ def default_sync_providers
94
+ enabled = enabled_providers
95
+ return enabled unless enabled.empty?
96
+
97
+ return ["agents"] if registry.known?("agents") && !provider_disabled?("agents")
87
98
 
88
- raise ArgumentError, "Provider '#{requested_provider}' is disabled in handbook sync config"
99
+ registry.providers
89
100
  end
90
101
 
91
- def provider_enabled?(provider)
102
+ def enabled_providers
92
103
  sync_config = config.fetch("sync", {})
93
104
  providers = sync_config.fetch("providers", {})
94
- enabled = Array(providers["enabled"]).map(&:to_s)
95
- disabled = Array(providers["disabled"]).map(&:to_s)
96
105
 
97
- return enabled.include?(provider) unless enabled.empty?
106
+ Array(providers["enabled"]).map(&:to_s)
107
+ end
108
+
109
+ def provider_disabled?(provider)
110
+ sync_config = config.fetch("sync", {})
111
+ providers = sync_config.fetch("providers", {})
112
+ disabled = Array(providers["disabled"]).map(&:to_s)
98
113
 
99
- !disabled.include?(provider)
114
+ disabled.include?(provider.to_s)
100
115
  end
101
116
 
102
117
  def prepare_output_dir(output_dir)
@@ -150,22 +150,49 @@ module Ace
150
150
  end
151
151
 
152
152
  def selected_providers(provider)
153
- selected = provider ? [provider.to_s] : registry.providers
153
+ selected = if provider
154
+ [provider.to_s]
155
+ else
156
+ default_status_providers
157
+ end
154
158
  unknown = selected.reject { |provider_id| registry.known?(provider_id) }
155
159
  raise ArgumentError, "Unknown provider: #{unknown.join(", ")}" if unknown.any?
156
160
 
157
161
  selected
158
162
  end
159
163
 
160
- def provider_enabled?(provider)
164
+ def default_status_providers
165
+ enabled = enabled_providers
166
+ return enabled unless enabled.empty?
167
+
168
+ return ["agents"] if registry.known?("agents") && !provider_disabled?("agents")
169
+
170
+ registry.providers.reject { |provider| provider_disabled?(provider) }
171
+ end
172
+
173
+ def enabled_providers
174
+ sync_config = config.fetch("sync", {})
175
+ providers = sync_config.fetch("providers", {})
176
+
177
+ Array(providers["enabled"]).map(&:to_s)
178
+ end
179
+
180
+ def provider_disabled?(provider)
161
181
  sync_config = config.fetch("sync", {})
162
182
  providers = sync_config.fetch("providers", {})
163
- enabled = Array(providers["enabled"]).map(&:to_s)
164
183
  disabled = Array(providers["disabled"]).map(&:to_s)
165
184
 
185
+ disabled.include?(provider.to_s)
186
+ end
187
+
188
+ def provider_enabled?(provider)
189
+ enabled = enabled_providers
190
+
166
191
  return enabled.include?(provider) unless enabled.empty?
167
192
 
168
- !disabled.include?(provider)
193
+ return provider.to_s == "agents" if registry.known?("agents")
194
+
195
+ !provider_disabled?(provider)
169
196
  end
170
197
 
171
198
  def path_type(path)
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Ace
4
4
  module Handbook
5
- VERSION = '0.27.4'
5
+ VERSION = '0.29.0'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ace-handbook
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.27.4
4
+ version: 0.29.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michal Czyz
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2026-04-20 00:00:00.000000000 Z
10
+ date: 2026-06-30 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: ace-support-config
@@ -117,6 +117,7 @@ extensions: []
117
117
  extra_rdoc_files: []
118
118
  files:
119
119
  - ".ace-defaults/handbook/config.yml"
120
+ - ".ace-defaults/handbook/providers/agents.yml"
120
121
  - ".ace-defaults/nav/protocols/cookbook-sources/ace-handbook.yml"
121
122
  - ".ace-defaults/nav/protocols/guide-sources/ace-handbook.yml"
122
123
  - ".ace-defaults/nav/protocols/skill-sources/ace-handbook.yml"