Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 45 additions & 6 deletions veadk/tools/builtin_tools/execute_skills.py
Original file line number Diff line number Diff line change
Expand Up @@ -157,23 +157,62 @@ def execute_skills(
code = f"""
import subprocess
import os
import time
import select
import sys

env = os.environ.copy()
for key, value in {env_vars!r}.items():
if key not in env:
env[key] = value

result = subprocess.run(
process = subprocess.Popen(
{cmd!r},
cwd='/home/gem/veadk_skills',
capture_output=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True,
env=env,
timeout={timeout - 10},
bufsize=1,
universal_newlines=True
)
print(result.stdout)
if result.stderr:
print(result.stderr)

start_time = time.time()
timeout = {timeout - 10}

with open('/tmp/agent.log', 'w') as log_file:
while True:
if time.time() - start_time > timeout:
process.kill()
log_file.write('log_type=stderr request_id=x function_id=y revision_number=1 Process timeout\\n')
break

reads = [process.stdout.fileno(), process.stderr.fileno()]
ret = select.select(reads, [], [], 1)

for fd in ret[0]:
if fd == process.stdout.fileno():
line = process.stdout.readline()
if line:
log_file.write(f'log_type=stdout request_id=x function_id=y revision_number=1 {{line}}')
log_file.flush()
if fd == process.stderr.fileno():
line = process.stderr.readline()
if line:
log_file.write(f'log_type=stderr request_id=x function_id=y revision_number=1 {{line}}')
log_file.flush()

if process.poll() is not None:
break

for line in process.stdout:
log_file.write(f'log_type=stdout request_id=x function_id=y revision_number=1 {{line}}')
for line in process.stderr:
log_file.write(f'log_type=stderr request_id=x function_id=y revision_number=1 {{line}}')

with open('/tmp/agent.log', 'r') as log_file:
output = log_file.read()
print(output)
"""

res = ve_request(
Expand Down