aia 2.0.0.0.pre.alpha → 2.0.0.0.pre.beta2

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 (69) hide show
  1. checksums.yaml +4 -4
  2. data/.envrc +5 -1
  3. data/.loki +3 -223
  4. data/.reek.yml +160 -0
  5. data/.rubocop_strict.yml +15 -0
  6. data/.version +1 -1
  7. data/CHANGELOG.md +10 -5
  8. data/README.md +1 -1
  9. data/Rakefile +0 -113
  10. data/_typos.toml +10 -0
  11. data/aia.gemspec +92 -0
  12. data/config/aia.yml +13 -0
  13. data/lib/aia/chat_loop.rb +8 -52
  14. data/lib/aia/config/cli_parser.rb +66 -57
  15. data/lib/aia/config/mcp_parser.rb +27 -19
  16. data/lib/aia/config/validator.rb +83 -94
  17. data/lib/aia/config.rb +3 -2
  18. data/lib/aia/content_extractor.rb +2 -0
  19. data/lib/aia/cost_calculator.rb +1 -0
  20. data/lib/aia/debate_handler.rb +28 -20
  21. data/lib/aia/delegate_handler.rb +7 -3
  22. data/lib/aia/directive.rb +10 -8
  23. data/lib/aia/directives/configuration_directives.rb +115 -101
  24. data/lib/aia/directives/context_directives.rb +31 -28
  25. data/lib/aia/directives/execution_directives.rb +18 -13
  26. data/lib/aia/directives/model_directives.rb +134 -154
  27. data/lib/aia/directives/trakflow_directives.rb +27 -9
  28. data/lib/aia/directives/utility_directives.rb +71 -71
  29. data/lib/aia/directives/web_and_file_directives.rb +63 -50
  30. data/lib/aia/layered_orchestrator.rb +66 -43
  31. data/lib/aia/logger.rb +21 -21
  32. data/lib/aia/mcp_connection_manager.rb +50 -40
  33. data/lib/aia/mcp_server_config.rb +30 -0
  34. data/lib/aia/mcp_utility.rb +7 -4
  35. data/lib/aia/mention_router.rb +7 -50
  36. data/lib/aia/network_builder.rb +10 -5
  37. data/lib/aia/network_memory_manager.rb +6 -6
  38. data/lib/aia/pipeline_orchestrator.rb +20 -10
  39. data/lib/aia/plugin_monitor.rb +9 -6
  40. data/lib/aia/prompt_decomposer.rb +5 -3
  41. data/lib/aia/prompt_handler.rb +43 -49
  42. data/lib/aia/robot_factory.rb +12 -8
  43. data/lib/aia/robot_namer.rb +2 -8
  44. data/lib/aia/session.rb +7 -3
  45. data/lib/aia/session_tracker.rb +39 -41
  46. data/lib/aia/similarity_scorer.rb +5 -3
  47. data/lib/aia/special_mode_handler.rb +52 -32
  48. data/lib/aia/speech.rb +67 -0
  49. data/lib/aia/startup_coordinator.rb +1 -0
  50. data/lib/aia/streaming_runner.rb +6 -3
  51. data/lib/aia/system_prompt_assembler.rb +11 -7
  52. data/lib/aia/task_coordinator.rb +10 -5
  53. data/lib/aia/timing.rb +15 -0
  54. data/lib/aia/tool_filter.rb +1 -0
  55. data/lib/aia/tool_filter_strategy.rb +28 -25
  56. data/lib/aia/tool_introspection.rb +17 -0
  57. data/lib/aia/tool_loader.rb +12 -6
  58. data/lib/aia/tools/task_board_tool.rb +1 -0
  59. data/lib/aia/trakflow_bridge.rb +5 -3
  60. data/lib/aia/turn_state.rb +1 -0
  61. data/lib/aia/ui_presenter.rb +67 -59
  62. data/lib/aia/utility.rb +5 -3
  63. data/lib/aia/variable_input_collector.rb +1 -0
  64. data/lib/aia/verification_network.rb +1 -2
  65. data/lib/aia.rb +16 -0
  66. metadata +15 -9
  67. data/.quality/flay_baseline.txt +0 -1
  68. data/.quality/flog_baseline.txt +0 -29
  69. data/.quality/reek_baseline.txt +0 -80
@@ -7,6 +7,7 @@ require 'reline'
7
7
  require 'fileutils'
8
8
 
9
9
  module AIA
10
+ # :reek:TooManyMethods -- one small builder per table/report section keeps each display testable in isolation
10
11
  class UIPresenter
11
12
  USER_PROMPT = "Follow up (cntl-D or 'exit' to end) #=> ".freeze
12
13
  HISTORY_FILE = File.join(Dir.home, '.config', 'aia', 'chat_history')
@@ -25,6 +26,7 @@ module AIA
25
26
  format_chat_response(response)
26
27
  end
27
28
 
29
+ # :reek:TooManyStatements -- line-by-line rendering with a code-fence state machine; the states share locals
28
30
  def format_chat_response(response, output = $stdout)
29
31
  indent = ' '
30
32
 
@@ -121,6 +123,7 @@ module AIA
121
123
  result
122
124
  end
123
125
 
126
+ # :reek:TooManyStatements -- one metrics table with header/row/alignment variants for cost vs no-cost display
124
127
  def display_token_metrics(metrics)
125
128
  return unless metrics
126
129
 
@@ -160,83 +163,87 @@ module AIA
160
163
  write_to_output_file(rendered)
161
164
  end
162
165
 
163
- # rubocop:disable Metrics/AbcSize, Metrics/MethodLength, Metrics/PerceivedComplexity
166
+ # :reek:TooManyStatements -- table assembly: rows, totals, render, output; each piece delegated to a builder
164
167
  def display_multi_model_metrics(metrics_list)
165
168
  return unless metrics_list && !metrics_list.empty?
166
169
 
167
170
  show_cost = AIA.config.flags.cost
168
171
  show_similarity = metrics_list.any? { |m| m.key?(:similarity) }
169
- total_input = 0
170
- total_output = 0
171
- total_cost = 0.0
172
- max_elapsed = 0.0
172
+ totals = MultiModelTotals.new(0, 0, 0.0, 0.0)
173
173
 
174
+ rows = metrics_list.map { |metrics| multi_model_row(metrics, totals, show_cost, show_similarity) }
175
+ rows << :separator
176
+ rows << multi_model_totals_row(totals, show_cost, show_similarity)
177
+
178
+ table = TTY::Table.new(multi_model_header(show_cost, show_similarity), rows)
179
+ rendered = table.render(:unicode, resize: true,
180
+ alignments: multi_model_alignments(show_cost, show_similarity),
181
+ padding: [0, 1])
182
+
183
+ puts "\nMulti-Model Token Usage"
184
+ puts rendered
185
+ write_to_output_file("Multi-Model Token Usage\n#{rendered}")
186
+ end
187
+
188
+ private
189
+
190
+ # Running totals accumulated while building multi-model table rows.
191
+ MultiModelTotals = Struct.new(:input, :output, :cost, :max_elapsed)
192
+
193
+ def multi_model_header(show_cost, show_similarity)
174
194
  header = %w[Model Input Output Total]
175
195
  header += %w[Cost x1000] if show_cost
176
196
  header << "Time"
177
197
  header << "Sim" if show_similarity
198
+ header
199
+ end
178
200
 
179
- rows = metrics_list.map do |metrics|
180
- model_name = (metrics[:model_id] || metrics[:display_name]).to_s
181
- input_tokens = metrics[:input_tokens] || 0
182
- output_tokens = metrics[:output_tokens] || 0
183
- total_tokens = input_tokens + output_tokens
184
- elapsed = metrics[:elapsed]
185
- time_str = format_elapsed(elapsed)
186
-
187
- total_input += input_tokens
188
- total_output += output_tokens
189
- max_elapsed = [max_elapsed, elapsed || 0].max
190
-
191
- row = [model_name, input_tokens, output_tokens, total_tokens]
192
-
193
- if show_cost
194
- cost_data = calculate_cost(metrics)
195
- if cost_data[:available]
196
- row << "$#{'%.5f' % cost_data[:total_cost]}"
197
- row << "$#{'%.2f' % (cost_data[:total_cost] * 1000)}"
198
- total_cost += cost_data[:total_cost]
199
- else
200
- row += ["N/A", "N/A"]
201
- end
202
- end
201
+ def multi_model_row(metrics, totals, show_cost, show_similarity)
202
+ input_tokens = metrics[:input_tokens] || 0
203
+ output_tokens = metrics[:output_tokens] || 0
204
+ elapsed = metrics[:elapsed]
205
+
206
+ totals.input += input_tokens
207
+ totals.output += output_tokens
208
+ totals.max_elapsed = [totals.max_elapsed, elapsed || 0].max
209
+
210
+ row = [(metrics[:model_id] || metrics[:display_name]).to_s,
211
+ input_tokens, output_tokens, input_tokens + output_tokens]
212
+ row += multi_model_cost_cells(metrics, totals) if show_cost
213
+ row << format_elapsed(elapsed)
214
+ row << format_similarity(metrics[:similarity]) if show_similarity
215
+ row
216
+ end
203
217
 
204
- row << time_str
205
- row << format_similarity(metrics[:similarity]) if show_similarity
206
- row
207
- end
218
+ # Cost cells for one row; adds to totals only when pricing is available.
219
+ def multi_model_cost_cells(metrics, totals)
220
+ cost_data = calculate_cost(metrics)
221
+ return %w[N/A N/A] unless cost_data[:available]
208
222
 
209
- # Totals row
210
- all_tokens = total_input + total_output
211
- total_time = format_elapsed(max_elapsed)
212
- rows << :separator
223
+ cost = cost_data[:total_cost]
224
+ totals.cost += cost
225
+ format_cost_cells(cost)
226
+ end
213
227
 
214
- totals = ["TOTAL", total_input, total_output, all_tokens]
215
- if show_cost && total_cost.positive?
216
- totals << "$#{'%.5f' % total_cost}"
217
- totals << "$#{'%.2f' % (total_cost * 1000)}"
218
- elsif show_cost
219
- totals += ["", ""]
220
- end
221
- totals << total_time
222
- totals << "" if show_similarity
223
- rows << totals
228
+ def format_cost_cells(cost)
229
+ ["$#{'%.5f' % cost}", "$#{'%.2f' % (cost * 1000)}"]
230
+ end
231
+
232
+ def multi_model_totals_row(totals, show_cost, show_similarity)
233
+ row = ["TOTAL", totals.input, totals.output, totals.input + totals.output]
234
+ row += totals.cost.positive? ? format_cost_cells(totals.cost) : ["", ""] if show_cost
235
+ row << format_elapsed(totals.max_elapsed)
236
+ row << "" if show_similarity
237
+ row
238
+ end
224
239
 
240
+ def multi_model_alignments(show_cost, show_similarity)
225
241
  alignments = %i[left right right right]
226
242
  alignments += %i[right right] if show_cost
227
243
  alignments << :right
228
244
  alignments << :right if show_similarity
229
-
230
- table = TTY::Table.new(header, rows)
231
- rendered = table.render(:unicode, resize: true, alignments: alignments, padding: [0, 1])
232
-
233
- puts "\nMulti-Model Token Usage"
234
- puts rendered
235
- write_to_output_file("Multi-Model Token Usage\n#{rendered}")
245
+ alignments
236
246
  end
237
- # rubocop:enable Metrics/AbcSize, Metrics/MethodLength, Metrics/PerceivedComplexity
238
-
239
- private
240
247
 
241
248
  def save_chat_history
242
249
  history_file = chat_history_file
@@ -255,8 +262,9 @@ module AIA
255
262
  return nil if hf == false # --no-history-file disables chat history
256
263
  return File.expand_path(hf) if hf
257
264
  end
258
- if config.respond_to?(:paths) && config.paths.respond_to?(:aia_dir) && config.paths.aia_dir
259
- return File.join(File.expand_path(config.paths.aia_dir), 'chat_history')
265
+ paths = config.respond_to?(:paths) ? config.paths : nil
266
+ if paths.respond_to?(:aia_dir) && paths.aia_dir
267
+ return File.join(File.expand_path(paths.aia_dir), 'chat_history')
260
268
  end
261
269
  HISTORY_FILE
262
270
  end
data/lib/aia/utility.rb CHANGED
@@ -132,12 +132,14 @@ module AIA
132
132
  # Post-connection: connected_mcp_servers is the authoritative name list;
133
133
  # mcp_server_tool_counts provides per-server tool counts.
134
134
  # Pre-connection fallback: read live from RubyLLM::MCP.clients (--require clients).
135
+ # :reek:TooManyStatements -- authoritative post-connection labels with a live RubyLLM::MCP fallback before connection
135
136
  def mcp_client_labels
136
- return [] if AIA.config&.flags&.no_mcp
137
+ cfg = AIA.config
138
+ return [] if cfg&.flags&.no_mcp
137
139
 
138
- connected = AIA.config&.connected_mcp_servers
140
+ connected = cfg&.connected_mcp_servers
139
141
  unless connected.nil?
140
- counts = AIA.config&.mcp_server_tool_counts || {}
142
+ counts = cfg&.mcp_server_tool_counts || {}
141
143
  return connected.map do |name|
142
144
  count = counts[name]
143
145
  count ? "#{name}(#{count})" : name
@@ -9,6 +9,7 @@ module AIA
9
9
  # No prompt dependency — just handles user input for parameter collection
10
10
  end
11
11
 
12
+ # :reek:TooManyStatements -- one Reline round-trip: question build, readline, Ctrl+D/empty fallbacks, prompt_proc restore
12
13
  def request_variable_value(variable_name:, default_value: nil)
13
14
  Reline::HISTORY.clear
14
15
 
@@ -18,7 +18,7 @@ module AIA
18
18
  mcp = RobotFactory.mcp_server_configs(config)
19
19
  model_id = model.internal_id
20
20
 
21
- # rubocop:disable Metrics/BlockLength
21
+ # rubocop:disable-next Metrics/BlockLength
22
22
  RobotLab.create_network(name: "aia-verification") do
23
23
  worker_a = RobotLab.build(
24
24
  name: "verifier-a",
@@ -52,7 +52,6 @@ module AIA
52
52
  )
53
53
  task :reconcile, reconciler, depends_on: %i[verify_a verify_b]
54
54
  end
55
- # rubocop:enable Metrics/BlockLength
56
55
  end
57
56
  end
58
57
  end
data/lib/aia.rb CHANGED
@@ -12,9 +12,13 @@ require_relative 'aia/patches/ruby_llm_tool_error'
12
12
  require_relative 'aia/patches/ruby_llm_streaming_error'
13
13
 
14
14
  require_relative 'aia/errors'
15
+ require_relative 'aia/timing'
16
+ require_relative 'aia/tool_introspection'
15
17
  require_relative 'aia/turn_state'
16
18
  require_relative 'aia/content_extractor'
19
+ require_relative 'aia/speech'
17
20
  require_relative 'aia/utility'
21
+ require_relative 'aia/mcp_server_config'
18
22
  require_relative 'aia/skill_utils'
19
23
  require_relative 'aia/version'
20
24
  require_relative 'aia/config'
@@ -142,11 +146,14 @@ module AIA
142
146
  @config&.output&.append == true
143
147
  end
144
148
 
149
+ # :reek:TooManyStatements -- application boot sequence: parse, validate, log, load plugins, build robots, start session
145
150
  def run
146
151
  cli_overrides = CLIParser.parse
147
152
  @config = Config.setup(cli_overrides)
148
153
  return if ConfigValidator.tailor(@config) == :early_exit
149
154
 
155
+ log_startup
156
+
150
157
  PluginLoader.load!(@config)
151
158
  start_plugin_monitor
152
159
  RobotFactory.setup(@config)
@@ -162,6 +169,15 @@ module AIA
162
169
 
163
170
  private
164
171
 
172
+ # Record startup in all three log files. Only aia.log gets the full
173
+ # configuration dump; llm.log and mcp.log just note that AIA started,
174
+ # since their configuration is already covered by the aia.log entry.
175
+ def log_startup
176
+ LoggerManager.aia_logger.debug('AIA started up.', @config.to_h)
177
+ LoggerManager.llm_logger.debug('AIA started up.')
178
+ LoggerManager.mcp_logger.debug('AIA started up.')
179
+ end
180
+
165
181
  def start_plugin_monitor
166
182
  return unless @config.flags.chat
167
183
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aia
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.0.pre.alpha
4
+ version: 2.0.0.0.pre.beta2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dewayne VanHoozer
@@ -69,16 +69,16 @@ dependencies:
69
69
  name: lumberjack
70
70
  requirement: !ruby/object:Gem::Requirement
71
71
  requirements:
72
- - - ">="
72
+ - - "~>"
73
73
  - !ruby/object:Gem::Version
74
- version: '0'
74
+ version: '2.1'
75
75
  type: :runtime
76
76
  prerelease: false
77
77
  version_requirements: !ruby/object:Gem::Requirement
78
78
  requirements:
79
- - - ">="
79
+ - - "~>"
80
80
  - !ruby/object:Gem::Version
81
- version: '0'
81
+ version: '2.1'
82
82
  - !ruby/object:Gem::Dependency
83
83
  name: activesupport
84
84
  requirement: !ruby/object:Gem::Requirement
@@ -422,10 +422,9 @@ files:
422
422
  - ".config/tocer/configuration.yml"
423
423
  - ".envrc"
424
424
  - ".loki"
425
- - ".quality/flay_baseline.txt"
426
- - ".quality/flog_baseline.txt"
427
- - ".quality/reek_baseline.txt"
425
+ - ".reek.yml"
428
426
  - ".rubocop.yml"
427
+ - ".rubocop_strict.yml"
429
428
  - ".version"
430
429
  - CHANGELOG.md
431
430
  - COMMITS.md
@@ -433,8 +432,11 @@ files:
433
432
  - LICENSE
434
433
  - README.md
435
434
  - Rakefile
435
+ - _typos.toml
436
+ - aia.gemspec
436
437
  - architecture_review.md
437
438
  - bin/aia
439
+ - config/aia.yml
438
440
  - docs/AGENTS.md
439
441
  - docs/advanced-prompting.md
440
442
  - docs/assets/images/aia.png
@@ -598,6 +600,7 @@ files:
598
600
  - lib/aia/mcp_connection_manager.rb
599
601
  - lib/aia/mcp_discovery.rb
600
602
  - lib/aia/mcp_grouper.rb
603
+ - lib/aia/mcp_server_config.rb
601
604
  - lib/aia/mcp_utility.rb
602
605
  - lib/aia/mention_router.rb
603
606
  - lib/aia/model_alias_registry.rb
@@ -621,6 +624,7 @@ files:
621
624
  - lib/aia/spawn_handler.rb
622
625
  - lib/aia/spawn_spec_parser.rb
623
626
  - lib/aia/special_mode_handler.rb
627
+ - lib/aia/speech.rb
624
628
  - lib/aia/startup_coordinator.rb
625
629
  - lib/aia/streaming_runner.rb
626
630
  - lib/aia/system_prompt_assembler.rb
@@ -628,11 +632,13 @@ files:
628
632
  - lib/aia/task_decomposer.rb
629
633
  - lib/aia/task_executor.rb
630
634
  - lib/aia/tfidf_math.rb
635
+ - lib/aia/timing.rb
631
636
  - lib/aia/tool_filter.rb
632
637
  - lib/aia/tool_filter/tfidf.rb
633
638
  - lib/aia/tool_filter/wordnet_expander.rb
634
639
  - lib/aia/tool_filter_registry.rb
635
640
  - lib/aia/tool_filter_strategy.rb
641
+ - lib/aia/tool_introspection.rb
636
642
  - lib/aia/tool_loader.rb
637
643
  - lib/aia/tool_utility.rb
638
644
  - lib/aia/tools/delegate_to_foreman_tool.rb
@@ -690,7 +696,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
690
696
  - !ruby/object:Gem::Version
691
697
  version: '0'
692
698
  requirements: []
693
- rubygems_version: 4.0.19
699
+ rubygems_version: 4.0.20
694
700
  specification_version: 4
695
701
  summary: Multi-model AI CLI with dynamic prompts, consensus responses, shell & Ruby
696
702
  integration, and seamless chat workflows.
@@ -1 +0,0 @@
1
- 1866838872
@@ -1,29 +0,0 @@
1
- 141.7 AIA::ToolFilterStrategy#display_timing_table
2
- 137.5 AIA::ConfigurationDirectives#model
3
- 122.8 AIA::SpecialModeHandler#handle_decomposition
4
- 108.0 AIA::ConfigValidator::load_mcp_tools_grouped
5
- 96.2 AIA::CLIParser::list_available_models
6
- 94.0 AIA::UIPresenter#display_multi_model_metrics
7
- 89.1 AIA::UtilityDirectives#tools
8
- 79.0 AIA::ModelDirectives#show_rubyllm_models
9
- 74.3 AIA::DebateHandler#handle
10
- 71.0 AIA::ConfigurationDirectives#cost
11
- 69.3 AIA::LayeredOrchestrator#handle
12
- 67.1 AIA::UtilityDirectives#mcp
13
- 64.8 AIA::PromptHandler#apply_root_shorthands
14
- 63.2 AIA::ConfigValidator::handle_mcp_list
15
- 62.9 AIA::ModelDirectives#show_ollama_models
16
- 61.9 AIA::ConfigValidator::process_role_configuration
17
- 61.3 AIA::ToolLoader#filtered_tools
18
- 60.7 AIA::SessionTracker#record_network_turn
19
- 60.2 AIA::MCPConnectionManager#connect_one
20
- 58.4 AIA::ChatLoop#speak
21
- 58.4 AIA::WebAndFileDirectives#skills
22
- 57.7 AIA::LayeredOrchestrator#run_specialists_wave
23
- 56.2 AIA::McpParser::convert_mcp_servers_format
24
- 54.8 AIA::MentionRouter#speak
25
- 54.6 AIA::ContextDirectives#review
26
- 54.3 AIA::CLIParser::validate_role_exists
27
- 52.6 AIA::ModelDirectives#show_lms_models
28
- 50.9 AIA::ConfigValidator::load_local_tools
29
- 50.2 AIA::Directive::help
@@ -1,80 +0,0 @@
1
- 1 lib/aia.rb
2
- 22 lib/aia/chat_loop.rb
3
- 11 lib/aia/config.rb
4
- 23 lib/aia/config/cli_parser.rb
5
- 4 lib/aia/config/mcp_parser.rb
6
- 1 lib/aia/config/model_spec.rb
7
- 23 lib/aia/config/validator.rb
8
- 7 lib/aia/content_extractor.rb
9
- 1 lib/aia/cost_calculator.rb
10
- 1 lib/aia/crew.rb
11
- 8 lib/aia/debate_handler.rb
12
- 6 lib/aia/delegate_handler.rb
13
- 4 lib/aia/directive.rb
14
- 2 lib/aia/directive_processor.rb
15
- 15 lib/aia/directives/configuration_directives.rb
16
- 12 lib/aia/directives/context_directives.rb
17
- 10 lib/aia/directives/execution_directives.rb
18
- 12 lib/aia/directives/model_directives.rb
19
- 1 lib/aia/directives/trakflow_directives.rb
20
- 11 lib/aia/directives/utility_directives.rb
21
- 11 lib/aia/directives/web_and_file_directives.rb
22
- 2 lib/aia/fact_asserter.rb
23
- 1 lib/aia/fzf.rb
24
- 1 lib/aia/history_transfer.rb
25
- 19 lib/aia/layered_orchestrator.rb
26
- 10 lib/aia/logger.rb
27
- 1 lib/aia/mcp_config_normalizer.rb
28
- 17 lib/aia/mcp_connection_manager.rb
29
- 2 lib/aia/mcp_discovery.rb
30
- 1 lib/aia/mcp_grouper.rb
31
- 2 lib/aia/mcp_utility.rb
32
- 17 lib/aia/mention_router.rb
33
- 2 lib/aia/model_switch_handler.rb
34
- 7 lib/aia/network_builder.rb
35
- 2 lib/aia/network_memory_manager.rb
36
- 1 lib/aia/patches/ruby_llm_streaming_error.rb
37
- 2 lib/aia/patches/ruby_llm_tool_error.rb
38
- 15 lib/aia/pipeline_orchestrator.rb
39
- 2 lib/aia/plugin_loader.rb
40
- 6 lib/aia/plugin_monitor.rb
41
- 2 lib/aia/prompt_decomposer.rb
42
- 19 lib/aia/prompt_handler.rb
43
- 1 lib/aia/robot_builder.rb
44
- 7 lib/aia/robot_factory.rb
45
- 1 lib/aia/robot_namer.rb
46
- 12 lib/aia/session.rb
47
- 5 lib/aia/session_tracker.rb
48
- 2 lib/aia/similarity_scorer.rb
49
- 3 lib/aia/skill_utils.rb
50
- 1 lib/aia/spawn_handler.rb
51
- 14 lib/aia/special_mode_handler.rb
52
- 2 lib/aia/startup_coordinator.rb
53
- 8 lib/aia/streaming_runner.rb
54
- 5 lib/aia/system_prompt_assembler.rb
55
- 10 lib/aia/task_coordinator.rb
56
- 2 lib/aia/tfidf_math.rb
57
- 2 lib/aia/tool_filter.rb
58
- 2 lib/aia/tool_filter/tfidf.rb
59
- 1 lib/aia/tool_filter/wordnet_expander.rb
60
- 12 lib/aia/tool_filter_strategy.rb
61
- 13 lib/aia/tool_loader.rb
62
- 1 lib/aia/tools/delegate_to_foreman_tool.rb
63
- 1 lib/aia/tools/recruit_robot_tool.rb
64
- 1 lib/aia/tools/reskill_robot_tool.rb
65
- 4 lib/aia/tools/task_board_tool.rb
66
- 10 lib/aia/trakflow_bridge.rb
67
- 11 lib/aia/turn_state.rb
68
- 7 lib/aia/ui_presenter.rb
69
- 3 lib/aia/utility.rb
70
- 1 lib/aia/variable_input_collector.rb
71
- 1 lib/aia/verification_network.rb
72
- 26 plugins/cli_help_analyzer_tool.rb
73
- 4 plugins/git_context.rb
74
- 1 plugins/joke.rb
75
- 16 plugins/jq_tool.rb
76
- 2 plugins/list_ruby_methods_tool.rb
77
- 7 plugins/memory_tool.rb
78
- 1 plugins/quick_file_tool.rb
79
- 2 plugins/search_files_tool.rb
80
- 10 plugins/search_replace_tool.rb