ace-search 0.24.3 → 0.26.3

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: bdf396f9f2021b4dbb344f89701bfc876b70d37fe5965a62dde7300bea9326da
4
- data.tar.gz: f087efa09558212f068531ee4a4800a51d612fdd5eb48340983cc98b0b3335a2
3
+ metadata.gz: 9604b659c48d2843a1b964336ee20456476877da0230ccd507ce6cd5b29f3e73
4
+ data.tar.gz: 1e7680024a92a6a1c618431d51b70a686f62f204d7b5fab5f4d83953bb939d8f
5
5
  SHA512:
6
- metadata.gz: 8b57408fc45653bf98f3e93b2c2549cf8fccb27d7b48608966235af50a420e0230e0cdbe607e6d81f9679843be2b0e1d9e45514ab8872641cc50dcc9c7196dd2
7
- data.tar.gz: 360c0524cb5f52cf96dc790a603f9768ddd2e9fbda696099256ce6de02ae00bad04017970422808b1751475e12b6433e6206ce4dacf684141c1acafb14b20a99
6
+ metadata.gz: 4e7ffb8152f6837f0d21e69a93dedc837821cae5993b82bb6ffab709ce9410dd7e886d7a5b42af3099362faff565a3069aafe47d5015b9ee4772412fe318b519
7
+ data.tar.gz: 06f0e2f7d3cfda0623b15646e4b25bac68ac3678f8ebd347c571f429849ec621a88681b818eb43609a346e81df58327fccc9bdacdd5279ec9d380348782a3a57
data/CHANGELOG.md CHANGED
@@ -7,6 +7,51 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.26.3] - 2026-04-16
11
+
12
+ ### Fixed
13
+ - Made `--count` use true count-mode parsing and formatting so count searches emit counts only instead of full match listings.
14
+
15
+ ## [0.26.2] - 2026-04-16
16
+
17
+ ### Technical
18
+ - Updated `TS-SEARCH-001` sandbox setup to source `mise.toml` from `${ACE_E2E_SOURCE_ROOT:-$PROJECT_ROOT_PATH}` so search workflow E2E runs stay compatible with the shared sandbox contract.
19
+
20
+ ## [0.26.1] - 2026-04-16
21
+
22
+ ### Fixed
23
+ - Added explicit `Using preset:` output for preset-driven searches and updated E2E verification to accept mirrored package-suite artifacts when runner captures are routed under the package root.
24
+
25
+ ## [0.26.0] - 2026-04-15
26
+
27
+ ### Changed
28
+ - Rewrote `TS-SEARCH-001` E2E journeys to public-surface goal style by reframing file/count/JSON paths around user-visible outcomes and removing implementation-coupled probes.
29
+ - Added `TC-005` preset-driven and `TC-006` git-scoped workflow coverage, and expanded runner/verifier contracts to six retained goals.
30
+
31
+ ### Technical
32
+ - Hardened scenario setup with a guarded `mise.toml` trust step and updated verifier markdown contracts for lint-clean execution.
33
+
34
+ ## [0.25.2] - 2026-04-13
35
+
36
+ ### Technical
37
+ - Replaced the package version assertion with a semantic-version schema check so the fast test validates version shape instead of a loose substring match.
38
+ ## [0.25.1] - 2026-04-13
39
+
40
+ ### Changed
41
+ - Completed the batch i05 migration follow-through for this package and aligned it with the restarted `fast` / `feat` / `e2e` verification model.
42
+
43
+ ### Technical
44
+ - Included in the coordinated assignment-driven patch release for batch i05 package updates.
45
+
46
+
47
+ ### Changed
48
+ - Migrated package tests to the restarted `fast` / `feat` / `e2e` model by moving deterministic suites into `test/fast` and `test/feat`, retaining `TS-SEARCH-001` as workflow-value E2E coverage, and updating package docs to teach the new test contract.
49
+
50
+ ## [0.24.4] - 2026-03-29
51
+
52
+ ### Technical
53
+ - Normalized published gem metadata so RubyGems and Ruby Toolbox use current release information instead of the 1980 fallback date.
54
+
10
55
  ## [0.24.3] - 2026-03-29
11
56
 
12
57
  ### Fixed
data/README.md CHANGED
@@ -18,7 +18,7 @@
18
18
 
19
19
  ![ace-search demo](docs/demo/ace-search-getting-started.gif)
20
20
 
21
- `ace-search` gives developers and coding agents a single search entry point that chooses file or content mode automatically (DWIM Do What I Mean), keeps search scope predictable from any directory, and exposes fast output modes for workflow automation. Use `/as-search-run` for quick searches, `/as-search-research` for multi-search analysis, or `/as-search-feature-research` for implementation gap analysis.
21
+ `ace-search` gives developers and coding agents a single search entry point that chooses file or content mode automatically (DWIM -- Do What I Mean), keeps search scope predictable from any directory, and exposes fast output modes for workflow automation. Use `/as-search-run` for quick searches, `/as-search-research` for multi-search analysis, or `/as-search-feature-research` for implementation gap analysis.
22
22
 
23
23
  ## How It Works
24
24
 
@@ -38,5 +38,14 @@
38
38
 
39
39
  **Run multi-search research from an agent** - use `/as-search-research` to execute multiple related searches and synthesize findings, or `/as-search-feature-research` to analyze implementation gaps.
40
40
 
41
+ ## Testing Model
42
+
43
+ `ace-search` uses the restarted testing contract:
44
+
45
+ - `ace-test ace-search` for default deterministic fast tests
46
+ - `ace-test ace-search feat` for deterministic feature contracts
47
+ - `ace-test ace-search all` for combined deterministic lanes
48
+ - `ace-test-e2e ace-search` for retained workflow-value scenarios only
49
+
41
50
  ---
42
51
  [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)
@@ -75,11 +75,11 @@ Limit search to specific paths:
75
75
  ```bash
76
76
  # Search specific directory (change directory first)
77
77
  cd lib/ && ace-search "pattern"
78
- cd ace-taskflow/ && ace-search "TODO"
78
+ cd ace-task/ && ace-search "TODO"
79
79
 
80
80
  # Or use --include to filter paths
81
81
  ace-search "pattern" --include "lib/**/*"
82
- ace-search "TODO" --include "ace-taskflow/**/*"
82
+ ace-search "TODO" --include "ace-task/**/*"
83
83
  ```
84
84
 
85
85
  ### File Pattern Filtering (Glob)
@@ -64,11 +64,11 @@ Limit search to specific paths:
64
64
  ```bash
65
65
  # Search specific directory (change directory first)
66
66
  cd lib/ && ace-search "pattern"
67
- cd ace-taskflow/ && ace-search "TODO"
67
+ cd ace-task/ && ace-search "TODO"
68
68
 
69
69
  # Or use --include to filter paths
70
70
  ace-search "pattern" --include "lib/**/*"
71
- ace-search "TODO" --include "ace-taskflow/**/*"
71
+ ace-search "TODO" --include "ace-task/**/*"
72
72
  ```
73
73
 
74
74
  ### File Pattern Filtering (Glob)
@@ -19,6 +19,8 @@ module Ace
19
19
  parse_ripgrep_json(output)
20
20
  when :files_only
21
21
  parse_ripgrep_files_only(output)
22
+ when :counts
23
+ parse_ripgrep_counts(output)
22
24
  else
23
25
  parse_ripgrep_text(output)
24
26
  end
@@ -105,6 +107,20 @@ module Ace
105
107
  }
106
108
  end
107
109
  end
110
+
111
+ # Parse ripgrep --count output (file:count)
112
+ def parse_ripgrep_counts(output)
113
+ output.lines.map(&:strip).reject(&:empty?).filter_map do |line|
114
+ match = line.match(/\A(.+?):(\d+)\z/)
115
+ next unless match
116
+
117
+ {
118
+ type: :count,
119
+ path: match[1],
120
+ count: match[2].to_i
121
+ }
122
+ end
123
+ end
108
124
  end
109
125
  end
110
126
  end
@@ -183,6 +183,7 @@ module Ace
183
183
  end
184
184
 
185
185
  def apply_preset
186
+ puts "Using preset: #{@options[:preset]}" if @options[:format] == :text
186
187
  preset_manager = Ace::Search::Molecules::PresetManager.new
187
188
  @options = preset_manager.merge_with_options(@options[:preset], @options)
188
189
  end
@@ -201,7 +202,7 @@ module Ace
201
202
  def output_results(result)
202
203
  # Print summary for text format
203
204
  if @options[:format] == :text
204
- puts Ace::Search::Organisms::ResultFormatter.format_summary(
205
+ summary = Ace::Search::Organisms::ResultFormatter.format_summary(
205
206
  result[:results],
206
207
  mode: result[:mode],
207
208
  pattern: @pattern,
@@ -209,7 +210,10 @@ module Ace
209
210
  scope: @options[:scope],
210
211
  search_path: @options[:search_path]
211
212
  )
212
- puts ""
213
+ unless summary.empty?
214
+ puts summary
215
+ puts ""
216
+ end
213
217
  end
214
218
 
215
219
  # Print results
@@ -35,6 +35,8 @@ module Ace
35
35
  case result[:type]
36
36
  when :file
37
37
  lines << format_file_result(result)
38
+ when :count
39
+ lines << format_count_result(result)
38
40
  when :match
39
41
  lines << format_match_result(result, options)
40
42
  end
@@ -59,6 +61,10 @@ module Ace
59
61
  " #{path}:#{line}:#{column}: #{text}"
60
62
  end
61
63
 
64
+ def self.format_count_result(result)
65
+ " #{result[:path]}: #{result[:count]}"
66
+ end
67
+
62
68
  # Format results as JSON
63
69
  def self.format_json(results)
64
70
  JSON.pretty_generate({
@@ -77,6 +83,8 @@ module Ace
77
83
 
78
84
  # Format summary header
79
85
  def self.format_summary(results, options = {})
86
+ return "" if options[:count]
87
+
80
88
  count = results.size
81
89
  mode = options[:mode] || "search"
82
90
  pattern = options[:pattern] || ""
@@ -76,7 +76,13 @@ module Ace
76
76
 
77
77
  return {success: false, error: result[:error]} unless result[:success]
78
78
 
79
- parse_mode = options[:files_with_matches] ? :files_only : :text
79
+ parse_mode = if options[:files_with_matches]
80
+ :files_only
81
+ elsif options[:count]
82
+ :counts
83
+ else
84
+ :text
85
+ end
80
86
  matches = @result_parser.parse_ripgrep_output(result[:stdout], parse_mode)
81
87
 
82
88
  # Limit results
@@ -118,6 +124,7 @@ module Ace
118
124
  rg_opts[:after_context] = options[:after_context] if options[:after_context]
119
125
  rg_opts[:glob] = options[:glob] if options[:glob]
120
126
  rg_opts[:hidden] = options[:hidden] if options[:hidden]
127
+ rg_opts[:count] = options[:count] if options[:count]
121
128
  rg_opts[:files_with_matches] = options[:files_with_matches] if options[:files_with_matches]
122
129
  rg_opts[:max_count] = options[:max_results] if options[:max_results]
123
130
  rg_opts[:search_path] = options[:search_path] if options[:search_path]
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Ace
4
4
  module Search
5
- VERSION = '0.24.3'
5
+ VERSION = '0.26.3'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ace-search
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.24.3
4
+ version: 0.26.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michal Czyz
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 1980-01-02 00:00:00.000000000 Z
10
+ date: 2026-04-20 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: ace-support-cli