minion-code 0.1.0__py3-none-any.whl → 0.1.2__py3-none-any.whl

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 (115) hide show
  1. examples/cli_entrypoint.py +60 -0
  2. examples/{agent_with_todos.py → components/agent_with_todos.py} +58 -47
  3. examples/{message_response_children_demo.py → components/message_response_children_demo.py} +61 -55
  4. examples/components/messages_component.py +199 -0
  5. examples/file_freshness_example.py +22 -22
  6. examples/file_watching_example.py +32 -26
  7. examples/interruptible_tui.py +921 -3
  8. examples/repl_tui.py +129 -0
  9. examples/skills/example_usage.py +57 -0
  10. examples/start.py +173 -0
  11. minion_code/__init__.py +1 -1
  12. minion_code/acp_server/__init__.py +34 -0
  13. minion_code/acp_server/agent.py +539 -0
  14. minion_code/acp_server/hooks.py +354 -0
  15. minion_code/acp_server/main.py +194 -0
  16. minion_code/acp_server/permissions.py +142 -0
  17. minion_code/acp_server/test_client.py +104 -0
  18. minion_code/adapters/__init__.py +22 -0
  19. minion_code/adapters/output_adapter.py +207 -0
  20. minion_code/adapters/rich_adapter.py +169 -0
  21. minion_code/adapters/textual_adapter.py +254 -0
  22. minion_code/agents/__init__.py +2 -2
  23. minion_code/agents/code_agent.py +517 -104
  24. minion_code/agents/hooks.py +378 -0
  25. minion_code/cli.py +538 -429
  26. minion_code/cli_simple.py +665 -0
  27. minion_code/commands/__init__.py +136 -29
  28. minion_code/commands/clear_command.py +19 -46
  29. minion_code/commands/help_command.py +33 -49
  30. minion_code/commands/history_command.py +37 -55
  31. minion_code/commands/model_command.py +194 -0
  32. minion_code/commands/quit_command.py +9 -12
  33. minion_code/commands/resume_command.py +181 -0
  34. minion_code/commands/skill_command.py +89 -0
  35. minion_code/commands/status_command.py +48 -73
  36. minion_code/commands/tools_command.py +54 -52
  37. minion_code/commands/version_command.py +34 -69
  38. minion_code/components/ConfirmDialog.py +430 -0
  39. minion_code/components/Message.py +318 -97
  40. minion_code/components/MessageResponse.py +30 -29
  41. minion_code/components/Messages.py +351 -0
  42. minion_code/components/PromptInput.py +499 -245
  43. minion_code/components/__init__.py +24 -17
  44. minion_code/const.py +7 -0
  45. minion_code/screens/REPL.py +1453 -469
  46. minion_code/screens/__init__.py +1 -1
  47. minion_code/services/__init__.py +20 -20
  48. minion_code/services/event_system.py +19 -14
  49. minion_code/services/file_freshness_service.py +223 -170
  50. minion_code/skills/__init__.py +25 -0
  51. minion_code/skills/skill.py +128 -0
  52. minion_code/skills/skill_loader.py +198 -0
  53. minion_code/skills/skill_registry.py +177 -0
  54. minion_code/subagents/__init__.py +31 -0
  55. minion_code/subagents/builtin/__init__.py +30 -0
  56. minion_code/subagents/builtin/claude_code_guide.py +32 -0
  57. minion_code/subagents/builtin/explore.py +36 -0
  58. minion_code/subagents/builtin/general_purpose.py +19 -0
  59. minion_code/subagents/builtin/plan.py +61 -0
  60. minion_code/subagents/subagent.py +116 -0
  61. minion_code/subagents/subagent_loader.py +147 -0
  62. minion_code/subagents/subagent_registry.py +151 -0
  63. minion_code/tools/__init__.py +8 -2
  64. minion_code/tools/bash_tool.py +16 -3
  65. minion_code/tools/file_edit_tool.py +201 -104
  66. minion_code/tools/file_read_tool.py +183 -26
  67. minion_code/tools/file_write_tool.py +17 -3
  68. minion_code/tools/glob_tool.py +23 -2
  69. minion_code/tools/grep_tool.py +229 -21
  70. minion_code/tools/ls_tool.py +28 -3
  71. minion_code/tools/multi_edit_tool.py +89 -84
  72. minion_code/tools/python_interpreter_tool.py +9 -1
  73. minion_code/tools/skill_tool.py +210 -0
  74. minion_code/tools/task_tool.py +287 -0
  75. minion_code/tools/todo_read_tool.py +28 -24
  76. minion_code/tools/todo_write_tool.py +82 -65
  77. minion_code/{types.py → type_defs.py} +15 -2
  78. minion_code/utils/__init__.py +45 -17
  79. minion_code/utils/config.py +610 -0
  80. minion_code/utils/history.py +114 -0
  81. minion_code/utils/logs.py +53 -0
  82. minion_code/utils/mcp_loader.py +153 -55
  83. minion_code/utils/output_truncator.py +233 -0
  84. minion_code/utils/session_storage.py +369 -0
  85. minion_code/utils/todo_file_utils.py +26 -22
  86. minion_code/utils/todo_storage.py +43 -33
  87. minion_code/web/__init__.py +9 -0
  88. minion_code/web/adapters/__init__.py +5 -0
  89. minion_code/web/adapters/web_adapter.py +524 -0
  90. minion_code/web/api/__init__.py +7 -0
  91. minion_code/web/api/chat.py +277 -0
  92. minion_code/web/api/interactions.py +136 -0
  93. minion_code/web/api/sessions.py +135 -0
  94. minion_code/web/server.py +149 -0
  95. minion_code/web/services/__init__.py +5 -0
  96. minion_code/web/services/session_manager.py +420 -0
  97. minion_code-0.1.2.dist-info/METADATA +476 -0
  98. minion_code-0.1.2.dist-info/RECORD +111 -0
  99. {minion_code-0.1.0.dist-info → minion_code-0.1.2.dist-info}/WHEEL +1 -1
  100. minion_code-0.1.2.dist-info/entry_points.txt +6 -0
  101. tests/test_adapter.py +67 -0
  102. tests/test_adapter_simple.py +79 -0
  103. tests/test_file_read_tool.py +144 -0
  104. tests/test_readonly_tools.py +0 -2
  105. tests/test_skills.py +441 -0
  106. examples/advance_tui.py +0 -508
  107. examples/rich_example.py +0 -4
  108. examples/simple_file_watching.py +0 -57
  109. examples/simple_tui.py +0 -267
  110. examples/simple_usage.py +0 -69
  111. minion_code-0.1.0.dist-info/METADATA +0 -350
  112. minion_code-0.1.0.dist-info/RECORD +0 -59
  113. minion_code-0.1.0.dist-info/entry_points.txt +0 -4
  114. {minion_code-0.1.0.dist-info → minion_code-0.1.2.dist-info}/licenses/LICENSE +0 -0
  115. {minion_code-0.1.0.dist-info → minion_code-0.1.2.dist-info}/top_level.txt +0 -0
@@ -27,13 +27,21 @@ class InputMode(Enum):
27
27
  @dataclass
28
28
  class MessageContent:
29
29
  """Represents message content - can be text or structured content"""
30
+
30
31
  content: Union[str, List[Dict[str, Any]]]
31
32
  type: str = "text"
32
33
 
34
+ def __init__(
35
+ self, content: Union[str, List[Dict[str, Any]]] = "", type: str = "text"
36
+ ):
37
+ self.content = content
38
+ self.type = type
39
+
33
40
 
34
41
  @dataclass
35
42
  class Message:
36
43
  """Core message structure equivalent to TypeScript MessageType"""
44
+
37
45
  uuid: str = field(default_factory=lambda: str(uuid.uuid4()))
38
46
  type: MessageType = MessageType.USER
39
47
  message: MessageContent = field(default_factory=lambda: MessageContent(""))
@@ -44,6 +52,7 @@ class Message:
44
52
  @dataclass
45
53
  class ToolUseConfirm:
46
54
  """Tool use confirmation context"""
55
+
47
56
  tool_name: str
48
57
  parameters: Dict[str, Any]
49
58
  on_confirm: Any # Callable[[], None]
@@ -53,6 +62,7 @@ class ToolUseConfirm:
53
62
  @dataclass
54
63
  class BinaryFeedbackContext:
55
64
  """Binary feedback context for comparing two assistant messages"""
65
+
56
66
  m1: Message
57
67
  m2: Message
58
68
  resolve: Any # Callable[[str], None]
@@ -61,6 +71,7 @@ class BinaryFeedbackContext:
61
71
  @dataclass
62
72
  class ToolJSXContext:
63
73
  """Tool JSX rendering context"""
74
+
64
75
  jsx: Optional[Any] = None
65
76
  should_hide_prompt_input: bool = False
66
77
 
@@ -68,6 +79,7 @@ class ToolJSXContext:
68
79
  @dataclass
69
80
  class ModelInfo:
70
81
  """Model information display"""
82
+
71
83
  name: str
72
84
  provider: str
73
85
  context_length: int
@@ -77,12 +89,13 @@ class ModelInfo:
77
89
 
78
90
  class REPLConfig:
79
91
  """Configuration equivalent to getGlobalConfig()"""
92
+
80
93
  def __init__(self):
81
94
  self.verbose: bool = False
82
95
  self.debug: bool = False
83
96
  self.safe_mode: bool = False
84
97
  self.has_acknowledged_cost_threshold: bool = False
85
98
  self.model_name: str = "claude-3-5-sonnet-20241022"
86
-
99
+
87
100
  def get_model_name(self, context: str = "main") -> str:
88
- return self.model_name
101
+ return self.model_name
@@ -22,23 +22,51 @@ from .todo_storage import (
22
22
  clear_todos,
23
23
  )
24
24
 
25
+ from .output_truncator import (
26
+ truncate_output,
27
+ check_file_size_before_read,
28
+ check_mcp_output,
29
+ save_large_output,
30
+ cleanup_cache,
31
+ OutputTooLargeError,
32
+ MCPContentTooLargeError,
33
+ FileTooLargeError,
34
+ MAX_OUTPUT_SIZE,
35
+ MAX_FILE_SIZE,
36
+ MAX_TOKEN_LIMIT,
37
+ CACHE_DIR,
38
+ )
39
+
25
40
  __all__ = [
26
41
  # Todo file utilities
27
- 'get_todo_file_path',
28
- 'get_default_storage_dir',
29
- 'ensure_storage_dir_exists',
30
- 'list_todo_files',
31
- 'extract_agent_id_from_todo_file',
32
- 'is_todo_file',
42
+ "get_todo_file_path",
43
+ "get_default_storage_dir",
44
+ "ensure_storage_dir_exists",
45
+ "list_todo_files",
46
+ "extract_agent_id_from_todo_file",
47
+ "is_todo_file",
33
48
  # Todo storage
34
- 'TodoItem',
35
- 'TodoStatus',
36
- 'TodoPriority',
37
- 'TodoStorage',
38
- 'get_todos',
39
- 'set_todos',
40
- 'add_todo',
41
- 'update_todo',
42
- 'remove_todo',
43
- 'clear_todos',
44
- ]
49
+ "TodoItem",
50
+ "TodoStatus",
51
+ "TodoPriority",
52
+ "TodoStorage",
53
+ "get_todos",
54
+ "set_todos",
55
+ "add_todo",
56
+ "update_todo",
57
+ "remove_todo",
58
+ "clear_todos",
59
+ # Output truncator
60
+ "truncate_output",
61
+ "check_file_size_before_read",
62
+ "check_mcp_output",
63
+ "save_large_output",
64
+ "cleanup_cache",
65
+ "OutputTooLargeError",
66
+ "MCPContentTooLargeError",
67
+ "FileTooLargeError",
68
+ "MAX_OUTPUT_SIZE",
69
+ "MAX_FILE_SIZE",
70
+ "MAX_TOKEN_LIMIT",
71
+ "CACHE_DIR",
72
+ ]