// pypi package
aurafarmer
PRO — Terminal AI Coding Agent by SPRUKY
versions
12
license
MIT
first publish
2026-05-07
tarball
15,509 B
AUTO-PUBLISHED·1 version indexed·latest published 2026-05-17
// offending code· @0.3.0· 4 files flagged
llm: benign · 0.85→ No suspicious destination, no remote-exec shape — 1 known-vendor host(s).
- @0.3.0··AUTO-PUBLISHEDheuristic 75/100static flags 4llm benign (0.85) via ollamapypi-sdist-setup-pypypi-no-authormature-packageai-agent-frameworkosv-flagged:MAL-2026-4741py-setup-cmdclasspy-urllib-requestchild-process-spawnpy-requests-post
→ No suspicious destination, no remote-exec shape — 1 known-vendor host(s).
// offending code· 4 files flaggedpatterns: 4
--- aurafarmer-0.3.0/setup.py (excerpt) --- from setuptools import setup from setuptools.command.install import install from setuptools.command.develop import develop class PostInstall(install): def run(self): install.run(self) try: from aurex.welcome import show show() except Exception: pass class PostDevelop(develop): def run(self): develop.run(self) try: from aurex.welcome import show show() except Exception: pass setup( cmdclass={ "install": PostInstall, "develop": PostDevelop, } ) --- aurafarmer-0.3.0/aurex/agent.py (excerpt) --- import json, threading, queue import urllib.request import urllib.error from . import config from . import tools as tool_module SYSTEM_PROMPT = """\ You are Aurex, an elite AI coding agent running in the developer's terminal. You have tools to read/write files, run shell commands, search code, search the web, and more. When asked to do something, DO IT — use tools, don't just describe. Be concise. No filler. No disclaimers. """ # ── Single-key stream ────────────────────────────────────────────────────────── def _stream_request(messages: list, tools: list, api_key: str = None): key = api_key or config.get_api_key() if not key: raise ValueError("No API key configured. Please log in first.") payload = json.dumps({ "model": config.get_real_model(), "messages": messages, "tools": tools, "stream": True, "max_tokens": 4096, }).encode() req = urllib.request.Request( f"{config.BASE_URL}/chat/completions", data=payload, headers={ "Authorization": f"Bearer {key}", "Content-Type": "application/json", "Accept": "text/event-stream", }, method="POST", ) # timeout=None = unlimited — server decides when to close with urllib.request.urlopen(req, timeout=None) as resp: for raw in resp: line = raw.decode("utf-8").strip() if line: yield line # ── Race: escalating ba --- aurafarmer-0.3.0/aurex/main.py (excerpt) --- import os, sys, threading, requests from prompt_toolkit import PromptSession from prompt_toolkit.formatted_text import HTML from prompt_toolkit.styles import Style from prompt_toolkit.keys import Keys from prompt_toolkit.key_binding import KeyBindings from . import config, ui from .agent import AurexAgent from . import tools as tool_module R=ui.R; BR=ui.BR; DR=ui.DR; G=ui.G; BG=ui.BG; W=ui.W; DIM=ui.DIM; RST=ui.RST THINK_TAG = "<think>" THINK_INJECT = "\n\nThink carefully step by step before giving your final answer." # ── prompt_toolkit session ───────────────────────────────────────────────────── PT_STYLE = Style.from_dict({ "bottom-toolbar": "bg:#1a0000 #cc3333", "bottom-toolbar.text": "bg:#1a0000 #cc3333", "prompt": "#cc0000 bold", }) def _toolbar(): model = config.get_model() email = config.get_email() user = email.split("@")[0] if email else "guest" return HTML( f' <b style="color:#ff4444">aurex/{model}</b>' f' <style bg="#1a0000" fg="#662222">·</style>' f' <style fg="#884444">{user}</style>' f' <style bg="#1a0000" fg="#552222">· x inspect · tab model · help · exit</style> ' ) # Key bindings — Tab opens model selector _kb = KeyBindings() @_kb.add("tab") def _tab(event): event.app.exit(result="__TAB__") _session = None def _make_session(): global _session _session = PromptSession( bottom_toolbar=_toolbar, style=PT_STYLE, key_bindings --- aurafarmer-0.3.0/aurex/tools.py (excerpt) --- import subprocess import urllib.request import urllib.parse import json from pathlib import Path # ── Tool schemas ─────────────────────────────────────────────────────────────── TOOL_DEFINITIONS = [ { "type": "function", "function": { "name": "read_file", "description": "Read the full contents of a file on disk.", "parameters": { "type": "object", "properties": { "path": {"type": "string", "description": "Path to the file"} }, "required": ["path"], }, }, }, { "type": "function", "function": { "name": "write_file", "description": "Create or overwrite a file with the given content.", "parameters": { "type": "object", "properties": { "path": {"type": "string", "description": "Path to the file"}, "content": {"type": "string", "description": "Content to write"}, }, "required": ["path", "content"], }, }, }, { "type": "function", "function": { "name": "run_command", "description": "Execute a shell command and return stdout + stderr.", "parameters": { "type": "object", "properties": { "command": {"type": "string", "description": "S
