{"name":"CoachPulse AI Coach","description":"CoachPulse coaching agent: multi-turn coaching chat and document upload (RAG library + in-chat file analysis).","version":"1.0.0","protocolVersion":"0.3.0","preferredTransport":"JSONRPC","url":"https://dev.coachbotapi.talentnovo.com/a2a/v1","documentationUrl":"https://dev.coachbotapi.talentnovo.com/docs","defaultInputModes":["text/plain","application/octet-stream"],"defaultOutputModes":["text/plain","application/json"],"capabilities":{"streaming":false,"pushNotifications":false},"securitySchemes":{"firebaseBearer":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Firebase ID token for end-user requests"},"a2aApiKey":{"type":"apiKey","in":"header","name":"X-A2A-Api-Key","description":"Trusted agent API key (use with X-User-Id)"}},"security":[{"firebaseBearer":[]},{"a2aApiKey":[],"X-User-Id":[]}],"skills":[{"id":"chat","name":"Coaching chat","description":"Send a user message and receive a full coach reply. Coaching mode is always 'coaching'. Use contextId (thread_id) for follow-up turns.","tags":["coaching","chat"],"examples":["Help me prepare for a difficult conversation at work"],"inputSchema":{"type":"object","required":["parts"],"properties":{"contextId":{"type":"string","description":"Thread ID for follow-up turns. Omit to start a new thread."},"parts":{"type":"array","minItems":1,"items":{"type":"object","required":["text"],"properties":{"text":{"type":"string","description":"User message text"}}}},"metadata":{"type":"object","properties":{"skill":{"type":"string","enum":["chat"],"default":"chat"},"action":{"type":"string","enum":["file_reference"],"description":"Set to 'file_reference' to discuss a previously uploaded file"},"topic":{"type":"string","description":"Optional coaching topic"},"data":{"type":"object","description":"Required when action=file_reference","required":["file_id","file_url","file_name","file_type"],"properties":{"file_id":{"type":"string"},"file_url":{"type":"string"},"file_name":{"type":"string"},"file_type":{"type":"string"}}}}}}},"outputSchema":{"type":"object","required":["message"],"properties":{"message":{"type":"object","required":["role","messageId","parts"],"properties":{"role":{"type":"string","enum":["agent"]},"messageId":{"type":"string","format":"uuid"},"contextId":{"type":"string","description":"Thread ID. Pass as contextId in follow-up SendMessage calls."},"parts":{"type":"array","items":{"type":"object","required":["kind","text"],"properties":{"kind":{"type":"string","enum":["text"]},"text":{"type":"string"}}}},"metadata":{"type":"object","properties":{"ws_type":{"type":"string","description":"Internal WebSocket message type"},"raw":{"type":"object","description":"Raw WebSocket response"}}}}}}}},{"id":"upload_document","name":"Upload document (RAG)","description":"Upload a document for user-level RAG (available in all coaching threads). Send a file Part with metadata.skill=upload_document.","tags":["document","rag"],"inputSchema":{"type":"object","required":["parts"],"properties":{"parts":{"type":"array","minItems":1,"items":{"type":"object","required":["filename","bytes"],"properties":{"filename":{"type":"string","description":"Name of the file including extension"},"mediaType":{"type":"string","description":"MIME type e.g. application/pdf, image/png"},"bytes":{"type":"string","description":"Base64-encoded file content"}}}},"metadata":{"type":"object","required":["skill"],"properties":{"skill":{"type":"string","enum":["upload_document"]},"document_type":{"type":"string","default":"general","description":"Document category for RAG indexing"}}}}},"outputSchema":{"type":"object","required":["message","artifacts"],"properties":{"message":{"type":"object","required":["role","messageId","parts"],"properties":{"role":{"type":"string","enum":["agent"]},"messageId":{"type":"string","format":"uuid"},"contextId":{"type":"string","description":"Thread ID. Pass as contextId in follow-up SendMessage calls."},"parts":{"type":"array","items":{"type":"object","required":["kind","text"],"properties":{"kind":{"type":"string","enum":["text"]},"text":{"type":"string"}}}},"metadata":{"type":"object","properties":{"ws_type":{"type":"string","description":"Internal WebSocket message type"},"raw":{"type":"object","description":"Raw WebSocket response"}}}}},"artifacts":{"type":"array","items":{"type":"object","required":["artifactId","name","parts"],"properties":{"artifactId":{"type":"string","format":"uuid"},"name":{"type":"string","enum":["document_upload"]},"parts":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["data"]},"data":{"type":"object","properties":{"document_id":{"type":"string"},"message":{"type":"string"}}}}}}}}}}}},{"id":"upload_file","name":"Upload file (chat attachment)","description":"Upload file to storage; then use chat with metadata.action=file_reference and data fields file_id, file_url, file_name, file_type.","tags":["file","upload"],"inputSchema":{"type":"object","required":["parts"],"properties":{"parts":{"type":"array","minItems":1,"items":{"type":"object","required":["filename","bytes"],"properties":{"filename":{"type":"string","description":"Name of the file including extension"},"mediaType":{"type":"string","description":"MIME type e.g. application/pdf, image/png"},"bytes":{"type":"string","description":"Base64-encoded file content"}}}},"metadata":{"type":"object","required":["skill"],"properties":{"skill":{"type":"string","enum":["upload_file"]}}}}},"outputSchema":{"type":"object","required":["message","artifacts"],"properties":{"message":{"type":"object","required":["role","messageId","parts"],"properties":{"role":{"type":"string","enum":["agent"]},"messageId":{"type":"string","format":"uuid"},"contextId":{"type":"string","description":"Thread ID. Pass as contextId in follow-up SendMessage calls."},"parts":{"type":"array","items":{"type":"object","required":["kind","text"],"properties":{"kind":{"type":"string","enum":["text"]},"text":{"type":"string"}}}},"metadata":{"type":"object","properties":{"ws_type":{"type":"string","description":"Internal WebSocket message type"},"raw":{"type":"object","description":"Raw WebSocket response"}}}}},"artifacts":{"type":"array","items":{"type":"object","required":["artifactId","name","parts"],"properties":{"artifactId":{"type":"string","format":"uuid"},"name":{"type":"string","enum":["file_upload"]},"parts":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["data"]},"data":{"type":"object","required":["file_id","file_url","file_name","file_type"],"properties":{"file_id":{"type":"string"},"file_url":{"type":"string"},"file_name":{"type":"string"},"file_type":{"type":"string"}}}}}}}}}}}}]}