feat: remove tasks

This commit is contained in:
2026-01-18 13:11:51 +01:00
parent 62280265b4
commit 1310d1770a
5 changed files with 15 additions and 157 deletions

View File

@@ -21,25 +21,3 @@ test:
# Docker Shell
shell:
docker compose run --rm dev-shell
# Task Tracker Integration
PYTHON=python3
TASK_CLI=tasks/cli.py
task-list:
$(PYTHON) $(TASK_CLI) list
task-add:
$(PYTHON) $(TASK_CLI) add "$(title)"
task-done:
$(PYTHON) $(TASK_CLI) done $(id)
task-update:
$(PYTHON) $(TASK_CLI) update $(id) $(status)
task-delete:
$(PYTHON) $(TASK_CLI) delete $(id)
task-filter:
$(PYTHON) $(TASK_CLI) list --status $(status)

View File

@@ -98,39 +98,37 @@ const emit = defineEmits(['view-profile']);
msg.status === 'failed' ? 'bg-red-500/5 border border-red-500/20' : 'hover:bg-white/[0.02]'
]"
>
<!-- Avatar -->
<!-- Avatar - always show for every message -->
<div class="w-10 flex-shrink-0">
<div
v-if="index === 0 || currentMessages[index-1].walletAddress !== msg.walletAddress"
class="w-10 h-10 rounded-full flex items-center justify-center text-white font-bold text-sm shadow-lg border border-white/10 mt-1 cursor-pointer hover:opacity-80 transition-opacity"
:class="msg.walletAddress === walletAddress ? 'bg-gradient-to-br from-violet-500 to-fuchsia-600' : 'bg-discord-sidebar'"
@click="emit('view-profile', msg.walletAddress)"
>
{{ msg.username?.substring(0, 2).toUpperCase() }}
</div>
<div
v-else
class="w-10 text-[10px] text-crypto-muted opacity-0 group-hover:opacity-100 text-right pr-2 pt-1.5 transition-opacity"
>
{{ formatTime(msg.timestamp) }}
{{ msg.username?.substring(0, 2).toUpperCase() || '??' }}
</div>
</div>
<!-- Content -->
<div class="flex-1 min-w-0">
<div
v-if="index === 0 || currentMessages[index-1].walletAddress !== msg.walletAddress"
class="flex items-center gap-2 mb-1 flex-wrap"
>
<div class="flex items-center gap-2 mb-1 flex-wrap">
<span
:class="['text-sm font-bold hover:underline cursor-pointer', msg.walletAddress === walletAddress ? 'text-violet-400' : 'text-white']"
@click="emit('view-profile', msg.walletAddress)"
>
{{ msg.username }}
{{ msg.username || 'Anonymous' }}
</span>
<!-- Status LED next to username -->
<div
v-if="msg.status"
class="led"
:class="{
'led-orange animate-pulse': msg.status === 'pending',
'led-green': msg.status === 'validated',
'led-red': msg.status === 'failed'
}"
/>
<span class="text-[10px] text-crypto-muted">{{ formatTime(msg.timestamp) }}</span>
</div>
<!-- Message Content & Status -->
@@ -139,7 +137,7 @@ const emit = defineEmits(['view-profile']);
{{ msg.content }}
</div>
<!-- Transaction ID & Status Pill for all messages -->
<!-- Transaction ID (show on hover) -->
<div class="flex items-center gap-2 flex-shrink-0 mt-1">
<span
v-if="msg.txId && msg.status !== 'failed'"
@@ -155,16 +153,6 @@ const emit = defineEmits(['view-profile']);
<Copy v-else size="10" />
</button>
</span>
<div
v-if="msg.status"
class="led"
:class="{
'led-orange animate-pulse': msg.status === 'pending',
'led-green': msg.status === 'validated',
'led-red': msg.status === 'failed'
}"
/>
</div>
</div>

View File

@@ -1,62 +0,0 @@
import argparse
from db import add_task, delete_task, init_db, list_tasks, update_task
def main():
init_db()
parser = argparse.ArgumentParser(description="Plexus Task Tracker")
subparsers = parser.add_subparsers(dest="command")
# Add task
add_parser = subparsers.add_parser("add", help="Add a new task")
add_parser.add_argument("title", help="Task title")
# List tasks
list_parser = subparsers.add_parser("list", help="List tasks")
list_parser.add_argument("--status", help="Filter by status")
# Update task
update_parser = subparsers.add_parser("update", help="Update task status")
update_parser.add_argument("id", type=int, help="Task ID")
update_parser.add_argument("status", help="New status")
# Done task
done_parser = subparsers.add_parser("done", help="Mark task as done")
done_parser.add_argument("id", type=int, help="Task ID")
# Delete task
delete_parser = subparsers.add_parser("delete", help="Delete a task")
delete_parser.add_argument("id", type=int, help="Task ID")
args = parser.parse_args()
if args.command == "add":
add_task(args.title)
print(f"Task added: {args.title}")
elif args.command == "list":
tasks = list_tasks(args.status)
print(f"{'ID':<5} {'Status':<15} {'Title'}")
print("-" * 40)
for t in tasks:
print(f"{t[0]:<5} {t[2]:<15} {t[1]}")
elif args.command == "update":
update_task(args.id, args.status)
print(f"Task {args.id} updated to {args.status}")
elif args.command == "done":
update_task(args.id, "done")
print(f"Task {args.id} marked as done")
elif args.command == "delete":
delete_task(args.id)
print(f"Task {args.id} deleted")
else:
parser.print_help()
if __name__ == "__main__":
main()

View File

@@ -1,46 +0,0 @@
import duckdb
DB_PATH = "tasks/tasks.duckdb"
def init_db():
con = duckdb.connect(DB_PATH)
con.execute("""
CREATE TABLE IF NOT EXISTS tasks (
id INTEGER PRIMARY KEY,
title VARCHAR,
status VARCHAR DEFAULT 'todo',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
""")
con.execute("CREATE SEQUENCE IF NOT EXISTS seq_task_id START 1")
con.close()
def get_connection():
return duckdb.connect(DB_PATH)
def add_task(title):
con = get_connection()
con.execute("INSERT INTO tasks (id, title) VALUES (nextval('seq_task_id'), ?)", [title])
con.close()
def list_tasks(status=None):
con = get_connection()
if status:
res = con.execute("SELECT * FROM tasks WHERE status = ? ORDER BY id", [status]).fetchall()
else:
res = con.execute("SELECT * FROM tasks ORDER BY id").fetchall()
con.close()
return res
def update_task(task_id, status):
con = get_connection()
con.execute("UPDATE tasks SET status = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ?", [status, task_id])
con.close()
def delete_task(task_id):
con = get_connection()
con.execute("DELETE FROM tasks WHERE id = ?", [task_id])
con.close()

Binary file not shown.