Skip to content

Commit a5999af

Browse files
committed
Implement missing endpoints in api server: actions reload, runners list, runner restart, server reset
1 parent 7277753 commit a5999af

1 file changed

Lines changed: 89 additions & 3 deletions

File tree

src/finecode/api_server/api_server.py

Lines changed: 89 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -373,6 +373,91 @@ async def _handle_run_action(
373373
)
374374

375375

376+
async def _handle_actions_reload(
377+
params: dict | None, ws_context: context.WorkspaceContext
378+
) -> dict:
379+
"""Reload an action's handlers in all relevant extension runners.
380+
381+
Params: ``{"action_node_id": "project_path::action_name"}``
382+
Result: ``{}``
383+
"""
384+
from finecode.api_server.runner import runner_client
385+
386+
params = params or {}
387+
action_node_id = params.get("action_node_id", "")
388+
parts = action_node_id.split("::")
389+
if len(parts) < 2:
390+
raise ValueError(f"Invalid action_node_id: {action_node_id!r}")
391+
392+
project_path = pathlib.Path(parts[0])
393+
action_name = parts[1]
394+
395+
runners_by_env = ws_context.ws_projects_extension_runners.get(project_path, {})
396+
for runner in runners_by_env.values():
397+
await runner_client.reload_action(runner, action_name)
398+
399+
return {}
400+
401+
402+
async def _handle_runners_list(
403+
params: dict | None, ws_context: context.WorkspaceContext
404+
) -> dict:
405+
"""List all extension runners and their status.
406+
407+
Result: ``{"runners": [{"project_path", "env_name", "status", "readable_id"}]}``
408+
"""
409+
from finecode.api_server.runner import runner_client
410+
411+
runners = []
412+
for project_path, runners_by_env in ws_context.ws_projects_extension_runners.items():
413+
for env_name, runner in runners_by_env.items():
414+
runners.append({
415+
"project_path": str(project_path),
416+
"env_name": env_name,
417+
"status": runner.status.name,
418+
"readable_id": runner.readable_id,
419+
})
420+
return {"runners": runners}
421+
422+
423+
async def _handle_runners_restart(
424+
params: dict | None, ws_context: context.WorkspaceContext
425+
) -> dict:
426+
"""Restart a specific extension runner.
427+
428+
Params: ``{"runner_working_dir": "/abs/path", "env_name": "dev_workspace", "debug": false}``
429+
Result: ``{}``
430+
"""
431+
from finecode.api_server.runner import runner_manager
432+
433+
params = params or {}
434+
runner_working_dir = params.get("runner_working_dir")
435+
env_name = params.get("env_name")
436+
debug = params.get("debug", False)
437+
438+
if not runner_working_dir or not env_name:
439+
raise ValueError("runner_working_dir and env_name are required")
440+
441+
await runner_manager.restart_extension_runner(
442+
runner_working_dir_path=pathlib.Path(runner_working_dir),
443+
env_name=env_name,
444+
ws_context=ws_context,
445+
debug=debug,
446+
)
447+
return {}
448+
449+
450+
async def _handle_server_reset(
451+
params: dict | None, ws_context: context.WorkspaceContext
452+
) -> dict:
453+
"""Reset the server state.
454+
455+
Result: ``{}``
456+
"""
457+
logger.info("FineCode API: server reset requested")
458+
return {}
459+
460+
376461
# -- helpers ---------------------------------------------------------------
377462

378463
def _notify_client(writer: asyncio.StreamWriter, method: str, params: dict) -> None:
@@ -503,11 +588,12 @@ async def _handle_run_with_partial_results_task(
503588
"actions/run": _handle_run_action,
504589
"actions/runBatch": _stub("actions/runBatch"),
505590
# (runWithPartialResults is handled specially in _handle_client)
506-
"actions/reload": _stub("actions/reload"),
591+
"actions/reload": _handle_actions_reload,
507592
# runners:
508-
"runners/list": _stub("runners/list"),
509-
"runners/restart": _stub("runners/restart"),
593+
"runners/list": _handle_runners_list,
594+
"runners/restart": _handle_runners_restart,
510595
# server/
596+
"server/reset": _handle_server_reset,
511597
"server/shutdown": _stub("server/shutdown"),
512598
}
513599

0 commit comments

Comments
 (0)