bone-agent 1.4.0 → 2.0.1

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 (126) hide show
  1. package/bin/bone.js +39 -0
  2. package/package.json +25 -39
  3. package/LICENSE +0 -21
  4. package/README.md +0 -201
  5. package/bin/npm-wrapper.js +0 -235
  6. package/bin/rg +0 -0
  7. package/bin/rg.exe +0 -0
  8. package/config.yaml.example +0 -144
  9. package/prompts/main/ask_questions.md +0 -31
  10. package/prompts/main/batch_independent_calls.md +0 -5
  11. package/prompts/main/casual_interactions.md +0 -11
  12. package/prompts/main/code_references.md +0 -8
  13. package/prompts/main/communication_style.md +0 -12
  14. package/prompts/main/context_reliability.md +0 -12
  15. package/prompts/main/conversational_tool_calling.md +0 -15
  16. package/prompts/main/dream.md +0 -50
  17. package/prompts/main/editing_pattern.md +0 -13
  18. package/prompts/main/error_handling.md +0 -6
  19. package/prompts/main/exploration_pattern.md +0 -21
  20. package/prompts/main/intro.md +0 -1
  21. package/prompts/main/obsidian.md +0 -16
  22. package/prompts/main/obsidian_project.md +0 -79
  23. package/prompts/main/professional_objectivity.md +0 -3
  24. package/prompts/main/skills.md +0 -3
  25. package/prompts/main/targeted_searching.md +0 -10
  26. package/prompts/main/task_lists_pattern.md +0 -8
  27. package/prompts/main/temp_folder.md +0 -9
  28. package/prompts/main/think_before_acting.md +0 -10
  29. package/prompts/main/tone_and_style.md +0 -4
  30. package/prompts/main/tool_preferences.md +0 -24
  31. package/prompts/main/trust_subagent_context.md +0 -21
  32. package/prompts/main/when_to_use_sub_agent.md +0 -7
  33. package/prompts/micro/ask_questions.md +0 -1
  34. package/prompts/micro/batch_independent_calls.md +0 -1
  35. package/prompts/micro/casual_interactions.md +0 -1
  36. package/prompts/micro/code_references.md +0 -1
  37. package/prompts/micro/communication_style.md +0 -1
  38. package/prompts/micro/context_reliability.md +0 -1
  39. package/prompts/micro/conversational_tool_calling.md +0 -1
  40. package/prompts/micro/editing_pattern.md +0 -1
  41. package/prompts/micro/error_handling.md +0 -1
  42. package/prompts/micro/exploration_pattern.md +0 -1
  43. package/prompts/micro/intro.md +0 -1
  44. package/prompts/micro/obsidian.md +0 -4
  45. package/prompts/micro/obsidian_project.md +0 -5
  46. package/prompts/micro/professional_objectivity.md +0 -1
  47. package/prompts/micro/skills.md +0 -1
  48. package/prompts/micro/targeted_searching.md +0 -1
  49. package/prompts/micro/task_lists_pattern.md +0 -1
  50. package/prompts/micro/temp_folder.md +0 -1
  51. package/prompts/micro/think_before_acting.md +0 -5
  52. package/prompts/micro/tone_and_style.md +0 -1
  53. package/prompts/micro/tool_preferences.md +0 -1
  54. package/prompts/micro/trust_subagent_context.md +0 -1
  55. package/prompts/micro/when_to_use_sub_agent.md +0 -1
  56. package/requirements.txt +0 -9
  57. package/src/__init__.py +0 -11
  58. package/src/core/__init__.py +0 -1
  59. package/src/core/agentic.py +0 -1085
  60. package/src/core/chat_manager.py +0 -1577
  61. package/src/core/config_manager.py +0 -260
  62. package/src/core/cron.py +0 -578
  63. package/src/core/cron_allowlist.py +0 -118
  64. package/src/core/memory.py +0 -145
  65. package/src/core/metadata.py +0 -75
  66. package/src/core/retry.py +0 -71
  67. package/src/core/skills.py +0 -463
  68. package/src/core/sub_agent.py +0 -376
  69. package/src/core/tool_approval.py +0 -220
  70. package/src/core/tool_feedback.py +0 -789
  71. package/src/exceptions.py +0 -79
  72. package/src/llm/__init__.py +0 -1
  73. package/src/llm/client.py +0 -176
  74. package/src/llm/codex_provider.py +0 -350
  75. package/src/llm/config.py +0 -536
  76. package/src/llm/prompts.py +0 -494
  77. package/src/llm/providers.py +0 -438
  78. package/src/llm/streaming.py +0 -163
  79. package/src/llm/token_tracker.py +0 -399
  80. package/src/tools/__init__.py +0 -151
  81. package/src/tools/constants.py +0 -59
  82. package/src/tools/create_file.py +0 -136
  83. package/src/tools/directory.py +0 -389
  84. package/src/tools/edit.py +0 -549
  85. package/src/tools/file_reader.py +0 -322
  86. package/src/tools/helpers/__init__.py +0 -99
  87. package/src/tools/helpers/base.py +0 -599
  88. package/src/tools/helpers/converters.py +0 -44
  89. package/src/tools/helpers/file_helpers.py +0 -189
  90. package/src/tools/helpers/formatters.py +0 -411
  91. package/src/tools/helpers/loader.py +0 -145
  92. package/src/tools/helpers/parallel_executor.py +0 -231
  93. package/src/tools/helpers/path_resolver.py +0 -283
  94. package/src/tools/helpers/plugin_manifest.py +0 -185
  95. package/src/tools/obsidian.py +0 -96
  96. package/src/tools/review_sub_agent.py +0 -190
  97. package/src/tools/rg_search.py +0 -477
  98. package/src/tools/search_plugins.py +0 -177
  99. package/src/tools/select_option.py +0 -600
  100. package/src/tools/shell.py +0 -302
  101. package/src/tools/sub_agent.py +0 -139
  102. package/src/tools/task_list.py +0 -269
  103. package/src/tools/web_search.py +0 -61
  104. package/src/ui/__init__.py +0 -1
  105. package/src/ui/banner.py +0 -87
  106. package/src/ui/commands.py +0 -3131
  107. package/src/ui/displays.py +0 -239
  108. package/src/ui/loader.py +0 -284
  109. package/src/ui/main.py +0 -643
  110. package/src/ui/prompt_utils.py +0 -113
  111. package/src/ui/setting_selector.py +0 -590
  112. package/src/ui/setup_wizard.py +0 -294
  113. package/src/ui/sub_agent_panel.py +0 -234
  114. package/src/ui/tool_confirmation.py +0 -226
  115. package/src/utils/__init__.py +0 -1
  116. package/src/utils/citation_parser.py +0 -199
  117. package/src/utils/editor.py +0 -207
  118. package/src/utils/gitignore_filter.py +0 -149
  119. package/src/utils/logger.py +0 -254
  120. package/src/utils/paths.py +0 -30
  121. package/src/utils/result_parsers.py +0 -108
  122. package/src/utils/safe_commands.py +0 -243
  123. package/src/utils/settings.py +0 -195
  124. package/src/utils/user_message_logger.py +0 -120
  125. package/src/utils/validation.py +0 -201
  126. package/src/utils/web_search.py +0 -173
@@ -1,113 +0,0 @@
1
- """Shared prompt utilities for bone-agent CLI."""
2
-
3
- from prompt_toolkit import PromptSession
4
- from prompt_toolkit.key_binding import KeyBindings
5
- from prompt_toolkit.styles import Style
6
- from prompt_toolkit.formatted_text import HTML
7
- from llm.config import get_provider_config, APPROVE_MODE_LABELS, STATUS_BAR_SETTINGS
8
-
9
-
10
- def get_bottom_toolbar_text(chat_manager):
11
- """Return bottom toolbar text with model, approval mode, and token count.
12
-
13
- This is extracted from main.py for reuse in confirmation prompts.
14
-
15
- Args:
16
- chat_manager: ChatManager instance for state access
17
-
18
- Returns:
19
- HTML formatted toolbar text
20
- """
21
- provider_name = chat_manager.client.provider
22
- model = get_provider_config(provider_name).get("model", "Unknown")
23
-
24
- # Get token counts
25
- tokens_curr = chat_manager.token_tracker.current_context_tokens
26
- tokens_in = chat_manager.token_tracker.total_prompt_tokens
27
- tokens_out = chat_manager.token_tracker.total_completion_tokens
28
- tokens_total = chat_manager.token_tracker.total_tokens
29
-
30
- # Calculate cost — prefer upstream-reported actual cost (e.g. OpenRouter)
31
- # over locally estimated cost from token counts × static rates
32
- total_cost = chat_manager.token_tracker.get_display_cost(model)
33
-
34
- # Format model name (take last part if path)
35
- if "\\" in model or "/" in model:
36
- model_display = model.split("\\")[-1].split("/")[-1]
37
- else:
38
- model_display = model
39
-
40
- # Determine mode label and color
41
- mode_label = "Approval"
42
- val = APPROVE_MODE_LABELS.get(chat_manager.approve_mode, chat_manager.approve_mode.upper())
43
- colors = {"safe": "#6B8E23", "accept_edits": "#DAA520", "danger": "#CD5C5C"}
44
- mode_val_colored = f'<style fg="{colors.get(chat_manager.approve_mode, "white")}">{val}</style>'
45
-
46
- # Build toolbar string based on configuration
47
- # Model and mode are always shown
48
- parts = [f'<style fg="#606060">Model: {model_display or provider_name} - {mode_label}: </style>{mode_val_colored}']
49
-
50
- # Conditionally add token counts
51
- if STATUS_BAR_SETTINGS.get("show_curr_tokens", True):
52
- parts.append(f'<style fg="#606060"> | </style><style fg="#808080">curr</style><style fg="#606060">: {tokens_curr:,}</style>')
53
- if STATUS_BAR_SETTINGS.get("show_in_tokens", True):
54
- parts.append(f'<style fg="#606060"> | </style><style fg="#808080">in</style><style fg="#606060">: {tokens_in:,}</style>')
55
- if STATUS_BAR_SETTINGS.get("show_out_tokens", True):
56
- parts.append(f'<style fg="#606060"> | </style><style fg="#808080">out</style><style fg="#606060">: {tokens_out:,}</style>')
57
- if STATUS_BAR_SETTINGS.get("show_total_tokens", True):
58
- parts.append(f'<style fg="#606060"> | </style><style fg="#808080">total</style><style fg="#606060">: {tokens_total:,}</style>')
59
-
60
- # Conditionally add cost
61
- if STATUS_BAR_SETTINGS.get("show_cost", True):
62
- parts.append(f'<style fg="#606060"> | </style><style fg="#808080">cost</style><style fg="#606060">: ${total_cost:.4f}</style>')
63
-
64
- return HTML('\n' + ''.join(parts))
65
-
66
-
67
- TOOLBAR_STYLE = Style.from_dict({
68
- "bottom-toolbar": "bg:default fg:#FFFFFF noreverse",
69
- "bottom-toolbar.text": "bg:default fg:#FFFFFF noreverse",
70
- })
71
-
72
-
73
- def setup_common_bindings(chat_manager):
74
- """Create KeyBindings with shared logic (e.g., Shift+Tab for mode cycling)."""
75
- bindings = KeyBindings()
76
-
77
- @bindings.add('s-tab')
78
- def toggle_approve_mode(event):
79
- """Toggle between modes using Shift+Tab (blocked during thinking)."""
80
- # Import here to avoid circular imports and get current state
81
- import importlib
82
- main_module = importlib.import_module('ui.main')
83
- if main_module.INPUT_BLOCKED.get('blocked', False):
84
- return
85
- chat_manager.cycle_approve_mode()
86
- event.app.invalidate()
87
-
88
- return bindings
89
-
90
-
91
- def create_confirmation_prompt_session(chat_manager, message_func):
92
- """Create a PromptSession for confirmation prompts with key bindings and toolbar.
93
-
94
- This provides:
95
- - Shift+Tab to toggle approval mode
96
- - Bottom toolbar showing model, approval mode, and token counts
97
- - Dynamic prompt message that updates when mode changes
98
-
99
- Args:
100
- chat_manager: ChatManager instance for state access
101
- message_func: Function that returns the prompt message HTML (called on each redraw)
102
-
103
- Returns:
104
- PromptSession configured with bindings and toolbar
105
- """
106
- bindings = setup_common_bindings(chat_manager)
107
-
108
- return PromptSession(
109
- key_bindings=bindings,
110
- style=TOOLBAR_STYLE,
111
- bottom_toolbar=lambda: get_bottom_toolbar_text(chat_manager),
112
- message=message_func
113
- )