Merge commit 'ac794a6a7051497ff60b947642d44f0f8c04d6c6' into lsp-server

This commit is contained in:
csh
2026-01-08 15:56:37 +08:00
113 changed files with 254751 additions and 176 deletions
@@ -3,7 +3,7 @@ setlocal enabledelayedexpansion
rem Sync standards snapshot to project root.
rem - Copies <snapshot>\.agents\<AGENTS_NS> -> <project-root>\.agents\<AGENTS_NS>
rem - Updates <project-root>\.gitattributes (managed block by default)
rem - Updates <project-root>\.gitattributes (append missing rules by default)
rem Existing targets are backed up before overwrite.
rem
rem Multi rulesets:
@@ -12,7 +12,8 @@ rem Notes:
rem - When syncing multiple rulesets, .gitattributes is synced only once (first ruleset).
set "SCRIPT_DIR=%~dp0"
for /f "delims=" %%R in ('git -C "%SCRIPT_DIR%" rev-parse --show-toplevel 2^>nul') do set "ROOT=%%R"
set "ROOT=%SYNC_ROOT%"
if "%ROOT%"=="" for /f "delims=" %%R in ('git -C "%SCRIPT_DIR%" rev-parse --show-toplevel 2^>nul') do set "ROOT=%%R"
if "%ROOT%"=="" set "ROOT=%cd%"
for %%I in ("%ROOT%") do set "ROOT=%%~fI"
@@ -20,27 +21,30 @@ for %%I in ("%SCRIPT_DIR%..") do set "SRC=%%~fI"
set "AGENTS_SRC_ROOT=%SRC%\.agents"
set "GITATTR_SRC=%SRC%\.gitattributes"
set "AGENTS_NS=%AGENTS_NS%"
if "%AGENTS_NS%"=="" set "AGENTS_NS=tsl"
echo %AGENTS_NS%| findstr /r "[\\/]" >nul && (
echo ERROR: invalid AGENTS_NS=%AGENTS_NS%
exit /b 1
)
echo %AGENTS_NS%| findstr /c:".." >nul && (
echo ERROR: invalid AGENTS_NS=%AGENTS_NS%
exit /b 1
)
set "AGENTS_ROOT=%ROOT%\.agents"
set "AGENTS_DST=%AGENTS_ROOT%\%AGENTS_NS%"
set "GITATTR_DST=%ROOT%\.gitattributes"
set "SYNC_GITATTR_MODE=%SYNC_GITATTR_MODE%"
if "%SYNC_GITATTR_MODE%"=="" set "SYNC_GITATTR_MODE=block"
if "%SYNC_GITATTR_MODE%"=="" set "SYNC_GITATTR_MODE=append"
rem Multi rulesets: only on outer invocation.
if "%SYNC_STANDARDS_INNER%"=="" (
if not "%~1"=="" (
set "LANG_LIST="
if not "%~1"=="" set "LANG_LIST=%*"
if "%LANG_LIST%"=="" (
if "%AGENTS_NS%"=="" (
if exist "%ROOT%\.agents" (
for /d %%D in ("%ROOT%\.agents\*") do (
set "CAND=%%~nxD"
if exist "%AGENTS_SRC_ROOT%\!CAND!\" (
if defined LANG_LIST (set "LANG_LIST=!LANG_LIST! !CAND!") else set "LANG_LIST=!CAND!"
)
)
)
)
)
if not "%LANG_LIST%"=="" (
set "FIRST=1"
set "SYNC_FIRST=%SYNC_GITATTR_MODE%"
for %%L in (%*) do (
for %%L in (!LANG_LIST!) do (
if "!FIRST!"=="1" (
set "FIRST=0"
set "SYNC_STANDARDS_INNER=1"
@@ -58,14 +62,26 @@ if "%SYNC_STANDARDS_INNER%"=="" (
)
)
if "%AGENTS_NS%"=="" set "AGENTS_NS=tsl"
echo %AGENTS_NS%| findstr /r "[\\/]" >nul && (
echo ERROR: invalid AGENTS_NS=%AGENTS_NS%
exit /b 1
)
echo %AGENTS_NS%| findstr /c:".." >nul && (
echo ERROR: invalid AGENTS_NS=%AGENTS_NS%
exit /b 1
)
set "AGENTS_ROOT=%ROOT%\.agents"
set "AGENTS_DST=%AGENTS_ROOT%\%AGENTS_NS%"
set "AGENTS_SRC=%AGENTS_SRC_ROOT%\%AGENTS_NS%"
if not exist "%AGENTS_SRC%" (
rem Backward-compatible fallback: older snapshots used <snapshot>\.agents\* directly.
rem Backward-compatible fallback: older snapshots used ^<snapshot^>\.agents\* directly.
if exist "%AGENTS_SRC_ROOT%\index.md" if exist "%AGENTS_SRC_ROOT%\auth.md" (
set "AGENTS_SRC=%AGENTS_SRC_ROOT%"
) else (
echo ERROR: Standards snapshot not found at "%AGENTS_SRC%".
echo Hint: set AGENTS_NS to one of the subdirs under "%AGENTS_SRC_ROOT%" (e.g. tsl/cpp).
echo Hint: set AGENTS_NS to one of the subdirs under "%AGENTS_SRC_ROOT%" ^(e.g. tsl/cpp^).
exit /b 1
)
)
@@ -119,6 +135,15 @@ if not exist "%AGENTS_ROOT%\index.md" (
echo Created .agents\index.md
)
if not exist "%ROOT%\AGENTS.md" (
> "%ROOT%\AGENTS.md" echo # Agent Instructions
>> "%ROOT%\AGENTS.md" echo.
>> "%ROOT%\AGENTS.md" echo 请以 `.agents/` 下的规则为准:
>> "%ROOT%\AGENTS.md" echo.
>> "%ROOT%\AGENTS.md" echo - 入口:`.agents/index.md`
echo Created AGENTS.md
)
:SyncGitAttr
if exist "%GITATTR_SRC%" (
if /I "%SYNC_GITATTR_MODE%"=="skip" (
@@ -145,8 +170,84 @@ if exist "%GITATTR_SRC%" (
goto AfterGitAttr
)
if /I "%SYNC_GITATTR_MODE%"=="append" (
for %%I in ("%GITATTR_SRC%") do set "GITATTR_SRC_F=%%~fI"
for %%I in ("%GITATTR_DST%") do set "GITATTR_DST_F=%%~fI"
if /I "!GITATTR_SRC_F!"=="!GITATTR_DST_F!" (
echo Skip: .gitattributes source equals destination.
goto AfterGitAttr
)
set "TMP_DST=%TEMP%\\gitattributes.dst.%RANDOM%.tmp"
set "TMP_MISS=%TEMP%\\gitattributes.missing.%RANDOM%.tmp"
if exist "!TMP_DST!" del /q "!TMP_DST!" >nul 2>nul
if exist "!TMP_MISS!" del /q "!TMP_MISS!" >nul 2>nul
type nul > "!TMP_DST!"
type nul > "!TMP_MISS!"
if exist "%GITATTR_DST%" (
for /f "usebackq delims=" %%L in ("%GITATTR_DST%") do (
set "LINE=%%L"
for /f "tokens=* delims= " %%A in ("!LINE!") do set "LINE=%%A"
if not "!LINE!"=="" (
if /I not "!LINE:~0,1!"=="#" (
echo(!LINE!>>"!TMP_DST!"
)
)
)
)
for /f "usebackq delims=" %%L in ("%GITATTR_SRC%") do (
set "LINE=%%L"
for /f "tokens=* delims= " %%A in ("!LINE!") do set "LINE=%%A"
if not "!LINE!"=="" (
if /I not "!LINE:~0,1!"=="#" (
findstr /x /l /c:"!LINE!" "!TMP_DST!" >nul || (
findstr /x /l /c:"!LINE!" "!TMP_MISS!" >nul || echo(!LINE!>>"!TMP_MISS!"
)
)
)
)
set "MISS_SIZE=0"
if exist "!TMP_MISS!" for %%S in ("!TMP_MISS!") do set "MISS_SIZE=%%~zS"
if "!MISS_SIZE!"=="0" (
del /q "!TMP_DST!" "!TMP_MISS!" >nul 2>nul
echo No missing .gitattributes rules to append.
goto AfterGitAttr
)
if exist "%GITATTR_DST%" (
set "RAND=%RANDOM%"
set "BAK_NAME=.gitattributes.bak.!RAND!"
ren "%GITATTR_DST%" "!BAK_NAME!"
echo Backed up existing .gitattributes -> !BAK_NAME!
set "DST_IN=%ROOT%\\!BAK_NAME!"
) else (
set "DST_IN="
)
set "TMP_OUT=%TEMP%\\gitattributes.out.%RANDOM%.tmp"
if exist "!TMP_OUT!" del /q "!TMP_OUT!" >nul 2>nul
if not "!DST_IN!"=="" (
type "!DST_IN!" > "!TMP_OUT!"
for %%S in ("!DST_IN!") do set "DST_SIZE=%%~zS"
if not "!DST_SIZE!"=="0" echo.>>"!TMP_OUT!"
)
set "SOURCE_NOTE=%GITATTR_SRC%"
>>"!TMP_OUT!" echo # Added from playbook .gitattributes ^(source: !SOURCE_NOTE!^)
type "!TMP_MISS!" >> "!TMP_OUT!"
copy /y "!TMP_OUT!" "%GITATTR_DST%" >nul
del /q "!TMP_DST!" "!TMP_MISS!" "!TMP_OUT!" >nul 2>nul
echo Appended missing .gitattributes rules from standards.
goto AfterGitAttr
)
if /I not "%SYNC_GITATTR_MODE%"=="block" (
echo ERROR: invalid SYNC_GITATTR_MODE=%SYNC_GITATTR_MODE% ^(use block^|overwrite^|skip^)
echo ERROR: invalid SYNC_GITATTR_MODE=%SYNC_GITATTR_MODE% ^(use block^|overwrite^|append^|skip^)
exit /b 1
)