Files
eepp/projects/scripts/acp_mock_agent.py
2026-03-23 14:25:44 -03:00

152 lines
6.0 KiB
Python

import sys
import json
import time
def send_notification(method, params):
msg = {"jsonrpc": "2.0", "method": method, "params": params}
sys.stdout.write(json.dumps(msg) + "\n")
sys.stdout.flush()
def send_request(msg_id, method, params):
msg = {"jsonrpc": "2.0", "id": msg_id, "method": method, "params": params}
sys.stdout.write(json.dumps(msg) + "\n")
sys.stdout.flush()
def main():
last_req_id = 1000
for line in sys.stdin:
try:
req = json.loads(line)
method = req.get("method")
msg_id = req.get("id")
if not method and "result" in req:
# This is a response to one of our requests (like terminal/create)
result = req.get("result")
if "terminalId" in result:
term_id = result["terminalId"]
# Now link this terminal to our tool call
send_notification("session/update", {
"sessionId": "test-session",
"update": {
"sessionUpdate": "tool_call_update",
"toolCallId": "build-1",
"status": "running",
"terminalId": term_id
}
})
# Wait 2 seconds then complete it
time.sleep(2)
send_notification("session/update", {
"sessionId": "test-session",
"update": {
"sessionUpdate": "tool_call_update",
"toolCallId": "build-1",
"status": "completed",
"rawOutput": "Build successful: 0 errors, 0 warnings"
}
})
# Final message
send_notification("session/update", {
"sessionId": "test-session",
"update": {
"sessionUpdate": "agent_message_chunk",
"content": {"text": "\n\nAll tasks finished successfully!"}
}
})
continue
if method == "initialize":
sys.stdout.write(json.dumps({"jsonrpc": "2.0", "id": msg_id, "result": {
"protocolVersion": 1,
"agentCapabilities": {"loadSession": True}
}}) + "\n")
sys.stdout.flush()
elif method == "session/new":
sys.stdout.write(json.dumps({"jsonrpc": "2.0", "id": msg_id, "result": {
"sessionId": "test-session", "configOptions": []
}}) + "\n")
sys.stdout.flush()
# Send available commands
send_notification("session/update", {
"sessionId": "test-session",
"update": {
"sessionUpdate": "available_commands_update",
"availableCommands": [
{"name": "search", "description": "Search in codebase"},
{"name": "build", "description": "Build the project"},
{"name": "test", "description": "Run tests"}
]
}
})
elif method == "session/prompt":
# 1. Send Plan
send_notification("session/update", {
"sessionId": "test-session",
"update": {
"sessionUpdate": "plan",
"plan": {
"entries": [
{"title": "Analyzing project structure", "status": "completed"},
{"title": "Running build tests", "status": "running"},
{"title": "Deploying changes", "status": "pending"}
]
}
}
})
# 2. Tool Call 1 (Synchronous style)
send_notification("session/update", {
"sessionId": "test-session",
"update": {
"sessionUpdate": "tool_call",
"toolCallId": "search-1",
"title": "Searching for UI components",
"status": "completed",
"rawInput": {"pattern": "UIButton", "dir": "src/"},
"rawOutput": ["src/ui/button.cpp", "src/ui/button.hpp"]
}
})
# 3. Thought
send_notification("session/update", {
"sessionId": "test-session",
"update": {
"sessionUpdate": "agent_thought_chunk",
"content": {"text": "I found the buttons. Now I will try to build the project."}
}
})
# 4. Tool Call 2 (Terminal style)
send_notification("session/update", {
"sessionId": "test-session",
"update": {
"sessionUpdate": "tool_call",
"toolCallId": "build-1",
"title": "Compiling project",
"status": "running"
}
})
# 5. Request Terminal for Tool Call 2
last_req_id += 1
send_request(last_req_id, "terminal/create", {
"sessionId": "test-session",
"command": "make",
"args": ["-j4"]
})
# Confirm prompt request
sys.stdout.write(json.dumps({"jsonrpc": "2.0", "id": msg_id, "result": {"stopReason": "complete"}}) + "\n")
sys.stdout.flush()
except Exception as e:
sys.stderr.write(f"Error: {str(e)}\n")
if __name__ == "__main__":
main()