Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1,216 changes: 1,199 additions & 17 deletions docs/api-reference.md

Large diffs are not rendered by default.

86 changes: 85 additions & 1 deletion libs/http/include/merak/worldbuilding_http_handler.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,14 @@
#include <httplib.h>
#include <nlohmann/json.hpp>
#include <merak/storage/image_service.hpp>
#include <atomic>
#include <chrono>
#include <condition_variable>
#include <memory>
#include <mutex>
#include <string>
#include <thread>
#include <unordered_map>

namespace merak {

Expand All @@ -17,6 +23,7 @@ class WorldbuildingHttpHandler {
explicit WorldbuildingHttpHandler(
std::shared_ptr<worldbuilding::WorldbuildingService> service,
std::shared_ptr<RuntimeService> runtime = nullptr);
~WorldbuildingHttpHandler();

void install_routes(httplib::Server& server);
void set_pipeline_manager(std::shared_ptr<worldbuilding::PipelineManager> mgr);
Expand All @@ -37,6 +44,7 @@ class WorldbuildingHttpHandler {

// Agent
void handle_list_agents(const httplib::Request&, httplib::Response&);
void handle_search_agents(const httplib::Request&, httplib::Response&);
void handle_create_agent(const httplib::Request&, httplib::Response&);
void handle_get_agent(const httplib::Request&, httplib::Response&);
void handle_delete_agent(const httplib::Request&, httplib::Response&);
Expand All @@ -58,6 +66,11 @@ class WorldbuildingHttpHandler {
void handle_time_now(const httplib::Request&, httplib::Response&);
void handle_time_advance(const httplib::Request&, httplib::Response&);

// Timeline
void handle_timeline_list(const httplib::Request&, httplib::Response&);
void handle_timeline_event_get(const httplib::Request&, httplib::Response&);
void handle_timeline_advance(const httplib::Request&, httplib::Response&);

// Foreshadowing
void handle_foreshadow_list(const httplib::Request&, httplib::Response&);
void handle_foreshadow_plant(const httplib::Request&, httplib::Response&);
Expand All @@ -80,6 +93,10 @@ class WorldbuildingHttpHandler {
void handle_update_knowledge(const httplib::Request&, httplib::Response&);
void handle_delete_knowledge(const httplib::Request&, httplib::Response&);

// Pipeline
void handle_pipeline_retreat(const httplib::Request&, httplib::Response&);
void handle_pipeline_clear_error(const httplib::Request&, httplib::Response&);

// Factions
void handle_list_factions(const httplib::Request&, httplib::Response&);
void handle_get_faction(const httplib::Request&, httplib::Response&);
Expand All @@ -103,20 +120,82 @@ class WorldbuildingHttpHandler {
void handle_get_pending_creation(const httplib::Request&, httplib::Response&);
void handle_resolve_creation(const httplib::Request&, httplib::Response&);

// Agent-driven generation infrastructure
struct PendingAgentRun {
std::string world_id;
std::string operation_type;
};
void start_agent_run(const httplib::Request& req, httplib::Response& res,
const std::string& world_id, const std::string& task_description,
const std::string& operation_type);
void capture_agent_result(const std::string& run_id);

// Agent-driven: suggestions
void handle_start_suggestions(const httplib::Request&, httplib::Response&);
void handle_get_suggestions(const httplib::Request&, httplib::Response&);

// Agent-driven: consistency check
void handle_start_consistency_check(const httplib::Request&, httplib::Response&);
void handle_get_consistency_check(const httplib::Request&, httplib::Response&);

// Agent-driven: generate scenes
void handle_start_generate_scenes(const httplib::Request&, httplib::Response&);
void handle_get_generated_scenes(const httplib::Request&, httplib::Response&);
void handle_apply_generated_scenes(const httplib::Request&, httplib::Response&);

// Agent-driven: generate outline
void handle_start_generate_outline(const httplib::Request&, httplib::Response&);
void handle_get_generated_outline(const httplib::Request&, httplib::Response&);
void handle_apply_generated_outline(const httplib::Request&, httplib::Response&);

// Agent-driven: scene rewrite
void handle_start_rewrite_scene(const httplib::Request&, httplib::Response&);

// Character appearances
void handle_character_appearances(const httplib::Request&, httplib::Response&);
void handle_get_rewrite_result(const httplib::Request&, httplib::Response&);

// KG extraction result
void handle_scene_extraction_result(const httplib::Request&, httplib::Response&);

std::unordered_map<std::string, PendingAgentRun> pending_agent_runs_;
mutable std::mutex pending_runs_mutex_;

// Background poller for capturing agent results on run completion
void start_result_poller();
void stop_result_poller();
std::thread result_poller_;
std::atomic<bool> poller_stop_{false};
std::atomic<bool> poller_started_{false};
std::condition_variable poller_started_cv_;
std::mutex poller_started_mutex_;

// Agent prompt
void handle_load_agent_prompt(const httplib::Request&, httplib::Response&);

// Agent card & diaries
void handle_patch_agent(const httplib::Request&, httplib::Response&);
void handle_agent_diary_list(const httplib::Request&, httplib::Response&);
void handle_agent_diary_add(const httplib::Request&, httplib::Response&);
void handle_agent_diary_get(const httplib::Request&, httplib::Response&);
void handle_agent_diary_patch(const httplib::Request&, httplib::Response&);
void handle_agent_diary_search(const httplib::Request&, httplib::Response&);
void handle_agent_relations(const httplib::Request&, httplib::Response&);
void handle_agent_relation_upsert(const httplib::Request&, httplib::Response&);
void handle_agent_relation_update(const httplib::Request&, httplib::Response&);
void handle_agent_voice(const httplib::Request&, httplib::Response&);

// Memory summaries
void handle_memory_summaries_list(const httplib::Request&, httplib::Response&);
void handle_memory_summary_get(const httplib::Request&, httplib::Response&);

// Chapter review
void handle_chapter_review(const httplib::Request&, httplib::Response&);

// Export
// Export & Import
void handle_export_chapters(const httplib::Request&, httplib::Response&);
void handle_export_full(const httplib::Request&, httplib::Response&);
void handle_import_snapshot(const httplib::Request&, httplib::Response&);

// PATCH routes for narrative entities
void handle_patch_scene(const httplib::Request&, httplib::Response&);
Expand All @@ -138,6 +217,11 @@ class WorldbuildingHttpHandler {
void handle_chunked_status(const httplib::Request&, httplib::Response&);
void handle_complete_chunked(const httplib::Request&, httplib::Response&);
void handle_cancel_chunked(const httplib::Request&, httplib::Response&);

// Knowledge Graph
void handle_kg_entities(const httplib::Request&, httplib::Response&);
void handle_kg_entity_relations(const httplib::Request&, httplib::Response&);
void handle_kg_search(const httplib::Request&, httplib::Response&);
};

} // namespace merak
Loading
Loading