app: description: "Paste a list of Xiaohongshu / Douyin / TikTok / YouTube links (one per line). Each is read with LinkDigest โ transcript, the text in every image, key points with checked quotes โ then summarised, and the set is compared. Reads only the links you give it; it does not search." icon: "๐" icon_background: "#FFEAD5" mode: workflow name: Social media research agent (LinkDigest) use_icon_as_answer_icon: false kind: app version: 0.1.5 workflow: conversation_variables: [] environment_variables: [] features: file_upload: enabled: false opening_statement: "" retriever_resource: enabled: false sensitive_word_avoidance: enabled: false speech_to_text: enabled: false suggested_questions: [] suggested_questions_after_answer: enabled: false text_to_speech: enabled: false graph: edges: - id: start-split source: start target: split sourceHandle: source targetHandle: target type: custom data: { sourceType: start, targetType: code, isInIteration: false } - id: split-each source: split target: each sourceHandle: source targetHandle: target type: custom data: { sourceType: code, targetType: iteration, isInIteration: false } - id: each-read source: each target: read sourceHandle: source targetHandle: target type: custom data: { sourceType: iteration-start, targetType: tool, isInIteration: true, iteration_id: each } - id: read-summarise source: read target: summarise sourceHandle: source targetHandle: target type: custom data: { sourceType: tool, targetType: llm, isInIteration: true, iteration_id: each } - id: each-compare source: each target: compare sourceHandle: source targetHandle: target type: custom data: { sourceType: iteration, targetType: llm, isInIteration: false } - id: compare-end source: compare target: end sourceHandle: source targetHandle: target type: custom data: { sourceType: llm, targetType: end, isInIteration: false } nodes: - id: start type: custom position: { x: 40, y: 200 } data: type: start title: Start variables: - variable: urls label: Post links, one per line type: paragraph required: true max_length: 4000 - variable: question label: What do you want to know across these posts? type: text-input required: false max_length: 300 - id: split type: custom position: { x: 320, y: 200 } data: type: code title: Split lines code_language: python3 code: | def main(urls: str) -> dict: links = [l.strip() for l in urls.splitlines() if l.strip()] return {"links": links[:20]} variables: - variable: urls value_selector: [start, urls] outputs: links: type: array[string] - id: each type: custom position: { x: 600, y: 160 } width: 760 height: 320 data: type: iteration title: Read every link iterator_selector: [split, links] output_selector: [summarise, text] output_type: array[string] is_parallel: true parallel_nums: 3 error_handle_mode: continue-on-error start_node_id: each-start - id: each-start type: custom-iteration-start position: { x: 24, y: 60 } parentId: each extent: parent data: type: iteration-start title: "" isInIteration: true - id: read type: custom position: { x: 140, y: 60 } parentId: each extent: parent data: type: tool title: LinkDigest ยท digest_url provider_id: jcaiagent7143-ui/linkdigest/linkdigest provider_type: builtin provider_name: jcaiagent7143-ui/linkdigest/linkdigest tool_name: digest_url tool_label: Digest a social link tool_configurations: format: markdown breakdown: false tool_parameters: url: type: mixed value: "{{#each.item#}}" isInIteration: true iteration_id: each - id: summarise type: custom position: { x: 440, y: 60 } parentId: each extent: parent data: type: llm title: Summarise one post model: provider: "" name: "" mode: chat completion_params: temperature: 0.2 prompt_template: - role: system text: | You summarise one social media post from the digest below. Use only what the digest says; the digest has a Coverage section saying what was not read โ mention it if it matters. Keep the post's language. 120 words at most. Start with the source line "Post: