kward 0.84.0 → 0.85.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 +34 -0
- data/Gemfile.lock +2 -2
- data/README.md +2 -2
- data/doc/agent-tools.md +13 -1
- data/doc/api.md +17 -2
- data/doc/composer.md +1 -1
- data/doc/configuration.md +27 -4
- data/doc/extensibility.md +2 -1
- data/doc/git.md +3 -1
- data/doc/pan.md +6 -0
- data/doc/permissions.md +4 -4
- data/doc/plugins.md +464 -15
- data/doc/rpc.md +154 -16
- data/doc/sandboxing.md +11 -5
- data/doc/security.md +7 -1
- data/doc/session-management.md +5 -4
- data/doc/tabs.md +6 -2
- data/doc/transports.md +15 -0
- data/doc/usage.md +4 -1
- data/doc/workspace-tools.md +9 -0
- data/examples/plugins/space_invaders.rb +1 -1
- data/examples/plugins/stardate_footer.rb +2 -2
- data/examples/plugins/telegram/plugin.rb +1 -1
- data/lib/kward/agent.rb +24 -11
- data/lib/kward/cli/compaction.rb +9 -3
- data/lib/kward/cli/plugins.rb +81 -12
- data/lib/kward/cli/prompt_interface.rb +25 -5
- data/lib/kward/cli/rendering.rb +3 -0
- data/lib/kward/cli/runtime_helpers.rb +121 -27
- data/lib/kward/cli/sessions.rb +9 -5
- data/lib/kward/cli/settings/menus.rb +745 -0
- data/lib/kward/cli/settings/model.rb +327 -0
- data/lib/kward/cli/settings.rb +6 -1055
- data/lib/kward/cli/slash_commands.rb +45 -4
- data/lib/kward/cli/tabs.rb +167 -27
- data/lib/kward/{cli_transcript_formatter.rb → cli/transcript_formatter.rb} +3 -3
- data/lib/kward/cli/worktrees.rb +65 -2
- data/lib/kward/cli.rb +26 -24
- data/lib/kward/compactor.rb +18 -7
- data/lib/kward/config/core.rb +389 -0
- data/lib/kward/config/extensions.rb +96 -0
- data/lib/kward/config/prompts.rb +313 -0
- data/lib/kward/config/settings.rb +250 -0
- data/lib/kward/config_files.rb +14 -1008
- data/lib/kward/conversation.rb +31 -2
- data/lib/kward/image_attachments.rb +1 -1
- data/lib/kward/model/client.rb +2 -2
- data/lib/kward/model/copilot_models.rb +2 -2
- data/lib/kward/model/model_info.rb +20 -3
- data/lib/kward/{openrouter_model_cache.rb → model/openrouter_model_cache.rb} +3 -3
- data/lib/kward/model/payloads.rb +12 -3
- data/lib/kward/model/typesafe_client.rb +78 -0
- data/lib/kward/pan/server.rb +10 -7
- data/lib/kward/permissions/policy.rb +6 -2
- data/lib/kward/plugin_registry.rb +2 -659
- data/lib/kward/plugins/actions.rb +453 -0
- data/lib/kward/plugins/chat_contract.rb +121 -0
- data/lib/kward/{plugin_chat_runtime.rb → plugins/chat_runtime.rb} +62 -18
- data/lib/kward/plugins/host.rb +232 -0
- data/lib/kward/plugins/registry.rb +1190 -0
- data/lib/kward/plugins/resources.rb +206 -0
- data/lib/kward/plugins/turn_request.rb +36 -0
- data/lib/kward/plugins/ui.rb +219 -0
- data/lib/kward/prompt_interface/composer_renderer.rb +1 -1
- data/lib/kward/prompt_interface/composer_state.rb +1 -1
- data/lib/kward/prompt_interface/editor/controller.rb +1 -1
- data/lib/kward/prompt_interface/editor/runner.rb +1 -1
- data/lib/kward/prompt_interface/editor/state.rb +1 -1
- data/lib/kward/prompt_interface/layout.rb +1 -1
- data/lib/kward/prompt_interface/overlay_renderer.rb +1 -1
- data/lib/kward/prompt_interface/plugin_ui_requests.rb +82 -0
- data/lib/kward/prompt_interface/runtime_state.rb +6 -1
- data/lib/kward/prompt_interface/screen.rb +9 -2
- data/lib/kward/prompt_interface.rb +60 -11
- data/lib/kward/prompts/commands.rb +2 -1
- data/lib/kward/{adaptive_pty_output_sink.rb → pty/adaptive_output_sink.rb} +1 -1
- data/lib/kward/{interactive_pty_runner.rb → pty/interactive_runner.rb} +2 -2
- data/lib/kward/{local_command_runner.rb → pty/local_command_runner.rb} +1 -1
- data/lib/kward/{local_pty_command_runner.rb → pty/local_pty_runner.rb} +3 -9
- data/lib/kward/{pty_output_sink.rb → pty/output_sink.rb} +9 -4
- data/lib/kward/{pty_transcript_normalizer.rb → pty/transcript_normalizer.rb} +1 -1
- data/lib/kward/rpc/plugin_chat_manager.rb +30 -10
- data/lib/kward/rpc/prompt_bridge.rb +25 -0
- data/lib/kward/rpc/server.rb +91 -12
- data/lib/kward/rpc/session_manager.rb +147 -44
- data/lib/kward/rpc/session_tree_rows.rb +2 -2
- data/lib/kward/rpc/tool_metadata.rb +1 -1
- data/lib/kward/sandbox/command_runner.rb +1 -1
- data/lib/kward/{session_catalog.rb → sessions/catalog.rb} +1 -1
- data/lib/kward/{session_store.rb → sessions/store.rb} +9 -9
- data/lib/kward/{session_tree_nodes.rb → sessions/tree_nodes.rb} +3 -3
- data/lib/kward/{session_tree_renderer.rb → sessions/tree_renderer.rb} +4 -4
- data/lib/kward/{session_tree_tool_display.rb → sessions/tree_tool_display.rb} +1 -1
- data/lib/kward/{kwsh.rb → shell/kwsh.rb} +3 -3
- data/lib/kward/{persistent_shell_session.rb → shell/persistent_session.rb} +3 -3
- data/lib/kward/{shell_prompt_session.rb → shell/prompt_session.rb} +1 -1
- data/lib/kward/skills/trust_store.rb +1 -1
- data/lib/kward/tabs/driver.rb +194 -0
- data/lib/kward/{tab_store.rb → tabs/store.rb} +2 -2
- data/lib/kward/{clipboard.rb → terminal/clipboard.rb} +1 -1
- data/lib/kward/{terminal_image_support.rb → terminal/image_support.rb} +1 -1
- data/lib/kward/tools/base.rb +18 -0
- data/lib/kward/tools/context_for_task.rb +15 -6
- data/lib/kward/tools/edit_file.rb +9 -6
- data/lib/kward/tools/git_commit.rb +13 -7
- data/lib/kward/tools/list_directory.rb +4 -4
- data/lib/kward/tools/plugin_tool.rb +41 -0
- data/lib/kward/tools/prepare_shell_command.rb +1 -1
- data/lib/kward/tools/read_file.rb +7 -6
- data/lib/kward/tools/registry.rb +96 -13
- data/lib/kward/tools/run_shell_command.rb +10 -8
- data/lib/kward/tools/search/code.rb +1 -1
- data/lib/kward/tools/summarize_file_structure.rb +5 -5
- data/lib/kward/tools/tool_call.rb +2 -1
- data/lib/kward/tools/typesafe_evaluate.rb +81 -0
- data/lib/kward/tools/workspace_targets.rb +58 -0
- data/lib/kward/tools/write_file.rb +9 -6
- data/lib/kward/{export_path.rb → transcripts/export_path.rb} +1 -1
- data/lib/kward/{markdown_transcript.rb → transcripts/markdown_transcript.rb} +2 -2
- data/lib/kward/transport/contracts.rb +200 -0
- data/lib/kward/transport/gateway.rb +79 -35
- data/lib/kward/transport/plugin_chat_gateway.rb +3 -2
- data/lib/kward/transport.rb +1 -200
- data/lib/kward/version.rb +1 -1
- data/lib/kward/{workspace_factory.rb → workspace/factory.rb} +2 -2
- data/lib/kward/{git_worktree_manager.rb → workspace/git_worktree_manager.rb} +28 -0
- data/lib/kward/{workspace.rb → workspace/workspace.rb} +3 -3
- data/templates/default/fulldoc/html/css/kward.css +125 -0
- data/templates/default/fulldoc/html/images/kward_screen_1.png +0 -0
- data/templates/default/fulldoc/html/setup.rb +1 -1
- data/templates/default/layout/html/layout.erb +16 -4
- metadata +67 -48
- data/lib/kward/tab_driver.rb +0 -90
- data/templates/default/fulldoc/html/images/kward_workflow.svg +0 -52
- /data/lib/kward/{editor_prompt.rb → cli/editor_prompt.rb} +0 -0
- /data/lib/kward/{editor_prompt_session.rb → cli/editor_prompt_session.rb} +0 -0
- /data/lib/kward/{diff_view_mode.rb → prompt_interface/editor/diff_view_mode.rb} +0 -0
- /data/lib/kward/{editor_mode.rb → prompt_interface/editor/editor_mode.rb} +0 -0
- /data/lib/kward/{markdown_code_block.rb → prompt_interface/editor/markdown_code_block.rb} +0 -0
- /data/lib/kward/{scratchpad_languages.rb → prompt_interface/editor/scratchpad_languages.rb} +0 -0
- /data/lib/kward/{scratchpad_runner.rb → prompt_interface/editor/scratchpad_runner.rb} +0 -0
- /data/lib/kward/{detached_run.rb → pty/detached_run.rb} +0 -0
- /data/lib/kward/{session_diff.rb → sessions/diff.rb} +0 -0
- /data/lib/kward/{session_naming.rb → sessions/naming.rb} +0 -0
- /data/lib/kward/{session_trash.rb → sessions/trash.rb} +0 -0
- /data/lib/kward/{kwshrc.rb → shell/kwshrc.rb} +0 -0
- /data/lib/kward/{shell_prompt.rb → shell/prompt.rb} +0 -0
- /data/lib/kward/{ansi.rb → terminal/ansi.rb} +0 -0
- /data/lib/kward/{terminal_keys.rb → terminal/keys.rb} +0 -0
- /data/lib/kward/{terminal_sequences.rb → terminal/sequences.rb} +0 -0
- /data/lib/kward/{terminal_text.rb → terminal/text.rb} +0 -0
- /data/lib/kward/{transcript_export.rb → transcripts/transcript_export.rb} +0 -0
- /data/lib/kward/{project_files.rb → workspace/files.rb} +0 -0
- /data/lib/kward/{path_guard.rb → workspace/path_guard.rb} +0 -0
|
@@ -570,6 +570,127 @@ body.kward-docs #footer {
|
|
|
570
570
|
color: var(--kward-accent-bright);
|
|
571
571
|
}
|
|
572
572
|
|
|
573
|
+
/*
|
|
574
|
+
Hero tagline "swosh": cycles each line through three phrases. The first
|
|
575
|
+
line moves right-to-left: "Your terminal.", "Your RPC frontend.", then
|
|
576
|
+
"Your workflow." The second line mirrors it left-to-right: "Your agent.",
|
|
577
|
+
"Your LLM engine.", then "Your harness." Pure CSS — no JS. The global
|
|
578
|
+
@media (prefers-reduced-motion) rule above collapses the animation to
|
|
579
|
+
the static original copy ("Your terminal. Your agent.") so it remains
|
|
580
|
+
accessible and calm.
|
|
581
|
+
*/
|
|
582
|
+
.kward-swosh {
|
|
583
|
+
box-sizing: content-box;
|
|
584
|
+
display: inline-block;
|
|
585
|
+
height: 0.98em;
|
|
586
|
+
line-height: 0.98;
|
|
587
|
+
margin: -0.16em -0.08em;
|
|
588
|
+
overflow: hidden;
|
|
589
|
+
padding: 0.16em 0.08em;
|
|
590
|
+
position: relative;
|
|
591
|
+
vertical-align: top;
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
.kward-hero h1 .kward-swosh-text {
|
|
595
|
+
color: var(--kward-ink);
|
|
596
|
+
display: inline-block;
|
|
597
|
+
line-height: 0.98;
|
|
598
|
+
white-space: nowrap;
|
|
599
|
+
will-change: transform, opacity;
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
/* The longest text ("Your RPC frontend.") stays in flow to size the box;
|
|
603
|
+
the shorter phrases overlay it absolutely. */
|
|
604
|
+
.kward-swosh-text-a,
|
|
605
|
+
.kward-swosh-text-e {
|
|
606
|
+
left: 0.08em;
|
|
607
|
+
position: absolute;
|
|
608
|
+
top: 0.16em;
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
.kward-swosh-text-a {
|
|
612
|
+
animation: kward-swosh-a 18s cubic-bezier(0.22, 0.61, 0.36, 1) infinite;
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
.kward-swosh-text-b {
|
|
616
|
+
animation: kward-swosh-b 18s cubic-bezier(0.22, 0.61, 0.36, 1) infinite;
|
|
617
|
+
position: relative;
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
.kward-swosh-text-e {
|
|
621
|
+
animation: kward-swosh-e 18s cubic-bezier(0.22, 0.61, 0.36, 1) infinite;
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
@keyframes kward-swosh-a {
|
|
625
|
+
0%, 25% { transform: translateX(0); opacity: 1; filter: none; }
|
|
626
|
+
33% { transform: translateX(-140%); opacity: 0; filter: blur(3px); }
|
|
627
|
+
34%, 92% { transform: translateX(140%); opacity: 0; filter: none; }
|
|
628
|
+
100% { transform: translateX(0); opacity: 1; filter: none; }
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
@keyframes kward-swosh-b {
|
|
632
|
+
0%, 25% { transform: translateX(140%); opacity: 0; filter: none; }
|
|
633
|
+
33% { transform: translateX(0); opacity: 1; filter: none; }
|
|
634
|
+
58% { transform: translateX(0); opacity: 1; filter: none; }
|
|
635
|
+
66% { transform: translateX(-140%); opacity: 0; filter: blur(3px); }
|
|
636
|
+
67%, 100% { transform: translateX(140%); opacity: 0; filter: none; }
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
@keyframes kward-swosh-e {
|
|
640
|
+
0%, 58% { transform: translateX(140%); opacity: 0; filter: none; }
|
|
641
|
+
66% { transform: translateX(0); opacity: 1; filter: none; }
|
|
642
|
+
92% { transform: translateX(0); opacity: 1; filter: none; }
|
|
643
|
+
100% { transform: translateX(-140%); opacity: 0; filter: blur(3px); }
|
|
644
|
+
}
|
|
645
|
+
|
|
646
|
+
/*
|
|
647
|
+
Second line, mirrored left-to-right. All texts keep the accent-bright
|
|
648
|
+
color of the original "Your agent." span.
|
|
649
|
+
*/
|
|
650
|
+
.kward-hero h1 .kward-swosh-text-c,
|
|
651
|
+
.kward-hero h1 .kward-swosh-text-f {
|
|
652
|
+
color: var(--kward-accent-bright);
|
|
653
|
+
left: 0.08em;
|
|
654
|
+
position: absolute;
|
|
655
|
+
top: 0.16em;
|
|
656
|
+
}
|
|
657
|
+
|
|
658
|
+
.kward-hero h1 .kward-swosh-text-c {
|
|
659
|
+
animation: kward-swosh-c 18s cubic-bezier(0.22, 0.61, 0.36, 1) infinite;
|
|
660
|
+
}
|
|
661
|
+
|
|
662
|
+
.kward-hero h1 .kward-swosh-text-d {
|
|
663
|
+
animation: kward-swosh-d 18s cubic-bezier(0.22, 0.61, 0.36, 1) infinite;
|
|
664
|
+
color: var(--kward-accent-bright);
|
|
665
|
+
position: relative;
|
|
666
|
+
}
|
|
667
|
+
|
|
668
|
+
.kward-hero h1 .kward-swosh-text-f {
|
|
669
|
+
animation: kward-swosh-f 18s cubic-bezier(0.22, 0.61, 0.36, 1) infinite;
|
|
670
|
+
}
|
|
671
|
+
|
|
672
|
+
@keyframes kward-swosh-c {
|
|
673
|
+
0%, 25% { transform: translateX(0); opacity: 1; filter: none; }
|
|
674
|
+
33% { transform: translateX(140%); opacity: 0; filter: blur(3px); }
|
|
675
|
+
34%, 92% { transform: translateX(-140%); opacity: 0; filter: none; }
|
|
676
|
+
100% { transform: translateX(0); opacity: 1; filter: none; }
|
|
677
|
+
}
|
|
678
|
+
|
|
679
|
+
@keyframes kward-swosh-d {
|
|
680
|
+
0%, 25% { transform: translateX(-140%); opacity: 0; filter: none; }
|
|
681
|
+
33% { transform: translateX(0); opacity: 1; filter: none; }
|
|
682
|
+
58% { transform: translateX(0); opacity: 1; filter: none; }
|
|
683
|
+
66% { transform: translateX(140%); opacity: 0; filter: blur(3px); }
|
|
684
|
+
67%, 100% { transform: translateX(-140%); opacity: 0; filter: none; }
|
|
685
|
+
}
|
|
686
|
+
|
|
687
|
+
@keyframes kward-swosh-f {
|
|
688
|
+
0%, 58% { transform: translateX(-140%); opacity: 0; filter: none; }
|
|
689
|
+
66% { transform: translateX(0); opacity: 1; filter: none; }
|
|
690
|
+
92% { transform: translateX(0); opacity: 1; filter: none; }
|
|
691
|
+
100% { transform: translateX(140%); opacity: 0; filter: blur(3px); }
|
|
692
|
+
}
|
|
693
|
+
|
|
573
694
|
.kward-lede {
|
|
574
695
|
color: var(--kward-ink);
|
|
575
696
|
font-size: 19px;
|
|
@@ -920,6 +1041,10 @@ body.kward-docs .kward-home #footer p {
|
|
|
920
1041
|
font-size: clamp(32px, 10vw, 38px);
|
|
921
1042
|
}
|
|
922
1043
|
|
|
1044
|
+
.kward-swosh {
|
|
1045
|
+
max-width: 100%;
|
|
1046
|
+
}
|
|
1047
|
+
|
|
923
1048
|
.kward-feature-strip,
|
|
924
1049
|
.kward-capabilities ul {
|
|
925
1050
|
grid-template-columns: 1fr;
|
|
Binary file
|
|
@@ -9,7 +9,7 @@ def generate_assets
|
|
|
9
9
|
asset('css/kward.css', file('css/kward.css', true))
|
|
10
10
|
asset('js/kward.js', file('js/kward.js', true))
|
|
11
11
|
asset('images/kward_logo.png', file('images/kward_logo.png', true))
|
|
12
|
-
asset('images/
|
|
12
|
+
asset('images/kward_screen_1.png', file('images/kward_screen_1.png', true))
|
|
13
13
|
end
|
|
14
14
|
|
|
15
15
|
def stylesheets_full_list
|
|
@@ -80,9 +80,21 @@
|
|
|
80
80
|
<main id="main" class="kward-home">
|
|
81
81
|
<section class="kward-hero">
|
|
82
82
|
<div class="kward-hero-copy">
|
|
83
|
-
<p class="kward-eyebrow">⌘ Ruby
|
|
84
|
-
<h1>
|
|
85
|
-
|
|
83
|
+
<p class="kward-eyebrow">⌘ Ruby CLI Coding Agent</p>
|
|
84
|
+
<h1>
|
|
85
|
+
<span class="kward-swosh" aria-label="Your terminal. Your RPC frontend. Your workflow.">
|
|
86
|
+
<span class="kward-swosh-text kward-swosh-text-a" aria-hidden="true">Your terminal.</span>
|
|
87
|
+
<span class="kward-swosh-text kward-swosh-text-b" aria-hidden="true">Your RPC frontend.</span>
|
|
88
|
+
<span class="kward-swosh-text kward-swosh-text-e" aria-hidden="true">Your workflow.</span>
|
|
89
|
+
</span>
|
|
90
|
+
<br>
|
|
91
|
+
<span class="kward-swosh" aria-label="Your agent. Your LLM engine. Your harness.">
|
|
92
|
+
<span class="kward-swosh-text kward-swosh-text-c" aria-hidden="true">Your agent.</span>
|
|
93
|
+
<span class="kward-swosh-text kward-swosh-text-d" aria-hidden="true">Your LLM engine.</span>
|
|
94
|
+
<span class="kward-swosh-text kward-swosh-text-f" aria-hidden="true">Your harness.</span>
|
|
95
|
+
</span>
|
|
96
|
+
</h1>
|
|
97
|
+
<p class="kward-lede">Kward is a general-purpose coding agent written in Ruby: terminal-native, project-aware, pipeable, and designed around your workflow.</p>
|
|
86
98
|
<div class="kward-actions">
|
|
87
99
|
<a class="kward-primary-button" href="<%= url_for('file.getting-started.html') %>">Get Started ›</a>
|
|
88
100
|
<a class="kward-secondary-button" href="https://github.com/kaiwood/kward" target="_blank" rel="noopener noreferrer">View on GitHub</a>
|
|
@@ -113,7 +125,7 @@
|
|
|
113
125
|
<a href="<%= url_for('file.getting-started.html') %>">View full installation docs →</a>
|
|
114
126
|
</div>
|
|
115
127
|
<div class="kward-screen-card">
|
|
116
|
-
<img src="<%= url_for('images/
|
|
128
|
+
<img src="<%= url_for('images/kward_screen_1.png') %>" alt="Kward terminal interface screenshot">
|
|
117
129
|
</div>
|
|
118
130
|
</section>
|
|
119
131
|
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: kward
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.85.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Kai Wood
|
|
@@ -185,9 +185,7 @@ files:
|
|
|
185
185
|
- exe/kward
|
|
186
186
|
- kward.gemspec
|
|
187
187
|
- lib/kward.rb
|
|
188
|
-
- lib/kward/adaptive_pty_output_sink.rb
|
|
189
188
|
- lib/kward/agent.rb
|
|
190
|
-
- lib/kward/ansi.rb
|
|
191
189
|
- lib/kward/auth/anthropic_oauth.rb
|
|
192
190
|
- lib/kward/auth/api_key_store.rb
|
|
193
191
|
- lib/kward/auth/file.rb
|
|
@@ -201,6 +199,8 @@ files:
|
|
|
201
199
|
- lib/kward/cli/commands.rb
|
|
202
200
|
- lib/kward/cli/compaction.rb
|
|
203
201
|
- lib/kward/cli/doctor.rb
|
|
202
|
+
- lib/kward/cli/editor_prompt.rb
|
|
203
|
+
- lib/kward/cli/editor_prompt_session.rb
|
|
204
204
|
- lib/kward/cli/git.rb
|
|
205
205
|
- lib/kward/cli/hook_commands.rb
|
|
206
206
|
- lib/kward/cli/interactive_turn.rb
|
|
@@ -214,31 +214,29 @@ files:
|
|
|
214
214
|
- lib/kward/cli/runtime_helpers.rb
|
|
215
215
|
- lib/kward/cli/sessions.rb
|
|
216
216
|
- lib/kward/cli/settings.rb
|
|
217
|
+
- lib/kward/cli/settings/menus.rb
|
|
218
|
+
- lib/kward/cli/settings/model.rb
|
|
217
219
|
- lib/kward/cli/slash_commands.rb
|
|
218
220
|
- lib/kward/cli/stats.rb
|
|
219
221
|
- lib/kward/cli/sysprompt.rb
|
|
220
222
|
- lib/kward/cli/tabs.rb
|
|
221
223
|
- lib/kward/cli/tool_summaries.rb
|
|
224
|
+
- lib/kward/cli/transcript_formatter.rb
|
|
222
225
|
- lib/kward/cli/transports.rb
|
|
223
226
|
- lib/kward/cli/worktrees.rb
|
|
224
|
-
- lib/kward/cli_transcript_formatter.rb
|
|
225
|
-
- lib/kward/clipboard.rb
|
|
226
227
|
- lib/kward/compaction/file_operation_tracker.rb
|
|
227
228
|
- lib/kward/compaction/token_estimator.rb
|
|
228
229
|
- lib/kward/compactor.rb
|
|
230
|
+
- lib/kward/config/core.rb
|
|
231
|
+
- lib/kward/config/extensions.rb
|
|
232
|
+
- lib/kward/config/prompts.rb
|
|
233
|
+
- lib/kward/config/settings.rb
|
|
229
234
|
- lib/kward/config_files.rb
|
|
230
235
|
- lib/kward/context_budget_meter.rb
|
|
231
236
|
- lib/kward/conversation.rb
|
|
232
237
|
- lib/kward/deep_copy.rb
|
|
233
|
-
- lib/kward/detached_run.rb
|
|
234
|
-
- lib/kward/diff_view_mode.rb
|
|
235
|
-
- lib/kward/editor_mode.rb
|
|
236
|
-
- lib/kward/editor_prompt.rb
|
|
237
|
-
- lib/kward/editor_prompt_session.rb
|
|
238
238
|
- lib/kward/events.rb
|
|
239
|
-
- lib/kward/export_path.rb
|
|
240
239
|
- lib/kward/frontmatter.rb
|
|
241
|
-
- lib/kward/git_worktree_manager.rb
|
|
242
240
|
- lib/kward/hooks.rb
|
|
243
241
|
- lib/kward/hooks/audit_log.rb
|
|
244
242
|
- lib/kward/hooks/catalog.rb
|
|
@@ -251,13 +249,6 @@ files:
|
|
|
251
249
|
- lib/kward/hooks/matcher.rb
|
|
252
250
|
- lib/kward/http.rb
|
|
253
251
|
- lib/kward/image_attachments.rb
|
|
254
|
-
- lib/kward/interactive_pty_runner.rb
|
|
255
|
-
- lib/kward/kwsh.rb
|
|
256
|
-
- lib/kward/kwshrc.rb
|
|
257
|
-
- lib/kward/local_command_runner.rb
|
|
258
|
-
- lib/kward/local_pty_command_runner.rb
|
|
259
|
-
- lib/kward/markdown_code_block.rb
|
|
260
|
-
- lib/kward/markdown_transcript.rb
|
|
261
252
|
- lib/kward/mcp/client.rb
|
|
262
253
|
- lib/kward/mcp/server_config.rb
|
|
263
254
|
- lib/kward/mcp/stdio_transport.rb
|
|
@@ -273,22 +264,27 @@ files:
|
|
|
273
264
|
- lib/kward/model/context_usage.rb
|
|
274
265
|
- lib/kward/model/copilot_models.rb
|
|
275
266
|
- lib/kward/model/model_info.rb
|
|
267
|
+
- lib/kward/model/openrouter_model_cache.rb
|
|
276
268
|
- lib/kward/model/payloads.rb
|
|
277
269
|
- lib/kward/model/provider_catalog.rb
|
|
278
270
|
- lib/kward/model/retry_message.rb
|
|
279
271
|
- lib/kward/model/sources.rb
|
|
280
272
|
- lib/kward/model/stream_parser.rb
|
|
281
|
-
- lib/kward/
|
|
273
|
+
- lib/kward/model/typesafe_client.rb
|
|
282
274
|
- lib/kward/pan/index.html.erb
|
|
283
275
|
- lib/kward/pan/kward_logo.png
|
|
284
276
|
- lib/kward/pan/server.rb
|
|
285
|
-
- lib/kward/path_guard.rb
|
|
286
277
|
- lib/kward/permissions/policy.rb
|
|
287
|
-
- lib/kward/persistent_shell_session.rb
|
|
288
|
-
- lib/kward/plugin_chat_runtime.rb
|
|
289
278
|
- lib/kward/plugin_registry.rb
|
|
279
|
+
- lib/kward/plugins/actions.rb
|
|
280
|
+
- lib/kward/plugins/chat_contract.rb
|
|
281
|
+
- lib/kward/plugins/chat_runtime.rb
|
|
282
|
+
- lib/kward/plugins/host.rb
|
|
283
|
+
- lib/kward/plugins/registry.rb
|
|
284
|
+
- lib/kward/plugins/resources.rb
|
|
285
|
+
- lib/kward/plugins/turn_request.rb
|
|
286
|
+
- lib/kward/plugins/ui.rb
|
|
290
287
|
- lib/kward/private_file.rb
|
|
291
|
-
- lib/kward/project_files.rb
|
|
292
288
|
- lib/kward/prompt_history.rb
|
|
293
289
|
- lib/kward/prompt_interface.rb
|
|
294
290
|
- lib/kward/prompt_interface/approval_prompt.rb
|
|
@@ -300,10 +296,13 @@ files:
|
|
|
300
296
|
- lib/kward/prompt_interface/editor/auto_indent.rb
|
|
301
297
|
- lib/kward/prompt_interface/editor/buffer.rb
|
|
302
298
|
- lib/kward/prompt_interface/editor/controller.rb
|
|
299
|
+
- lib/kward/prompt_interface/editor/diff_view_mode.rb
|
|
300
|
+
- lib/kward/prompt_interface/editor/editor_mode.rb
|
|
303
301
|
- lib/kward/prompt_interface/editor/endwise.rb
|
|
304
302
|
- lib/kward/prompt_interface/editor/file_marker.rb
|
|
305
303
|
- lib/kward/prompt_interface/editor/indent_navigation.rb
|
|
306
304
|
- lib/kward/prompt_interface/editor/kill_ring.rb
|
|
305
|
+
- lib/kward/prompt_interface/editor/markdown_code_block.rb
|
|
307
306
|
- lib/kward/prompt_interface/editor/modes/emacs.rb
|
|
308
307
|
- lib/kward/prompt_interface/editor/modes/modern.rb
|
|
309
308
|
- lib/kward/prompt_interface/editor/modes/vibe.rb
|
|
@@ -311,6 +310,8 @@ files:
|
|
|
311
310
|
- lib/kward/prompt_interface/editor/renderer.rb
|
|
312
311
|
- lib/kward/prompt_interface/editor/runner.rb
|
|
313
312
|
- lib/kward/prompt_interface/editor/runner_state.rb
|
|
313
|
+
- lib/kward/prompt_interface/editor/scratchpad_languages.rb
|
|
314
|
+
- lib/kward/prompt_interface/editor/scratchpad_runner.rb
|
|
314
315
|
- lib/kward/prompt_interface/editor/search.rb
|
|
315
316
|
- lib/kward/prompt_interface/editor/selections.rb
|
|
316
317
|
- lib/kward/prompt_interface/editor/state.rb
|
|
@@ -327,6 +328,7 @@ files:
|
|
|
327
328
|
- lib/kward/prompt_interface/key_handler.rb
|
|
328
329
|
- lib/kward/prompt_interface/layout.rb
|
|
329
330
|
- lib/kward/prompt_interface/overlay_renderer.rb
|
|
331
|
+
- lib/kward/prompt_interface/plugin_ui_requests.rb
|
|
330
332
|
- lib/kward/prompt_interface/project_browser.rb
|
|
331
333
|
- lib/kward/prompt_interface/prompt_renderer.rb
|
|
332
334
|
- lib/kward/prompt_interface/question_prompt.rb
|
|
@@ -340,8 +342,13 @@ files:
|
|
|
340
342
|
- lib/kward/prompts.rb
|
|
341
343
|
- lib/kward/prompts/commands.rb
|
|
342
344
|
- lib/kward/prompts/templates.rb
|
|
343
|
-
- lib/kward/
|
|
344
|
-
- lib/kward/
|
|
345
|
+
- lib/kward/pty/adaptive_output_sink.rb
|
|
346
|
+
- lib/kward/pty/detached_run.rb
|
|
347
|
+
- lib/kward/pty/interactive_runner.rb
|
|
348
|
+
- lib/kward/pty/local_command_runner.rb
|
|
349
|
+
- lib/kward/pty/local_pty_runner.rb
|
|
350
|
+
- lib/kward/pty/output_sink.rb
|
|
351
|
+
- lib/kward/pty/transcript_normalizer.rb
|
|
345
352
|
- lib/kward/question_contract.rb
|
|
346
353
|
- lib/kward/rpc/attachment_normalizer.rb
|
|
347
354
|
- lib/kward/rpc/auth_manager.rb
|
|
@@ -372,32 +379,35 @@ files:
|
|
|
372
379
|
- lib/kward/sandbox/policy.rb
|
|
373
380
|
- lib/kward/sandbox/runner_factory.rb
|
|
374
381
|
- lib/kward/sandbox/unavailable_runner.rb
|
|
375
|
-
- lib/kward/
|
|
376
|
-
- lib/kward/
|
|
377
|
-
- lib/kward/
|
|
378
|
-
- lib/kward/
|
|
379
|
-
- lib/kward/
|
|
380
|
-
- lib/kward/
|
|
381
|
-
- lib/kward/
|
|
382
|
-
- lib/kward/
|
|
383
|
-
- lib/kward/
|
|
384
|
-
- lib/kward/
|
|
385
|
-
- lib/kward/
|
|
386
|
-
- lib/kward/
|
|
382
|
+
- lib/kward/sessions/catalog.rb
|
|
383
|
+
- lib/kward/sessions/diff.rb
|
|
384
|
+
- lib/kward/sessions/naming.rb
|
|
385
|
+
- lib/kward/sessions/store.rb
|
|
386
|
+
- lib/kward/sessions/trash.rb
|
|
387
|
+
- lib/kward/sessions/tree_nodes.rb
|
|
388
|
+
- lib/kward/sessions/tree_renderer.rb
|
|
389
|
+
- lib/kward/sessions/tree_tool_display.rb
|
|
390
|
+
- lib/kward/shell/kwsh.rb
|
|
391
|
+
- lib/kward/shell/kwshrc.rb
|
|
392
|
+
- lib/kward/shell/persistent_session.rb
|
|
393
|
+
- lib/kward/shell/prompt.rb
|
|
394
|
+
- lib/kward/shell/prompt_session.rb
|
|
387
395
|
- lib/kward/skills/capture.rb
|
|
388
396
|
- lib/kward/skills/registry.rb
|
|
389
397
|
- lib/kward/skills/trust_coordinator.rb
|
|
390
398
|
- lib/kward/skills/trust_store.rb
|
|
391
399
|
- lib/kward/starter_pack_installer.rb
|
|
392
400
|
- lib/kward/steering.rb
|
|
393
|
-
- lib/kward/
|
|
394
|
-
- lib/kward/
|
|
401
|
+
- lib/kward/tabs/driver.rb
|
|
402
|
+
- lib/kward/tabs/store.rb
|
|
395
403
|
- lib/kward/telemetry/logger.rb
|
|
396
404
|
- lib/kward/telemetry/stats.rb
|
|
397
|
-
- lib/kward/
|
|
398
|
-
- lib/kward/
|
|
399
|
-
- lib/kward/
|
|
400
|
-
- lib/kward/
|
|
405
|
+
- lib/kward/terminal/ansi.rb
|
|
406
|
+
- lib/kward/terminal/clipboard.rb
|
|
407
|
+
- lib/kward/terminal/image_support.rb
|
|
408
|
+
- lib/kward/terminal/keys.rb
|
|
409
|
+
- lib/kward/terminal/sequences.rb
|
|
410
|
+
- lib/kward/terminal/text.rb
|
|
401
411
|
- lib/kward/text_boundary.rb
|
|
402
412
|
- lib/kward/text_matcher.rb
|
|
403
413
|
- lib/kward/tool_output_compactor.rb
|
|
@@ -413,6 +423,7 @@ files:
|
|
|
413
423
|
- lib/kward/tools/list_directory.rb
|
|
414
424
|
- lib/kward/tools/mcp_tool.rb
|
|
415
425
|
- lib/kward/tools/open_editor.rb
|
|
426
|
+
- lib/kward/tools/plugin_tool.rb
|
|
416
427
|
- lib/kward/tools/prepare_shell_command.rb
|
|
417
428
|
- lib/kward/tools/read_file.rb
|
|
418
429
|
- lib/kward/tools/read_skill.rb
|
|
@@ -425,10 +436,15 @@ files:
|
|
|
425
436
|
- lib/kward/tools/search/web_fetch.rb
|
|
426
437
|
- lib/kward/tools/summarize_file_structure.rb
|
|
427
438
|
- lib/kward/tools/tool_call.rb
|
|
439
|
+
- lib/kward/tools/typesafe_evaluate.rb
|
|
428
440
|
- lib/kward/tools/web_search.rb
|
|
441
|
+
- lib/kward/tools/workspace_targets.rb
|
|
429
442
|
- lib/kward/tools/write_file.rb
|
|
430
|
-
- lib/kward/
|
|
443
|
+
- lib/kward/transcripts/export_path.rb
|
|
444
|
+
- lib/kward/transcripts/markdown_transcript.rb
|
|
445
|
+
- lib/kward/transcripts/transcript_export.rb
|
|
431
446
|
- lib/kward/transport.rb
|
|
447
|
+
- lib/kward/transport/contracts.rb
|
|
432
448
|
- lib/kward/transport/gateway.rb
|
|
433
449
|
- lib/kward/transport/host.rb
|
|
434
450
|
- lib/kward/transport/manager.rb
|
|
@@ -437,13 +453,16 @@ files:
|
|
|
437
453
|
- lib/kward/transport/store.rb
|
|
438
454
|
- lib/kward/update_check.rb
|
|
439
455
|
- lib/kward/version.rb
|
|
440
|
-
- lib/kward/workspace.rb
|
|
441
|
-
- lib/kward/
|
|
456
|
+
- lib/kward/workspace/factory.rb
|
|
457
|
+
- lib/kward/workspace/files.rb
|
|
458
|
+
- lib/kward/workspace/git_worktree_manager.rb
|
|
459
|
+
- lib/kward/workspace/path_guard.rb
|
|
460
|
+
- lib/kward/workspace/workspace.rb
|
|
442
461
|
- lib/main.rb
|
|
443
462
|
- templates/default/fulldoc/html/css/kward.css
|
|
444
463
|
- templates/default/fulldoc/html/full_list.erb
|
|
445
464
|
- templates/default/fulldoc/html/images/kward_logo.png
|
|
446
|
-
- templates/default/fulldoc/html/images/
|
|
465
|
+
- templates/default/fulldoc/html/images/kward_screen_1.png
|
|
447
466
|
- templates/default/fulldoc/html/js/kward.js
|
|
448
467
|
- templates/default/fulldoc/html/setup.rb
|
|
449
468
|
- templates/default/kward_navigation.rb
|
data/lib/kward/tab_driver.rb
DELETED
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
# Namespace for the Kward CLI agent runtime.
|
|
2
|
-
module Kward
|
|
3
|
-
# Adapts a session-backed agent to the tab runtime interface. Plugin tab
|
|
4
|
-
# drivers implement the same small surface without becoming Kward sessions.
|
|
5
|
-
class SessionTabDriver
|
|
6
|
-
attr_reader :session, :agent, :worktree
|
|
7
|
-
|
|
8
|
-
def initialize(session:, agent:, worktree: nil)
|
|
9
|
-
@session = session
|
|
10
|
-
@agent = agent
|
|
11
|
-
@worktree = worktree
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def messages
|
|
15
|
-
agent.conversation.messages
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def conversation
|
|
19
|
-
agent.conversation
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def submit(input, display_input:, cancellation:, steering: nil, &block)
|
|
23
|
-
options = { cancellation: cancellation }
|
|
24
|
-
options[:display_input] = display_input unless display_input.nil?
|
|
25
|
-
options[:steering] = steering if steering
|
|
26
|
-
agent.ask(input, **options, &block)
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def descriptor
|
|
30
|
-
descriptor = { "kind" => "session", "session_path" => session.path }
|
|
31
|
-
descriptor["worktree"] = worktree.descriptor if worktree
|
|
32
|
-
descriptor
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def session?
|
|
36
|
-
true
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def supports_steering?
|
|
40
|
-
true
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
def assistant_label
|
|
44
|
-
nil
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
# Represents a persisted plugin tab whose provider plugin is unavailable.
|
|
49
|
-
# Its descriptor is retained so reinstalling the plugin restores the tab.
|
|
50
|
-
class UnavailableTabDriver
|
|
51
|
-
attr_reader :descriptor
|
|
52
|
-
|
|
53
|
-
def initialize(descriptor:, message:)
|
|
54
|
-
@descriptor = descriptor
|
|
55
|
-
@message = message
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
def messages
|
|
59
|
-
[{ role: "assistant", content: @message }]
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
def submit(*)
|
|
63
|
-
raise @message
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
def session?
|
|
67
|
-
false
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
def supports_steering?
|
|
71
|
-
false
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
def assistant_label
|
|
75
|
-
"Plugin"
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
# Dependencies made available to a plugin tab factory. The host deliberately
|
|
80
|
-
# exposes provider transport and frontend-neutral facts, not CLI internals or
|
|
81
|
-
# workspace session state.
|
|
82
|
-
class PluginTabHost
|
|
83
|
-
attr_reader :client, :workspace_root
|
|
84
|
-
|
|
85
|
-
def initialize(client:, workspace_root:)
|
|
86
|
-
@client = client
|
|
87
|
-
@workspace_root = workspace_root
|
|
88
|
-
end
|
|
89
|
-
end
|
|
90
|
-
end
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="700" viewBox="0 0 1200 700" role="img" aria-labelledby="title description">
|
|
2
|
-
<title id="title">Kward coding workflow</title>
|
|
3
|
-
<desc id="description">A Kward terminal session reads and edits the CLI, runs focused tests, and reports a successful authentication error-handling change.</desc>
|
|
4
|
-
<defs>
|
|
5
|
-
<linearGradient id="background" x1="0" y1="0" x2="1" y2="1">
|
|
6
|
-
<stop offset="0" stop-color="#11170f"/>
|
|
7
|
-
<stop offset="1" stop-color="#070b07"/>
|
|
8
|
-
</linearGradient>
|
|
9
|
-
<filter id="shadow" x="-20%" y="-20%" width="140%" height="140%">
|
|
10
|
-
<feDropShadow dx="0" dy="18" stdDeviation="22" flood-color="#000" flood-opacity=".45"/>
|
|
11
|
-
</filter>
|
|
12
|
-
</defs>
|
|
13
|
-
<rect width="1200" height="700" fill="#070b07"/>
|
|
14
|
-
<rect x="28" y="28" width="1144" height="644" rx="20" fill="url(#background)" stroke="#465035" stroke-width="2" filter="url(#shadow)"/>
|
|
15
|
-
<path d="M28 82h1144" stroke="#293024" stroke-width="2"/>
|
|
16
|
-
<circle cx="62" cy="55" r="8" fill="#ff5f57"/>
|
|
17
|
-
<circle cx="88" cy="55" r="8" fill="#febc2e"/>
|
|
18
|
-
<circle cx="114" cy="55" r="8" fill="#28c840"/>
|
|
19
|
-
<text x="600" y="63" text-anchor="middle" fill="#777c68" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="18">kward · ~/code/kward</text>
|
|
20
|
-
|
|
21
|
-
<g font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace">
|
|
22
|
-
<circle cx="65" cy="119" r="7" fill="#9caf35"/>
|
|
23
|
-
<text x="84" y="126" fill="#efe8d0" font-size="20" font-weight="700">Kward v0.83.0 is online.</text>
|
|
24
|
-
<text x="64" y="159" fill="#777c68" font-size="16">Workspace</text>
|
|
25
|
-
<text x="180" y="159" fill="#d2df62" font-size="16">kaiwood/kward</text>
|
|
26
|
-
<text x="64" y="184" fill="#777c68" font-size="16">Branch</text>
|
|
27
|
-
<text x="180" y="184" fill="#d2df62" font-size="16">main</text>
|
|
28
|
-
<text x="64" y="219" fill="#efe8d0" font-size="18" font-weight="700">State your business.</text>
|
|
29
|
-
|
|
30
|
-
<text x="64" y="276" fill="#afa88f" font-size="16" font-weight="700">You></text>
|
|
31
|
-
<text x="126" y="276" fill="#efe8d0" font-size="18">Make one-shot authentication failures concise and add focused tests.</text>
|
|
32
|
-
|
|
33
|
-
<rect x="64" y="309" width="1072" height="164" rx="12" fill="#0d120d" stroke="#293024"/>
|
|
34
|
-
<text x="88" y="342" fill="#9caf35" font-size="15" font-weight="700">TOOL ACTIVITY</text>
|
|
35
|
-
<text x="88" y="378" fill="#d2df62" font-size="17">Read</text>
|
|
36
|
-
<text x="174" y="378" fill="#efe8d0" font-size="17">lib/kward/cli.rb</text>
|
|
37
|
-
<text x="88" y="414" fill="#d2df62" font-size="17">Edit</text>
|
|
38
|
-
<text x="174" y="414" fill="#efe8d0" font-size="17">lib/kward/cli.rb</text>
|
|
39
|
-
<text x="1016" y="414" text-anchor="end" fill="#9caf35" font-size="16">+34</text>
|
|
40
|
-
<text x="88" y="450" fill="#d2df62" font-size="17">Test</text>
|
|
41
|
-
<text x="174" y="450" fill="#efe8d0" font-size="17">3 runs · 26 assertions</text>
|
|
42
|
-
<text x="1110" y="450" text-anchor="end" fill="#9caf35" font-size="17" font-weight="700">0 failures</text>
|
|
43
|
-
|
|
44
|
-
<text x="64" y="526" fill="#9caf35" font-size="16" font-weight="700">Kward></text>
|
|
45
|
-
<text x="154" y="526" fill="#efe8d0" font-size="18">Authentication failures now return an actionable message without a traceback.</text>
|
|
46
|
-
<text x="154" y="559" fill="#afa88f" font-size="17">Debug backtraces remain available with KWARD_DEBUG=1.</text>
|
|
47
|
-
|
|
48
|
-
<path d="M52 608h1096" stroke="#293024"/>
|
|
49
|
-
<text x="64" y="642" fill="#afa88f" font-size="15">main*</text>
|
|
50
|
-
<text x="1128" y="642" text-anchor="end" fill="#777c68" font-size="15">18% · Codex gpt-5.6-sol · medium</text>
|
|
51
|
-
</g>
|
|
52
|
-
</svg>
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|