|
28 | 28 | """ |
29 | 29 |
|
30 | 30 | from __future__ import annotations |
31 | | - |
32 | 31 | import argparse |
33 | 32 | import asyncio |
34 | 33 | import inspect |
@@ -96,9 +95,7 @@ async def start(self) -> None: |
96 | 95 | """Start listening. Removes stale socket file if present.""" |
97 | 96 | if os.path.exists(self.sock_path): |
98 | 97 | os.unlink(self.sock_path) |
99 | | - self._server = await asyncio.start_unix_server( |
100 | | - self._handle_client, path=self.sock_path |
101 | | - ) |
| 98 | + self._server = await asyncio.start_unix_server(self._handle_client, path=self.sock_path) |
102 | 99 | os.chmod(self.sock_path, 0o777) |
103 | 100 | logger.info("%s listening on %s", self.__class__.__name__, self.sock_path) |
104 | 101 | await self._server.serve_forever() |
@@ -139,10 +136,12 @@ async def _dispatch(self, request: dict) -> dict: |
139 | 136 | if cmd == "ping": |
140 | 137 | return {"status": "ok", "type": self.daemon_type} |
141 | 138 | if cmd == "shutdown": |
| 139 | + |
142 | 140 | async def _delayed_close(): |
143 | 141 | await asyncio.sleep(0.1) |
144 | 142 | if self._server: |
145 | 143 | self._server.close() |
| 144 | + |
146 | 145 | asyncio.create_task(_delayed_close()) |
147 | 146 | return {"status": "shutting_down"} |
148 | 147 | return {"error": f"Unknown command: {cmd}"} |
@@ -197,18 +196,22 @@ async def _dispatch(self, request: dict) -> dict: |
197 | 196 | name = request.get("name") |
198 | 197 | parameters = request.get("parameters", {}) |
199 | 198 | if not name: |
200 | | - return dataclass2dict(ActionReturn( |
201 | | - errmsg="Missing 'name' in request", |
202 | | - state=ActionStatusCode.ARGS_ERROR, |
203 | | - )) |
| 199 | + return dataclass2dict( |
| 200 | + ActionReturn( |
| 201 | + errmsg="Missing 'name' in request", |
| 202 | + state=ActionStatusCode.ARGS_ERROR, |
| 203 | + ) |
| 204 | + ) |
204 | 205 |
|
205 | 206 | try: |
206 | 207 | action_return = await self.executor.forward(name, parameters) |
207 | 208 | except Exception as e: |
208 | 209 | logger.exception("Action %s failed", name) |
209 | 210 | action_return = ActionReturn( |
210 | | - args=parameters, type=name, |
211 | | - errmsg=str(e), state=ActionStatusCode.API_ERROR, |
| 211 | + args=parameters, |
| 212 | + type=name, |
| 213 | + errmsg=str(e), |
| 214 | + state=ActionStatusCode.API_ERROR, |
212 | 215 | ) |
213 | 216 | return dataclass2dict(action_return) |
214 | 217 |
|
@@ -349,6 +352,12 @@ async def _dispatch(self, request: dict) -> dict: |
349 | 352 | except Exception as e: |
350 | 353 | return {"error": str(e)} |
351 | 354 |
|
| 355 | + if cmd == 'get_messages': |
| 356 | + try: |
| 357 | + return self.agent.get_messages() |
| 358 | + except Exception as e: |
| 359 | + return {"error": str(e)} |
| 360 | + |
352 | 361 | return {"error": f"Unknown command: {cmd}"} |
353 | 362 |
|
354 | 363 | @staticmethod |
@@ -404,11 +413,14 @@ def main(): |
404 | 413 | # -- start -- |
405 | 414 | p_start = sub.add_parser("start", help="Start the daemon") |
406 | 415 | p_start.add_argument( |
407 | | - "--sock", default="/tmp/lagent_action.sock", |
| 416 | + "--sock", |
| 417 | + default="/tmp/lagent_action.sock", |
408 | 418 | help="Unix socket path", |
409 | 419 | ) |
410 | 420 | p_start.add_argument( |
411 | | - "--mode", choices=["actions", "agent"], default="actions", |
| 421 | + "--mode", |
| 422 | + choices=["actions", "agent"], |
| 423 | + default="actions", |
412 | 424 | help="'actions' for Level 1 (ActionDaemon), 'agent' for Level 2 (AgentDaemon)", |
413 | 425 | ) |
414 | 426 | p_start.add_argument( |
|
0 commit comments