| 2562 | } |
| 2563 | |
| 2564 | static cbm_daemon_runtime_application_status_t application_request_dispatch( |
| 2565 | cbm_daemon_application_t *application, cbm_daemon_application_session_t *session, |
| 2566 | const uint8_t *request, uint32_t request_length, uint8_t **response_out, |
| 2567 | uint32_t *response_length_out) { |
| 2568 | switch ((cbm_daemon_application_request_kind_t)request[0]) { |
| 2569 | case CBM_DAEMON_APPLICATION_REQUEST_SET_CONTEXT: |
| 2570 | return application_set_context(session, request, request_length); |
| 2571 | case CBM_DAEMON_APPLICATION_REQUEST_MCP: |
| 2572 | return application_mcp_request(session, request, request_length, response_out, |
| 2573 | response_length_out); |
| 2574 | case CBM_DAEMON_APPLICATION_REQUEST_TOOL: |
| 2575 | return application_tool_request(session, request, request_length, response_out, |
| 2576 | response_length_out); |
| 2577 | case CBM_DAEMON_APPLICATION_REQUEST_SET_UI_CONFIG: |
| 2578 | return application_set_ui_config(application, session, request, request_length); |
| 2579 | case CBM_DAEMON_APPLICATION_REQUEST_UI_READINESS_PROOF: |
| 2580 | return application_ui_readiness_proof(application, request, request_length, response_out, |
| 2581 | response_length_out); |
| 2582 | case CBM_DAEMON_APPLICATION_REQUEST_HOOK_AUGMENT: { |
| 2583 | if (!session->context_set || request_length <= 1) { |
| 2584 | return CBM_DAEMON_RUNTIME_APPLICATION_REJECTED; |
| 2585 | } |
| 2586 | char *input = application_text_copy(request + 1, request_length - 1); |
| 2587 | if (!input) { |
| 2588 | return CBM_DAEMON_RUNTIME_APPLICATION_REJECTED; |
| 2589 | } |
| 2590 | char *response = cbm_hook_augment_process_for(session->mcp, input, session->hook_event, |
| 2591 | session->hook_dialect); |
| 2592 | free(input); |
| 2593 | if (response) { |
| 2594 | size_t response_length = strlen(response); |
| 2595 | if (response_length > UINT32_MAX) { |
| 2596 | free(response); |
| 2597 | return CBM_DAEMON_RUNTIME_APPLICATION_HANDLER_ERROR; |
| 2598 | } |
| 2599 | *response_out = (uint8_t *)response; |
| 2600 | *response_length_out = (uint32_t)response_length; |
| 2601 | } |
| 2602 | return CBM_DAEMON_RUNTIME_APPLICATION_OK; |
| 2603 | } |
| 2604 | default: |
| 2605 | return CBM_DAEMON_RUNTIME_APPLICATION_REJECTED; |
| 2606 | } |
| 2607 | } |
| 2608 | |
| 2609 | static cbm_daemon_runtime_application_status_t application_request( |
| 2610 | void *context, cbm_daemon_runtime_application_session_t *opaque_session, |
no test coverage detected