{
  "directed": false,
  "multigraph": false,
  "graph": {},
  "nodes": [
    {
      "label": "nextcloud-talk-bot.py",
      "file_type": "code",
      "source_file": "nextcloud-talk-bot.py",
      "source_location": "L1",
      "community": 0,
      "norm_label": "nextcloud-talk-bot.py",
      "id": "nextcloud_talk_bot_py"
    },
    {
      "label": "load_knowledge_base()",
      "file_type": "code",
      "source_file": "nextcloud-talk-bot.py",
      "source_location": "L34",
      "community": 2,
      "norm_label": "load_knowledge_base()",
      "id": "nextcloud_talk_bot_nextcloud_talk_bot_load_knowledge_base"
    },
    {
      "label": "build_system_prompt()",
      "file_type": "code",
      "source_file": "nextcloud-talk-bot.py",
      "source_location": "L70",
      "community": 2,
      "norm_label": "build_system_prompt()",
      "id": "nextcloud_talk_bot_nextcloud_talk_bot_build_system_prompt"
    },
    {
      "label": "nc_request()",
      "file_type": "code",
      "source_file": "nextcloud-talk-bot.py",
      "source_location": "L92",
      "community": 1,
      "norm_label": "nc_request()",
      "id": "nextcloud_talk_bot_nextcloud_talk_bot_nc_request"
    },
    {
      "label": "get_last_message_id()",
      "file_type": "code",
      "source_file": "nextcloud-talk-bot.py",
      "source_location": "L106",
      "community": 3,
      "norm_label": "get_last_message_id()",
      "id": "nextcloud_talk_bot_nextcloud_talk_bot_get_last_message_id"
    },
    {
      "label": "poll_new_messages()",
      "file_type": "code",
      "source_file": "nextcloud-talk-bot.py",
      "source_location": "L113",
      "community": 0,
      "norm_label": "poll_new_messages()",
      "id": "nextcloud_talk_bot_nextcloud_talk_bot_poll_new_messages"
    },
    {
      "label": "join_room()",
      "file_type": "code",
      "source_file": "nextcloud-talk-bot.py",
      "source_location": "L129",
      "community": 1,
      "norm_label": "join_room()",
      "id": "nextcloud_talk_bot_nextcloud_talk_bot_join_room"
    },
    {
      "label": "send_message()",
      "file_type": "code",
      "source_file": "nextcloud-talk-bot.py",
      "source_location": "L140",
      "community": 1,
      "norm_label": "send_message()",
      "id": "nextcloud_talk_bot_nextcloud_talk_bot_send_message"
    },
    {
      "label": "get_ai_reply()",
      "file_type": "code",
      "source_file": "nextcloud-talk-bot.py",
      "source_location": "L152",
      "community": 0,
      "norm_label": "get_ai_reply()",
      "id": "nextcloud_talk_bot_nextcloud_talk_bot_get_ai_reply"
    },
    {
      "label": "main()",
      "file_type": "code",
      "source_file": "nextcloud-talk-bot.py",
      "source_location": "L196",
      "community": 0,
      "norm_label": "main()",
      "id": "nextcloud_talk_bot_nextcloud_talk_bot_main"
    },
    {
      "label": "Load all .md files from knowledge-base repo into context string",
      "file_type": "rationale",
      "source_file": "nextcloud-talk-bot.py",
      "source_location": "L35",
      "community": 2,
      "norm_label": "load all .md files from knowledge-base repo into context string",
      "id": "nextcloud_talk_bot_nextcloud_talk_bot_rationale_35"
    },
    {
      "label": "Build system prompt with knowledge base",
      "file_type": "rationale",
      "source_file": "nextcloud-talk-bot.py",
      "source_location": "L71",
      "community": 2,
      "norm_label": "build system prompt with knowledge base",
      "id": "nextcloud_talk_bot_nextcloud_talk_bot_rationale_71"
    },
    {
      "label": "Nextcloud OCS API request",
      "file_type": "rationale",
      "source_file": "nextcloud-talk-bot.py",
      "source_location": "L93",
      "community": 1,
      "norm_label": "nextcloud ocs api request",
      "id": "nextcloud_talk_bot_nextcloud_talk_bot_rationale_93"
    },
    {
      "label": "Get the highest message ID in the conversation",
      "file_type": "rationale",
      "source_file": "nextcloud-talk-bot.py",
      "source_location": "L107",
      "community": 3,
      "norm_label": "get the highest message id in the conversation",
      "id": "nextcloud_talk_bot_nextcloud_talk_bot_rationale_107"
    },
    {
      "label": "Long-poll for new messages after last_id",
      "file_type": "rationale",
      "source_file": "nextcloud-talk-bot.py",
      "source_location": "L114",
      "community": 0,
      "norm_label": "long-poll for new messages after last_id",
      "id": "nextcloud_talk_bot_nextcloud_talk_bot_rationale_114"
    },
    {
      "label": "Join conversation as bot user",
      "file_type": "rationale",
      "source_file": "nextcloud-talk-bot.py",
      "source_location": "L130",
      "community": 1,
      "norm_label": "join conversation as bot user",
      "id": "nextcloud_talk_bot_nextcloud_talk_bot_rationale_130"
    },
    {
      "label": "Send message as bot user",
      "file_type": "rationale",
      "source_file": "nextcloud-talk-bot.py",
      "source_location": "L141",
      "community": 1,
      "norm_label": "send message as bot user",
      "id": "nextcloud_talk_bot_nextcloud_talk_bot_rationale_141"
    },
    {
      "label": "Get reply from Claude via cliproxy",
      "file_type": "rationale",
      "source_file": "nextcloud-talk-bot.py",
      "source_location": "L153",
      "community": 0,
      "norm_label": "get reply from claude via cliproxy",
      "id": "nextcloud_talk_bot_nextcloud_talk_bot_rationale_153"
    }
  ],
  "links": [
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "nextcloud-talk-bot.py",
      "source_location": "L34",
      "weight": 1.0,
      "confidence_score": 1.0,
      "source": "nextcloud_talk_bot_py",
      "target": "nextcloud_talk_bot_nextcloud_talk_bot_load_knowledge_base"
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "nextcloud-talk-bot.py",
      "source_location": "L70",
      "weight": 1.0,
      "confidence_score": 1.0,
      "source": "nextcloud_talk_bot_py",
      "target": "nextcloud_talk_bot_nextcloud_talk_bot_build_system_prompt"
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "nextcloud-talk-bot.py",
      "source_location": "L92",
      "weight": 1.0,
      "confidence_score": 1.0,
      "source": "nextcloud_talk_bot_py",
      "target": "nextcloud_talk_bot_nextcloud_talk_bot_nc_request"
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "nextcloud-talk-bot.py",
      "source_location": "L106",
      "weight": 1.0,
      "confidence_score": 1.0,
      "source": "nextcloud_talk_bot_py",
      "target": "nextcloud_talk_bot_nextcloud_talk_bot_get_last_message_id"
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "nextcloud-talk-bot.py",
      "source_location": "L113",
      "weight": 1.0,
      "confidence_score": 1.0,
      "source": "nextcloud_talk_bot_py",
      "target": "nextcloud_talk_bot_nextcloud_talk_bot_poll_new_messages"
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "nextcloud-talk-bot.py",
      "source_location": "L129",
      "weight": 1.0,
      "confidence_score": 1.0,
      "source": "nextcloud_talk_bot_py",
      "target": "nextcloud_talk_bot_nextcloud_talk_bot_join_room"
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "nextcloud-talk-bot.py",
      "source_location": "L140",
      "weight": 1.0,
      "confidence_score": 1.0,
      "source": "nextcloud_talk_bot_py",
      "target": "nextcloud_talk_bot_nextcloud_talk_bot_send_message"
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "nextcloud-talk-bot.py",
      "source_location": "L152",
      "weight": 1.0,
      "confidence_score": 1.0,
      "source": "nextcloud_talk_bot_py",
      "target": "nextcloud_talk_bot_nextcloud_talk_bot_get_ai_reply"
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "nextcloud-talk-bot.py",
      "source_location": "L196",
      "weight": 1.0,
      "confidence_score": 1.0,
      "source": "nextcloud_talk_bot_py",
      "target": "nextcloud_talk_bot_nextcloud_talk_bot_main"
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "nextcloud-talk-bot.py",
      "source_location": "L72",
      "weight": 1.0,
      "confidence_score": 1.0,
      "source": "nextcloud_talk_bot_nextcloud_talk_bot_load_knowledge_base",
      "target": "nextcloud_talk_bot_nextcloud_talk_bot_build_system_prompt"
    },
    {
      "relation": "rationale_for",
      "confidence": "EXTRACTED",
      "source_file": "nextcloud-talk-bot.py",
      "source_location": "L35",
      "weight": 1.0,
      "confidence_score": 1.0,
      "source": "nextcloud_talk_bot_nextcloud_talk_bot_load_knowledge_base",
      "target": "nextcloud_talk_bot_nextcloud_talk_bot_rationale_35"
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "nextcloud-talk-bot.py",
      "source_location": "L204",
      "weight": 1.0,
      "confidence_score": 1.0,
      "source": "nextcloud_talk_bot_nextcloud_talk_bot_build_system_prompt",
      "target": "nextcloud_talk_bot_nextcloud_talk_bot_main"
    },
    {
      "relation": "rationale_for",
      "confidence": "EXTRACTED",
      "source_file": "nextcloud-talk-bot.py",
      "source_location": "L71",
      "weight": 1.0,
      "confidence_score": 1.0,
      "source": "nextcloud_talk_bot_nextcloud_talk_bot_build_system_prompt",
      "target": "nextcloud_talk_bot_nextcloud_talk_bot_rationale_71"
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "nextcloud-talk-bot.py",
      "source_location": "L108",
      "weight": 1.0,
      "confidence_score": 1.0,
      "source": "nextcloud_talk_bot_nextcloud_talk_bot_nc_request",
      "target": "nextcloud_talk_bot_nextcloud_talk_bot_get_last_message_id"
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "nextcloud-talk-bot.py",
      "source_location": "L116",
      "weight": 1.0,
      "confidence_score": 1.0,
      "source": "nextcloud_talk_bot_nextcloud_talk_bot_nc_request",
      "target": "nextcloud_talk_bot_nextcloud_talk_bot_poll_new_messages"
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "nextcloud-talk-bot.py",
      "source_location": "L132",
      "weight": 1.0,
      "confidence_score": 1.0,
      "source": "nextcloud_talk_bot_nextcloud_talk_bot_nc_request",
      "target": "nextcloud_talk_bot_nextcloud_talk_bot_join_room"
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "nextcloud-talk-bot.py",
      "source_location": "L146",
      "weight": 1.0,
      "confidence_score": 1.0,
      "source": "nextcloud_talk_bot_nextcloud_talk_bot_nc_request",
      "target": "nextcloud_talk_bot_nextcloud_talk_bot_send_message"
    },
    {
      "relation": "rationale_for",
      "confidence": "EXTRACTED",
      "source_file": "nextcloud-talk-bot.py",
      "source_location": "L93",
      "weight": 1.0,
      "confidence_score": 1.0,
      "source": "nextcloud_talk_bot_nextcloud_talk_bot_nc_request",
      "target": "nextcloud_talk_bot_nextcloud_talk_bot_rationale_93"
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "nextcloud-talk-bot.py",
      "source_location": "L208",
      "weight": 1.0,
      "confidence_score": 1.0,
      "source": "nextcloud_talk_bot_nextcloud_talk_bot_get_last_message_id",
      "target": "nextcloud_talk_bot_nextcloud_talk_bot_main"
    },
    {
      "relation": "rationale_for",
      "confidence": "EXTRACTED",
      "source_file": "nextcloud-talk-bot.py",
      "source_location": "L107",
      "weight": 1.0,
      "confidence_score": 1.0,
      "source": "nextcloud_talk_bot_nextcloud_talk_bot_get_last_message_id",
      "target": "nextcloud_talk_bot_nextcloud_talk_bot_rationale_107"
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "nextcloud-talk-bot.py",
      "source_location": "L214",
      "weight": 1.0,
      "confidence_score": 1.0,
      "source": "nextcloud_talk_bot_nextcloud_talk_bot_poll_new_messages",
      "target": "nextcloud_talk_bot_nextcloud_talk_bot_main"
    },
    {
      "relation": "rationale_for",
      "confidence": "EXTRACTED",
      "source_file": "nextcloud-talk-bot.py",
      "source_location": "L114",
      "weight": 1.0,
      "confidence_score": 1.0,
      "source": "nextcloud_talk_bot_nextcloud_talk_bot_poll_new_messages",
      "target": "nextcloud_talk_bot_nextcloud_talk_bot_rationale_114"
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "nextcloud-talk-bot.py",
      "source_location": "L142",
      "weight": 1.0,
      "confidence_score": 1.0,
      "source": "nextcloud_talk_bot_nextcloud_talk_bot_join_room",
      "target": "nextcloud_talk_bot_nextcloud_talk_bot_send_message"
    },
    {
      "relation": "rationale_for",
      "confidence": "EXTRACTED",
      "source_file": "nextcloud-talk-bot.py",
      "source_location": "L130",
      "weight": 1.0,
      "confidence_score": 1.0,
      "source": "nextcloud_talk_bot_nextcloud_talk_bot_join_room",
      "target": "nextcloud_talk_bot_nextcloud_talk_bot_rationale_130"
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "nextcloud-talk-bot.py",
      "source_location": "L242",
      "weight": 1.0,
      "confidence_score": 1.0,
      "source": "nextcloud_talk_bot_nextcloud_talk_bot_send_message",
      "target": "nextcloud_talk_bot_nextcloud_talk_bot_main"
    },
    {
      "relation": "rationale_for",
      "confidence": "EXTRACTED",
      "source_file": "nextcloud-talk-bot.py",
      "source_location": "L141",
      "weight": 1.0,
      "confidence_score": 1.0,
      "source": "nextcloud_talk_bot_nextcloud_talk_bot_send_message",
      "target": "nextcloud_talk_bot_nextcloud_talk_bot_rationale_141"
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "nextcloud-talk-bot.py",
      "source_location": "L249",
      "weight": 1.0,
      "confidence_score": 1.0,
      "source": "nextcloud_talk_bot_nextcloud_talk_bot_get_ai_reply",
      "target": "nextcloud_talk_bot_nextcloud_talk_bot_main"
    },
    {
      "relation": "rationale_for",
      "confidence": "EXTRACTED",
      "source_file": "nextcloud-talk-bot.py",
      "source_location": "L153",
      "weight": 1.0,
      "confidence_score": 1.0,
      "source": "nextcloud_talk_bot_nextcloud_talk_bot_get_ai_reply",
      "target": "nextcloud_talk_bot_nextcloud_talk_bot_rationale_153"
    }
  ],
  "hyperedges": [],
  "built_at_commit": "f6bf12ccf957ac62fd694aca23076d9cdedb1581"
}