kward 0.71.0 → 0.73.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/.github/workflows/ci.yml +30 -0
- data/CHANGELOG.md +93 -0
- data/Gemfile.lock +2 -2
- data/README.md +4 -0
- data/doc/agent-tools.md +15 -6
- data/doc/authentication.md +22 -1
- data/doc/code-search.md +42 -2
- data/doc/configuration.md +106 -3
- data/doc/context-budgeting.md +136 -0
- data/doc/context-tools.md +16 -3
- data/doc/editor.md +415 -0
- data/doc/extensibility.md +16 -7
- data/doc/files.md +100 -0
- data/doc/getting-started.md +25 -18
- data/doc/git.md +123 -0
- data/doc/memory.md +24 -4
- data/doc/personas.md +34 -5
- data/doc/plugins.md +72 -1
- data/doc/releasing.md +37 -9
- data/doc/rpc.md +75 -5
- data/doc/session-management.md +35 -1
- data/doc/shell.md +332 -0
- data/doc/tabs.md +122 -0
- data/doc/troubleshooting.md +77 -1
- data/doc/usage.md +79 -7
- data/doc/web-search.md +12 -4
- data/doc/workspace-tools.md +51 -12
- data/examples/plugins/space_invaders.rb +377 -0
- data/lib/kward/agent.rb +1 -1
- data/lib/kward/ansi.rb +62 -23
- data/lib/kward/cli/commands.rb +33 -2
- data/lib/kward/cli/git.rb +150 -0
- data/lib/kward/cli/interactive_turn.rb +73 -9
- data/lib/kward/cli/plugins.rb +54 -4
- data/lib/kward/cli/prompt_interface.rb +32 -1
- data/lib/kward/cli/rendering.rb +4 -1
- data/lib/kward/cli/runtime_helpers.rb +268 -4
- data/lib/kward/cli/sessions.rb +2 -2
- data/lib/kward/cli/settings.rb +217 -9
- data/lib/kward/cli/slash_commands.rb +628 -2
- data/lib/kward/cli/tabs.rb +725 -0
- data/lib/kward/cli/tool_summaries.rb +6 -0
- data/lib/kward/cli.rb +150 -26
- data/lib/kward/clipboard.rb +2 -3
- data/lib/kward/compactor.rb +7 -19
- data/lib/kward/config_files.rb +145 -1
- data/lib/kward/context_budget_meter.rb +44 -0
- data/lib/kward/conversation.rb +12 -4
- data/lib/kward/editor_mode.rb +25 -0
- data/lib/kward/ekwsh.rb +559 -0
- data/lib/kward/image_attachments.rb +3 -1
- data/lib/kward/interactive_pty_runner.rb +151 -0
- data/lib/kward/local_command_runner.rb +155 -0
- data/lib/kward/local_pty_command_runner.rb +171 -0
- data/lib/kward/model/context_usage.rb +2 -2
- data/lib/kward/model/payloads.rb +2 -5
- data/lib/kward/plugin_registry.rb +61 -0
- data/lib/kward/project_files.rb +52 -0
- data/lib/kward/prompt_history.rb +84 -0
- data/lib/kward/prompt_interface/composer_controller.rb +69 -1
- data/lib/kward/prompt_interface/composer_renderer.rb +109 -13
- data/lib/kward/prompt_interface/composer_state.rb +96 -27
- data/lib/kward/prompt_interface/editor/auto_close_pairs.rb +123 -0
- data/lib/kward/prompt_interface/editor/auto_indent.rb +510 -0
- data/lib/kward/prompt_interface/editor/buffer.rb +109 -0
- data/lib/kward/prompt_interface/editor/controller.rb +1218 -0
- data/lib/kward/prompt_interface/editor/endwise.rb +321 -0
- data/lib/kward/prompt_interface/editor/file_marker.rb +40 -0
- data/lib/kward/prompt_interface/editor/indent_navigation.rb +61 -0
- data/lib/kward/prompt_interface/editor/kill_ring.rb +78 -0
- data/lib/kward/prompt_interface/editor/modes/emacs.rb +259 -0
- data/lib/kward/prompt_interface/editor/modes/modern.rb +354 -0
- data/lib/kward/prompt_interface/editor/modes/vibe.rb +1812 -0
- data/lib/kward/prompt_interface/editor/modes/vibe_insert_readline.rb +166 -0
- data/lib/kward/prompt_interface/editor/renderer.rb +244 -0
- data/lib/kward/prompt_interface/editor/search.rb +76 -0
- data/lib/kward/prompt_interface/editor/selections.rb +120 -0
- data/lib/kward/prompt_interface/editor/state.rb +1271 -0
- data/lib/kward/prompt_interface/editor/status_text.rb +23 -0
- data/lib/kward/prompt_interface/editor/syntax_highlighter.rb +422 -0
- data/lib/kward/prompt_interface/editor/undo_history.rb +46 -0
- data/lib/kward/prompt_interface/editor/vibe_state.rb +44 -0
- data/lib/kward/prompt_interface/file_overlay.rb +211 -0
- data/lib/kward/prompt_interface/git_prompt.rb +288 -0
- data/lib/kward/prompt_interface/interactive/controller.rb +186 -0
- data/lib/kward/prompt_interface/interactive/renderer.rb +71 -0
- data/lib/kward/prompt_interface/interactive/state.rb +62 -0
- data/lib/kward/prompt_interface/key_handler.rb +451 -57
- data/lib/kward/prompt_interface/overlay_renderer.rb +21 -2
- data/lib/kward/prompt_interface/project_browser.rb +524 -0
- data/lib/kward/prompt_interface/question_prompt.rb +99 -56
- data/lib/kward/prompt_interface/runtime_state.rb +43 -0
- data/lib/kward/prompt_interface/screen.rb +19 -3
- data/lib/kward/prompt_interface/selection_prompt.rb +10 -19
- data/lib/kward/prompt_interface/slash_overlay.rb +2 -0
- data/lib/kward/prompt_interface/stream_state.rb +7 -0
- data/lib/kward/prompt_interface/transcript_buffer.rb +6 -0
- data/lib/kward/prompt_interface.rb +366 -222
- data/lib/kward/prompts/commands.rb +9 -0
- data/lib/kward/prompts.rb +2 -0
- data/lib/kward/rpc/memory_methods.rb +83 -0
- data/lib/kward/rpc/server.rb +169 -83
- data/lib/kward/rpc/session_manager.rb +45 -121
- data/lib/kward/rpc/session_tree_rows.rb +9 -115
- data/lib/kward/rpc/tool_event_normalizer.rb +1 -1
- data/lib/kward/rpc/tool_metadata.rb +11 -0
- data/lib/kward/rpc/transcript_normalizer.rb +4 -39
- data/lib/kward/scratchpad_runner.rb +56 -0
- data/lib/kward/session_diff.rb +20 -3
- data/lib/kward/session_naming.rb +11 -0
- data/lib/kward/session_store.rb +44 -0
- data/lib/kward/session_tree_nodes.rb +136 -0
- data/lib/kward/session_tree_renderer.rb +9 -131
- data/lib/kward/tab_store.rb +47 -0
- data/lib/kward/terminal_keys.rb +84 -0
- data/lib/kward/terminal_sequences.rb +42 -0
- data/lib/kward/text_boundary.rb +25 -0
- data/lib/kward/tools/context_budget_stats.rb +54 -0
- data/lib/kward/tools/context_for_task.rb +204 -0
- data/lib/kward/tools/read_file.rb +8 -4
- data/lib/kward/tools/registry.rb +62 -16
- data/lib/kward/tools/tool_call.rb +10 -0
- data/lib/kward/version.rb +1 -1
- data/lib/kward/workers/git_guard.rb +93 -0
- data/lib/kward/workers/job.rb +99 -0
- data/lib/kward/workers/live_view.rb +49 -0
- data/lib/kward/workers/manager.rb +288 -0
- data/lib/kward/workers/queue_runner.rb +166 -0
- data/lib/kward/workers/queue_store.rb +112 -0
- data/lib/kward/workers/store.rb +72 -0
- data/lib/kward/workers/tool_policy.rb +23 -0
- data/lib/kward/workers/worker.rb +82 -0
- data/lib/kward/workers/write_lock.rb +38 -0
- data/lib/kward/workers.rb +10 -0
- data/lib/kward/workspace.rb +125 -87
- data/templates/default/fulldoc/html/css/kward.css +140 -36
- data/templates/default/fulldoc/html/images/kward_screen_1.png +0 -0
- data/templates/default/fulldoc/html/setup.rb +1 -0
- data/templates/default/kward_navigation.rb +12 -1
- data/templates/default/layout/html/layout.erb +23 -34
- data/templates/default/layout/html/setup.rb +6 -0
- metadata +67 -1
|
@@ -341,7 +341,41 @@ body.kward-docs a {
|
|
|
341
341
|
color: var(--kward-accent-bright);
|
|
342
342
|
}
|
|
343
343
|
|
|
344
|
-
body.kward-docs
|
|
344
|
+
body.kward-docs #content quote,
|
|
345
|
+
body.kward-docs #filecontents quote {
|
|
346
|
+
border-left: 3px solid var(--kward-accent);
|
|
347
|
+
color: var(--kward-ink);
|
|
348
|
+
display: block;
|
|
349
|
+
font-style: italic;
|
|
350
|
+
font-size: 18px;
|
|
351
|
+
line-height: 1.8;
|
|
352
|
+
margin: 28px 0;
|
|
353
|
+
padding: 8px 0 8px 46px;
|
|
354
|
+
position: relative;
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
body.kward-docs #content quote::before,
|
|
358
|
+
body.kward-docs #filecontents quote::before {
|
|
359
|
+
color: var(--kward-accent);
|
|
360
|
+
content: "\201C";
|
|
361
|
+
font-family: Georgia, "Times New Roman", serif;
|
|
362
|
+
font-size: 80px;
|
|
363
|
+
font-style: normal;
|
|
364
|
+
left: 4px;
|
|
365
|
+
line-height: 1;
|
|
366
|
+
opacity: 0.55;
|
|
367
|
+
position: absolute;
|
|
368
|
+
top: -10px;
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
body.kward-docs #content quote br,
|
|
372
|
+
body.kward-docs #filecontents quote br {
|
|
373
|
+
content: "";
|
|
374
|
+
display: block;
|
|
375
|
+
margin-bottom: 4px;
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
body.kward-docs #content pre {
|
|
345
379
|
background: var(--kward-code);
|
|
346
380
|
border: 1px solid rgba(149, 169, 52, 0.22);
|
|
347
381
|
border-radius: 10px;
|
|
@@ -537,11 +571,10 @@ body.kward-docs #footer {
|
|
|
537
571
|
}
|
|
538
572
|
|
|
539
573
|
/*
|
|
540
|
-
Hero tagline "swosh":
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
the left — both lines swap in sync. Pure CSS — no JS. The global
|
|
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
|
|
545
578
|
@media (prefers-reduced-motion) rule above collapses the animation to
|
|
546
579
|
the static original copy ("Your terminal. Your agent.") so it remains
|
|
547
580
|
accessible and calm.
|
|
@@ -566,68 +599,95 @@ body.kward-docs #footer {
|
|
|
566
599
|
will-change: transform, opacity;
|
|
567
600
|
}
|
|
568
601
|
|
|
569
|
-
/* The
|
|
570
|
-
the shorter
|
|
571
|
-
.kward-swosh-text-a
|
|
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 {
|
|
572
606
|
left: 0.08em;
|
|
573
607
|
position: absolute;
|
|
574
608
|
top: 0.16em;
|
|
575
609
|
}
|
|
576
610
|
|
|
577
611
|
.kward-swosh-text-a {
|
|
578
|
-
animation: kward-swosh-a
|
|
612
|
+
animation: kward-swosh-a 18s cubic-bezier(0.22, 0.61, 0.36, 1) infinite;
|
|
579
613
|
}
|
|
580
614
|
|
|
581
615
|
.kward-swosh-text-b {
|
|
582
|
-
animation: kward-swosh-b
|
|
616
|
+
animation: kward-swosh-b 18s cubic-bezier(0.22, 0.61, 0.36, 1) infinite;
|
|
583
617
|
position: relative;
|
|
584
618
|
}
|
|
585
619
|
|
|
620
|
+
.kward-swosh-text-e {
|
|
621
|
+
animation: kward-swosh-e 18s cubic-bezier(0.22, 0.61, 0.36, 1) infinite;
|
|
622
|
+
}
|
|
623
|
+
|
|
586
624
|
@keyframes kward-swosh-a {
|
|
587
|
-
0%,
|
|
588
|
-
|
|
589
|
-
|
|
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; }
|
|
590
628
|
100% { transform: translateX(0); opacity: 1; filter: none; }
|
|
591
629
|
}
|
|
592
630
|
|
|
593
631
|
@keyframes kward-swosh-b {
|
|
594
|
-
0%,
|
|
595
|
-
|
|
596
|
-
|
|
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; }
|
|
597
643
|
100% { transform: translateX(-140%); opacity: 0; filter: blur(3px); }
|
|
598
644
|
}
|
|
599
645
|
|
|
600
646
|
/*
|
|
601
|
-
Second line, mirrored
|
|
602
|
-
|
|
603
|
-
the first swosh. Both texts keep the accent-bright color of the
|
|
604
|
-
original "Your agent." span.
|
|
647
|
+
Second line, mirrored left-to-right. All texts keep the accent-bright
|
|
648
|
+
color of the original "Your agent." span.
|
|
605
649
|
*/
|
|
606
|
-
.kward-hero h1 .kward-swosh-text-c
|
|
607
|
-
|
|
650
|
+
.kward-hero h1 .kward-swosh-text-c,
|
|
651
|
+
.kward-hero h1 .kward-swosh-text-f {
|
|
608
652
|
color: var(--kward-accent-bright);
|
|
609
653
|
left: 0.08em;
|
|
610
654
|
position: absolute;
|
|
611
655
|
top: 0.16em;
|
|
612
656
|
}
|
|
613
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
|
+
|
|
614
662
|
.kward-hero h1 .kward-swosh-text-d {
|
|
615
|
-
animation: kward-swosh-d
|
|
663
|
+
animation: kward-swosh-d 18s cubic-bezier(0.22, 0.61, 0.36, 1) infinite;
|
|
616
664
|
color: var(--kward-accent-bright);
|
|
617
665
|
position: relative;
|
|
618
666
|
}
|
|
619
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
|
+
|
|
620
672
|
@keyframes kward-swosh-c {
|
|
621
|
-
0%,
|
|
622
|
-
|
|
623
|
-
|
|
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; }
|
|
624
676
|
100% { transform: translateX(0); opacity: 1; filter: none; }
|
|
625
677
|
}
|
|
626
678
|
|
|
627
679
|
@keyframes kward-swosh-d {
|
|
628
|
-
0%,
|
|
629
|
-
|
|
630
|
-
|
|
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; }
|
|
631
691
|
100% { transform: translateX(140%); opacity: 0; filter: blur(3px); }
|
|
632
692
|
}
|
|
633
693
|
|
|
@@ -819,6 +879,39 @@ body.kward-docs #footer {
|
|
|
819
879
|
margin: 0;
|
|
820
880
|
}
|
|
821
881
|
|
|
882
|
+
.kward-screen-card {
|
|
883
|
+
align-self: center;
|
|
884
|
+
background: linear-gradient(180deg, rgba(31, 38, 27, 0.98), rgba(5, 8, 5, 0.98));
|
|
885
|
+
border: 1px solid rgba(156, 175, 53, 0.42);
|
|
886
|
+
border-radius: 14px;
|
|
887
|
+
box-shadow: 0 24px 70px rgba(0, 0, 0, 0.34);
|
|
888
|
+
box-sizing: border-box;
|
|
889
|
+
max-width: 100%;
|
|
890
|
+
overflow: hidden;
|
|
891
|
+
padding-top: 34px;
|
|
892
|
+
position: relative;
|
|
893
|
+
}
|
|
894
|
+
|
|
895
|
+
.kward-screen-card::before {
|
|
896
|
+
background:
|
|
897
|
+
radial-gradient(circle at 12px 50%, #ff5f57 0 5px, transparent 5.5px),
|
|
898
|
+
radial-gradient(circle at 32px 50%, #febc2e 0 5px, transparent 5.5px),
|
|
899
|
+
radial-gradient(circle at 52px 50%, #28c840 0 5px, transparent 5.5px);
|
|
900
|
+
border-bottom: 1px solid rgba(149, 169, 52, 0.22);
|
|
901
|
+
content: "";
|
|
902
|
+
height: 34px;
|
|
903
|
+
left: 0;
|
|
904
|
+
position: absolute;
|
|
905
|
+
right: 0;
|
|
906
|
+
top: 0;
|
|
907
|
+
}
|
|
908
|
+
|
|
909
|
+
.kward-screen-card img {
|
|
910
|
+
display: block;
|
|
911
|
+
height: auto;
|
|
912
|
+
max-width: 100%;
|
|
913
|
+
}
|
|
914
|
+
|
|
822
915
|
.kward-capabilities {
|
|
823
916
|
padding: 28px;
|
|
824
917
|
}
|
|
@@ -1193,7 +1286,7 @@ body.kward-docs .kward-home #footer {
|
|
|
1193
1286
|
box-shadow: 0 24px 70px rgba(0, 0, 0, 0.48);
|
|
1194
1287
|
display: none;
|
|
1195
1288
|
gap: 16px;
|
|
1196
|
-
grid-template-columns: repeat(
|
|
1289
|
+
grid-template-columns: repeat(3, minmax(160px, 220px));
|
|
1197
1290
|
left: 50%;
|
|
1198
1291
|
max-width: calc(100vw - 48px);
|
|
1199
1292
|
opacity: 0;
|
|
@@ -1549,17 +1642,14 @@ body.kward-docs #main.kward-home {
|
|
|
1549
1642
|
justify-content: center;
|
|
1550
1643
|
}
|
|
1551
1644
|
|
|
1552
|
-
/* The generated YARD TOC is
|
|
1553
|
-
.kward-guide-page #toc {
|
|
1554
|
-
display: none;
|
|
1555
|
-
}
|
|
1645
|
+
/* The generated YARD TOC is shown on all docs pages. Use the `kward-no-toc` marker to suppress it per page. */
|
|
1556
1646
|
|
|
1557
1647
|
|
|
1558
1648
|
/* Code blocks own their copy action. */
|
|
1559
1649
|
body.kward-docs .code-copy-wrapper {
|
|
1650
|
+
display: flow-root;
|
|
1560
1651
|
margin: 16px 0 24px;
|
|
1561
1652
|
position: relative;
|
|
1562
|
-
width: 100%;
|
|
1563
1653
|
}
|
|
1564
1654
|
|
|
1565
1655
|
body.kward-docs .code-copy-wrapper pre,
|
|
@@ -1571,11 +1661,14 @@ body.kward-docs .code-copy-wrapper pre.code {
|
|
|
1571
1661
|
}
|
|
1572
1662
|
|
|
1573
1663
|
body.kward-docs .code-copy-wrapper .copy-code-button {
|
|
1664
|
+
background: #020503;
|
|
1665
|
+
box-shadow: 0 0 0 4px #020503;
|
|
1574
1666
|
float: none;
|
|
1575
1667
|
margin: 0;
|
|
1576
1668
|
position: absolute;
|
|
1577
1669
|
right: 12px;
|
|
1578
1670
|
top: 12px;
|
|
1671
|
+
z-index: 2;
|
|
1579
1672
|
}
|
|
1580
1673
|
|
|
1581
1674
|
|
|
@@ -1986,6 +2079,17 @@ body.kward-docs ul.toplevel a:active {
|
|
|
1986
2079
|
color: #000;
|
|
1987
2080
|
}
|
|
1988
2081
|
|
|
2082
|
+
body.kward-docs #content quote,
|
|
2083
|
+
body.kward-docs #filecontents quote {
|
|
2084
|
+
border-left-color: #999;
|
|
2085
|
+
color: #000;
|
|
2086
|
+
}
|
|
2087
|
+
|
|
2088
|
+
body.kward-docs #content quote::before,
|
|
2089
|
+
body.kward-docs #filecontents quote::before {
|
|
2090
|
+
color: #999;
|
|
2091
|
+
}
|
|
2092
|
+
|
|
1989
2093
|
.kward-page {
|
|
1990
2094
|
padding: 0;
|
|
1991
2095
|
max-width: none;
|
|
Binary file
|
|
@@ -9,6 +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/kward_screen_1.png', file('images/kward_screen_1.png', true))
|
|
12
13
|
end
|
|
13
14
|
|
|
14
15
|
def stylesheets_full_list
|
|
@@ -16,9 +16,19 @@ module KwardDocsNavigationData
|
|
|
16
16
|
"Feature guides",
|
|
17
17
|
[
|
|
18
18
|
["Sessions", "file.session-management.html"],
|
|
19
|
+
["Tabs", "file.tabs.html"],
|
|
19
20
|
["Memory", "file.memory.html"],
|
|
20
21
|
["Personas", "file.personas.html"]
|
|
21
22
|
]
|
|
23
|
+
],
|
|
24
|
+
[
|
|
25
|
+
"User Tools",
|
|
26
|
+
[
|
|
27
|
+
["Project files", "file.files.html"],
|
|
28
|
+
["Integrated Editor", "file.editor.html"],
|
|
29
|
+
["Git", "file.git.html"],
|
|
30
|
+
["Shell", "file.shell.html"]
|
|
31
|
+
]
|
|
22
32
|
]
|
|
23
33
|
].freeze
|
|
24
34
|
|
|
@@ -44,7 +54,8 @@ module KwardDocsNavigationData
|
|
|
44
54
|
["Workspace tools", "file.workspace-tools.html"],
|
|
45
55
|
["Web search", "file.web-search.html"],
|
|
46
56
|
["Code search", "file.code-search.html"],
|
|
47
|
-
["Context tools", "file.context-tools.html"]
|
|
57
|
+
["Context tools", "file.context-tools.html"],
|
|
58
|
+
["Context budgeting", "file.context-budgeting.html"]
|
|
48
59
|
]
|
|
49
60
|
]
|
|
50
61
|
].freeze
|
|
@@ -82,17 +82,19 @@
|
|
|
82
82
|
<div class="kward-hero-copy">
|
|
83
83
|
<p class="kward-eyebrow">⌘ Ruby CLI Coding Agent</p>
|
|
84
84
|
<h1>
|
|
85
|
-
<span class="kward-swosh" aria-label="Your terminal.">
|
|
85
|
+
<span class="kward-swosh" aria-label="Your terminal. Your RPC frontend. Your workflow.">
|
|
86
86
|
<span class="kward-swosh-text kward-swosh-text-a" aria-hidden="true">Your terminal.</span>
|
|
87
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>
|
|
88
89
|
</span>
|
|
89
90
|
<br>
|
|
90
|
-
<span class="kward-swosh" aria-label="Your agent.">
|
|
91
|
+
<span class="kward-swosh" aria-label="Your agent. Your LLM engine. Your harness.">
|
|
91
92
|
<span class="kward-swosh-text kward-swosh-text-c" aria-hidden="true">Your agent.</span>
|
|
92
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>
|
|
93
95
|
</span>
|
|
94
96
|
</h1>
|
|
95
|
-
<p class="kward-lede">Kward is
|
|
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>
|
|
96
98
|
<div class="kward-actions">
|
|
97
99
|
<a class="kward-primary-button" href="<%= url_for('file.README.html') %>">Get Started ›</a>
|
|
98
100
|
<a class="kward-secondary-button" href="https://github.com/kaiwood/kward" target="_blank" rel="noopener noreferrer">View on GitHub</a>
|
|
@@ -105,12 +107,12 @@
|
|
|
105
107
|
</section>
|
|
106
108
|
|
|
107
109
|
<section id="features" class="kward-feature-strip" aria-label="Feature summary">
|
|
108
|
-
<article><strong
|
|
109
|
-
<article><strong>▤</strong><h2>
|
|
110
|
-
<article><strong
|
|
111
|
-
<article><strong
|
|
112
|
-
<article><strong
|
|
113
|
-
<article><strong
|
|
110
|
+
<article><strong>⌘</strong><h2>Project-aware agent loop</h2><p>Inspect, reason, patch, verify.</p></article>
|
|
111
|
+
<article><strong>▤</strong><h2>Unix filter mode</h2><p>Pipe diffs, logs, and code through Kward.</p></article>
|
|
112
|
+
<article><strong>▰</strong><h2>Branchable sessions</h2><p>Resume, rewind, fork, compact, export.</p></article>
|
|
113
|
+
<article><strong>›_</strong><h2>Worker pipelines</h2><p>Queue focused agent tasks from the TUI.</p></article>
|
|
114
|
+
<article><strong>◎</strong><h2>Live source intelligence</h2><p>Search the web and read public repos.</p></article>
|
|
115
|
+
<article><strong>✣</strong><h2>Ruby-native extensions</h2><p>Shape Kward with plugins, skills, and prompts.</p></article>
|
|
114
116
|
</section>
|
|
115
117
|
|
|
116
118
|
<section class="kward-install-card">
|
|
@@ -122,36 +124,23 @@
|
|
|
122
124
|
<pre><code>kward init</code></pre>
|
|
123
125
|
<a href="<%= url_for('file.getting-started.html') %>">View full installation docs →</a>
|
|
124
126
|
</div>
|
|
125
|
-
<div class="kward-
|
|
126
|
-
<
|
|
127
|
-
<pre><code># Start an interactive chat
|
|
128
|
-
kward
|
|
129
|
-
|
|
130
|
-
# Show available commands and examples
|
|
131
|
-
kward help
|
|
132
|
-
|
|
133
|
-
# Sign in or save provider credentials
|
|
134
|
-
kward login
|
|
135
|
-
|
|
136
|
-
# Run one prompt and exit
|
|
137
|
-
kward "Explain this project"
|
|
138
|
-
|
|
139
|
-
# Use a specific working directory
|
|
140
|
-
kward --working-directory ~/code/project "Explain this project"</code></pre>
|
|
127
|
+
<div class="kward-screen-card">
|
|
128
|
+
<img src="<%= url_for('images/kward_screen_1.png') %>" alt="Kward terminal interface screenshot">
|
|
141
129
|
</div>
|
|
142
130
|
</section>
|
|
143
131
|
|
|
144
132
|
<section class="kward-capabilities">
|
|
145
|
-
<h2>⌘
|
|
133
|
+
<h2>⌘ Built for real development loops</h2>
|
|
146
134
|
<ul>
|
|
147
|
-
<li>
|
|
148
|
-
<li>
|
|
149
|
-
<li>
|
|
150
|
-
<li>
|
|
151
|
-
<li>
|
|
152
|
-
<li>
|
|
153
|
-
<li>
|
|
154
|
-
<li>
|
|
135
|
+
<li>Inspect, patch, verify, repeat against a real workspace.</li>
|
|
136
|
+
<li>Edit files in Kward’s built-in editor with syntax highlighting, search, undo, and familiar keybindings.</li>
|
|
137
|
+
<li>Review diffs, stage files, and commit changes from the integrated Git workflow.</li>
|
|
138
|
+
<li>Pipe diffs, logs, code, and generated text through Kward as a Unix filter.</li>
|
|
139
|
+
<li>Organize long-running work with tabs, sessions, rewind, forks, compaction, and exports.</li>
|
|
140
|
+
<li>Dispatch worker tasks, leave them running, review the results later.</li>
|
|
141
|
+
<li>Ground answers with live web search and public source repositories before guessing.</li>
|
|
142
|
+
<li>Shape Kward with memory, skills, prompts, personas, and trusted Ruby plugins.</li>
|
|
143
|
+
<li>Build custom UIs on top of Kward’s JSON-RPC backend.</li>
|
|
155
144
|
</ul>
|
|
156
145
|
</section>
|
|
157
146
|
|
|
@@ -31,12 +31,18 @@ module KwardDocsNavigation
|
|
|
31
31
|
"doc/authentication.md" => "file.authentication.html",
|
|
32
32
|
"doc/troubleshooting.md" => "file.troubleshooting.html",
|
|
33
33
|
"doc/session-management.md" => "file.session-management.html",
|
|
34
|
+
"doc/tabs.md" => "file.tabs.html",
|
|
35
|
+
"doc/files.md" => "file.files.html",
|
|
36
|
+
"doc/editor.md" => "file.editor.html",
|
|
37
|
+
"doc/git.md" => "file.git.html",
|
|
38
|
+
"doc/shell.md" => "file.shell.html",
|
|
34
39
|
"doc/memory.md" => "file.memory.html",
|
|
35
40
|
"doc/personas.md" => "file.personas.html",
|
|
36
41
|
"doc/extensibility.md" => "file.extensibility.html",
|
|
37
42
|
"doc/plugins.md" => "file.plugins.html",
|
|
38
43
|
"doc/agent-tools.md" => "file.agent-tools.html",
|
|
39
44
|
"doc/workspace-tools.md" => "file.workspace-tools.html",
|
|
45
|
+
"doc/context-budgeting.md" => "file.context-budgeting.html",
|
|
40
46
|
"doc/web-search.md" => "file.web-search.html",
|
|
41
47
|
"doc/code-search.md" => "file.code-search.html",
|
|
42
48
|
"doc/context-tools.md" => "file.context-tools.html",
|
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.73.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Kai Wood
|
|
@@ -116,6 +116,7 @@ executables:
|
|
|
116
116
|
extensions: []
|
|
117
117
|
extra_rdoc_files: []
|
|
118
118
|
files:
|
|
119
|
+
- ".github/workflows/ci.yml"
|
|
119
120
|
- ".github/workflows/pages.yml"
|
|
120
121
|
- ".yardopts"
|
|
121
122
|
- CHANGELOG.md
|
|
@@ -129,19 +130,26 @@ files:
|
|
|
129
130
|
- doc/authentication.md
|
|
130
131
|
- doc/code-search.md
|
|
131
132
|
- doc/configuration.md
|
|
133
|
+
- doc/context-budgeting.md
|
|
132
134
|
- doc/context-tools.md
|
|
135
|
+
- doc/editor.md
|
|
133
136
|
- doc/extensibility.md
|
|
137
|
+
- doc/files.md
|
|
134
138
|
- doc/getting-started.md
|
|
139
|
+
- doc/git.md
|
|
135
140
|
- doc/memory.md
|
|
136
141
|
- doc/personas.md
|
|
137
142
|
- doc/plugins.md
|
|
138
143
|
- doc/releasing.md
|
|
139
144
|
- doc/rpc.md
|
|
140
145
|
- doc/session-management.md
|
|
146
|
+
- doc/shell.md
|
|
147
|
+
- doc/tabs.md
|
|
141
148
|
- doc/troubleshooting.md
|
|
142
149
|
- doc/usage.md
|
|
143
150
|
- doc/web-search.md
|
|
144
151
|
- doc/workspace-tools.md
|
|
152
|
+
- examples/plugins/space_invaders.rb
|
|
145
153
|
- exe/kward
|
|
146
154
|
- kward.gemspec
|
|
147
155
|
- lib/kward.rb
|
|
@@ -158,6 +166,7 @@ files:
|
|
|
158
166
|
- lib/kward/cli/commands.rb
|
|
159
167
|
- lib/kward/cli/compaction.rb
|
|
160
168
|
- lib/kward/cli/doctor.rb
|
|
169
|
+
- lib/kward/cli/git.rb
|
|
161
170
|
- lib/kward/cli/interactive_turn.rb
|
|
162
171
|
- lib/kward/cli/memory_commands.rb
|
|
163
172
|
- lib/kward/cli/openrouter_commands.rb
|
|
@@ -170,16 +179,23 @@ files:
|
|
|
170
179
|
- lib/kward/cli/slash_commands.rb
|
|
171
180
|
- lib/kward/cli/stats.rb
|
|
172
181
|
- lib/kward/cli/sysprompt.rb
|
|
182
|
+
- lib/kward/cli/tabs.rb
|
|
173
183
|
- lib/kward/cli/tool_summaries.rb
|
|
174
184
|
- lib/kward/cli_transcript_formatter.rb
|
|
175
185
|
- lib/kward/clipboard.rb
|
|
176
186
|
- lib/kward/compaction/file_operation_tracker.rb
|
|
177
187
|
- lib/kward/compactor.rb
|
|
178
188
|
- lib/kward/config_files.rb
|
|
189
|
+
- lib/kward/context_budget_meter.rb
|
|
179
190
|
- lib/kward/conversation.rb
|
|
191
|
+
- lib/kward/editor_mode.rb
|
|
192
|
+
- lib/kward/ekwsh.rb
|
|
180
193
|
- lib/kward/events.rb
|
|
181
194
|
- lib/kward/export_path.rb
|
|
182
195
|
- lib/kward/image_attachments.rb
|
|
196
|
+
- lib/kward/interactive_pty_runner.rb
|
|
197
|
+
- lib/kward/local_command_runner.rb
|
|
198
|
+
- lib/kward/local_pty_command_runner.rb
|
|
183
199
|
- lib/kward/markdown_transcript.rb
|
|
184
200
|
- lib/kward/memory/manager.rb
|
|
185
201
|
- lib/kward/message_access.rb
|
|
@@ -197,14 +213,42 @@ files:
|
|
|
197
213
|
- lib/kward/pan/server.rb
|
|
198
214
|
- lib/kward/plugin_registry.rb
|
|
199
215
|
- lib/kward/private_file.rb
|
|
216
|
+
- lib/kward/project_files.rb
|
|
217
|
+
- lib/kward/prompt_history.rb
|
|
200
218
|
- lib/kward/prompt_interface.rb
|
|
201
219
|
- lib/kward/prompt_interface/banner.rb
|
|
202
220
|
- lib/kward/prompt_interface/composer_controller.rb
|
|
203
221
|
- lib/kward/prompt_interface/composer_renderer.rb
|
|
204
222
|
- lib/kward/prompt_interface/composer_state.rb
|
|
223
|
+
- lib/kward/prompt_interface/editor/auto_close_pairs.rb
|
|
224
|
+
- lib/kward/prompt_interface/editor/auto_indent.rb
|
|
225
|
+
- lib/kward/prompt_interface/editor/buffer.rb
|
|
226
|
+
- lib/kward/prompt_interface/editor/controller.rb
|
|
227
|
+
- lib/kward/prompt_interface/editor/endwise.rb
|
|
228
|
+
- lib/kward/prompt_interface/editor/file_marker.rb
|
|
229
|
+
- lib/kward/prompt_interface/editor/indent_navigation.rb
|
|
230
|
+
- lib/kward/prompt_interface/editor/kill_ring.rb
|
|
231
|
+
- lib/kward/prompt_interface/editor/modes/emacs.rb
|
|
232
|
+
- lib/kward/prompt_interface/editor/modes/modern.rb
|
|
233
|
+
- lib/kward/prompt_interface/editor/modes/vibe.rb
|
|
234
|
+
- lib/kward/prompt_interface/editor/modes/vibe_insert_readline.rb
|
|
235
|
+
- lib/kward/prompt_interface/editor/renderer.rb
|
|
236
|
+
- lib/kward/prompt_interface/editor/search.rb
|
|
237
|
+
- lib/kward/prompt_interface/editor/selections.rb
|
|
238
|
+
- lib/kward/prompt_interface/editor/state.rb
|
|
239
|
+
- lib/kward/prompt_interface/editor/status_text.rb
|
|
240
|
+
- lib/kward/prompt_interface/editor/syntax_highlighter.rb
|
|
241
|
+
- lib/kward/prompt_interface/editor/undo_history.rb
|
|
242
|
+
- lib/kward/prompt_interface/editor/vibe_state.rb
|
|
243
|
+
- lib/kward/prompt_interface/file_overlay.rb
|
|
244
|
+
- lib/kward/prompt_interface/git_prompt.rb
|
|
245
|
+
- lib/kward/prompt_interface/interactive/controller.rb
|
|
246
|
+
- lib/kward/prompt_interface/interactive/renderer.rb
|
|
247
|
+
- lib/kward/prompt_interface/interactive/state.rb
|
|
205
248
|
- lib/kward/prompt_interface/key_handler.rb
|
|
206
249
|
- lib/kward/prompt_interface/layout.rb
|
|
207
250
|
- lib/kward/prompt_interface/overlay_renderer.rb
|
|
251
|
+
- lib/kward/prompt_interface/project_browser.rb
|
|
208
252
|
- lib/kward/prompt_interface/prompt_renderer.rb
|
|
209
253
|
- lib/kward/prompt_interface/question_prompt.rb
|
|
210
254
|
- lib/kward/prompt_interface/runtime_state.rb
|
|
@@ -221,6 +265,7 @@ files:
|
|
|
221
265
|
- lib/kward/rpc/attachment_normalizer.rb
|
|
222
266
|
- lib/kward/rpc/auth_manager.rb
|
|
223
267
|
- lib/kward/rpc/config_manager.rb
|
|
268
|
+
- lib/kward/rpc/memory_methods.rb
|
|
224
269
|
- lib/kward/rpc/prompt_bridge.rb
|
|
225
270
|
- lib/kward/rpc/redactor.rb
|
|
226
271
|
- lib/kward/rpc/runtime_payloads.rb
|
|
@@ -233,20 +278,29 @@ files:
|
|
|
233
278
|
- lib/kward/rpc/tool_metadata.rb
|
|
234
279
|
- lib/kward/rpc/transcript_normalizer.rb
|
|
235
280
|
- lib/kward/rpc/transport.rb
|
|
281
|
+
- lib/kward/scratchpad_runner.rb
|
|
236
282
|
- lib/kward/session_diff.rb
|
|
283
|
+
- lib/kward/session_naming.rb
|
|
237
284
|
- lib/kward/session_store.rb
|
|
238
285
|
- lib/kward/session_trash.rb
|
|
286
|
+
- lib/kward/session_tree_nodes.rb
|
|
239
287
|
- lib/kward/session_tree_renderer.rb
|
|
240
288
|
- lib/kward/session_tree_tool_display.rb
|
|
241
289
|
- lib/kward/skills/registry.rb
|
|
242
290
|
- lib/kward/starter_pack_installer.rb
|
|
243
291
|
- lib/kward/steering.rb
|
|
292
|
+
- lib/kward/tab_store.rb
|
|
244
293
|
- lib/kward/telemetry/logger.rb
|
|
245
294
|
- lib/kward/telemetry/stats.rb
|
|
295
|
+
- lib/kward/terminal_keys.rb
|
|
296
|
+
- lib/kward/terminal_sequences.rb
|
|
297
|
+
- lib/kward/text_boundary.rb
|
|
246
298
|
- lib/kward/tool_output_compactor.rb
|
|
247
299
|
- lib/kward/tools/ask_user_question.rb
|
|
248
300
|
- lib/kward/tools/base.rb
|
|
249
301
|
- lib/kward/tools/code_search.rb
|
|
302
|
+
- lib/kward/tools/context_budget_stats.rb
|
|
303
|
+
- lib/kward/tools/context_for_task.rb
|
|
250
304
|
- lib/kward/tools/edit_file.rb
|
|
251
305
|
- lib/kward/tools/fetch_content.rb
|
|
252
306
|
- lib/kward/tools/fetch_raw.rb
|
|
@@ -265,11 +319,23 @@ files:
|
|
|
265
319
|
- lib/kward/tools/write_file.rb
|
|
266
320
|
- lib/kward/transcript_export.rb
|
|
267
321
|
- lib/kward/version.rb
|
|
322
|
+
- lib/kward/workers.rb
|
|
323
|
+
- lib/kward/workers/git_guard.rb
|
|
324
|
+
- lib/kward/workers/job.rb
|
|
325
|
+
- lib/kward/workers/live_view.rb
|
|
326
|
+
- lib/kward/workers/manager.rb
|
|
327
|
+
- lib/kward/workers/queue_runner.rb
|
|
328
|
+
- lib/kward/workers/queue_store.rb
|
|
329
|
+
- lib/kward/workers/store.rb
|
|
330
|
+
- lib/kward/workers/tool_policy.rb
|
|
331
|
+
- lib/kward/workers/worker.rb
|
|
332
|
+
- lib/kward/workers/write_lock.rb
|
|
268
333
|
- lib/kward/workspace.rb
|
|
269
334
|
- lib/main.rb
|
|
270
335
|
- templates/default/fulldoc/html/css/kward.css
|
|
271
336
|
- templates/default/fulldoc/html/full_list.erb
|
|
272
337
|
- templates/default/fulldoc/html/images/kward_logo.png
|
|
338
|
+
- templates/default/fulldoc/html/images/kward_screen_1.png
|
|
273
339
|
- templates/default/fulldoc/html/js/kward.js
|
|
274
340
|
- templates/default/fulldoc/html/setup.rb
|
|
275
341
|
- templates/default/kward_navigation.rb
|