openclacky 0.7.0 → 0.7.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 (70) hide show
  1. checksums.yaml +4 -4
  2. data/.clacky/skills/commit/SKILL.md +29 -4
  3. data/.clackyrules +3 -1
  4. data/CHANGELOG.md +46 -2
  5. data/docs/HOW-TO-USE-CN.md +96 -0
  6. data/docs/HOW-TO-USE.md +94 -0
  7. data/docs/config.example.yml +27 -0
  8. data/docs/deploy_subagent_design.md +540 -0
  9. data/docs/time_machine_design.md +247 -0
  10. data/docs/why-openclacky.md +0 -1
  11. data/lib/clacky/agent/cost_tracker.rb +180 -0
  12. data/lib/clacky/agent/llm_caller.rb +54 -0
  13. data/lib/clacky/{message_compressor.rb → agent/message_compressor.rb} +12 -36
  14. data/lib/clacky/agent/message_compressor_helper.rb +534 -0
  15. data/lib/clacky/agent/session_serializer.rb +152 -0
  16. data/lib/clacky/agent/skill_manager.rb +138 -0
  17. data/lib/clacky/agent/system_prompt_builder.rb +96 -0
  18. data/lib/clacky/agent/time_machine.rb +199 -0
  19. data/lib/clacky/agent/tool_executor.rb +434 -0
  20. data/lib/clacky/{tool_registry.rb → agent/tool_registry.rb} +1 -1
  21. data/lib/clacky/agent.rb +251 -1370
  22. data/lib/clacky/agent_config.rb +447 -10
  23. data/lib/clacky/cli.rb +279 -98
  24. data/lib/clacky/client.rb +12 -2
  25. data/lib/clacky/default_skills/code-explorer/SKILL.md +41 -0
  26. data/lib/clacky/default_skills/deploy/SKILL.md +13 -0
  27. data/lib/clacky/default_skills/deploy/scripts/rails_deploy.rb +383 -0
  28. data/lib/clacky/default_skills/deploy/tools/check_health.rb +116 -0
  29. data/lib/clacky/default_skills/deploy/tools/execute_deployment.rb +174 -0
  30. data/lib/clacky/default_skills/deploy/tools/fetch_runtime_logs.rb +67 -0
  31. data/lib/clacky/default_skills/deploy/tools/list_services.rb +80 -0
  32. data/lib/clacky/default_skills/deploy/tools/report_deploy_status.rb +67 -0
  33. data/lib/clacky/default_skills/deploy/tools/set_deploy_variables.rb +138 -0
  34. data/lib/clacky/json_ui_controller.rb +195 -0
  35. data/lib/clacky/skill.rb +48 -7
  36. data/lib/clacky/skill_loader.rb +7 -0
  37. data/lib/clacky/tools/edit.rb +105 -48
  38. data/lib/clacky/tools/file_reader.rb +44 -73
  39. data/lib/clacky/tools/invoke_skill.rb +89 -0
  40. data/lib/clacky/tools/list_tasks.rb +54 -0
  41. data/lib/clacky/tools/redo_task.rb +41 -0
  42. data/lib/clacky/tools/safe_shell.rb +1 -1
  43. data/lib/clacky/tools/shell.rb +74 -62
  44. data/lib/clacky/tools/trash_manager.rb +1 -1
  45. data/lib/clacky/tools/undo_task.rb +32 -0
  46. data/lib/clacky/tools/web_fetch.rb +2 -1
  47. data/lib/clacky/ui2/components/command_suggestions.rb +13 -3
  48. data/lib/clacky/ui2/components/inline_input.rb +23 -2
  49. data/lib/clacky/ui2/components/input_area.rb +65 -21
  50. data/lib/clacky/ui2/components/modal_component.rb +214 -62
  51. data/lib/clacky/ui2/layout_manager.rb +75 -25
  52. data/lib/clacky/ui2/line_editor.rb +23 -2
  53. data/lib/clacky/ui2/markdown_renderer.rb +31 -10
  54. data/lib/clacky/ui2/screen_buffer.rb +2 -0
  55. data/lib/clacky/ui2/ui_controller.rb +260 -32
  56. data/lib/clacky/ui2.rb +2 -0
  57. data/lib/clacky/ui_interface.rb +50 -0
  58. data/lib/clacky/utils/arguments_parser.rb +31 -3
  59. data/lib/clacky/version.rb +1 -1
  60. data/lib/clacky.rb +18 -9
  61. metadata +37 -12
  62. data/lib/clacky/compression/base.rb +0 -231
  63. data/lib/clacky/compression/standard.rb +0 -339
  64. data/lib/clacky/config.rb +0 -117
  65. /data/lib/clacky/{hook_manager.rb → agent/hook_manager.rb} +0 -0
  66. /data/lib/clacky/{progress_indicator.rb → ui2/progress_indicator.rb} +0 -0
  67. /data/lib/clacky/{thinking_verbs.rb → ui2/thinking_verbs.rb} +0 -0
  68. /data/lib/clacky/{gitignore_parser.rb → utils/gitignore_parser.rb} +0 -0
  69. /data/lib/clacky/{model_pricing.rb → utils/model_pricing.rb} +0 -0
  70. /data/lib/clacky/{trash_directory.rb → utils/trash_directory.rb} +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 93be1b075712d3d861045372db397b88a33918d3f9b7e7572d19b0e0b3400da7
4
- data.tar.gz: 401b05cf051d54189884860275030b1c71716ae8864231ea2da6bfd1f900f3e6
3
+ metadata.gz: d00dc4e2243d55c56a3f5df9838517d7588a96137b18348c750e42374d15f7d8
4
+ data.tar.gz: 0e0fb9b1fce48ac1fb5542e3fb4e5b3744aecb4cd9a51bd15ffa6ada3f892212
5
5
  SHA512:
6
- metadata.gz: bca76237b75f2bb9de6b2f9a82238f2174a6de1fa9a9ab377675652e6ec616836e32ef74c2eeb0fadd7cbc417baf00c56277b8dc8299593e133dd014174572f2
7
- data.tar.gz: 93a13538a3f50ec847f9db2452d9e99ad5e87e86571e088601fb3329544b5446e55b60bf0cdb72acc53475735a5441152250e8e7ed34bcc14f30a4f819c49098
6
+ metadata.gz: ab6df815f041afa4fa586547299a61562e544de3ae2425b2e9c7a7c9256c05e7b0f79dc824553ccd810939bf3cf3d6e1376b32f4d8a92acedb03efedcfa1e552
7
+ data.tar.gz: a6409dd1ab5456f70ae2f6f576f209d47bb4140956caa14ee18815d91c3c901415219212cc73138e959b43531be9f450938fd8e767e63c1075444c520147fa7e
@@ -9,6 +9,17 @@ user-invocable: true
9
9
 
10
10
  This skill helps users create well-structured, semantic git commits by analyzing changes and suggesting appropriate commit messages.
11
11
 
12
+ ## ⚠️ CRITICAL REQUIREMENT: SINGLE-LINE COMMITS ONLY
13
+
14
+ **ALL commit messages created by this skill MUST be single-line only.**
15
+
16
+ - ✅ DO: `git commit -m "feat: add user authentication"`
17
+ - ❌ DON'T: Multi-line commits with body text
18
+ - ❌ DON'T: Multiple `-m` flags
19
+ - ❌ DON'T: Commit messages with `\n` or additional paragraphs
20
+
21
+ Keep commits concise and focused. If more detail is needed, suggest adding it separately in PR descriptions or documentation.
22
+
12
23
  ## Overview
13
24
 
14
25
  This skill automates the process of reviewing git changes and creating meaningful, conventional commits following the semantic commit format (feat/fix/chore/test).
@@ -62,12 +73,14 @@ Based on the analysis, generate commit messages following the conventional commi
62
73
  - `style`: Code style changes (formatting, whitespace)
63
74
  - `perf`: Performance improvements
64
75
 
65
- **Guidelines**:
76
+ **CRITICAL GUIDELINES**:
77
+ - **MUST BE SINGLE-LINE**: Commit messages MUST be a single line only. DO NOT create multi-line commit messages.
66
78
  - Keep messages concise (ideally under 50 characters)
67
79
  - Use imperative mood ("add feature" not "added feature")
68
80
  - Don't end with a period
69
81
  - Be specific but brief
70
82
  - One logical change per commit
83
+ - If more detail is needed, suggest adding it in PR description or commit body separately, but the initial commit MUST be single-line
71
84
 
72
85
  **Examples**:
73
86
  - `feat: add user authentication`
@@ -120,10 +133,16 @@ For each approved commit:
120
133
  # Stage specific files
121
134
  git add <file1> <file2> ...
122
135
 
123
- # Create commit with message
136
+ # Create commit with SINGLE-LINE message only
124
137
  git commit -m "<type>: <description>"
125
138
  ```
126
139
 
140
+ **IMPORTANT**:
141
+ - Use ONLY `git commit -m "single line message"` format
142
+ - DO NOT use multi-line commits with additional body text
143
+ - DO NOT use `-m` flag multiple times
144
+ - Keep the commit message as a single, concise line
145
+
127
146
  Provide feedback after each commit:
128
147
  - Confirm successful commit
129
148
  - Show commit hash
@@ -151,8 +170,12 @@ git diff <file>
151
170
  # Stage files
152
171
  git add <file>
153
172
 
154
- # Create commit
155
- git commit -m "message"
173
+ # Create commit (SINGLE-LINE only)
174
+ git commit -m "type: single line description"
175
+
176
+ # NEVER use multi-line format like:
177
+ # git commit -m "title" -m "body" ❌ DON'T DO THIS
178
+ # git commit -m "title\n\nbody" ❌ DON'T DO THIS
156
179
 
157
180
  # View commit history
158
181
  git log --oneline -n 5
@@ -203,10 +226,12 @@ Next steps: Review with 'git log' or push with 'git push'
203
226
  ## Best Practices
204
227
 
205
228
  ### Commit Message Rules
229
+ - **MUST be single-line only** - Never use multi-line commit messages
206
230
  - Start with lowercase (except proper nouns)
207
231
  - Use present tense imperative
208
232
  - Be specific but concise
209
233
  - Focus on "what" and "why", not "how"
234
+ - Maximum 72 characters for the single line
210
235
 
211
236
  ### Commit Organization
212
237
  - One logical change per commit
data/.clackyrules CHANGED
@@ -25,7 +25,8 @@ It provides chat functionality and autonomous AI agent capabilities with tool us
25
25
  - **IMPORTANT**: All code comments must be written in English
26
26
  - Add descriptive comments for complex logic
27
27
  - Use clear, self-documenting code with English naming
28
- - **IMPORTANT**: Always use inline `private` with method definitions (e.g., `private def method_name`). Do NOT use standalone `private` keyword
28
+ - **IMPORTANT**: Always use inline `private` with instance method definitions (e.g., `private def method_name`). Do NOT use standalone `private` keyword
29
+ - **IMPORTANT**: For class methods (`def self.method_name`), do NOT use `private`. Class methods should be public
29
30
 
30
31
  ### Architecture Patterns
31
32
  - Tools inherit from `Clacky::Tools::Base`
@@ -45,6 +46,7 @@ It provides chat functionality and autonomous AI agent capabilities with tool us
45
46
  - **IMPORTANT**: When developing new features, write RSpec tests as needed and ensure they pass
46
47
  - **DO NOT** write custom test scripts unless explicitly requested by the user
47
48
  - **DO NOT** create markdown documentation unless explicitly requested by the user
49
+ - **IMPORTANT**: When testing clacky commands or debugging, always use `bundle exec ruby bin/clacky` instead of the global `clacky` command. The global command loads the system-installed gem version (e.g., `openclacky-0.7.0`), not your local development code
48
50
 
49
51
  ### Tool Development
50
52
  When adding new tools:
data/CHANGELOG.md CHANGED
@@ -7,6 +7,50 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.7.0] - 2026-02-06
11
+
12
+ This is a major release with significant improvements to skill system, conversation memory management, and user experience.
13
+
14
+ ### 🎯 Major Features
15
+
16
+ **Skill System**
17
+ - Complete skill framework allowing users to extend AI capabilities with custom workflows
18
+ - Skills can be invoked using shorthand syntax (e.g., `/commit`, `/gem-release`)
19
+ - Support for user-created skills in `.clacky/skills/` directory
20
+ - Built-in skills: commit (smart Git helper), gem-release (automated publishing)
21
+
22
+ **Memory Compression**
23
+ - Intelligent message compression to handle long conversations efficiently
24
+ - LLM-based compression strategy that preserves context while reducing tokens
25
+ - Automatic compression triggered based on message count and token usage
26
+ - Significant reduction in API costs for extended sessions
27
+
28
+ **Configuration Improvements**
29
+ - API key validation on startup with helpful prompts
30
+ - Interactive configuration UI with modal components
31
+ - Source tracking for configuration (file, environment, defaults)
32
+ - Better error messages and user guidance
33
+
34
+ ### Added
35
+ - Request user feedback tool for interactive prompts during execution
36
+ - Version display in welcome banner
37
+ - File size limits for file_reader tool to prevent performance issues
38
+ - Debug logging throughout the codebase
39
+
40
+ ### Improved
41
+ - CLI output formatting and readability
42
+ - Error handling with comprehensive debug information
43
+ - Test coverage with 367 passing tests
44
+ - Tool call output optimization for cleaner logs
45
+
46
+ ### Changed
47
+ - Simplified CLI architecture by removing unused code
48
+ - Enhanced modal component with new configuration features
49
+
50
+ ### Fixed
51
+ - Message compression edge cases
52
+ - Various test spec improvements
53
+
10
54
  ## [0.6.4] - 2026-02-03
11
55
 
12
56
  ### Added
@@ -176,7 +220,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
176
220
 
177
221
  ### Added
178
222
  - **Agent Mode**: Autonomous AI agent with tool execution capabilities
179
- - **Built-in Tools**:
223
+ - **Built-in Tools**:
180
224
  - `safe_shell` - Safe shell command execution with security checks
181
225
  - `file_reader` - Read file contents
182
226
  - `write` - Create/overwrite files with diff preview
@@ -188,7 +232,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
188
232
  - `todo_manager` - Task planning and tracking
189
233
  - `run_project` - Project dev server management
190
234
  - **Session Management**: Save, resume, and list conversation sessions
191
- - **Permission Modes**:
235
+ - **Permission Modes**:
192
236
  - `auto_approve` - Automatically execute all tools
193
237
  - `confirm_safes` - Auto-execute safe operations, confirm risky ones
194
238
  - `confirm_edits` - Confirm file edits only
@@ -0,0 +1,96 @@
1
+ # OpenClacky 使用指南
2
+
3
+ ## 安装
4
+
5
+ ```bash
6
+ gem install openclacky
7
+ ```
8
+
9
+ **系统要求:** Ruby >= 3.1
10
+
11
+ ## 快速开始
12
+
13
+ ### 1. 启动 Clacky
14
+
15
+ ```bash
16
+ clacky
17
+ ```
18
+
19
+ ### 2. 配置 API Key(首次使用)
20
+
21
+ 在聊天界面中输入:
22
+
23
+ ```
24
+ /config
25
+ ```
26
+
27
+ 然后按提示设置你的 API key:
28
+ - **OpenAI**:从 https://platform.openai.com/api-keys 获取
29
+ - **Anthropic**:从 https://console.anthropic.com/ 获取
30
+ - **MiniMax**:国内推荐,https://platform.minimaxi.com/
31
+ - **OpenRouter**:聚合多个 AI 模型,https://openrouter.ai/
32
+
33
+ ### 3. 开始对话
34
+
35
+ 直接在聊天框输入你的问题或需求:
36
+
37
+ ```
38
+ 帮我写一个解析 CSV 文件的 Ruby 脚本
39
+ ```
40
+
41
+ ```
42
+ 创建一个网页爬虫提取文章标题
43
+ ```
44
+
45
+ ## 核心功能
46
+
47
+ ### 🎯 自主代理模式
48
+ Clacky 可以自动执行复杂任务,内置多种工具:
49
+ - **文件操作**:读取、写入、编辑、搜索文件
50
+ - **网页访问**:浏览网页、搜索信息
51
+ - **代码执行**:运行 shell 命令、测试代码
52
+ - **项目管理**:Git 操作、测试、部署
53
+
54
+ ### 🔌 技能系统
55
+ 使用简写命令调用强大的技能:
56
+
57
+ ```
58
+ /commit # 智能 Git 提交助手
59
+ /gem-release # 自动化 gem 发布流程
60
+ ```
61
+
62
+ 你还可以在 `.clacky/skills/` 目录创建自己的技能!
63
+
64
+ ### 💬 智能记忆管理
65
+ - **自动压缩**长对话内容
66
+ - **保留上下文**同时降低 token 成本
67
+ - **智能总结**对话历史
68
+
69
+ ### ⚙️ 简单配置
70
+ - 交互式设置向导
71
+ - 支持多个 API 提供商
72
+ - 成本追踪和使用限制
73
+ - 常用场景的智能默认值
74
+
75
+ ## 聊天中的常用命令
76
+
77
+ ```
78
+ /config # 配置 API 设置
79
+ /help # 显示可用命令
80
+ /skills # 列出可用技能
81
+ ```
82
+
83
+ ## 为什么选择 OpenClacky?
84
+
85
+ ✅ **安装简单** - 一条命令安装,立即开始对话
86
+ ✅ **功能强大** - 自主执行复杂任务
87
+ ✅ **可扩展** - 为你的工作流创建自定义技能
88
+ ✅ **省钱高效** - 智能记忆压缩节省 token 费用
89
+ ✅ **多平台** - 支持 OpenAI、Anthropic、MiniMax、OpenRouter 等
90
+ ✅ **质量保证** - 367+ 测试用例确保可靠性
91
+
92
+ ## 了解更多
93
+
94
+ - GitHub:https://github.com/clacky-ai/open-clacky
95
+ - 问题反馈:https://github.com/clacky-ai/open-clacky/issues
96
+ - 当前版本:0.7.0
@@ -0,0 +1,94 @@
1
+ # How to Use OpenClacky
2
+
3
+ ## Installation
4
+
5
+ ```bash
6
+ gem install openclacky
7
+ ```
8
+
9
+ **Requirements:** Ruby >= 3.1
10
+
11
+ ## Quick Start
12
+
13
+ ### 1. Start Clacky
14
+
15
+ ```bash
16
+ clacky
17
+ ```
18
+
19
+ ### 2. Configure API Key (First Time)
20
+
21
+ In the chat interface, type:
22
+
23
+ ```
24
+ /config
25
+ ```
26
+
27
+ Then follow the prompts to set your API key:
28
+ - **OpenAI**: Get key from https://platform.openai.com/api-keys
29
+ - **Anthropic**: Get key from https://console.anthropic.com/
30
+
31
+ ### 3. Start Chatting
32
+
33
+ Just type your questions or requests in the chat:
34
+
35
+ ```
36
+ Help me write a Ruby script to parse CSV files
37
+ ```
38
+
39
+ ```
40
+ Create a web scraper for extracting article titles
41
+ ```
42
+
43
+ ## Key Features
44
+
45
+ ### 🎯 Autonomous Agent Mode
46
+ Clacky can automatically execute complex tasks using built-in tools:
47
+ - **File Operations**: Read, write, edit, search files
48
+ - **Web Access**: Browse and search the web
49
+ - **Code Execution**: Run shell commands and test code
50
+ - **Project Management**: Git operations, testing, deployment
51
+
52
+ ### 🔌 Skill System
53
+ Use powerful skills with simple shorthand commands:
54
+
55
+ ```
56
+ /commit # Smart git commit helper
57
+ /gem-release # Automated gem publishing
58
+ ```
59
+
60
+ Create your own skills in `.clacky/skills/` directory!
61
+
62
+ ### 💬 Smart Memory Management
63
+ - **Automatic compression** for long conversations
64
+ - **Context preservation** while reducing token costs
65
+ - **Intelligent summarization** of conversation history
66
+
67
+ ### ⚙️ Easy Configuration
68
+ - Interactive setup wizard
69
+ - Support for multiple API providers
70
+ - Cost tracking and usage limits
71
+ - Smart defaults for common use cases
72
+
73
+ ## Common Commands in Chat
74
+
75
+ ```
76
+ /config # Configure API settings
77
+ /help # Show available commands
78
+ /skills # List available skills
79
+ ```
80
+
81
+ ## Why Choose OpenClacky?
82
+
83
+ ✅ **Simple Setup** - Just `gem install` and start chatting
84
+ ✅ **Powerful Agent** - Executes complex tasks autonomously
85
+ ✅ **Extensible** - Create custom skills for your workflows
86
+ ✅ **Cost-Effective** - Smart memory compression saves tokens
87
+ ✅ **Multi-Provider** - Works with OpenAI and Anthropic
88
+ ✅ **Well-Tested** - 367+ passing tests ensure reliability
89
+
90
+ ## Learn More
91
+
92
+ - GitHub: https://github.com/clacky-ai/open-clacky
93
+ - Report Issues: https://github.com/clacky-ai/open-clacky/issues
94
+ - Version: 0.7.0
@@ -0,0 +1,27 @@
1
+ # Clacky Configuration File
2
+ # This is a top-level array of model configurations
3
+ # The first model in the array is used as the default
4
+
5
+ # Claude Sonnet 4 (default - first in array)
6
+ - model: "claude-sonnet-4"
7
+ api_key: "your-api-key-here"
8
+ base_url: "https://api.anthropic.com"
9
+ anthropic_format: true
10
+
11
+ # Claude Opus 4
12
+ - model: "claude-opus-4"
13
+ api_key: "your-api-key-here"
14
+ base_url: "https://api.anthropic.com"
15
+ anthropic_format: true
16
+
17
+ # OpenAI GPT-4
18
+ - model: "gpt-4"
19
+ api_key: "your-openai-api-key-here"
20
+ base_url: "https://api.openai.com/v1"
21
+ anthropic_format: false
22
+
23
+ # Custom model (e.g., local or third-party)
24
+ - model: "custom-model"
25
+ api_key: "your-custom-api-key"
26
+ base_url: "https://your-api-endpoint.com"
27
+ anthropic_format: false