| 2669 | } |
| 2670 | |
| 2671 | static cbm_daemon_runtime_application_status_t application_request_dispatch( |
| 2672 | cbm_daemon_application_t *application, cbm_daemon_application_session_t *session, |
| 2673 | const uint8_t *request, uint32_t request_length, uint8_t **response_out, |
| 2674 | uint32_t *response_length_out) { |
| 2675 | switch ((cbm_daemon_application_request_kind_t)request[0]) { |
| 2676 | case CBM_DAEMON_APPLICATION_REQUEST_SET_CONTEXT: |
| 2677 | return application_set_context(session, request, request_length); |
| 2678 | case CBM_DAEMON_APPLICATION_REQUEST_MCP: |
| 2679 | return application_mcp_request(session, request, request_length, response_out, |
| 2680 | response_length_out); |
| 2681 | case CBM_DAEMON_APPLICATION_REQUEST_TOOL: |
| 2682 | return application_tool_request(session, request, request_length, response_out, |
| 2683 | response_length_out); |
| 2684 | case CBM_DAEMON_APPLICATION_REQUEST_SET_UI_CONFIG: |
| 2685 | return application_set_ui_config(application, session, request, request_length); |
| 2686 | case CBM_DAEMON_APPLICATION_REQUEST_UI_READINESS_PROOF: |
| 2687 | return application_ui_readiness_proof(application, request, request_length, response_out, |
| 2688 | response_length_out); |
| 2689 | case CBM_DAEMON_APPLICATION_REQUEST_HOOK_AUGMENT: { |
| 2690 | if (!session->context_set || request_length <= 1) { |
| 2691 | return CBM_DAEMON_RUNTIME_APPLICATION_REJECTED; |
| 2692 | } |
| 2693 | char *input = application_text_copy(request + 1, request_length - 1); |
| 2694 | if (!input) { |
| 2695 | return CBM_DAEMON_RUNTIME_APPLICATION_REJECTED; |
| 2696 | } |
| 2697 | char *response = cbm_hook_augment_process_for(session->mcp, input, session->hook_event, |
| 2698 | session->hook_dialect); |
| 2699 | free(input); |
| 2700 | if (response) { |
| 2701 | size_t response_length = strlen(response); |
| 2702 | if (response_length > UINT32_MAX) { |
| 2703 | free(response); |
| 2704 | return CBM_DAEMON_RUNTIME_APPLICATION_HANDLER_ERROR; |
| 2705 | } |
| 2706 | *response_out = (uint8_t *)response; |
| 2707 | *response_length_out = (uint32_t)response_length; |
| 2708 | } |
| 2709 | return CBM_DAEMON_RUNTIME_APPLICATION_OK; |
| 2710 | } |
| 2711 | default: |
| 2712 | return CBM_DAEMON_RUNTIME_APPLICATION_REJECTED; |
| 2713 | } |
| 2714 | } |
| 2715 | |
| 2716 | static cbm_daemon_runtime_application_status_t application_request( |
| 2717 | void *context, cbm_daemon_runtime_application_session_t *opaque_session, |
no test coverage detected