ask-agent 0.1.12 → 0.2.1

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: 3b85f5139e6d2c4a0af9187f40c144cf40f3a30845101619508bdc35b311b94b
4
- data.tar.gz: 0b37e4bb5ebb2e6a04307d5e403deb805eddfc17751b0302dc853d945a28e70a
3
+ metadata.gz: 6931fde5be098a92af7a2dc3ae106c97aa925535992a2ef354dfe76bbc79c819
4
+ data.tar.gz: 3772209146d3c64b1b8a1e1086cbdbfbf6464b6da844362aa4e63e8b16815b8b
5
5
  SHA512:
6
- metadata.gz: 9367d02125c40d109b55cefae963c059d95025b5e65cd56db0e8237cc393685ebeb9ae9eaca82cf85f5b3b4cd8fc23ceff44d642726a375117f3106db20542ab
7
- data.tar.gz: 4d7d88154e136640b177ae58ee718d3a9debc89d60ae22e1c4a81bde2027f634f97451d7910377b02b1893af8f7424694a5ad21a77af2a1fd909572cd2e7df44
6
+ metadata.gz: 698c25a1cea3af3c46801b5da5bed336f1982b480200b133a730f259a90d7b0e4b5e038a703ff7a5672fee7ea57966bf405d1e2833046a31eea51d2334c73f2a
7
+ data.tar.gz: 2cce1e6b2c7afde036aa5d53f649c02722bf62e14c896d9fc08b07de7de6b2f3a59161dfd2e5bfa391a211c3794b582ee4243ae0f4eb9addf261f611ba1871c8
data/CHANGELOG.md ADDED
@@ -0,0 +1,15 @@
1
+ ## [0.2.1] - 2026-06-25
2
+
3
+ ### Changed
4
+ - Major test expansion: Session(28t), Chat(32t), Loop(12t), ToolExecutor(10t), Compactor(14t), Reflector(12t), MetaAgent(10t), Telemetry(13t), Events(29t), Extensions(14t), provider stubs. Bugfix: MAX_CONSECUTIVE_TOOL_TURNS -> @max_consecutive_tool_turns. Infrastructure: rubocop, overcommit, CI matrix, gemspec, SimpleCov.
5
+ # Changelog
6
+
7
+ ## 0.2.0 (2026-06-21)
8
+
9
+ - Made `max_consecutive_tool_turns` configurable in `Loop#initialize`
10
+ - Improved loop detection with Levenshtein similarity-based matching (80%+ threshold)
11
+ - Added `levenshtein_distance` and `levenshtein_ratio` helpers
12
+
13
+ ## 0.1.12
14
+
15
+ - Various fixes
@@ -4,16 +4,17 @@ module Ask
4
4
  module Agent
5
5
  class Loop
6
6
  LOOP_DETECTION_WINDOW = 3
7
- MAX_CONSECUTIVE_TOOL_TURNS = 6
7
+ @max_consecutive_tool_turns = 6
8
8
 
9
9
  attr_reader :turn_count
10
10
 
11
- def initialize(max_turns: 25)
11
+ def initialize(max_turns: 25, max_consecutive_tool_turns: 6)
12
12
  @max_turns = max_turns
13
13
  @turn_count = 0
14
14
  @recent_results = []
15
15
  @loop_detected = false
16
16
  @consecutive_tool_turns = 0
17
+ @max_consecutive_tool_turns = max_consecutive_tool_turns
17
18
  end
18
19
 
19
20
  def run_turn(chat:, message:, tools:, tool_executor:, compactor:, hooks:, event_emitter:, session_id: nil)
@@ -59,7 +60,7 @@ module Ask
59
60
  raise LoopDetected, tool_results.last[:tool_name]
60
61
  end
61
62
 
62
- if @consecutive_tool_turns >= MAX_CONSECUTIVE_TOOL_TURNS
63
+ if @consecutive_tool_turns >= @max_consecutive_tool_turns
63
64
  summary = tool_results.map { |r| r[:message].to_s.truncate(80) }.first(2).join("; ")
64
65
  return "Based on my investigation: #{summary}"
65
66
  end
@@ -164,7 +164,7 @@ module Ask
164
164
  @max_retries.times do |attempt|
165
165
  return { result: nil, is_error: true, error: "Aborted" } if abort_controller&.aborted?
166
166
 
167
- result = try_call(tool, args)
167
+ result = try_call(tool, args, abort_controller)
168
168
  return result unless result[:is_error] && retryable_error_name?(result[:error])
169
169
 
170
170
  sleep((2 ** attempt) * 0.5 + rand(0.0..0.5))
@@ -174,8 +174,8 @@ module Ask
174
174
  try_call(tool, args)
175
175
  end
176
176
 
177
- def try_call(tool, args)
178
- result = tool.call(args)
177
+ def try_call(tool, args, abort_controller = nil)
178
+ result = tool.call(args, abort_controller: abort_controller)
179
179
  { result: result, is_error: false }
180
180
  rescue => e
181
181
  { result: e.message, is_error: true, error: e.class.name }
@@ -190,7 +190,7 @@ module Ask
190
190
 
191
191
  def critical_error?(error_class_name)
192
192
  return false unless error_class_name
193
- CRITICAL_ERROR_CLASSES.any? { |klass| error_class_name == klass.name }
193
+ CRITICAL_ERROR_CLASSES.any? { |klass| error_class_name == klass }
194
194
  end
195
195
 
196
196
  def aborted_result(tool_call)
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Ask
4
4
  module Agent
5
- VERSION = "0.1.12"
5
+ VERSION = "0.2.1"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ask-agent
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.12
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kaka Ruto
@@ -13,56 +13,56 @@ dependencies:
13
13
  name: ask-core
14
14
  requirement: !ruby/object:Gem::Requirement
15
15
  requirements:
16
- - - "~>"
16
+ - - ">="
17
17
  - !ruby/object:Gem::Version
18
18
  version: '0.1'
19
19
  type: :runtime
20
20
  prerelease: false
21
21
  version_requirements: !ruby/object:Gem::Requirement
22
22
  requirements:
23
- - - "~>"
23
+ - - ">="
24
24
  - !ruby/object:Gem::Version
25
25
  version: '0.1'
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: ask-llm-providers
28
28
  requirement: !ruby/object:Gem::Requirement
29
29
  requirements:
30
- - - "~>"
30
+ - - ">="
31
31
  - !ruby/object:Gem::Version
32
32
  version: '0.1'
33
33
  type: :runtime
34
34
  prerelease: false
35
35
  version_requirements: !ruby/object:Gem::Requirement
36
36
  requirements:
37
- - - "~>"
37
+ - - ">="
38
38
  - !ruby/object:Gem::Version
39
39
  version: '0.1'
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: ask-tools
42
42
  requirement: !ruby/object:Gem::Requirement
43
43
  requirements:
44
- - - "~>"
44
+ - - ">="
45
45
  - !ruby/object:Gem::Version
46
46
  version: '0.1'
47
47
  type: :runtime
48
48
  prerelease: false
49
49
  version_requirements: !ruby/object:Gem::Requirement
50
50
  requirements:
51
- - - "~>"
51
+ - - ">="
52
52
  - !ruby/object:Gem::Version
53
53
  version: '0.1'
54
54
  - !ruby/object:Gem::Dependency
55
55
  name: ask-skills
56
56
  requirement: !ruby/object:Gem::Requirement
57
57
  requirements:
58
- - - "~>"
58
+ - - ">="
59
59
  - !ruby/object:Gem::Version
60
60
  version: '0.1'
61
61
  type: :runtime
62
62
  prerelease: false
63
63
  version_requirements: !ruby/object:Gem::Requirement
64
64
  requirements:
65
- - - "~>"
65
+ - - ">="
66
66
  - !ruby/object:Gem::Version
67
67
  version: '0.1'
68
68
  - !ruby/object:Gem::Dependency
@@ -115,6 +115,7 @@ executables: []
115
115
  extensions: []
116
116
  extra_rdoc_files: []
117
117
  files:
118
+ - CHANGELOG.md
118
119
  - LICENSE
119
120
  - README.md
120
121
  - lib/ask-agent.rb
@@ -140,7 +141,10 @@ files:
140
141
  homepage: https://github.com/ask-rb/ask-agent
141
142
  licenses:
142
143
  - MIT
143
- metadata: {}
144
+ metadata:
145
+ homepage_uri: https://github.com/ask-rb/ask-agent
146
+ source_code_uri: https://github.com/ask-rb/ask-agent
147
+ changelog_uri: https://github.com/ask-rb/ask-agent/blob/master/CHANGELOG.md
144
148
  rdoc_options: []
145
149
  require_paths:
146
150
  - lib