rubyn-code 0.7.0 → 0.8.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 +4 -4
- data/README.md +17 -1
- data/lib/rubyn_code/agent/conversation.rb +11 -1
- data/lib/rubyn_code/agent/dynamic_tool_schema.rb +1 -1
- data/lib/rubyn_code/agent/llm_caller.rb +5 -1
- data/lib/rubyn_code/agent/loop.rb +57 -3
- data/lib/rubyn_code/agent/response_parser.rb +8 -0
- data/lib/rubyn_code/agent/system_prompt_builder.rb +3 -0
- data/lib/rubyn_code/agent/tool_processor.rb +10 -0
- data/lib/rubyn_code/autonomous/daemon.rb +1 -1
- data/lib/rubyn_code/cli/commands/context.rb +27 -0
- data/lib/rubyn_code/cli/commands/custom_command.rb +44 -2
- data/lib/rubyn_code/cli/commands/custom_loader.rb +36 -5
- data/lib/rubyn_code/cli/commands/effort.rb +47 -0
- data/lib/rubyn_code/cli/commands/export.rb +174 -0
- data/lib/rubyn_code/cli/commands/mcp.rb +32 -8
- data/lib/rubyn_code/cli/commands/resume.rb +97 -26
- data/lib/rubyn_code/cli/commands/think.rb +47 -0
- data/lib/rubyn_code/cli/first_run.rb +1 -1
- data/lib/rubyn_code/cli/mention_expander.rb +19 -0
- data/lib/rubyn_code/cli/repl.rb +31 -1
- data/lib/rubyn_code/cli/repl_commands.rb +1 -1
- data/lib/rubyn_code/cli/repl_setup.rb +8 -6
- data/lib/rubyn_code/config/defaults.rb +2 -1
- data/lib/rubyn_code/config/schema.json +5 -0
- data/lib/rubyn_code/config/settings.rb +4 -2
- data/lib/rubyn_code/context/auto_compact.rb +1 -1
- data/lib/rubyn_code/context/manual_compact.rb +1 -1
- data/lib/rubyn_code/index/codebase_index.rb +64 -3
- data/lib/rubyn_code/index/prism_extractor.rb +82 -0
- data/lib/rubyn_code/learning/injector.rb +1 -2
- data/lib/rubyn_code/llm/adapters/anthropic.rb +107 -17
- data/lib/rubyn_code/llm/adapters/anthropic_streaming.rb +13 -0
- data/lib/rubyn_code/llm/adapters/base.rb +2 -1
- data/lib/rubyn_code/llm/adapters/openai.rb +1 -1
- data/lib/rubyn_code/llm/adapters/openai_message_translator.rb +21 -0
- data/lib/rubyn_code/llm/client.rb +16 -3
- data/lib/rubyn_code/llm/image_reader.rb +60 -0
- data/lib/rubyn_code/llm/message_builder.rb +21 -1
- data/lib/rubyn_code/llm/model_router.rb +4 -4
- data/lib/rubyn_code/mcp/discovery.rb +93 -0
- data/lib/rubyn_code/memory/session_persistence.rb +1 -1
- data/lib/rubyn_code/observability/cost_calculator.rb +6 -3
- data/lib/rubyn_code/protocols/RUBYN.md +0 -3
- data/lib/rubyn_code/tasks/models.rb +0 -16
- data/lib/rubyn_code/teams/teammate.rb +0 -15
- data/lib/rubyn_code/tools/RUBYN.md +2 -2
- data/lib/rubyn_code/tools/bash.rb +3 -3
- data/lib/rubyn_code/tools/code_graph.rb +134 -0
- data/lib/rubyn_code/tools/executor.rb +4 -1
- data/lib/rubyn_code/tools/todo_store.rb +55 -0
- data/lib/rubyn_code/tools/todo_write.rb +88 -0
- data/lib/rubyn_code/version.rb +1 -1
- data/lib/rubyn_code.rb +13 -8
- data/skills/rubyn_self_test.md +140 -0
- metadata +10 -7
- data/lib/rubyn_code/context/context_budget.rb +0 -183
- data/lib/rubyn_code/context/schema_filter.rb +0 -64
- data/lib/rubyn_code/learning/shortcut.rb +0 -95
- data/lib/rubyn_code/llm/adapters/token_caching.rb +0 -54
- data/lib/rubyn_code/llm/streaming.rb +0 -10
- data/lib/rubyn_code/protocols/plan_approval.rb +0 -72
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'tty-prompt'
|
|
4
|
-
require 'tty-reader'
|
|
5
|
-
require 'pastel'
|
|
6
|
-
|
|
7
|
-
module RubynCode
|
|
8
|
-
module Protocols
|
|
9
|
-
# Presents a plan to the user for approval before executing significant changes.
|
|
10
|
-
#
|
|
11
|
-
# This protocol ensures that destructive or wide-reaching operations are
|
|
12
|
-
# reviewed by a human before proceeding.
|
|
13
|
-
module PlanApproval
|
|
14
|
-
APPROVED = :approved
|
|
15
|
-
REJECTED = :rejected
|
|
16
|
-
|
|
17
|
-
class << self
|
|
18
|
-
# Displays a plan and asks the user to approve or reject it.
|
|
19
|
-
#
|
|
20
|
-
# @param plan_text [String] the plan description to display
|
|
21
|
-
# @param prompt [String, nil] optional custom prompt message
|
|
22
|
-
# @return [Symbol] :approved or :rejected
|
|
23
|
-
def request(plan_text, prompt: nil)
|
|
24
|
-
pastel = Pastel.new
|
|
25
|
-
display_plan(pastel, plan_text, prompt)
|
|
26
|
-
|
|
27
|
-
approved = build_prompt.yes?(
|
|
28
|
-
pastel.yellow.bold('Do you approve this plan?'),
|
|
29
|
-
default: false
|
|
30
|
-
)
|
|
31
|
-
|
|
32
|
-
approved ? approve(pastel) : reject(pastel)
|
|
33
|
-
rescue TTY::Reader::InputInterrupt
|
|
34
|
-
$stdout.puts pastel.red("\nPlan rejected (interrupted).")
|
|
35
|
-
REJECTED
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
private
|
|
39
|
-
|
|
40
|
-
def display_plan(pastel, plan_text, prompt)
|
|
41
|
-
$stdout.puts
|
|
42
|
-
$stdout.puts pastel.cyan.bold('Proposed Plan')
|
|
43
|
-
$stdout.puts pastel.cyan('=' * 60)
|
|
44
|
-
$stdout.puts plan_text
|
|
45
|
-
$stdout.puts pastel.cyan('=' * 60)
|
|
46
|
-
$stdout.puts
|
|
47
|
-
return unless prompt
|
|
48
|
-
|
|
49
|
-
$stdout.puts pastel.yellow(prompt)
|
|
50
|
-
$stdout.puts
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
def approve(pastel)
|
|
54
|
-
$stdout.puts pastel.green('Plan approved.')
|
|
55
|
-
APPROVED
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
def reject(pastel)
|
|
59
|
-
$stdout.puts pastel.red('Plan rejected.')
|
|
60
|
-
REJECTED
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
# Builds a TTY::Prompt instance configured for non-destructive interrupt handling.
|
|
64
|
-
#
|
|
65
|
-
# @return [TTY::Prompt]
|
|
66
|
-
def build_prompt
|
|
67
|
-
TTY::Prompt.new(interrupt: :noop)
|
|
68
|
-
end
|
|
69
|
-
end
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
end
|