11#! /usr/bin/env bash
22set -euo pipefail
33
4- # CLIX Flutter LLMS generator (outputs llms.txt)
4+ # Clix Flutter llms.txt generator
55# Usage:
66# ./scripts/generate_llms.sh --llm-all
77# ./scripts/generate_llms.sh --base <old> --head <new> [--llm]
@@ -484,10 +484,29 @@ if [[ -n "${BASE_REF:-}" && -n "${HEAD_REF:-}" ]]; then
484484 ' 2> /dev/null | sed ' /^$/d; s#^./##' | sort -u >> " $CHANGED_SET "
485485 else
486486 git fetch --no-tags --depth=1 origin " ${BASE_REF} " " ${HEAD_REF} " > /dev/null 2>&1 || true
487- git diff --name-only " ${BASE_REF} ...${HEAD_REF} " 2> /dev/null | sed ' s#^./##' | sort -u >> " $CHANGED_SET " || true
487+ # First try the standard symmetric diff (needs a merge base).
488+ echo " git diff --name-only ${BASE_REF} ...${HEAD_REF} (local):" >&2
489+ DIFF_TMP=" ${SECTION_TMP_DIR} /git_diff_paths.txt"
490+ if git diff --name-only " ${BASE_REF} ...${HEAD_REF} " > " $DIFF_TMP " 2> /dev/null; then
491+ :
492+ else
493+ # If histories are unrelated (no merge base), fall back to two-dot diff.
494+ echo " git diff with '...' failed (likely no merge base); falling back to 'git diff ${BASE_REF} ${HEAD_REF} '" >&2
495+ git diff --name-only " ${BASE_REF} " " ${HEAD_REF} " > " $DIFF_TMP " 2> /dev/null || true
496+ fi
497+ sed ' s#^./##' " $DIFF_TMP " | sort -u >> " $CHANGED_SET "
488498 fi
489499fi
490500
501+ # Debug: print the raw CHANGED_SET to stderr (before any filtering) so we can
502+ # verify which paths will be considered for surgical updates.
503+ if [[ -s " $CHANGED_SET " ]]; then
504+ echo " Changed paths from compare range (${BASE_REF:- ?} ...${HEAD_REF:- ?} ):" >&2
505+ cat " $CHANGED_SET " >&2
506+ else
507+ echo " Changed paths set is empty for compare range (${BASE_REF:- ?} ...${HEAD_REF:- ?} )" >&2
508+ fi
509+
491510# If we have an existing LLMS and a changed set, do TEXT-MODE update (surgical)
492511if [[ -f " $EXISTING_LLMS_PATH " && -s " $CHANGED_SET " ]]; then
493512 OUTFILE=" $STAGING_PATH "
@@ -501,26 +520,15 @@ if [[ -f "$EXISTING_LLMS_PATH" && -s "$CHANGED_SET" ]]; then
501520 abs_file=" ${REPO_ROOT} /${rel} "
502521 raw_url=" $( rel_to_url " $rel " ) "
503522 dir_rel=" $( dirname " $rel " ) " ; dir_rel=" ${dir_rel:- .} "
504- # If the line already exists and LLM is not requested, keep it verbatim
505- if grep -F -q " ](${raw_url} ):" " $OUTFILE " > /dev/null 2>&1 ; then
506- if [[ " $USE_LLM " != " true" ]]; then
507- continue
508- fi
509- fi
510523 if [[ -f " $abs_file " ]]; then
511524 title=" $( titleize " $( basename " $abs_file " ) " ) "
512- # Default to existing description if present
513- existing_line=" $( awk -F ' \t' -v u=" $raw_url " ' $1==u{print $0; exit}' " $EXISTING_MAP " 2> /dev/null || true) "
514- desc=" $( printf " %s" " $existing_line " | cut -f2- || true) "
515- if [[ -z " $desc " ]]; then
516- # Generate quickly (may call LLM if enabled)
517- f_desc=" $( first_comment_line " $abs_file " || true) "
518- [[ -z " $f_desc " ]] && f_desc=" Source file for ${title} "
519- if [[ " $USE_LLM " == " true" ]]; then
520- llm_desc=" $( llm_describe_file " $rel " " $abs_file " " $raw_url " " $dir_rel " " $REPO_SLUG " || true) "
521- [[ -n " $llm_desc " ]] && f_desc=" $llm_desc "
522- fi
523- desc=" $f_desc "
525+ # For changed files, always recompute the description from current source
526+ # and optionally enrich it via LLM, instead of reusing any previous text.
527+ desc=" $( first_comment_line " $abs_file " || true) "
528+ [[ -z " $desc " ]] && desc=" Source file for ${title} "
529+ if [[ " $USE_LLM " == " true" ]]; then
530+ llm_desc=" $( llm_describe_file " $rel " " $abs_file " " $raw_url " " $dir_rel " " $REPO_SLUG " || true) "
531+ [[ -n " $llm_desc " ]] && desc=" $llm_desc "
524532 fi
525533 newline=" - [${title} ](${raw_url} ): ${desc} "
526534 replace_or_append_line " $rel " " $raw_url " " $newline " " $dir_rel "
0 commit comments