bone-agent 1.3.3 → 2.0.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.
Files changed (121) 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 -184
  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 -141
  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 -36
  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/targeted_searching.md +0 -10
  25. package/prompts/main/task_lists_pattern.md +0 -8
  26. package/prompts/main/temp_folder.md +0 -9
  27. package/prompts/main/think_before_acting.md +0 -10
  28. package/prompts/main/tone_and_style.md +0 -4
  29. package/prompts/main/tool_preferences.md +0 -24
  30. package/prompts/main/trust_subagent_context.md +0 -21
  31. package/prompts/main/when_to_use_sub_agent.md +0 -7
  32. package/prompts/micro/ask_questions.md +0 -1
  33. package/prompts/micro/batch_independent_calls.md +0 -1
  34. package/prompts/micro/casual_interactions.md +0 -1
  35. package/prompts/micro/code_references.md +0 -1
  36. package/prompts/micro/communication_style.md +0 -1
  37. package/prompts/micro/context_reliability.md +0 -1
  38. package/prompts/micro/conversational_tool_calling.md +0 -1
  39. package/prompts/micro/editing_pattern.md +0 -1
  40. package/prompts/micro/error_handling.md +0 -1
  41. package/prompts/micro/exploration_pattern.md +0 -1
  42. package/prompts/micro/intro.md +0 -1
  43. package/prompts/micro/obsidian.md +0 -4
  44. package/prompts/micro/obsidian_project.md +0 -5
  45. package/prompts/micro/professional_objectivity.md +0 -1
  46. package/prompts/micro/targeted_searching.md +0 -1
  47. package/prompts/micro/task_lists_pattern.md +0 -1
  48. package/prompts/micro/temp_folder.md +0 -1
  49. package/prompts/micro/think_before_acting.md +0 -5
  50. package/prompts/micro/tone_and_style.md +0 -1
  51. package/prompts/micro/tool_preferences.md +0 -1
  52. package/prompts/micro/trust_subagent_context.md +0 -1
  53. package/prompts/micro/when_to_use_sub_agent.md +0 -1
  54. package/requirements.txt +0 -9
  55. package/src/__init__.py +0 -11
  56. package/src/core/__init__.py +0 -1
  57. package/src/core/agentic.py +0 -985
  58. package/src/core/chat_manager.py +0 -1564
  59. package/src/core/config_manager.py +0 -253
  60. package/src/core/cron.py +0 -582
  61. package/src/core/cron_allowlist.py +0 -118
  62. package/src/core/memory.py +0 -145
  63. package/src/core/retry.py +0 -71
  64. package/src/core/sub_agent.py +0 -326
  65. package/src/core/tool_approval.py +0 -220
  66. package/src/core/tool_feedback.py +0 -778
  67. package/src/exceptions.py +0 -79
  68. package/src/llm/__init__.py +0 -1
  69. package/src/llm/client.py +0 -171
  70. package/src/llm/config.py +0 -492
  71. package/src/llm/prompts.py +0 -489
  72. package/src/llm/providers.py +0 -436
  73. package/src/llm/streaming.py +0 -163
  74. package/src/llm/token_tracker.py +0 -384
  75. package/src/tools/__init__.py +0 -212
  76. package/src/tools/constants.py +0 -59
  77. package/src/tools/create_file.py +0 -136
  78. package/src/tools/directory.py +0 -389
  79. package/src/tools/edit.py +0 -545
  80. package/src/tools/file_reader.py +0 -322
  81. package/src/tools/helpers/__init__.py +0 -105
  82. package/src/tools/helpers/base.py +0 -550
  83. package/src/tools/helpers/converters.py +0 -44
  84. package/src/tools/helpers/file_helpers.py +0 -189
  85. package/src/tools/helpers/formatters.py +0 -411
  86. package/src/tools/helpers/loader.py +0 -231
  87. package/src/tools/helpers/parallel_executor.py +0 -231
  88. package/src/tools/helpers/path_resolver.py +0 -232
  89. package/src/tools/helpers/plugin_manifest.py +0 -156
  90. package/src/tools/obsidian.py +0 -96
  91. package/src/tools/review_sub_agent.py +0 -189
  92. package/src/tools/rg_search.py +0 -460
  93. package/src/tools/search_plugins.py +0 -109
  94. package/src/tools/select_option.py +0 -600
  95. package/src/tools/shell.py +0 -302
  96. package/src/tools/sub_agent.py +0 -139
  97. package/src/tools/task_list.py +0 -269
  98. package/src/tools/web_search.py +0 -61
  99. package/src/ui/__init__.py +0 -1
  100. package/src/ui/banner.py +0 -87
  101. package/src/ui/commands.py +0 -2809
  102. package/src/ui/displays.py +0 -214
  103. package/src/ui/loader.py +0 -284
  104. package/src/ui/main.py +0 -647
  105. package/src/ui/prompt_utils.py +0 -113
  106. package/src/ui/setting_selector.py +0 -590
  107. package/src/ui/setup_wizard.py +0 -294
  108. package/src/ui/sub_agent_panel.py +0 -234
  109. package/src/ui/tool_confirmation.py +0 -215
  110. package/src/utils/__init__.py +0 -1
  111. package/src/utils/citation_parser.py +0 -199
  112. package/src/utils/editor.py +0 -158
  113. package/src/utils/gitignore_filter.py +0 -149
  114. package/src/utils/logger.py +0 -254
  115. package/src/utils/paths.py +0 -30
  116. package/src/utils/result_parsers.py +0 -108
  117. package/src/utils/safe_commands.py +0 -243
  118. package/src/utils/settings.py +0 -191
  119. package/src/utils/user_message_logger.py +0 -120
  120. package/src/utils/validation.py +0 -191
  121. 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
- )