kward 0.82.0 → 0.84.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/CHANGELOG.md +96 -15
- data/CONTRIBUTING.md +74 -0
- data/Gemfile.lock +8 -2
- data/README.md +21 -1
- data/Rakefile +46 -2
- data/SECURITY.md +31 -0
- data/doc/agent-tools.md +1 -0
- data/doc/api.md +4 -0
- data/doc/composer.md +2 -2
- data/doc/configuration.md +82 -20
- data/doc/editor.md +47 -22
- data/doc/files.md +12 -7
- data/doc/getting-started.md +3 -0
- data/doc/pan.md +19 -15
- data/doc/permissions.md +1 -0
- data/doc/platform-support.md +48 -0
- data/doc/releasing.md +12 -4
- data/doc/rpc.md +2 -2
- data/doc/sandboxing.md +5 -1
- data/doc/security.md +4 -3
- data/doc/shell.md +101 -60
- data/doc/tabs.md +3 -0
- data/doc/troubleshooting.md +12 -2
- data/doc/usage.md +7 -6
- data/kward.gemspec +5 -4
- data/lib/kward/agent.rb +7 -3
- data/lib/kward/ansi.rb +110 -10
- data/lib/kward/auth/anthropic_oauth.rb +7 -7
- data/lib/kward/cli/auth_commands.rb +34 -13
- data/lib/kward/cli/commands.rb +83 -62
- data/lib/kward/cli/doctor.rb +39 -17
- data/lib/kward/cli/hook_commands.rb +22 -12
- data/lib/kward/cli/interactive_turn.rb +144 -21
- data/lib/kward/cli/project_skills_commands.rb +8 -4
- data/lib/kward/cli/prompt_interface.rb +27 -0
- data/lib/kward/cli/rendering.rb +15 -9
- data/lib/kward/cli/runtime_helpers.rb +260 -55
- data/lib/kward/cli/slash_commands.rb +21 -12
- data/lib/kward/cli/tabs.rb +91 -13
- data/lib/kward/cli/tool_summaries.rb +14 -0
- data/lib/kward/cli.rb +55 -7
- data/lib/kward/cli_transcript_formatter.rb +11 -4
- data/lib/kward/compaction/token_estimator.rb +12 -6
- data/lib/kward/config_files.rb +94 -63
- data/lib/kward/detached_run.rb +44 -0
- data/lib/kward/editor_prompt.rb +46 -0
- data/lib/kward/editor_prompt_session.rb +28 -0
- data/lib/kward/interactive_pty_runner.rb +102 -28
- data/lib/kward/{ekwsh.rb → kwsh.rb} +103 -24
- data/lib/kward/kwshrc.rb +233 -0
- data/lib/kward/markdown_code_block.rb +136 -0
- data/lib/kward/model/client.rb +35 -39
- data/lib/kward/model/model_info.rb +3 -2
- data/lib/kward/model/payloads.rb +0 -2
- data/lib/kward/model/provider_catalog.rb +5 -0
- data/lib/kward/model/stream_parser.rb +20 -4
- data/lib/kward/pan/index.html.erb +3 -3
- data/lib/kward/pan/server.rb +23 -3
- data/lib/kward/persistent_shell_session.rb +843 -0
- data/lib/kward/project_files.rb +19 -6
- data/lib/kward/prompt_interface/composer_renderer.rb +45 -41
- data/lib/kward/prompt_interface/composer_state.rb +33 -24
- data/lib/kward/prompt_interface/editor/auto_indent.rb +27 -22
- data/lib/kward/prompt_interface/editor/controller.rb +99 -33
- data/lib/kward/prompt_interface/editor/endwise.rb +13 -4
- data/lib/kward/prompt_interface/editor/modes/modern.rb +4 -0
- data/lib/kward/prompt_interface/editor/modes/vibe.rb +298 -47
- data/lib/kward/prompt_interface/editor/renderer.rb +109 -6
- data/lib/kward/prompt_interface/editor/runner.rb +362 -0
- data/lib/kward/prompt_interface/editor/runner_state.rb +78 -0
- data/lib/kward/prompt_interface/editor/state.rb +21 -10
- data/lib/kward/prompt_interface/editor/syntax_highlighter.rb +68 -6
- data/lib/kward/prompt_interface/editor/vibe_state.rb +3 -3
- data/lib/kward/prompt_interface/editor/word_completion.rb +124 -0
- data/lib/kward/prompt_interface/file_overlay.rb +92 -22
- data/lib/kward/prompt_interface/key_handler.rb +75 -0
- data/lib/kward/prompt_interface/overlay_renderer.rb +7 -5
- data/lib/kward/prompt_interface/project_browser.rb +443 -17
- data/lib/kward/prompt_interface/runtime_state.rb +55 -2
- data/lib/kward/prompt_interface/screen.rb +2 -2
- data/lib/kward/prompt_interface/selection_prompt.rb +3 -1
- data/lib/kward/prompt_interface/slash_overlay.rb +19 -4
- data/lib/kward/prompt_interface/transcript_renderer.rb +12 -7
- data/lib/kward/prompt_interface.rb +169 -18
- data/lib/kward/prompts/commands.rb +2 -1
- data/lib/kward/prompts.rb +1 -1
- data/lib/kward/pty_output_sink.rb +47 -0
- data/lib/kward/rpc/auth_manager.rb +1 -1
- data/lib/kward/rpc/server.rb +2 -1
- data/lib/kward/rpc/transcript_normalizer.rb +7 -3
- data/lib/kward/scratchpad_languages.rb +74 -0
- data/lib/kward/scratchpad_runner.rb +155 -29
- data/lib/kward/shell_prompt.rb +52 -0
- data/lib/kward/shell_prompt_session.rb +58 -0
- data/lib/kward/terminal_keys.rb +13 -0
- data/lib/kward/terminal_text.rb +121 -0
- data/lib/kward/text_matcher.rb +18 -0
- data/lib/kward/tools/open_editor.rb +41 -0
- data/lib/kward/tools/prepare_shell_command.rb +28 -0
- data/lib/kward/tools/registry.rb +75 -8
- data/lib/kward/tools/replace_editor_buffer.rb +30 -0
- data/lib/kward/tools/run_shell_command.rb +24 -6
- data/lib/kward/tools/tool_call.rb +2 -1
- data/lib/kward/version.rb +1 -1
- data/templates/default/fulldoc/html/css/kward.css +0 -125
- data/templates/default/fulldoc/html/images/kward_workflow.svg +52 -0
- data/templates/default/fulldoc/html/setup.rb +1 -1
- data/templates/default/kward_navigation.rb +1 -0
- data/templates/default/layout/html/footer.erb +10 -0
- data/templates/default/layout/html/headers.erb +23 -0
- data/templates/default/layout/html/layout.erb +6 -18
- data/templates/default/layout/html/setup.rb +41 -2
- metadata +44 -8
- data/templates/default/fulldoc/html/images/kward_screen_1.png +0 -0
data/lib/kward/pan/server.rb
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
require "base64"
|
|
2
2
|
require "erb"
|
|
3
|
+
require "ipaddr"
|
|
3
4
|
require "json"
|
|
4
5
|
require "socket"
|
|
5
6
|
require "thread"
|
|
@@ -24,7 +25,7 @@ require_relative "../workspace_factory"
|
|
|
24
25
|
module Kward
|
|
25
26
|
# Local HTTP server for the mobile-friendly Pan web UI.
|
|
26
27
|
class PanServer
|
|
27
|
-
DEFAULT_HOST = "
|
|
28
|
+
DEFAULT_HOST = "127.0.0.1"
|
|
28
29
|
DEFAULT_PORT = 8765
|
|
29
30
|
MAX_REQUEST_BODY_BYTES = 64 * 1024
|
|
30
31
|
ROUTING_PROBE_ADDRESS = "8.8.8.8"
|
|
@@ -44,8 +45,11 @@ module Kward
|
|
|
44
45
|
@host = @config.fetch("host", DEFAULT_HOST).to_s
|
|
45
46
|
@port = positive_port(@config.fetch("port", DEFAULT_PORT))
|
|
46
47
|
@username = @config["username"].to_s
|
|
47
|
-
|
|
48
|
-
|
|
48
|
+
environment_password = ENV["KWARD_PAN_PASSWORD"].to_s
|
|
49
|
+
@password = environment_password.empty? ? @config["password"].to_s : environment_password
|
|
50
|
+
if @username.empty? || @password.empty?
|
|
51
|
+
raise "Pan mode requires pan_mode.username and either pan_mode.password or KWARD_PAN_PASSWORD"
|
|
52
|
+
end
|
|
49
53
|
|
|
50
54
|
@session_store = SessionStore.new(config_dir: config_dir, cwd: @workspace.root.to_s)
|
|
51
55
|
@session = @session_store.create(
|
|
@@ -69,6 +73,7 @@ module Kward
|
|
|
69
73
|
attr_reader :host, :port, :session, :workspace
|
|
70
74
|
|
|
71
75
|
def run
|
|
76
|
+
warn_if_exposed
|
|
72
77
|
start_worker
|
|
73
78
|
@server = TCPServer.new(@host, @port)
|
|
74
79
|
actual_port = @server.addr[1]
|
|
@@ -595,6 +600,21 @@ module Kward
|
|
|
595
600
|
lan_address || "<lan-address>"
|
|
596
601
|
end
|
|
597
602
|
|
|
603
|
+
def warn_if_exposed
|
|
604
|
+
return if loopback_host?
|
|
605
|
+
|
|
606
|
+
@output.puts "Warning: Pan is exposed over plain HTTP on #{@host}."
|
|
607
|
+
@output.puts "Use it only on a trusted network, or bind pan_mode.host to 127.0.0.1."
|
|
608
|
+
end
|
|
609
|
+
|
|
610
|
+
def loopback_host?
|
|
611
|
+
return true if @host.casecmp?("localhost")
|
|
612
|
+
|
|
613
|
+
IPAddr.new(@host).loopback?
|
|
614
|
+
rescue IPAddr::InvalidAddressError
|
|
615
|
+
false
|
|
616
|
+
end
|
|
617
|
+
|
|
598
618
|
def lan_address
|
|
599
619
|
socket = @udp_socket_class.new
|
|
600
620
|
socket.connect(ROUTING_PROBE_ADDRESS, ROUTING_PROBE_PORT)
|