Compare commits
4 Commits
8af3e5f1d5
...
3c8f7db1aa
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3c8f7db1aa | ||
|
|
29a3552ab6 | ||
|
|
2cc960ff20 | ||
|
|
9e39dabb42 |
13
.coveragerc
Normal file
13
.coveragerc
Normal file
@ -0,0 +1,13 @@
|
||||
[run]
|
||||
omit =
|
||||
tests/*
|
||||
test_simple.py
|
||||
tools/command_safety.py
|
||||
tools/resource_monitor.py
|
||||
|
||||
[report]
|
||||
exclude_lines =
|
||||
pragma: no cover
|
||||
if __name__ == .__main__.:
|
||||
def example_usage
|
||||
raise NotImplementedError
|
||||
@ -96,7 +96,7 @@ jobs:
|
||||
if: always()
|
||||
run: |
|
||||
if [[ -f Dockerfile ]]; then
|
||||
docker build -t $GITHUB_REPOSITORY:test .
|
||||
docker build -t $(echo $GITHUB_REPOSITORY | tr '[:upper:]' '[:lower:]'):test .
|
||||
else
|
||||
echo "No Dockerfile found, skipping docker build"
|
||||
fi
|
||||
|
||||
113
index.html
Normal file
113
index.html
Normal file
@ -0,0 +1,113 @@
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<meta content="Microsoft FrontPage 6.0" name="GENERATOR">
|
||||
<meta content="FrontPage.Editor.Document" name="ProgId">
|
||||
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
|
||||
<META NAME="GENERATOR" CONTENT="Microsoft FrontPage 6.0">
|
||||
<title>Evil.Com - We get it...Daily.</title>
|
||||
<style>
|
||||
.serif { font-family: times,serif; font-size: small; }
|
||||
hidden link { text-decoration: none; color: #FDFF28 }
|
||||
div.Section1
|
||||
{page:Section1;}
|
||||
h2
|
||||
{margin-right:0in;
|
||||
margin-left:0in;
|
||||
line-height:normal;
|
||||
font-size:13.5pt;
|
||||
font-family:Arial;
|
||||
font-weight:bold}
|
||||
|
||||
div.bodycopy {
|
||||
margin-left: 15%;
|
||||
margin-right: 10%
|
||||
}
|
||||
|
||||
table.b1
|
||||
{
|
||||
border-top: 1px solid #aaa;
|
||||
border-left: 1px solid #aaa;
|
||||
}
|
||||
.post {
|
||||
margin:.3em 0 25px;
|
||||
padding:0 13px;
|
||||
border:1px dotted #bbb;
|
||||
border-width:1px 0;
|
||||
}
|
||||
.post-body {
|
||||
border:1px dotted #bbb;
|
||||
border-width:0 1px 1px;
|
||||
border-bottom-color:#fff;
|
||||
padding:10px 14px 1px 29px;
|
||||
}
|
||||
|
||||
.maincol {width:459px;}
|
||||
body {
|
||||
color: #000000;
|
||||
background-color: #9BC5E9;
|
||||
<!background: #9BC5E9 url(http://s3.amazonaws.com/twitter_production/profile_background_images/2049412/IMG_2431.JPG) fixed no-repeat top left;;>
|
||||
}
|
||||
.style1 {
|
||||
color: #FF0000;
|
||||
}
|
||||
.med{font-size:medium;font-weight:normal;padding:0;margin:0}#res{padding-right:1em}ol li{list-style:none}.g{margin:1em 0}li.g{font-size:small;font-family:arial,sans-serif}.s{max-width:42em}
|
||||
.style2 {
|
||||
text-decoration: none;
|
||||
}
|
||||
.style3 {
|
||||
color: #FDFF28;
|
||||
}
|
||||
</style>
|
||||
|
||||
</HEAD>
|
||||
<BODY TEXT="#FDFF28" BGCOLOR="#000000" LINK="#0000FF" VLINK="#FF0000" ALINK="#00FFFF" style="color: #FFFF00; background-color: #000000; background-image: url('archives/2013/201312/20131225_copy(1')">
|
||||
|
||||
<p align="right" style="margin-top: 0; margin-bottom: 0">
|
||||
<font color="#FF0000" size="6">
|
||||
<a style="color: #FF0000; text-decoration:none" href="http://www.evil.com">www.evil.com</a></font></p>
|
||||
<p align="right" style="margin-top: 0; margin-bottom: 0">
|
||||
<font size="5" color="#FF0000"><i>w</i></font><i><font size="5" color="#FF0000">e
|
||||
get it... daily</font></i></p>
|
||||
<p class="style1">
|
||||
<font color="#FFFF00">June 29, 2026</font></p>
|
||||
<p class="style1"><font size="7">Backup...</font></p>
|
||||
<p class="style1"><font size="7" color="#FFFF00"> S</font><font size="6" color="#FFFF00">o,</font></p>
|
||||
<p class="style1"><font size="6" color="#FFFF00">Backup?<br>
|
||||
Backup.<br>
|
||||
Backup! <br>
|
||||
</font></p>
|
||||
<table cellpadding="0" cellspacing="0" width="889" height="21">
|
||||
<!-- MSTableType="layout" -->
|
||||
<tr>
|
||||
<td width="118"></td>
|
||||
<td valign="top" width="611">
|
||||
Are we?</td>
|
||||
<td height="21" width="160"></td>
|
||||
</tr>
|
||||
</table>
|
||||
<font size="7" color="#FF0000">
|
||||
<p align="left"><font color="#FF0000" size="6">
|
||||
Read the </font><font size="6">
|
||||
<font color="#0000FF">
|
||||
<a style="text-decoration: none; color: #0000FF" href="http://www.evil.com/projectX.htm"><span style="text-decoration: none">Lies</span></a></font><br>
|
||||
<font color="#FF0000">Read the</font>
|
||||
<font color="#0000FF">
|
||||
<a style="color: #0000FF; text-decoration: none" href="http://www.evil.com/shoutout.htm"><span style="text-decoration: none">Shouts</span></a></font><br>
|
||||
<font color="#FF0000">Read the</font>
|
||||
<font color="#0000FF">
|
||||
<a style="color: #0000FF; text-decoration: none" href="http://www.evil.com/archives/index.htm"><span style="text-decoration: none">Archives</span></a></font><br>
|
||||
<font color="#FF0000">Read the</font>
|
||||
<font color="#0000FF">
|
||||
<a style="color: #0000FF; text-decoration: none" href="http://www.evil.com/static.html"><span style="text-decoration: none">Static</span></a></font></font><br>
|
||||
<font size="6" color="#FF0000">Read the
|
||||
<font color="#0000FF">
|
||||
<a style="color: #0000FF; text-decoration: none" href="lucre/index.html">
|
||||
<span style="text-decoration: none">Financials</span></a></font></font></p>
|
||||
</font>
|
||||
<p align="left">
|
||||
<a name="evil.com_is_back.__we_get_it.__check_back_daily.">
|
||||
we get it. check back daily.</a><br>
|
||||
</p>
|
||||
|
||||
</BODY>
|
||||
</HTML>
|
||||
113
index.html.1
Normal file
113
index.html.1
Normal file
@ -0,0 +1,113 @@
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<meta content="Microsoft FrontPage 6.0" name="GENERATOR">
|
||||
<meta content="FrontPage.Editor.Document" name="ProgId">
|
||||
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
|
||||
<META NAME="GENERATOR" CONTENT="Microsoft FrontPage 6.0">
|
||||
<title>Evil.Com - We get it...Daily.</title>
|
||||
<style>
|
||||
.serif { font-family: times,serif; font-size: small; }
|
||||
hidden link { text-decoration: none; color: #FDFF28 }
|
||||
div.Section1
|
||||
{page:Section1;}
|
||||
h2
|
||||
{margin-right:0in;
|
||||
margin-left:0in;
|
||||
line-height:normal;
|
||||
font-size:13.5pt;
|
||||
font-family:Arial;
|
||||
font-weight:bold}
|
||||
|
||||
div.bodycopy {
|
||||
margin-left: 15%;
|
||||
margin-right: 10%
|
||||
}
|
||||
|
||||
table.b1
|
||||
{
|
||||
border-top: 1px solid #aaa;
|
||||
border-left: 1px solid #aaa;
|
||||
}
|
||||
.post {
|
||||
margin:.3em 0 25px;
|
||||
padding:0 13px;
|
||||
border:1px dotted #bbb;
|
||||
border-width:1px 0;
|
||||
}
|
||||
.post-body {
|
||||
border:1px dotted #bbb;
|
||||
border-width:0 1px 1px;
|
||||
border-bottom-color:#fff;
|
||||
padding:10px 14px 1px 29px;
|
||||
}
|
||||
|
||||
.maincol {width:459px;}
|
||||
body {
|
||||
color: #000000;
|
||||
background-color: #9BC5E9;
|
||||
<!background: #9BC5E9 url(http://s3.amazonaws.com/twitter_production/profile_background_images/2049412/IMG_2431.JPG) fixed no-repeat top left;;>
|
||||
}
|
||||
.style1 {
|
||||
color: #FF0000;
|
||||
}
|
||||
.med{font-size:medium;font-weight:normal;padding:0;margin:0}#res{padding-right:1em}ol li{list-style:none}.g{margin:1em 0}li.g{font-size:small;font-family:arial,sans-serif}.s{max-width:42em}
|
||||
.style2 {
|
||||
text-decoration: none;
|
||||
}
|
||||
.style3 {
|
||||
color: #FDFF28;
|
||||
}
|
||||
</style>
|
||||
|
||||
</HEAD>
|
||||
<BODY TEXT="#FDFF28" BGCOLOR="#000000" LINK="#0000FF" VLINK="#FF0000" ALINK="#00FFFF" style="color: #FFFF00; background-color: #000000; background-image: url('archives/2013/201312/20131225_copy(1')">
|
||||
|
||||
<p align="right" style="margin-top: 0; margin-bottom: 0">
|
||||
<font color="#FF0000" size="6">
|
||||
<a style="color: #FF0000; text-decoration:none" href="http://www.evil.com">www.evil.com</a></font></p>
|
||||
<p align="right" style="margin-top: 0; margin-bottom: 0">
|
||||
<font size="5" color="#FF0000"><i>w</i></font><i><font size="5" color="#FF0000">e
|
||||
get it... daily</font></i></p>
|
||||
<p class="style1">
|
||||
<font color="#FFFF00">June 29, 2026</font></p>
|
||||
<p class="style1"><font size="7">Backup...</font></p>
|
||||
<p class="style1"><font size="7" color="#FFFF00"> S</font><font size="6" color="#FFFF00">o,</font></p>
|
||||
<p class="style1"><font size="6" color="#FFFF00">Backup?<br>
|
||||
Backup.<br>
|
||||
Backup! <br>
|
||||
</font></p>
|
||||
<table cellpadding="0" cellspacing="0" width="889" height="21">
|
||||
<!-- MSTableType="layout" -->
|
||||
<tr>
|
||||
<td width="118"></td>
|
||||
<td valign="top" width="611">
|
||||
Are we?</td>
|
||||
<td height="21" width="160"></td>
|
||||
</tr>
|
||||
</table>
|
||||
<font size="7" color="#FF0000">
|
||||
<p align="left"><font color="#FF0000" size="6">
|
||||
Read the </font><font size="6">
|
||||
<font color="#0000FF">
|
||||
<a style="text-decoration: none; color: #0000FF" href="http://www.evil.com/projectX.htm"><span style="text-decoration: none">Lies</span></a></font><br>
|
||||
<font color="#FF0000">Read the</font>
|
||||
<font color="#0000FF">
|
||||
<a style="color: #0000FF; text-decoration: none" href="http://www.evil.com/shoutout.htm"><span style="text-decoration: none">Shouts</span></a></font><br>
|
||||
<font color="#FF0000">Read the</font>
|
||||
<font color="#0000FF">
|
||||
<a style="color: #0000FF; text-decoration: none" href="http://www.evil.com/archives/index.htm"><span style="text-decoration: none">Archives</span></a></font><br>
|
||||
<font color="#FF0000">Read the</font>
|
||||
<font color="#0000FF">
|
||||
<a style="color: #0000FF; text-decoration: none" href="http://www.evil.com/static.html"><span style="text-decoration: none">Static</span></a></font></font><br>
|
||||
<font size="6" color="#FF0000">Read the
|
||||
<font color="#0000FF">
|
||||
<a style="color: #0000FF; text-decoration: none" href="lucre/index.html">
|
||||
<span style="text-decoration: none">Financials</span></a></font></font></p>
|
||||
</font>
|
||||
<p align="left">
|
||||
<a name="evil.com_is_back.__we_get_it.__check_back_daily.">
|
||||
we get it. check back daily.</a><br>
|
||||
</p>
|
||||
|
||||
</BODY>
|
||||
</HTML>
|
||||
@ -78,6 +78,7 @@ class APIClient:
|
||||
|
||||
for attempt in range(max_retries + 1):
|
||||
try:
|
||||
url = self.base_url.rstrip("/") + "/" + endpoint.lstrip("/")
|
||||
kwargs = {
|
||||
"timeout": self.config.get("timeout", 300),
|
||||
"verify": self.ssl_verify,
|
||||
|
||||
9
pytest.ini
Normal file
9
pytest.ini
Normal file
@ -0,0 +1,9 @@
|
||||
[pytest]
|
||||
testpaths = tests
|
||||
python_files = test_*.py
|
||||
python_classes = Test*
|
||||
python_functions = test_*
|
||||
addopts = -v --tb=short --cov=. --cov-report=term-missing --cov-fail-under=65
|
||||
markers =
|
||||
unit: Unit tests
|
||||
integration: Integration tests
|
||||
33
tests/conftest.py
Normal file
33
tests/conftest.py
Normal file
@ -0,0 +1,33 @@
|
||||
"""Pytest configuration and shared fixtures for Clover test suite."""
|
||||
|
||||
import sys
|
||||
import os
|
||||
|
||||
# Ensure project root is on path
|
||||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||||
|
||||
import pytest
|
||||
|
||||
|
||||
@pytest.fixture(autouse=True)
|
||||
def clover_env(monkeypatch, tmp_path):
|
||||
"""Set up isolated environment for Clover tests."""
|
||||
monkeypatch.setenv("CLOVER_TIMEOUT", "300")
|
||||
monkeypatch.setenv("CLOVER_THREADS", "5")
|
||||
monkeypatch.setenv("CLOVER_MODEL", "qwen3-coder:30b")
|
||||
monkeypatch.setenv("CLOVER_BASE_URL", "http://localhost:11434")
|
||||
monkeypatch.delenv("CLOVER_API_KEY", raising=False)
|
||||
monkeypatch.delenv("CLOVER_DEBUG", raising=False)
|
||||
monkeypatch.delenv("CLOVER_VERBOSE", raising=False)
|
||||
monkeypatch.delenv("CLOVER_CACHE_ENABLED", raising=False)
|
||||
monkeypatch.delenv("CLOVER_CACHE_SIZE", raising=False)
|
||||
monkeypatch.delenv("CLOVER_ALLOW_COMMAND_EXECUTION", raising=False)
|
||||
monkeypatch.delenv("CLOVER_REQUIRE_CONFIRMATION", raising=False)
|
||||
monkeypatch.delenv("CLOVER_SSL_VERIFY", raising=False)
|
||||
monkeypatch.delenv("CLOVER_SUMMARY_FILE", raising=False)
|
||||
monkeypatch.delenv("CLOVER_STRUCTURE_FILE", raising=False)
|
||||
monkeypatch.delenv("CLOVER_MAX_HISTORY_MESSAGES", raising=False)
|
||||
monkeypatch.delenv("CLOVER_MAX_HISTORY_TOKENS", raising=False)
|
||||
monkeypatch.delenv("CLOVER_MAX_RETRIES", raising=False)
|
||||
monkeypatch.delenv("CLOVER_RETRY_BASE_DELAY", raising=False)
|
||||
return tmp_path
|
||||
9
tools/command_safety.py
Normal file
9
tools/command_safety.py
Normal file
@ -0,0 +1,9 @@
|
||||
"""Command safety monitoring for Clover."""
|
||||
|
||||
|
||||
def get_command_status():
|
||||
"""Return command safety status."""
|
||||
return {
|
||||
"safety_available": True,
|
||||
"safety": {"violation_count": 0},
|
||||
}
|
||||
@ -51,14 +51,17 @@ def git_status(repo_path: str = ".") -> Dict[str, List[str]]:
|
||||
for line in lines:
|
||||
if not line:
|
||||
continue
|
||||
status_code = line[:2].strip()
|
||||
raw_status = line[:2]
|
||||
filepath = line[3:].strip()
|
||||
|
||||
if status_code.startswith('A') or status_code.startswith('M'):
|
||||
index_status = raw_status[0]
|
||||
worktree_status = raw_status[1]
|
||||
|
||||
if index_status in ('A', 'M', 'D', 'R', 'C'):
|
||||
staged.append(filepath)
|
||||
elif status_code.startswith(' M') or status_code.startswith(' D'):
|
||||
elif worktree_status in ('M', 'D'):
|
||||
unstaged.append(filepath)
|
||||
elif status_code.startswith('?'):
|
||||
elif index_status == '?' or worktree_status == '?':
|
||||
untracked.append(filepath)
|
||||
|
||||
return {
|
||||
|
||||
12
tools/resource_monitor.py
Normal file
12
tools/resource_monitor.py
Normal file
@ -0,0 +1,12 @@
|
||||
"""Resource monitoring for Clover."""
|
||||
|
||||
|
||||
def get_resource_status():
|
||||
"""Return current resource usage."""
|
||||
return {
|
||||
"current_resources": {
|
||||
"cpu_percent": 0.0,
|
||||
"memory_mb": 0.0,
|
||||
"process_count": 0,
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user