kolega-code 0.1.0__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.
- kolega_code/__init__.py +151 -0
- kolega_code/agent/__init__.py +42 -0
- kolega_code/agent/baseagent.py +998 -0
- kolega_code/agent/browseragent.py +123 -0
- kolega_code/agent/coder.py +157 -0
- kolega_code/agent/common.py +41 -0
- kolega_code/agent/compression.py +81 -0
- kolega_code/agent/context.py +112 -0
- kolega_code/agent/conversation.py +408 -0
- kolega_code/agent/generalagent.py +146 -0
- kolega_code/agent/investigationagent.py +123 -0
- kolega_code/agent/planningagent.py +187 -0
- kolega_code/agent/prompt_provider.py +196 -0
- kolega_code/agent/prompt_templates/agents/browser.j2 +102 -0
- kolega_code/agent/prompt_templates/agents/coder_cli_mode.j2 +127 -0
- kolega_code/agent/prompt_templates/agents/general.j2 +68 -0
- kolega_code/agent/prompt_templates/agents/investigation.j2 +72 -0
- kolega_code/agent/prompt_templates/common/frontend_guidance.md +36 -0
- kolega_code/agent/prompt_templates/common/kolega_md_instructions.md +14 -0
- kolega_code/agent/prompt_templates/environment_variables/workspace_env_vars.md +11 -0
- kolega_code/agent/prompt_templates/template_guidance/expo-template.md +379 -0
- kolega_code/agent/prompt_templates/template_guidance/html-website-template.md +3 -0
- kolega_code/agent/prompt_templates/template_guidance/mern-stack-template.md +3 -0
- kolega_code/agent/prompt_templates/template_guidance/react-vite-shadcdn-template.md +182 -0
- kolega_code/agent/prompts.py +192 -0
- kolega_code/agent/tests/__init__.py +0 -0
- kolega_code/agent/tests/llm/__init__.py +0 -0
- kolega_code/agent/tests/llm/test_anthropic_token_counting.py +633 -0
- kolega_code/agent/tests/llm/test_billing_openai_cache.py +74 -0
- kolega_code/agent/tests/llm/test_client.py +773 -0
- kolega_code/agent/tests/llm/test_dashscope_mapping.py +32 -0
- kolega_code/agent/tests/llm/test_error_boundary.py +322 -0
- kolega_code/agent/tests/llm/test_exceptions.py +249 -0
- kolega_code/agent/tests/llm/test_instrumented_client.py +536 -0
- kolega_code/agent/tests/llm/test_instrumented_client_integration.py +547 -0
- kolega_code/agent/tests/llm/test_langfuse_normalization.py +39 -0
- kolega_code/agent/tests/llm/test_model_specs.py +17 -0
- kolega_code/agent/tests/llm/test_openai_cached_tokens.py +58 -0
- kolega_code/agent/tests/llm/test_openai_cached_tokens_stream.py +74 -0
- kolega_code/agent/tests/llm/test_openai_message_conversion.py +30 -0
- kolega_code/agent/tests/llm/test_openai_token_counting.py +687 -0
- kolega_code/agent/tests/llm/test_tool_execution_ids.py +193 -0
- kolega_code/agent/tests/services/__init__.py +1 -0
- kolega_code/agent/tests/services/test_browser.py +447 -0
- kolega_code/agent/tests/services/test_browser_parity.py +353 -0
- kolega_code/agent/tests/services/test_file_system.py +699 -0
- kolega_code/agent/tests/services/test_sandbox_terminal_input.py +98 -0
- kolega_code/agent/tests/services/test_terminal.py +154 -0
- kolega_code/agent/tests/services/test_terminal_command_tracking.py +385 -0
- kolega_code/agent/tests/services/test_terminal_state_serializer.py +262 -0
- kolega_code/agent/tests/test_agent_tools_inventory.py +267 -0
- kolega_code/agent/tests/test_base_agent.py +1942 -0
- kolega_code/agent/tests/test_coder_attachments.py +330 -0
- kolega_code/agent/tests/test_coder_prompt_extensions.py +61 -0
- kolega_code/agent/tests/test_commands.py +179 -0
- kolega_code/agent/tests/test_duplicate_tool_results.py +556 -0
- kolega_code/agent/tests/test_empty_message_handling.py +48 -0
- kolega_code/agent/tests/test_general_agent.py +242 -0
- kolega_code/agent/tests/test_html.py +320 -0
- kolega_code/agent/tests/test_parallel_tool_calls.py +291 -0
- kolega_code/agent/tests/test_planning_agent.py +227 -0
- kolega_code/agent/tests/test_prompt_provider.py +271 -0
- kolega_code/agent/tests/test_tool_registry.py +102 -0
- kolega_code/agent/tests/test_tools.py +549 -0
- kolega_code/agent/tests/tool_backend/__init__.py +0 -0
- kolega_code/agent/tests/tool_backend/test_agent_tool.py +356 -0
- kolega_code/agent/tests/tool_backend/test_base_tool.py +147 -0
- kolega_code/agent/tests/tool_backend/test_browser_tool.py +335 -0
- kolega_code/agent/tests/tool_backend/test_build_tool.py +93 -0
- kolega_code/agent/tests/tool_backend/test_create_file_tool.py +115 -0
- kolega_code/agent/tests/tool_backend/test_glob_tool.py +196 -0
- kolega_code/agent/tests/tool_backend/test_glob_tool_sandbox_parity.py +230 -0
- kolega_code/agent/tests/tool_backend/test_list_directory_tool.py +292 -0
- kolega_code/agent/tests/tool_backend/test_read_file_tool.py +173 -0
- kolega_code/agent/tests/tool_backend/test_replace_entire_file_tool.py +115 -0
- kolega_code/agent/tests/tool_backend/test_replace_lines_tool.py +141 -0
- kolega_code/agent/tests/tool_backend/test_search_and_replace_tool.py +174 -0
- kolega_code/agent/tests/tool_backend/test_search_codebase_tool.py +228 -0
- kolega_code/agent/tests/tool_backend/test_terminal_tool.py +482 -0
- kolega_code/agent/tests/tool_backend/test_think_hard_integration.py +189 -0
- kolega_code/agent/tests/tool_backend/test_think_hard_streaming.py +445 -0
- kolega_code/agent/tests/tool_backend/test_web_fetch_tool.py +194 -0
- kolega_code/agent/tool_backend/agent_tool.py +414 -0
- kolega_code/agent/tool_backend/apply_edit_tool.py +98 -0
- kolega_code/agent/tool_backend/apply_patch_tool.py +514 -0
- kolega_code/agent/tool_backend/base_tool.py +217 -0
- kolega_code/agent/tool_backend/browser_tool.py +271 -0
- kolega_code/agent/tool_backend/build_tool.py +93 -0
- kolega_code/agent/tool_backend/create_file_tool.py +52 -0
- kolega_code/agent/tool_backend/glob_tool.py +323 -0
- kolega_code/agent/tool_backend/list_directory_tool.py +300 -0
- kolega_code/agent/tool_backend/memory_tool.py +79 -0
- kolega_code/agent/tool_backend/read_file_tool.py +119 -0
- kolega_code/agent/tool_backend/replace_entire_file_tool.py +40 -0
- kolega_code/agent/tool_backend/replace_lines_tool.py +97 -0
- kolega_code/agent/tool_backend/search_and_replace_tool.py +146 -0
- kolega_code/agent/tool_backend/search_codebase_tool.py +377 -0
- kolega_code/agent/tool_backend/streaming_tool.py +47 -0
- kolega_code/agent/tool_backend/terminal_tool.py +643 -0
- kolega_code/agent/tool_backend/think_hard_tool.py +211 -0
- kolega_code/agent/tool_backend/web_fetch_tool.py +205 -0
- kolega_code/agent/tools.py +1704 -0
- kolega_code/agent/utils/commands.py +94 -0
- kolega_code/cli/__init__.py +1 -0
- kolega_code/cli/app.py +2756 -0
- kolega_code/cli/config.py +280 -0
- kolega_code/cli/connection.py +49 -0
- kolega_code/cli/file_index.py +147 -0
- kolega_code/cli/main.py +564 -0
- kolega_code/cli/mentions.py +155 -0
- kolega_code/cli/messages.py +89 -0
- kolega_code/cli/provider_registry.py +96 -0
- kolega_code/cli/session_store.py +207 -0
- kolega_code/cli/settings.py +87 -0
- kolega_code/cli/skills.py +409 -0
- kolega_code/cli/slash_commands.py +108 -0
- kolega_code/cli/tests/__init__.py +1 -0
- kolega_code/cli/tests/test_app.py +4251 -0
- kolega_code/cli/tests/test_cli_config.py +171 -0
- kolega_code/cli/tests/test_connection.py +26 -0
- kolega_code/cli/tests/test_file_index.py +103 -0
- kolega_code/cli/tests/test_main.py +455 -0
- kolega_code/cli/tests/test_mentions.py +108 -0
- kolega_code/cli/tests/test_session_store.py +67 -0
- kolega_code/cli/tests/test_settings.py +62 -0
- kolega_code/cli/tests/test_skills.py +157 -0
- kolega_code/cli/tests/test_slash_commands.py +88 -0
- kolega_code/cli/theme.py +180 -0
- kolega_code/config.py +154 -0
- kolega_code/events.py +202 -0
- kolega_code/llm/client.py +300 -0
- kolega_code/llm/exceptions.py +285 -0
- kolega_code/llm/instrumented_client.py +520 -0
- kolega_code/llm/models.py +1368 -0
- kolega_code/llm/providers/__init__.py +0 -0
- kolega_code/llm/providers/anthropic.py +387 -0
- kolega_code/llm/providers/base.py +71 -0
- kolega_code/llm/providers/google.py +157 -0
- kolega_code/llm/providers/models.py +37 -0
- kolega_code/llm/providers/openai.py +363 -0
- kolega_code/llm/ratelimit.py +40 -0
- kolega_code/llm/specs.py +67 -0
- kolega_code/llm/tool_execution_ids.py +18 -0
- kolega_code/models/__init__.py +9 -0
- kolega_code/models/sandbox_terminal_state.py +47 -0
- kolega_code/runtime.py +50 -0
- kolega_code/sandbox/README.md +200 -0
- kolega_code/sandbox/__init__.py +21 -0
- kolega_code/sandbox/async_filesystem.py +475 -0
- kolega_code/sandbox/base.py +297 -0
- kolega_code/sandbox/browser.py +25 -0
- kolega_code/sandbox/event_loop.py +43 -0
- kolega_code/sandbox/filesystem.py +341 -0
- kolega_code/sandbox/local.py +118 -0
- kolega_code/sandbox/serializer.py +175 -0
- kolega_code/sandbox/terminal.py +868 -0
- kolega_code/sandbox/utils.py +216 -0
- kolega_code/services/base.py +255 -0
- kolega_code/services/browser.py +444 -0
- kolega_code/services/file_system.py +749 -0
- kolega_code/services/html.py +221 -0
- kolega_code/services/terminal.py +903 -0
- kolega_code/tools/__init__.py +22 -0
- kolega_code/tools/core.py +33 -0
- kolega_code/tools/definitions.py +81 -0
- kolega_code/tools/registry.py +73 -0
- kolega_code-0.1.0.dist-info/METADATA +157 -0
- kolega_code-0.1.0.dist-info/RECORD +171 -0
- kolega_code-0.1.0.dist-info/WHEEL +4 -0
- kolega_code-0.1.0.dist-info/entry_points.txt +2 -0
- kolega_code-0.1.0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"""First-class tool primitives.
|
|
2
|
+
|
|
3
|
+
Tools are data: a Tool pairs a provider-facing ToolDefinition with the
|
|
4
|
+
coroutine that implements it, plus execution metadata (groups, parallel
|
|
5
|
+
safety). A ToolRegistry holds Tools and answers availability, dispatch,
|
|
6
|
+
and definition queries; ToolPolicy expresses name-based selection.
|
|
7
|
+
|
|
8
|
+
ToolCollection (kolega_code.agent.tools) remains the host-facing way to
|
|
9
|
+
assemble an agent's tools; internally it builds a ToolRegistry.
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
from .core import Tool, ToolError
|
|
13
|
+
from .definitions import tool_definition_from_callable
|
|
14
|
+
from .registry import ToolPolicy, ToolRegistry
|
|
15
|
+
|
|
16
|
+
__all__ = [
|
|
17
|
+
"Tool",
|
|
18
|
+
"ToolError",
|
|
19
|
+
"ToolPolicy",
|
|
20
|
+
"ToolRegistry",
|
|
21
|
+
"tool_definition_from_callable",
|
|
22
|
+
]
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"""Tool: a definition paired with its implementation and execution metadata."""
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass, field
|
|
4
|
+
from typing import Any, Awaitable, Callable, FrozenSet
|
|
5
|
+
|
|
6
|
+
from ..llm.models import ToolDefinition
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class ToolError(Exception):
|
|
10
|
+
"""
|
|
11
|
+
An expected tool failure.
|
|
12
|
+
|
|
13
|
+
Raise this from a tool implementation when the failure is a normal
|
|
14
|
+
outcome the model should see and react to (file not found, invalid
|
|
15
|
+
arguments, command failed). The executor reports the message as an
|
|
16
|
+
is_error tool result without treating it as an internal fault.
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
@dataclass(frozen=True)
|
|
21
|
+
class Tool:
|
|
22
|
+
"""A single callable tool: provider-facing definition plus implementation."""
|
|
23
|
+
|
|
24
|
+
name: str
|
|
25
|
+
definition: ToolDefinition
|
|
26
|
+
handler: Callable[..., Awaitable[Any]]
|
|
27
|
+
groups: FrozenSet[str] = field(default_factory=frozenset)
|
|
28
|
+
# Safe to run concurrently with other parallel-safe tools in one batch
|
|
29
|
+
# (read-only operations and independent sub-agent dispatches).
|
|
30
|
+
parallel_safe: bool = False
|
|
31
|
+
|
|
32
|
+
async def call(self, **inputs: Any) -> Any:
|
|
33
|
+
return await self.handler(**inputs)
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"""Build provider-agnostic tool definitions from Python callables.
|
|
2
|
+
|
|
3
|
+
The callable's signature supplies the parameter schema and its docstring
|
|
4
|
+
supplies the descriptions, so the code documenting a tool for developers is
|
|
5
|
+
also what the model sees.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import inspect
|
|
9
|
+
import re
|
|
10
|
+
from typing import Any, Callable, Dict, Optional
|
|
11
|
+
|
|
12
|
+
from ..llm.models import ToolDefinition, ToolParameter
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def tool_definition_from_callable(
|
|
16
|
+
name: str,
|
|
17
|
+
method: Callable[..., Any],
|
|
18
|
+
*,
|
|
19
|
+
description_overrides: Optional[Dict[str, str]] = None,
|
|
20
|
+
) -> ToolDefinition:
|
|
21
|
+
"""Build a provider-agnostic tool definition from a Python callable."""
|
|
22
|
+
signature = inspect.signature(method)
|
|
23
|
+
docstring = inspect.getdoc(method) or ""
|
|
24
|
+
|
|
25
|
+
description = docstring.split("Raises:")[0].strip() if "Raises:" in docstring else docstring.strip()
|
|
26
|
+
|
|
27
|
+
if description_overrides and name in description_overrides:
|
|
28
|
+
description = description_overrides[name]
|
|
29
|
+
|
|
30
|
+
properties = {}
|
|
31
|
+
required = []
|
|
32
|
+
|
|
33
|
+
for param_name, param in signature.parameters.items():
|
|
34
|
+
if param_name == "self":
|
|
35
|
+
continue
|
|
36
|
+
|
|
37
|
+
if param.default == inspect.Parameter.empty:
|
|
38
|
+
required.append(param_name)
|
|
39
|
+
|
|
40
|
+
param_type = "string"
|
|
41
|
+
param_description = ""
|
|
42
|
+
|
|
43
|
+
param_doc_match = re.search(rf"{param_name}:\s*(.*?)(?:\n\s*\w+:|$)", docstring, re.DOTALL)
|
|
44
|
+
if param_doc_match:
|
|
45
|
+
param_description = param_doc_match.group(1).strip()
|
|
46
|
+
|
|
47
|
+
if param.annotation != inspect.Parameter.empty:
|
|
48
|
+
annotation = str(param.annotation)
|
|
49
|
+
if "str" in annotation:
|
|
50
|
+
param_type = "string"
|
|
51
|
+
elif "int" in annotation:
|
|
52
|
+
param_type = "integer"
|
|
53
|
+
elif "float" in annotation:
|
|
54
|
+
param_type = "number"
|
|
55
|
+
elif "bool" in annotation:
|
|
56
|
+
param_type = "boolean"
|
|
57
|
+
elif "List" in annotation or "list" in annotation:
|
|
58
|
+
param_type = "array"
|
|
59
|
+
elif "Dict" in annotation or "dict" in annotation:
|
|
60
|
+
param_type = "object"
|
|
61
|
+
|
|
62
|
+
properties[param_name] = {
|
|
63
|
+
"type": param_type,
|
|
64
|
+
"description": param_description,
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
tool_parameters = [
|
|
68
|
+
ToolParameter(
|
|
69
|
+
name=param_name,
|
|
70
|
+
type=param_info["type"],
|
|
71
|
+
description=param_info["description"],
|
|
72
|
+
required=param_name in required,
|
|
73
|
+
)
|
|
74
|
+
for param_name, param_info in properties.items()
|
|
75
|
+
]
|
|
76
|
+
|
|
77
|
+
return ToolDefinition(
|
|
78
|
+
name=name,
|
|
79
|
+
description=description,
|
|
80
|
+
parameters=tool_parameters,
|
|
81
|
+
)
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"""ToolRegistry: holds Tools; answers availability, dispatch, and definitions."""
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass, field
|
|
4
|
+
from typing import Any, Dict, FrozenSet, Iterator, List, Optional
|
|
5
|
+
|
|
6
|
+
from ..llm.models import ToolDefinition
|
|
7
|
+
from .core import Tool
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
@dataclass(frozen=True)
|
|
11
|
+
class ToolPolicy:
|
|
12
|
+
"""Name-based tool selection: optional allowlist plus exclusions."""
|
|
13
|
+
|
|
14
|
+
include: Optional[FrozenSet[str]] = None # None = all registered tools
|
|
15
|
+
exclude: FrozenSet[str] = field(default_factory=frozenset)
|
|
16
|
+
|
|
17
|
+
def allows(self, name: str) -> bool:
|
|
18
|
+
if name in self.exclude:
|
|
19
|
+
return False
|
|
20
|
+
if self.include is not None and name not in self.include:
|
|
21
|
+
return False
|
|
22
|
+
return True
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class ToolRegistry:
|
|
26
|
+
"""An ordered collection of Tools with lookup, selection, and dispatch."""
|
|
27
|
+
|
|
28
|
+
def __init__(self, tools: Optional[List[Tool]] = None) -> None:
|
|
29
|
+
self._tools: Dict[str, Tool] = {}
|
|
30
|
+
for tool in tools or []:
|
|
31
|
+
self.add(tool)
|
|
32
|
+
|
|
33
|
+
def add(self, *tools: Tool) -> "ToolRegistry":
|
|
34
|
+
for tool in tools:
|
|
35
|
+
if tool.name in self._tools:
|
|
36
|
+
raise ValueError(f"Tool '{tool.name}' is already registered")
|
|
37
|
+
self._tools[tool.name] = tool
|
|
38
|
+
return self
|
|
39
|
+
|
|
40
|
+
def get(self, name: str) -> Tool:
|
|
41
|
+
return self._tools[name]
|
|
42
|
+
|
|
43
|
+
def __contains__(self, name: str) -> bool:
|
|
44
|
+
return name in self._tools
|
|
45
|
+
|
|
46
|
+
def __iter__(self) -> Iterator[Tool]:
|
|
47
|
+
return iter(self._tools.values())
|
|
48
|
+
|
|
49
|
+
def __len__(self) -> int:
|
|
50
|
+
return len(self._tools)
|
|
51
|
+
|
|
52
|
+
def names(self) -> List[str]:
|
|
53
|
+
return list(self._tools.keys())
|
|
54
|
+
|
|
55
|
+
def select(self, policy: ToolPolicy) -> "ToolRegistry":
|
|
56
|
+
return ToolRegistry([tool for tool in self if policy.allows(tool.name)])
|
|
57
|
+
|
|
58
|
+
async def call(self, name: str, **inputs: Any) -> Any:
|
|
59
|
+
"""Dispatch a tool by name. Raises KeyError for unknown tools."""
|
|
60
|
+
return await self.get(name).call(**inputs)
|
|
61
|
+
|
|
62
|
+
def definitions(self) -> List[ToolDefinition]:
|
|
63
|
+
"""
|
|
64
|
+
Provider-facing definitions, with the prompt-cache checkpoint on the
|
|
65
|
+
last definition (and cleared everywhere else, since definitions may
|
|
66
|
+
be shared between registry views).
|
|
67
|
+
"""
|
|
68
|
+
definitions = [tool.definition for tool in self]
|
|
69
|
+
for definition in definitions:
|
|
70
|
+
definition.cache_checkpoint = False
|
|
71
|
+
if definitions:
|
|
72
|
+
definitions[-1].cache_checkpoint = True
|
|
73
|
+
return definitions
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: kolega-code
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Local-first AI coding agent for the terminal
|
|
5
|
+
Project-URL: Homepage, https://kolega-ai.github.io/kolega-code/
|
|
6
|
+
Project-URL: Documentation, https://kolega-ai.github.io/kolega-code/
|
|
7
|
+
Project-URL: Repository, https://github.com/kolega-ai/kolega-code
|
|
8
|
+
Project-URL: Issues, https://github.com/kolega-ai/kolega-code/issues
|
|
9
|
+
Author: Kolega Team
|
|
10
|
+
License: MIT License
|
|
11
|
+
|
|
12
|
+
Copyright (c) 2026 Kolega Team
|
|
13
|
+
|
|
14
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
15
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
16
|
+
in the Software without restriction, including without limitation the rights
|
|
17
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
18
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
19
|
+
furnished to do so, subject to the following conditions:
|
|
20
|
+
|
|
21
|
+
The above copyright notice and this permission notice shall be included in all
|
|
22
|
+
copies or substantial portions of the Software.
|
|
23
|
+
|
|
24
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
25
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
26
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
27
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
28
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
29
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
30
|
+
SOFTWARE.
|
|
31
|
+
License-File: LICENSE
|
|
32
|
+
Keywords: agent,ai,cli,coding-agent,developer-tools
|
|
33
|
+
Classifier: Development Status :: 3 - Alpha
|
|
34
|
+
Classifier: Environment :: Console
|
|
35
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
36
|
+
Classifier: Operating System :: MacOS
|
|
37
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
38
|
+
Classifier: Programming Language :: Python :: 3
|
|
39
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
40
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
41
|
+
Classifier: Topic :: Software Development
|
|
42
|
+
Classifier: Topic :: Utilities
|
|
43
|
+
Requires-Python: >=3.11
|
|
44
|
+
Requires-Dist: anthropic==0.101.0
|
|
45
|
+
Requires-Dist: beautifulsoup4==4.14.3
|
|
46
|
+
Requires-Dist: browser-use==0.1.40
|
|
47
|
+
Requires-Dist: google-genai==2.0.1
|
|
48
|
+
Requires-Dist: jinja2==3.1.6
|
|
49
|
+
Requires-Dist: langfuse==3.14.5
|
|
50
|
+
Requires-Dist: nest-asyncio==1.6.0
|
|
51
|
+
Requires-Dist: openai==1.109.1
|
|
52
|
+
Requires-Dist: pathspec==1.1.1
|
|
53
|
+
Requires-Dist: playwright==1.59.0
|
|
54
|
+
Requires-Dist: psutil==7.2.2
|
|
55
|
+
Requires-Dist: pydantic==2.13.4
|
|
56
|
+
Requires-Dist: python-dotenv==1.2.2
|
|
57
|
+
Requires-Dist: pyyaml==6.0.3
|
|
58
|
+
Requires-Dist: tenacity==9.1.4
|
|
59
|
+
Requires-Dist: textual==8.2.5
|
|
60
|
+
Requires-Dist: tiktoken==0.12.0
|
|
61
|
+
Requires-Dist: trafilatura==2.0.0
|
|
62
|
+
Provides-Extra: cli
|
|
63
|
+
Provides-Extra: dev
|
|
64
|
+
Requires-Dist: pytest-asyncio==1.3.0; extra == 'dev'
|
|
65
|
+
Requires-Dist: pytest==9.0.3; extra == 'dev'
|
|
66
|
+
Requires-Dist: ruff==0.15.12; extra == 'dev'
|
|
67
|
+
Description-Content-Type: text/markdown
|
|
68
|
+
|
|
69
|
+
# kolega-code
|
|
70
|
+
|
|
71
|
+
Kolega Code is a local-first AI coding agent for the terminal.
|
|
72
|
+
|
|
73
|
+
The package owns the `kolega_code` import namespace and provides the
|
|
74
|
+
`kolega-code` command.
|
|
75
|
+
|
|
76
|
+
## Install
|
|
77
|
+
|
|
78
|
+
Install with the public installer:
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
curl -fsSL https://kolega.dev/install-kolega-code | sh
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Or install directly from PyPI with uv:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
uv tool install kolega-code
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Verify the command is available:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
kolega-code --version
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Upgrade or uninstall:
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
uv tool upgrade kolega-code
|
|
100
|
+
uv tool uninstall kolega-code
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Run the Textual UI and open the Settings tab to select Moonshot Kimi K2.6 or DeepSeek V4 Pro and save your API key:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
kolega-code .
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
In the Textual UI, press `Shift+Tab` to switch between build mode and planning mode. Planning mode uses a standalone read-only planning agent; when it submits a complete plan, choose whether to implement it or keep discussing the plan.
|
|
110
|
+
|
|
111
|
+
All CLI sessions use the CLI-specific coding-agent prompt, including resumed sessions. Launching the UI starts a fresh thread by default. Resume an existing thread explicitly:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
kolega-code . --resume
|
|
115
|
+
kolega-code . --resume <thread-or-session-id>
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
You can also set `MOONSHOT_API_KEY`, `DEEPSEEK_API_KEY`, or keep using env/flag based configuration for non-UI commands:
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
kolega-code ask "summarize this repository" --project .
|
|
122
|
+
kolega-code ask "summarize this repository" --project . --provider deepseek --model deepseek-v4-pro
|
|
123
|
+
kolega-code sessions list --project .
|
|
124
|
+
kolega-code doctor --project .
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
The Settings UI supports Moonshot `kimi-k2.6` and DeepSeek `deepseek-v4-pro`. A saved UI selection is used for all agent model roles and API keys are stored in the local CLI settings file with restrictive permissions. Existing environment and model/provider flag overrides continue to work. Local session state is stored under the platform state directory unless `KOLEGA_CODE_STATE_DIR` is set.
|
|
128
|
+
|
|
129
|
+
## From source
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
git clone https://github.com/kolega-ai/kolega-code.git
|
|
133
|
+
cd kolega-code
|
|
134
|
+
uv sync --extra dev
|
|
135
|
+
uv run kolega-code --version
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## Tests
|
|
139
|
+
|
|
140
|
+
Fast tests run by default:
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
./run_tests.sh
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Some slow and integration tests require real provider credentials. To run them locally, create an ignored `.env` file from the example and fill only the keys you need:
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
cp .env.example .env
|
|
150
|
+
./run_tests.sh --all
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
The test runner loads `.env` through pytest and keeps existing shell environment variables higher priority than values in the file. You can pass additional pytest arguments through the wrapper:
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
./run_tests.sh kolega_code/agent/tests/llm/test_client.py -ra
|
|
157
|
+
```
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
kolega_code/__init__.py,sha256=V9mY6M3W63EoyqeNdrHiJLJooeWgr9HSDCc-XX1eu60,4016
|
|
2
|
+
kolega_code/config.py,sha256=8fVzZARwGe6KDXo_oFHIe5XE97ixetvGTSmz2VDZQR8,6618
|
|
3
|
+
kolega_code/events.py,sha256=8DL-BU8PfWosdqtm6_sccpNCfdiN-y591VrxvaN0Zok,6919
|
|
4
|
+
kolega_code/runtime.py,sha256=RL0wW6KEeUbd1HVP4M8n4KHzwBAICYIhuqrSqnZwros,1433
|
|
5
|
+
kolega_code/agent/__init__.py,sha256=N23c-fwXhEf6BE9vePPg6We1hI1v20Y6ObNu9jj75sU,1131
|
|
6
|
+
kolega_code/agent/baseagent.py,sha256=k4Iygs2EnFCQ5idEUerykJZRpYVDiOYFv5ZR2nudV3s,43638
|
|
7
|
+
kolega_code/agent/browseragent.py,sha256=1hCLclv3qozUTJBg537LJz-GkCI9frI71NgioDa2pqI,5240
|
|
8
|
+
kolega_code/agent/coder.py,sha256=XTwUI6Z05mIGCN78iC2FnF2XV-sK22xhDiXNla3qET4,6741
|
|
9
|
+
kolega_code/agent/common.py,sha256=0UqJ6myHe_h5ffE9FaKcsqYg693o-rLjH1YEeAy5_Tc,1582
|
|
10
|
+
kolega_code/agent/compression.py,sha256=fqkjzTUBvcDsU1UbFwg-GnCQ45feyR-y23RcIghQeAQ,2881
|
|
11
|
+
kolega_code/agent/context.py,sha256=qviZw1TVDkwR2Y-xBc7ufBmw8xThikESz-rloVQ9QB4,4494
|
|
12
|
+
kolega_code/agent/conversation.py,sha256=sQO0mWl4rjKxLv4Ho6srZFvLuTZEvjdrpEWvrMXiRlo,18977
|
|
13
|
+
kolega_code/agent/generalagent.py,sha256=8tbH3T9zkRw-3JfyOLcHuN1DoY-pnV7W6l-6Wk5WJHQ,6308
|
|
14
|
+
kolega_code/agent/investigationagent.py,sha256=TsrVM9tXdrnd7h1OTrxIuK3a8nzsZpPpWnifgXgRz3U,5267
|
|
15
|
+
kolega_code/agent/planningagent.py,sha256=jp3itqn7shF9_RUzlzlxfGPLl_XxPSXrpG5nXbVT0Q4,7521
|
|
16
|
+
kolega_code/agent/prompt_provider.py,sha256=x2LKq5HY-pEjO8Ql1D9jTEqxDDTlJMl5pI32oM17Z_k,7023
|
|
17
|
+
kolega_code/agent/prompts.py,sha256=63pvkY-24qY9jZVQzNtjjYaJb2x1BeMcpciuq88dGQc,7912
|
|
18
|
+
kolega_code/agent/tools.py,sha256=jYrX7GwEtjC8eZrp_SwG5qomG8pJoY_CQgnVq8BnQ7k,76301
|
|
19
|
+
kolega_code/agent/prompt_templates/agents/browser.j2,sha256=RzDEv2amWoXf7chr292iGChU_HH3i6GxzQyWtxHsoDQ,4230
|
|
20
|
+
kolega_code/agent/prompt_templates/agents/coder_cli_mode.j2,sha256=sDdruR--eVzmdvFEYl-sMXKrHv3-XvplfP9-3xaKMTw,6456
|
|
21
|
+
kolega_code/agent/prompt_templates/agents/general.j2,sha256=DFDQZmZpZ7_lPQiPqj5HYJVBlPSvs_ImmnMnMZqF8RM,3014
|
|
22
|
+
kolega_code/agent/prompt_templates/agents/investigation.j2,sha256=Yho5FmYOoMvCk7sEMcaWV5ARXf2KmspovQdcWIq2n4c,3462
|
|
23
|
+
kolega_code/agent/prompt_templates/common/frontend_guidance.md,sha256=PGBci7ySfRwc8tCDYoHrYyol-vZJFznk_bwKutX4bEI,3410
|
|
24
|
+
kolega_code/agent/prompt_templates/common/kolega_md_instructions.md,sha256=4NhVsW5a5gKjb8ZDTWsMNwup8u4Lpti7tA3TV60w0PY,382
|
|
25
|
+
kolega_code/agent/prompt_templates/environment_variables/workspace_env_vars.md,sha256=OqHOZhDK9ZfMyb0m1G2RLWk-DoPtq0ZwXYafp8UxJSc,527
|
|
26
|
+
kolega_code/agent/prompt_templates/template_guidance/expo-template.md,sha256=_O15zf1qEwNtlcTmA9DbVqS2fRBYO_53AGvqNn-d64I,10712
|
|
27
|
+
kolega_code/agent/prompt_templates/template_guidance/html-website-template.md,sha256=GFd0cLfkxyDLgtfNkmjTlOAMl70P_kIlnMcAJ8Ojnvo,59
|
|
28
|
+
kolega_code/agent/prompt_templates/template_guidance/mern-stack-template.md,sha256=INVYLOcT46HvEpY5JMUAELVvIqe_8tPBe8_8Opd3rYg,58
|
|
29
|
+
kolega_code/agent/prompt_templates/template_guidance/react-vite-shadcdn-template.md,sha256=K1Fn6x9alsTovwUzKJsVkW-tcWGZ7bGhUYY4i8Xe4DM,5256
|
|
30
|
+
kolega_code/agent/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
31
|
+
kolega_code/agent/tests/test_agent_tools_inventory.py,sha256=fR3ee6wD-aE4ZzV5bbUFDeZRBfqJ3kQ6sbUeDyNR-F8,9398
|
|
32
|
+
kolega_code/agent/tests/test_base_agent.py,sha256=7Pp3lq8Jy3zTgxIkRxFcby6MVyQbKRF1lMvrf-2kdyw,86747
|
|
33
|
+
kolega_code/agent/tests/test_coder_attachments.py,sha256=Uf61UUr1qb_5UJTpQAh59wcxqfRFbn4MFgQFdQ26DJw,11788
|
|
34
|
+
kolega_code/agent/tests/test_coder_prompt_extensions.py,sha256=LrlqUYSTMDxonCxU7EGpY452rAQ8oYvI6JVJYPum6Z0,2193
|
|
35
|
+
kolega_code/agent/tests/test_commands.py,sha256=SJOdISumVS3HGyuqUO1WT2EiF-qycE7WSsepIDInXWA,5760
|
|
36
|
+
kolega_code/agent/tests/test_duplicate_tool_results.py,sha256=KQWZsGHjvDvuHm2OBuRZpQciMGi_DI6XC71IDmtsuso,24308
|
|
37
|
+
kolega_code/agent/tests/test_empty_message_handling.py,sha256=xsWhvlO-79RYNWvzjl9Y2VJ8lWUvC3K-Uu0CwFoNAv8,1652
|
|
38
|
+
kolega_code/agent/tests/test_general_agent.py,sha256=tLDtd7K_AYu2K5CpxtQo7KYS91ChODbddxriL7taD1M,9156
|
|
39
|
+
kolega_code/agent/tests/test_html.py,sha256=S4RdF_4k8d2PwEWI0tNVl5zKSk6fnTyYcAm8Iav8V1k,12719
|
|
40
|
+
kolega_code/agent/tests/test_parallel_tool_calls.py,sha256=GDcO4Yp8RCKVXlA7CrVKbcwUC3c9X2ASXCeHzBNmX9c,10061
|
|
41
|
+
kolega_code/agent/tests/test_planning_agent.py,sha256=U_yte5WuUwMC5eglpjhnojUb4RuNaCnUbrRKeHbyY5k,7418
|
|
42
|
+
kolega_code/agent/tests/test_prompt_provider.py,sha256=SumgaezHINFxWCw2HN_W8wzq26QqFS90K6drdjMNZa8,10964
|
|
43
|
+
kolega_code/agent/tests/test_tool_registry.py,sha256=18QTKpqtNd_j0lmKTp53T-mtfnvoweSqhgptbxpAKLU,3761
|
|
44
|
+
kolega_code/agent/tests/test_tools.py,sha256=Nah14HgFxOVRwjxXZAsyd6F6yZm-vQWMZ1kyZBN5JpM,22577
|
|
45
|
+
kolega_code/agent/tests/llm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
46
|
+
kolega_code/agent/tests/llm/test_anthropic_token_counting.py,sha256=ZD87tT3O72zQd5WZYpMN5OIAWVkwZHkE9t667sNMD-Q,21852
|
|
47
|
+
kolega_code/agent/tests/llm/test_billing_openai_cache.py,sha256=GxrTBSIMoRz7wz3l8TfiqlAdPltVlxKxGe6YUVaww7c,2187
|
|
48
|
+
kolega_code/agent/tests/llm/test_client.py,sha256=ysxE-d-FgEaG0Kv-pNOpxarLrDax-UKtNNp0KN3STAI,27207
|
|
49
|
+
kolega_code/agent/tests/llm/test_dashscope_mapping.py,sha256=dANyovSpkIYu7MjhPBBVj2Dqg3zom20hCNYoRSOjzcI,1464
|
|
50
|
+
kolega_code/agent/tests/llm/test_error_boundary.py,sha256=_6EEkxa7SLF0DYMG0hAW6csTKqDhLGjFYfE-OuZFSNA,13972
|
|
51
|
+
kolega_code/agent/tests/llm/test_exceptions.py,sha256=JhpbK1nT82EL1VSi6Hecu8KVbHfrQDffXJHsVjKICFs,8888
|
|
52
|
+
kolega_code/agent/tests/llm/test_instrumented_client.py,sha256=sgfUOWEMN7KxDqidmQsgSLv5enP3RL7urxwdG2yra_g,21807
|
|
53
|
+
kolega_code/agent/tests/llm/test_instrumented_client_integration.py,sha256=xXRhCDNXvocp9JNTVHdfMFoiJStOga0u5lVPUFg8fvo,19746
|
|
54
|
+
kolega_code/agent/tests/llm/test_langfuse_normalization.py,sha256=3IY5NeNox2YKocBnKTf8f_CBZH0o6ZLWIXVyMZ7DlUA,1483
|
|
55
|
+
kolega_code/agent/tests/llm/test_model_specs.py,sha256=EQ5PLRPjQJ242FRszbpyPq1nX816qsuc_pfgYV8e94Y,529
|
|
56
|
+
kolega_code/agent/tests/llm/test_openai_cached_tokens.py,sha256=KnITeUcuvtBXh9KMtx7iZeZLz8FiKZBkBTWzeaTDOgE,1710
|
|
57
|
+
kolega_code/agent/tests/llm/test_openai_cached_tokens_stream.py,sha256=6VyoNRlpToEkq_ygLROtQ2E1_x1IU_wzCHrOtgMmUAM,2191
|
|
58
|
+
kolega_code/agent/tests/llm/test_openai_message_conversion.py,sha256=tYO8B_EqwpYPI8VRUJuSeeTSw-rWn6ONyxBSG0KbBw8,1357
|
|
59
|
+
kolega_code/agent/tests/llm/test_openai_token_counting.py,sha256=zzbckj1FKtNyGbNHOOugfkVvbOYx5kF29KpnLiozbns,23106
|
|
60
|
+
kolega_code/agent/tests/llm/test_tool_execution_ids.py,sha256=WVrcBsk5RbEwC7Hw7GLrutmGGVJlrSmJJyCZPRe1MqY,5910
|
|
61
|
+
kolega_code/agent/tests/services/__init__.py,sha256=i-cXS1FVIV4__6BLezd37SxOLN-8f8uC4RAwYhv2cT8,24
|
|
62
|
+
kolega_code/agent/tests/services/test_browser.py,sha256=vf2V-IdgBTrewTcm7c4oAdaGSxwMcx0QcncbSdxcb1E,19083
|
|
63
|
+
kolega_code/agent/tests/services/test_browser_parity.py,sha256=aOnU9qOdt5-Jx4AcReaO2eAJ9JvE2DJPNJQ0m49BZNE,16574
|
|
64
|
+
kolega_code/agent/tests/services/test_file_system.py,sha256=GP1FHhG5s7gGEnjjXzkTIXsmwXPHcez_NhlX2_MiV5U,25503
|
|
65
|
+
kolega_code/agent/tests/services/test_sandbox_terminal_input.py,sha256=PmcWpWFkJPTidmyY5Y5kUebkzf-ArjX7cQJTHx2LRHc,3114
|
|
66
|
+
kolega_code/agent/tests/services/test_terminal.py,sha256=QznD3K0LV8YcvYHhStmbdxF2eC64RGRNgbqX64iTH3s,6108
|
|
67
|
+
kolega_code/agent/tests/services/test_terminal_command_tracking.py,sha256=nTSDcjnMJcTPKc0IeavZDD_BwYnGRqbINraZXcJde7c,15882
|
|
68
|
+
kolega_code/agent/tests/services/test_terminal_state_serializer.py,sha256=l4ildKH-IdZ35ec0avCcn9XYUrwUYDzOU2codRvD4_M,10725
|
|
69
|
+
kolega_code/agent/tests/tool_backend/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
70
|
+
kolega_code/agent/tests/tool_backend/test_agent_tool.py,sha256=fBNnntHbPbFW90maAhn5E_rO88oJtfwyybgxlsoQgkw,14467
|
|
71
|
+
kolega_code/agent/tests/tool_backend/test_base_tool.py,sha256=-Rs1DXLKKQaOlU4buE8LnZIzf0y-Ywi03BiZNyzSaS8,5122
|
|
72
|
+
kolega_code/agent/tests/tool_backend/test_browser_tool.py,sha256=xdHSrbAeRGczqBh9C-2DkWhBoFaSVdAUHnFre_sytx4,13343
|
|
73
|
+
kolega_code/agent/tests/tool_backend/test_build_tool.py,sha256=1pEy_j_U6822VLm6u0dghDP9zx1hCoOkanuB72TUpWs,2621
|
|
74
|
+
kolega_code/agent/tests/tool_backend/test_create_file_tool.py,sha256=QQnYMvsxyhQvklG39RVkM08FcaHrWLesWkFmCid-PGM,4479
|
|
75
|
+
kolega_code/agent/tests/tool_backend/test_glob_tool.py,sha256=lG1m1Jt6-dyqC4vEQFm32bIwDA8mqDffPBauIcfgPq4,7049
|
|
76
|
+
kolega_code/agent/tests/tool_backend/test_glob_tool_sandbox_parity.py,sha256=O_J3M1uHzUPKDXc719cKFayNkZfv-rtIkKi0s2LurhE,7894
|
|
77
|
+
kolega_code/agent/tests/tool_backend/test_list_directory_tool.py,sha256=NIJYGPp9iwjW1CQoiy0MsTv-jGuov3ui4hKIeJIq2Ic,10880
|
|
78
|
+
kolega_code/agent/tests/tool_backend/test_read_file_tool.py,sha256=4FdL3inRC6gUhHOkUfDUDYlJKav8oDdwmTrULM1Mnzk,7665
|
|
79
|
+
kolega_code/agent/tests/tool_backend/test_replace_entire_file_tool.py,sha256=yHj2jOKYjPS0hDaDSpO6pSB86Ws0bG0og33jeJG2CTw,4653
|
|
80
|
+
kolega_code/agent/tests/tool_backend/test_replace_lines_tool.py,sha256=TEMrYdhgGZ97R0JsU5xTQrY5756ei7Uw3_VmTmF2rBc,6387
|
|
81
|
+
kolega_code/agent/tests/tool_backend/test_search_and_replace_tool.py,sha256=y0MgRXMbisTQ7DDqGr3rjLSfCDJbqOsAVv0IyA9mB4c,5046
|
|
82
|
+
kolega_code/agent/tests/tool_backend/test_search_codebase_tool.py,sha256=zZpKZgadeFUl_CYE_27sQ3ekFEY3zpjQMNr3CWqk0C4,9403
|
|
83
|
+
kolega_code/agent/tests/tool_backend/test_terminal_tool.py,sha256=hOcXuXkjRPq7C1QhLOMYyea9uvi0HN9XDYpcaxEvjTY,22442
|
|
84
|
+
kolega_code/agent/tests/tool_backend/test_think_hard_integration.py,sha256=MyCSDLwzV3sd9nmRE312YnUmPEw8b_O9eq7_OeLs6e8,7108
|
|
85
|
+
kolega_code/agent/tests/tool_backend/test_think_hard_streaming.py,sha256=qPklQF4fw8I7HRz2nxKxunkzHfrMZ2vfi8dPRpnE7pk,17188
|
|
86
|
+
kolega_code/agent/tests/tool_backend/test_web_fetch_tool.py,sha256=YPTUu01MGezbZ84vsXEGO8BEBWv-EWB0RugNgf1mqYc,8599
|
|
87
|
+
kolega_code/agent/tool_backend/agent_tool.py,sha256=EhsH_N-hufVSIfcd4lgoa--hq81nqLn3AttBH2OaRCM,16648
|
|
88
|
+
kolega_code/agent/tool_backend/apply_edit_tool.py,sha256=wh1uMuIg46P9eH5a4hbkYXG2q6vUIpBye8Mav9DYVQA,4422
|
|
89
|
+
kolega_code/agent/tool_backend/apply_patch_tool.py,sha256=hr2JEm5nXb3lnE_j20pPFKsyeR5KRi9htfFJbukXdOI,18828
|
|
90
|
+
kolega_code/agent/tool_backend/base_tool.py,sha256=4_O6ESo7VN8IGzj-tujX6PhBkH2w9iIa6lm5a5xclnI,6963
|
|
91
|
+
kolega_code/agent/tool_backend/browser_tool.py,sha256=YSsrXbrRFW7YLviNmAhGn5_haaIjy4hDrnNQ_rMSQJ0,11876
|
|
92
|
+
kolega_code/agent/tool_backend/build_tool.py,sha256=my0mC19ainx_-Twdx9HdgpBVFPSbXGQ0eDej_IHoYPU,2792
|
|
93
|
+
kolega_code/agent/tool_backend/create_file_tool.py,sha256=RuX4SInfBxWc2JD9po8zg5az-l7fHStMg0qd-1eKxIg,2102
|
|
94
|
+
kolega_code/agent/tool_backend/glob_tool.py,sha256=EtxMrD521ffGy3qU4RsLCwqj4raNDQ5vvuE45UiAnXk,11092
|
|
95
|
+
kolega_code/agent/tool_backend/list_directory_tool.py,sha256=koK6HQeMo1MJoPU5fEZM-SMbE0ZTIFufAdTVrJtJLLc,11318
|
|
96
|
+
kolega_code/agent/tool_backend/memory_tool.py,sha256=hypLkw1lILozS4fThlV3wDFe4wppP8EJoUJDF7royaU,3181
|
|
97
|
+
kolega_code/agent/tool_backend/read_file_tool.py,sha256=fpBjwe2oALmQTpnmh1NgyZMa1O1SG3pzrqkODSXuzx0,4637
|
|
98
|
+
kolega_code/agent/tool_backend/replace_entire_file_tool.py,sha256=xOKHLNiYHT9KuxCR9_c1GvMHCpspw22c7WSDmCDIveY,1686
|
|
99
|
+
kolega_code/agent/tool_backend/replace_lines_tool.py,sha256=82s6TIl5NMg--ek2mvDGrQwgISf33Rhdx9QiiqoOfpY,4278
|
|
100
|
+
kolega_code/agent/tool_backend/search_and_replace_tool.py,sha256=r2tWPMwb_Da_BUzX7lspDw5Sxd5eIQV_qQhPvjznQQc,6539
|
|
101
|
+
kolega_code/agent/tool_backend/search_codebase_tool.py,sha256=70mQFO0n04oypI3tEWsuwTPNfB3EEBVuA8HoRRliPWk,13650
|
|
102
|
+
kolega_code/agent/tool_backend/streaming_tool.py,sha256=CaoycempH9nxEZ2X1sFgydLcQfHC0xy3Miu_w8PtEZ4,1842
|
|
103
|
+
kolega_code/agent/tool_backend/terminal_tool.py,sha256=RIBx-oEGzzZQE0GDX-bznLpxkBVh3LyQlGZsy_jcla8,26654
|
|
104
|
+
kolega_code/agent/tool_backend/think_hard_tool.py,sha256=S5SL8XxEMknTnx7iYHnUbq783S-G0Wbo8FKgfxoMqG8,10026
|
|
105
|
+
kolega_code/agent/tool_backend/web_fetch_tool.py,sha256=Y2OUYJEHE6lnxeJ_VfTGQNJxybqD6bXbzpEJvTHuT6g,8744
|
|
106
|
+
kolega_code/agent/utils/commands.py,sha256=nIz5EnXlvCRr8Qsc5fid7bzTUC0-sBQA2pb1EXQV9Ig,3461
|
|
107
|
+
kolega_code/cli/__init__.py,sha256=IktV9YH_Is77fDr8LGsymWL-h7-EWH1e3Wj9VVaDM-s,46
|
|
108
|
+
kolega_code/cli/app.py,sha256=SOGyuDolAAGEwpZo67hKugYpHhJdFEC-mF2vlWNBBPg,113232
|
|
109
|
+
kolega_code/cli/config.py,sha256=4rQRgLHiMA5vLvezL0HLPbdKqXpL0H31vrSvi2w7gQg,10496
|
|
110
|
+
kolega_code/cli/connection.py,sha256=eXti1P_ZpqvQhGLMnPsrQ07YUeXUsztHpPI3AnX4T48,1713
|
|
111
|
+
kolega_code/cli/file_index.py,sha256=oL6gCXeg7fPLS7JhlmWRue4kAZG41bOVhfG_nQJn8Eo,5105
|
|
112
|
+
kolega_code/cli/main.py,sha256=Q1rTLcmLaxoZ5NrLJ5DFs2sPTrEb9JvL66v6sQOn2F4,22777
|
|
113
|
+
kolega_code/cli/mentions.py,sha256=XtJNdqsW58T51De-Q8WaqWO_BFGtDF8yz7uuvBcOYJk,5176
|
|
114
|
+
kolega_code/cli/messages.py,sha256=Kz77nxX1tCUuV37CDcad3Zty4ocyPrYQWXeROJoAefg,3640
|
|
115
|
+
kolega_code/cli/provider_registry.py,sha256=AyWe5bQ3UYqGe7NmdONL3hlEEH1cXyn2-vM8cp-5rg8,2788
|
|
116
|
+
kolega_code/cli/session_store.py,sha256=hXw1GDcp87OREZnhNkMgxQGs8zjZdag-g-UjsiKsH8U,7418
|
|
117
|
+
kolega_code/cli/settings.py,sha256=RSfIazBNb0c8t_m-yVBxBYvrrlQ7jfeM4sKf4_CHz-A,2870
|
|
118
|
+
kolega_code/cli/skills.py,sha256=28fqDUZ6tHYdKtgKNO8TzvZ_GTeQl-V7p_DtILfXafU,14146
|
|
119
|
+
kolega_code/cli/slash_commands.py,sha256=iwDjBoMLd9RoeOsFkFgtq04GJmdIuBinwGOb59mtc-A,4037
|
|
120
|
+
kolega_code/cli/theme.py,sha256=GrIlJuAUeUxN8yzGAXd0oW54PgnC6FfimcT3kc6VGOA,4898
|
|
121
|
+
kolega_code/cli/tests/__init__.py,sha256=2gFf4eavl_-FUh9Q2Jan2t1kql0rqwLuvABcL278H3w,17
|
|
122
|
+
kolega_code/cli/tests/test_app.py,sha256=0jYSbgQkDMWaOexxM71kRIN7WIswIiS5xzUtsMucehQ,155692
|
|
123
|
+
kolega_code/cli/tests/test_cli_config.py,sha256=B1M_DXPB69ALoRbVC7e2XD2ZDdQ_IGz1GlP4T8hQFT4,7106
|
|
124
|
+
kolega_code/cli/tests/test_connection.py,sha256=yypXnz-f6i0cXScyefezEaZ06QW-WIsmZgm2vDxYAQc,938
|
|
125
|
+
kolega_code/cli/tests/test_file_index.py,sha256=Rq3q7hqeWp8N3u74AxnZmpw-ST-dSnBQ0mbgW8Lksto,4016
|
|
126
|
+
kolega_code/cli/tests/test_main.py,sha256=e8cPP5nBUM2bCoNg7qohBzQP9nXms21RxoO54CuXUAE,15923
|
|
127
|
+
kolega_code/cli/tests/test_mentions.py,sha256=zKpJH4mA5FiXqNPjqbNPxbS0FgT6Z1hJUJ9G_DGrTCQ,4700
|
|
128
|
+
kolega_code/cli/tests/test_session_store.py,sha256=C8HomYdAt7g9Nh9Eubi9tzzP74kwWVWywR5yFX_L90M,2490
|
|
129
|
+
kolega_code/cli/tests/test_settings.py,sha256=02NDJRp-ye_XfK5pdcyXvuMbtgce6pIr_UAtRGG4sSU,2126
|
|
130
|
+
kolega_code/cli/tests/test_skills.py,sha256=Vo1fTi9wYc4Lh9NiHs8JSkJxyLId_U_V2Y-oDPJdg8c,6042
|
|
131
|
+
kolega_code/cli/tests/test_slash_commands.py,sha256=PXOvwAgbC2Xw8dOJxq3UNGYGv5meSp41Wn_eosSOC8E,3051
|
|
132
|
+
kolega_code/llm/client.py,sha256=s72jJzCECjNsSwQT_LASQU0fJf4M0BEJVG3I5vW2I3g,13254
|
|
133
|
+
kolega_code/llm/exceptions.py,sha256=4JBz1FvfqNKe40sZMnk4WZPpNkytgb6HPyK0QEzr6dU,12404
|
|
134
|
+
kolega_code/llm/instrumented_client.py,sha256=YD8uqrrvseuPNQW79EtJuRGpJlGGrdq4VlXifqGKyaU,21020
|
|
135
|
+
kolega_code/llm/models.py,sha256=y3RJa4x9GyHxhqh9iNXbJnaTZVID8OjuiLfExJEwx2M,50346
|
|
136
|
+
kolega_code/llm/ratelimit.py,sha256=qW5KSecuW9rbazB4_1wLoXhTelV1_Z9XfT_W4QYXUk8,1698
|
|
137
|
+
kolega_code/llm/specs.py,sha256=J-FfRCXa_PnV9-8lV9H0dc9RxFBVXqcDT9TehvUXNak,4591
|
|
138
|
+
kolega_code/llm/tool_execution_ids.py,sha256=Wh0_rK14iq6bcJSLuKmH8qJF1Vnmlk4z21CmpKt34AA,666
|
|
139
|
+
kolega_code/llm/providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
140
|
+
kolega_code/llm/providers/anthropic.py,sha256=bwr1H8UYyG5baYgrs5ME2_zBtaU6NiIJY3JF4RzDD1k,15719
|
|
141
|
+
kolega_code/llm/providers/base.py,sha256=_yKlodHO_72cb64si_A_nZUeWYfrhjdO6XA1goDcH_Q,2485
|
|
142
|
+
kolega_code/llm/providers/google.py,sha256=s_oVrXX3PyTIijQ3agS7G-l_onuPyKuB6OBpZET6uks,5131
|
|
143
|
+
kolega_code/llm/providers/models.py,sha256=0kVUABvNDXlL1t1MMeBxr-5YPCXPR1_3_EEKHnbOlCk,801
|
|
144
|
+
kolega_code/llm/providers/openai.py,sha256=oy8jpWtARWI0si0Zg4Q_kGTJMy-nAK1lrh4c3p2OjEI,15370
|
|
145
|
+
kolega_code/models/__init__.py,sha256=ZH_txQ5WcBht8fkQKH7bqS3nOpeHuBKDWyJ75B-qh10,220
|
|
146
|
+
kolega_code/models/sandbox_terminal_state.py,sha256=4CRnTPpGxNE6KwsLOSD8G9PwquOIGOcI5dx2E4o-SjE,2141
|
|
147
|
+
kolega_code/sandbox/README.md,sha256=LIpzvTF0s0asmWgtHkB1CMHuo-Gne-NkohbJk5cUkJI,5944
|
|
148
|
+
kolega_code/sandbox/__init__.py,sha256=lCOGKa0dEjs-7kvEMwWsLE1Mejwh6lSe_IAemY4R69M,656
|
|
149
|
+
kolega_code/sandbox/async_filesystem.py,sha256=8hGqyxxfS3YdYMMmn7YNbsissWABuj4tJznYPywbvgI,18407
|
|
150
|
+
kolega_code/sandbox/base.py,sha256=1UPcVs-Qhj1JYkBliRERFYLv3J4BnYj3udAqrzHXn_Y,8522
|
|
151
|
+
kolega_code/sandbox/browser.py,sha256=L26OzTb-3AwetTp_DdsRUK5fNT0UuhQwAz1I6R-RM9g,809
|
|
152
|
+
kolega_code/sandbox/event_loop.py,sha256=AZ1Dw48PohCvkGdF8ipMmvSH4B7ioXCeAgvDggiShSM,1426
|
|
153
|
+
kolega_code/sandbox/filesystem.py,sha256=f-uytGlt_3L7ymQKOTs1gW7blAlcqUMFIIP48azqrnY,13457
|
|
154
|
+
kolega_code/sandbox/local.py,sha256=LBTj5pgyLQvfFA341gjYfJi7rWkGa_7sqf9maZRk7KM,5128
|
|
155
|
+
kolega_code/sandbox/serializer.py,sha256=EwGgEGGqEcFUGpJPKELKZXSnEuBdM2rsHU4DLa5v-cU,7213
|
|
156
|
+
kolega_code/sandbox/terminal.py,sha256=B6Rg1KJwE5OH8ET6-RrsSkxTs-TNE7gDOybvFpTfLk4,33535
|
|
157
|
+
kolega_code/sandbox/utils.py,sha256=OjWDsXz7VpJpl1PKFisNVqWpeCqYswTSWTOLip-lmEw,8061
|
|
158
|
+
kolega_code/services/base.py,sha256=wGgCIRZi8hX4S5S-GimoqC4O9_dEbMjAIgLuJEGgU2E,7620
|
|
159
|
+
kolega_code/services/browser.py,sha256=3ha0tWDYUkKLi4rBNlzMAAW5HDW_4zEruAqokLGaIB4,18344
|
|
160
|
+
kolega_code/services/file_system.py,sha256=8yl25CaghLK-_e_sOhZHwDB5r4IRq_GZHulx9h5rKME,22668
|
|
161
|
+
kolega_code/services/html.py,sha256=sV6HU9pTSYDgwn4Pr4blHyVmhmE7fD-lUaxZtdweSLc,8001
|
|
162
|
+
kolega_code/services/terminal.py,sha256=UtmvmNguClfy5Pa0le6xsAfWldwIcyI288JwPlNTkMQ,33731
|
|
163
|
+
kolega_code/tools/__init__.py,sha256=296Q36x1PBTovK4kpUK1T1ZLIWUeiZgnyY9bXLDGfbM,712
|
|
164
|
+
kolega_code/tools/core.py,sha256=pa6KVG86cXtNaF_HT-Afveuiq8IX8x208IrUNCNNQYQ,1113
|
|
165
|
+
kolega_code/tools/definitions.py,sha256=Haw9KWLNtypvc3vofRaDaX0Kxilj17fqntTUiiUhEjI,2578
|
|
166
|
+
kolega_code/tools/registry.py,sha256=AhfAhpPC-49RBH1PVvwJcZKprXFANqS5-RghxVYbvqA,2478
|
|
167
|
+
kolega_code-0.1.0.dist-info/METADATA,sha256=bXbUP1EaXHmNxqpVopZ-vmmqXUUENdXk5n40ky2e7J0,5616
|
|
168
|
+
kolega_code-0.1.0.dist-info/WHEEL,sha256=mffPy8wBnZQn2VnJUU5jE99KsxaSfiyMHV9Yt0aLVxs,87
|
|
169
|
+
kolega_code-0.1.0.dist-info/entry_points.txt,sha256=RoAZYNg_7kSVI0eKigXNpDUIWW4T4OKdu7kFkaG3I2Q,58
|
|
170
|
+
kolega_code-0.1.0.dist-info/licenses/LICENSE,sha256=bGIi1IqApyT2G4aB7xKPMgiq5-8kOGN609ZkhT_-qbg,1068
|
|
171
|
+
kolega_code-0.1.0.dist-info/RECORD,,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Kolega Team
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|