diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index d5522e0..2341636 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -224,7 +224,7 @@ jobs:
run: |
mvn -B --no-transfer-progress -DskipTests -Denforcer.skip=true compile
echo "=== internal package dependency graph (jdeps, bytecode) ==="
- jdeps -verbose:package target/classes | grep 'net.ladenthin.maven.llamacpp.aiindex' || true
+ jdeps -verbose:package llamacpp-ai-index-maven-plugin/target/classes | grep 'net.ladenthin.maven.llamacpp.aiindex' || true
build:
name: Build
@@ -240,7 +240,7 @@ jobs:
- name: Build
run: mvn --batch-mode --no-transfer-progress -DskipTests package
- uses: actions/upload-artifact@v7
- with: { name: plugin-jars, path: target/*.jar }
+ with: { name: plugin-jars, path: llamacpp-ai-index-maven-plugin/target/*.jar }
test:
name: Test
@@ -260,7 +260,7 @@ jobs:
- uses: actions/upload-artifact@v7
with:
name: jacoco-report
- path: target/site/jacoco/jacoco.xml
+ path: llamacpp-ai-index-maven-plugin/target/site/jacoco/jacoco.xml
if-no-files-found: ignore
- name: Memory after tests
if: always()
@@ -271,12 +271,12 @@ jobs:
with:
name: crash-dumps-test
path: |
- ${{ github.workspace }}/hs_err_pid*.log
- ${{ github.workspace }}/*.hprof
- ${{ github.workspace }}/target/surefire-reports/*.dump
- ${{ github.workspace }}/target/surefire-reports/*.dumpstream
- ${{ github.workspace }}/target/surefire-reports/*.txt
- ${{ github.workspace }}/target/surefire-reports/TEST-*.xml
+ ${{ github.workspace }}/llamacpp-ai-index-maven-plugin/hs_err_pid*.log
+ ${{ github.workspace }}/llamacpp-ai-index-maven-plugin/*.hprof
+ ${{ github.workspace }}/llamacpp-ai-index-maven-plugin/target/surefire-reports/*.dump
+ ${{ github.workspace }}/llamacpp-ai-index-maven-plugin/target/surefire-reports/*.dumpstream
+ ${{ github.workspace }}/llamacpp-ai-index-maven-plugin/target/surefire-reports/*.txt
+ ${{ github.workspace }}/llamacpp-ai-index-maven-plugin/target/surefire-reports/TEST-*.xml
if-no-files-found: ignore
- name: Run PIT mutation tests
run: mvn --batch-mode --no-transfer-progress test-compile org.pitest:pitest-maven:mutationCoverage
@@ -284,7 +284,7 @@ jobs:
if: always()
run: |
echo "=== PIT Survived Mutations ==="
- for html_file in $(find target/pit-reports -name "*.html" -type f 2>/dev/null | sort); do
+ for html_file in $(find llamacpp-ai-index-maven-plugin/target/pit-reports -name "*.html" -type f 2>/dev/null | sort); do
if grep -q "SURVIVED" "$html_file"; then
echo "Found survivors in $html_file:"
grep -B 2 -A 3 "SURVIVED" "$html_file"
@@ -293,7 +293,7 @@ jobs:
done
- uses: actions/upload-artifact@v7
if: always()
- with: { name: pit-reports, path: target/pit-reports/ }
+ with: { name: pit-reports, path: llamacpp-ai-index-maven-plugin/target/pit-reports/ }
vmlens:
name: Test (vmlens interleavings)
@@ -311,7 +311,7 @@ jobs:
if: always()
with:
name: vmlens-report
- path: target/vmlens-report/
+ path: llamacpp-ai-index-maven-plugin/target/vmlens-report/
if-no-files-found: ignore
report:
@@ -325,21 +325,21 @@ jobs:
- uses: actions/setup-java@v5
with: { java-version: '21', distribution: temurin }
- uses: actions/download-artifact@v8
- with: { name: jacoco-report, path: target/site/jacoco/ }
+ with: { name: jacoco-report, path: llamacpp-ai-index-maven-plugin/target/site/jacoco/ }
continue-on-error: true
- uses: advanced-security/maven-dependency-submission-action@v5
- name: Coveralls
uses: coverallsapp/github-action@v2
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
- file: target/site/jacoco/jacoco.xml
+ file: llamacpp-ai-index-maven-plugin/target/site/jacoco/jacoco.xml
format: jacoco
continue-on-error: true
- name: Codecov
uses: codecov/codecov-action@v7
with:
token: ${{ secrets.CODECOV_TOKEN }}
- files: target/site/jacoco/jacoco.xml
+ files: llamacpp-ai-index-maven-plugin/target/site/jacoco/jacoco.xml
continue-on-error: true
check-snapshot:
@@ -402,14 +402,14 @@ jobs:
MAVEN_GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
# Runs even when the deploy step failed: a Central publish-poll timeout reds the
# job *after* the bundle was uploaded (and typically published server-side), while
- # the signed jars + .asc files already exist in target/ (signing happens at
+ # the signed jars + .asc files already exist in llamacpp-ai-index-maven-plugin/target/ (signing happens at
# verify). Collecting on failure lets the github-snapshot job still attach them.
- name: Collect signed artifacts
if: ${{ !cancelled() }}
run: |
mkdir -p signed-snapshot-assets
- cp target/*.jar signed-snapshot-assets/ 2>/dev/null || true
- cp target/*.jar.asc signed-snapshot-assets/ 2>/dev/null || true
+ cp llamacpp-ai-index-maven-plugin/target/*.jar signed-snapshot-assets/ 2>/dev/null || true
+ cp llamacpp-ai-index-maven-plugin/target/*.jar.asc signed-snapshot-assets/ 2>/dev/null || true
- uses: actions/upload-artifact@v7
if: ${{ !cancelled() }}
with:
@@ -478,14 +478,14 @@ jobs:
MAVEN_GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
# Runs even when the deploy step failed: a Central publish-poll timeout reds the
# job *after* the bundle was uploaded (and typically published server-side), while
- # the signed jars + .asc files already exist in target/ (signing happens at
+ # the signed jars + .asc files already exist in llamacpp-ai-index-maven-plugin/target/ (signing happens at
# verify). Collecting on failure lets the github-release job still attach them.
- name: Collect signed artifacts
if: ${{ !cancelled() }}
run: |
mkdir -p signed-release-assets
- cp target/*.jar signed-release-assets/ 2>/dev/null || true
- cp target/*.jar.asc signed-release-assets/ 2>/dev/null || true
+ cp llamacpp-ai-index-maven-plugin/target/*.jar signed-release-assets/ 2>/dev/null || true
+ cp llamacpp-ai-index-maven-plugin/target/*.jar.asc signed-release-assets/ 2>/dev/null || true
- uses: actions/upload-artifact@v7
if: ${{ !cancelled() }}
with:
diff --git a/.gitignore b/.gitignore
index 2c7a209..4556a94 100644
--- a/.gitignore
+++ b/.gitignore
@@ -32,17 +32,18 @@ replay_pid*
# heap dumps from OOM (e.g. -XX:+HeapDumpOnOutOfMemoryError on test/PIT forks)
*.hprof
-# jcstress / jqwik test outputs (generated in repo root)
-/.jqwik-database
+# jcstress / jqwik test outputs (generated at the repo root pre-reactor; each module's own
+# basedir post-reactor, e.g. llamacpp-ai-index-maven-plugin/.jqwik-database)
+**/.jqwik-database
# Benchmark/experiment scratch output dirs (not part of the build)
-src/siteGusto/
-src/siteMistral3/
-src/siteQwenBRUTAL/
+llamacpp-ai-index-maven-plugin/src/siteGusto/
+llamacpp-ai-index-maven-plugin/src/siteMistral3/
+llamacpp-ai-index-maven-plugin/src/siteQwenBRUTAL/
# IDE config
.idea/
# Generated AI-index output from the self-index run (keep the tracked placeholder)
-/src/site/ai/*
-!/src/site/ai/empty.md
+/llamacpp-ai-index-maven-plugin/src/site/ai/*
+!/llamacpp-ai-index-maven-plugin/src/site/ai/empty.md
diff --git a/REUSE.toml b/REUSE.toml
index ebcb370..55888a5 100644
--- a/REUSE.toml
+++ b/REUSE.toml
@@ -7,7 +7,7 @@ SPDX-PackageDownloadLocation = "https://github.com/bernardladenthin/llamacpp-ai-
path = [
"**.md",
"CITATION.cff",
- "src/site/ai/empty.md",
+ "llamacpp-ai-index-maven-plugin/src/site/ai/empty.md",
"docs/RELEASE.md",
".github/ISSUE_TEMPLATE/bug_report.md",
".github/ISSUE_TEMPLATE/feature_request.md",
@@ -18,7 +18,7 @@ SPDX-FileCopyrightText = "2026 Bernard Ladenthin "
SPDX-License-Identifier = "Apache-2.0"
[[annotations]]
-path = "src/test/resources/SmolLM2-135M-Instruct-Q3_K_M.gguf"
+path = "llamacpp-ai-index-maven-plugin/src/test/resources/SmolLM2-135M-Instruct-Q3_K_M.gguf"
precedence = "aggregate"
SPDX-FileCopyrightText = "HuggingFaceTB"
SPDX-License-Identifier = "Apache-2.0"
diff --git a/TODO.md b/TODO.md
index 645add7..edef143 100644
--- a/TODO.md
+++ b/TODO.md
@@ -17,4 +17,4 @@ recorded in git history and `crossrepostatus.md`, not here.
- **Cross-repo code-quality TODOs** — see [`../workspace/policies/code-quality-todos.md`](../workspace/policies/code-quality-todos.md) for the canonical `@VisibleForTesting` design-fit review, package hierarchy review, and class/method naming review. This repo has no `@VisibleForTesting` usages today; the package and naming reviews are still open here.
-- **No LogCaptor smoke test needed (note, not an action).** This module has no logging code (`org.slf4j.*` not used in `src/main/java/`); production uses Maven's `Log` interface. If SLF4J logging is ever introduced, add a LogCaptor smoke test at the same time so the binding/configuration is exercised in tests.
+- **SLF4J gap CLOSED.** The four `indexer.*` classes (`SourceFileIndexer`, `PackageIndexer`, `ProjectIndexer`, `AiFieldGenerationSupport`) now log via `org.slf4j.Logger` instead of the constructor-injected Maven `Log`; only the 5 mojos (and the `PluginArchitectureTest` `mavenMojoAnnotationsConfinedToMojo`/`nonMojoIsMavenFree` rules) still touch the Maven Plugin API. Maven's `maven-slf4j-provider` binds `slf4j-api` inside plugin executions, so every `LOGGER.info(...)`/`.warn(...)`/`.debug(...)` call surfaces as a normal `[INFO]`/`[WARN]`/`[DEBUG]` line in `mvn` output with zero glue (verified end-to-end with the `generate` goal against a scratch project). `AiFieldGenerationSupportTest` exercises the binding/configuration directly via a logback `ListAppender` attached to the class logger (the LogCaptor-smoke-test role this note used to flag as future work).
diff --git a/llamacpp-ai-index-maven-plugin/pom.xml b/llamacpp-ai-index-maven-plugin/pom.xml
new file mode 100644
index 0000000..09bb6b6
--- /dev/null
+++ b/llamacpp-ai-index-maven-plugin/pom.xml
@@ -0,0 +1,2341 @@
+
+
+
+ 4.0.0
+
+
+ net.ladenthin
+ srcmorph-parent
+ 1.1.0-SNAPSHOT
+ ../pom.xml
+
+
+ llamacpp-ai-index-maven-plugin
+ maven-plugin
+
+ llamacpp-ai-index-maven-plugin
+ Free Maven plugin for hierarchical AI-readable indexing and summarization of source code projects using llama.cpp-compatible local models.
+
+
+ bernardladenthin
+ 8
+ 21
+ UTF-8
+ 3.15.2
+ 3.9.16
+
+ 5.0.6
+
+
+
+ gpt-oss-20B-mxfp4
+
+ -1
+
+ -1
+
+
+ 6.1.2
+ 3.0
+ 1.37
+ 0.16
+ 3.6
+ 1.2.28
+ 2.50.0
+ 0.13.7
+ 1.0.0
+ 4.2.1
+
+ 1.9.3
+ 1.4.2
+ 4.10.2.0
+ 1.18.46
+ 7.7.4
+ 1.14.0
+ 3.8.0
+ 2.94.0
+
+ ${project.basedir}/src/site/ai
+
+
+ true
+
+
+
+ ${git.commit.time}
+
+
+
+
+
+
+
+ org.projectlombok
+ lombok
+ ${lombok.version}
+ provided
+
+
+ org.jspecify
+ jspecify
+ ${jspecify.version}
+
+
+ org.checkerframework
+ checker-qual
+ ${checker.version}
+
+
+ net.ladenthin
+ llama
+ ${llama.version}
+ ${llama.classifier}
+
+
+
+
+ org.slf4j
+ slf4j-api
+
+
+
+ org.apache.maven
+ maven-plugin-api
+ ${maven.version}
+ provided
+
+
+
+ org.apache.maven.plugin-tools
+ maven-plugin-annotations
+ ${maven.plugin.tools.version}
+ provided
+
+
+
+ org.junit.jupiter
+ junit-jupiter
+ ${junit.version}
+ test
+
+
+
+ org.hamcrest
+ hamcrest
+ ${hamcrest.version}
+ test
+
+
+ net.jqwik
+ jqwik
+ ${jqwik.version}
+ test
+
+
+ com.tngtech.archunit
+ archunit-junit5
+ ${archunit.version}
+ test
+
+
+ org.openjdk.jmh
+ jmh-core
+ ${jmh.version}
+ test
+
+
+ org.openjdk.jmh
+ jmh-generator-annprocess
+ ${jmh.version}
+ test
+
+
+ org.openjdk.jcstress
+ jcstress-core
+ ${jcstress.version}
+ test
+
+
+ org.jetbrains.lincheck
+ lincheck
+ ${lincheck.version}
+ test
+
+
+
+ com.vmlens
+ api
+ ${vmlens.version}
+ test
+
+
+
+ ch.qos.logback
+ logback-classic
+ test
+
+
+
+
+
+
+
+ com.diffplug.spotless
+ spotless-maven-plugin
+ ${spotless.version}
+
+
+ com.github.spotbugs
+ spotbugs-maven-plugin
+ ${spotbugs.version}
+
+
+ com.vmlens
+ vmlens-maven-plugin
+ ${vmlens.version}
+
+
+ io.github.git-commit-id
+ git-commit-id-maven-plugin
+ 10.0.0
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.15.0
+
+
+ org.apache.maven.plugins
+ maven-enforcer-plugin
+ 3.6.3
+
+
+ org.apache.maven.plugins
+ maven-gpg-plugin
+ 3.2.8
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+ 3.5.0
+
+
+ org.apache.maven.plugins
+ maven-javadoc-plugin
+ 3.12.0
+
+
+ org.apache.maven.plugins
+ maven-plugin-plugin
+ ${maven.plugin.tools.version}
+
+
+ org.apache.maven.plugins
+ maven-source-plugin
+ 3.4.0
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 3.5.6
+
+
+ @{argLine} -Xmx2g -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=. -XX:ErrorFile=hs_err_pid%p.log
+
+
+ **/VmlensInterleavingSmokeTest.java
+
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+ 3.6.3
+
+
+ org.jacoco
+ jacoco-maven-plugin
+ 0.8.15
+
+
+ org.pitest
+ pitest-maven
+ 1.25.7
+
+
+ org.sonatype.central
+ central-publishing-maven-plugin
+ 0.11.0
+
+
+
+
+
+ io.github.git-commit-id
+ git-commit-id-maven-plugin
+
+
+ get-git-properties
+
+ revision
+
+ initialize
+
+
+
+ yyyy-MM-dd'T'HH:mm:ss'Z'
+ UTC
+ false
+ false
+
+
+
+ org.apache.maven.plugins
+ maven-enforcer-plugin
+
+
+ enforce-maven
+
+ enforce
+
+
+
+
+ [3.6.3,)
+
+
+ [1.8,)
+
+
+
+
+
+ commons-logging:commons-logging
+
+ log4j:log4j
+
+ org.hamcrest:hamcrest-core
+ org.hamcrest:hamcrest-library
+ org.hamcrest:hamcrest-all
+
+ junit:junit
+ junit:junit-dep
+
+
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ ${maven.compiler.release}
+ ${maven.compiler.testRelease}
+ true
+ true
+
+
+ -Xlint:all,-serial,-options,-classfile,-processing
+ -Werror
+
+ -processor
+ lombok.launch.AnnotationProcessorHider$AnnotationProcessor,lombok.launch.AnnotationProcessorHider$ClaimingProcessor,org.checkerframework.checker.nullness.NullnessChecker
+
+ -AskipDefs=^net\.ladenthin\.llamacpp_ai_index_maven_plugin\..*$
+ -XDaddTypeAnnotationsToSymbol=true
+ -XDcompilePolicy=simple
+ --should-stop=ifError=FLOW
+
+ -Xplugin:ErrorProne -XepExcludedPaths:.*/generated-sources/.* -Xep:NullAway:ERROR -XepOpt:NullAway:OnlyNullMarked=true -XepOpt:NullAway:ExcludedFieldAnnotations=org.apache.maven.plugins.annotations.Parameter,org.apache.maven.plugins.annotations.Component -XepOpt:NullAway:JSpecifyMode=true -XepOpt:NullAway:CheckOptionalEmptiness=true -XepOpt:NullAway:AcknowledgeRestrictiveAnnotations=true -XepOpt:NullAway:AcknowledgeAndroidRecent=true -XepOpt:NullAway:AssertsEnabled=true -Xep:BoxedPrimitiveEquality:ERROR -Xep:EqualsHashCode:ERROR -Xep:EqualsIncompatibleType:ERROR -Xep:IdentityBinaryExpression:ERROR -Xep:SelfAssignment:ERROR -Xep:SelfComparison:ERROR -Xep:SelfEquals:ERROR -Xep:DeadException:ERROR -Xep:FormatString:ERROR -Xep:InvalidPatternSyntax:ERROR -Xep:OptionalEquality:ERROR -Xep:ImpossibleNullComparison:ERROR
+
+
+
+ org.projectlombok
+ lombok
+ ${lombok.version}
+
+
+ com.google.errorprone
+ error_prone_core
+ ${errorprone.version}
+
+
+ com.uber.nullaway
+ nullaway
+ ${nullaway.version}
+
+
+ org.checkerframework
+ checker
+ ${checker.version}
+
+
+
+
+
+ default-compile
+
+
+
+ module-info.java
+
+
+
+
+ module-info-compile
+ compile
+
+ compile
+
+
+
+ 9
+
+ module-info.java
+
+
+
+
+
+
+ default-testCompile
+
+
+ false
+
+ -XDaddTypeAnnotationsToSymbol=true
+ -XDcompilePolicy=simple
+ --should-stop=ifError=FLOW
+ -Xplugin:ErrorProne -Xep:NullAway:OFF -Xep:GuardedBy:OFF -Xep:IdentityBinaryExpression:OFF
+
+
+
+ org.openjdk.jcstress
+ jcstress-core
+ ${jcstress.version}
+
+
+ org.openjdk.jmh
+ jmh-generator-annprocess
+ ${jmh.version}
+
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+
+
+ org.apache.maven.plugins
+ maven-source-plugin
+
+
+ attach-sources
+ verify
+
+ jar-no-fork
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-javadoc-plugin
+
+ ${maven.compiler.release}
+ true
+ true
+ all
+
+ **/HelpMojo.java
+
+
+
+
+ attach-javadocs
+
+ jar
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-plugin-plugin
+
+ ai-index
+
+
+
+ default-descriptor
+
+ descriptor
+
+
+
+ help-goal
+
+ helpmojo
+
+
+
+
+
+
+ org.jacoco
+ jacoco-maven-plugin
+
+
+ prepare-agent
+
+ prepare-agent
+
+
+
+ report
+ test
+
+ report
+
+
+
+
+
+ com.diffplug.spotless
+ spotless-maven-plugin
+
+
+
+ src/main/java/**/*.java
+ src/test/java/**/*.java
+
+
+ ${palantir-java-format.version}
+
+
+
+
+
+
+
+
+ spotless-check
+ verify
+
+ check
+
+
+
+
+
+ com.github.spotbugs
+ spotbugs-maven-plugin
+
+ Max
+ Low
+ true
+ false
+ spotbugs-exclude.xml
+
+
+ com.mebigfatguy.fb-contrib
+ fb-contrib
+ ${fb-contrib.version}
+
+
+ com.h3xstream.findsecbugs
+ findsecbugs-plugin
+ ${findsecbugs.version}
+
+
+
+
+
+ spotbugs-check
+ verify
+
+ check
+
+
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+
+ org.openjdk.jmh.Main
+ test
+
+
+
+
+ org.pitest
+ pitest-maven
+
+
+ org.pitest
+ pitest-junit5-plugin
+ 1.2.3
+
+
+
+
+
+ net.ladenthin.maven.llamacpp.aiindex.config.AiCalibration
+ net.ladenthin.maven.llamacpp.aiindex.config.AiCondition
+ net.ladenthin.maven.llamacpp.aiindex.config.AiConditionEvaluator
+ net.ladenthin.maven.llamacpp.aiindex.config.AiFieldGenerationConfig
+ net.ladenthin.maven.llamacpp.aiindex.config.AiFieldGenerationSelector
+ net.ladenthin.maven.llamacpp.aiindex.config.AiFileContext
+ net.ladenthin.maven.llamacpp.aiindex.config.AiGenerationConfig
+ net.ladenthin.maven.llamacpp.aiindex.config.AiRangeCondition
+ net.ladenthin.maven.llamacpp.aiindex.config.AiModelDefinition
+ net.ladenthin.maven.llamacpp.aiindex.config.AiModelDefinitionSupport
+ net.ladenthin.maven.llamacpp.aiindex.indexer.AiCalibrationMeasurement
+ net.ladenthin.maven.llamacpp.aiindex.indexer.AiInputWindowCalculator
+ net.ladenthin.maven.llamacpp.aiindex.document.AiGenerationRequest
+ net.ladenthin.maven.llamacpp.aiindex.document.AiGenerationResult
+ net.ladenthin.maven.llamacpp.aiindex.document.AiMdChildEntryLineFormatter
+ net.ladenthin.maven.llamacpp.aiindex.document.AiMdDocument
+ net.ladenthin.maven.llamacpp.aiindex.document.AiMdHeader
+ net.ladenthin.maven.llamacpp.aiindex.document.AiMdHeaderSupport
+ net.ladenthin.maven.llamacpp.aiindex.document.AiMdLeadExtractor
+ net.ladenthin.maven.llamacpp.aiindex.prompt.AiPreparedPrompt
+ net.ladenthin.maven.llamacpp.aiindex.prompt.AiPromptDefinition
+ net.ladenthin.maven.llamacpp.aiindex.prompt.AiPromptPreparationSupport
+ net.ladenthin.maven.llamacpp.aiindex.prompt.AiPromptSupport
+ net.ladenthin.maven.llamacpp.aiindex.provider.AiCompletionParser
+ net.ladenthin.maven.llamacpp.aiindex.provider.AiGenerationTimings
+ net.ladenthin.maven.llamacpp.aiindex.provider.AiGenerationProvider
+ net.ladenthin.maven.llamacpp.aiindex.provider.AiGenerationProviderFactory
+ net.ladenthin.maven.llamacpp.aiindex.provider.MockAiGenerationProvider
+ net.ladenthin.maven.llamacpp.aiindex.config.AiOversizeStrategy
+ net.ladenthin.maven.llamacpp.aiindex.config.AiFactCounter
+ net.ladenthin.maven.llamacpp.aiindex.config.AiFactDefinition
+ net.ladenthin.maven.llamacpp.aiindex.config.AiFactDefinitionSupport
+ net.ladenthin.maven.llamacpp.aiindex.config.AiFactExtractor
+ net.ladenthin.maven.llamacpp.aiindex.support.AiChecksumSupport
+ net.ladenthin.maven.llamacpp.aiindex.support.AiDeterministicSummary
+ net.ladenthin.maven.llamacpp.aiindex.support.AiGenerationTimeEstimator
+ net.ladenthin.maven.llamacpp.aiindex.support.AiPathSupport
+ net.ladenthin.maven.llamacpp.aiindex.support.AiProgressBar
+ net.ladenthin.maven.llamacpp.aiindex.support.AiSourceExcludeFilter
+ net.ladenthin.maven.llamacpp.aiindex.support.AiTimeSupport
+ net.ladenthin.maven.llamacpp.aiindex.support.Java8CompatibilityHelper
+
+
+ net.ladenthin.maven.llamacpp.aiindex.*
+
+ 100
+ 30000
+
+
+
+
+
+
+
+
+ gpu-cuda
+
+ cuda13-windows-x86-64
+
+
+
+ gpu-vulkan
+
+ vulkan-windows-x86-64
+
+
+
+
+
+
+ ai-index-selftest
+
+
+
+ ${project.groupId}
+ ${project.artifactId}
+ ${project.version}
+
+
+ ${ai.index.output.directory}
+
+
+ src/main/java/net/ladenthin/maven/llamacpp/aiindex/config
+ src/main/java/net/ladenthin/maven/llamacpp/aiindex/provider
+
+
+
+
+ **/package-info.java
+ **/module-info.java
+
+
+ llamacpp-jni
+
+
+
+
+
+
+ Mistral-7B-Instruct-v0.3-Q4_K_M-C16k
+ X:/Modelle/Mistral-7B-Instruct-v0.3-Q4_K_M.gguf
+ 16384
+ 2048
+ 1.0
+ 8
+ 4
+ true
+ 1.1
+
+
+
+ Meta-Llama-3.1-8B-Instruct-Q5_K_M-C32k
+ X:/Modelle/Meta-Llama-3.1-8B-Instruct-Q5_K_M.gguf
+ 32768
+ 1536
+ 1.0
+ 8
+ 4
+ true
+ 1.1
+
+
+
+ Codestral-22B-v0.1-Q4_K_M-C32k
+ X:/Modelle/Codestral-22B-v0.1-Q4_K_M.gguf
+ 32768
+ 1536
+ 1.0
+ 8
+ 4
+ true
+ 1.1
+
+
+
+ Codestral-22B-v0.1-Q6_K-C32k
+ X:/Modelle/Codestral-22B-v0.1-Q6_K.gguf
+ 32768
+ 1536
+ 1.0
+ 8
+ 4
+ true
+ 1.1
+
+
+
+ Qwen2.5-Coder-7B-Instruct-Q5_K_M-C16k
+ X:/Modelle/qwen2.5-coder-7b-instruct-q5_k_m.gguf
+ 16384
+ 2048
+ 1.0
+ 8
+ 4
+ true
+ 1.1
+
+
+
+ Ministral-3-8B-Instruct-2512-Q4_K_M-C32k
+ X:/Modelle/Ministral-3-8B-Instruct-2512-Q4_K_M.gguf
+ 32768
+ 2048
+ 0.1
+ 8
+ 4
+ true
+ 1.1
+
+
+
+ Ministral-3-14B-Instruct-2512-Q4_K_M-C32k
+ X:/Modelle/Ministral-3-14B-Instruct-2512-Q4_K_M.gguf
+ 32768
+ 2048
+ 0.1
+ 8
+ 4
+ true
+ 1.1
+
+
+
+ Ministral-3-8B-Instruct-2512-Q5_K_M-C32k
+ X:/Modelle/Ministral-3-8B-Instruct-2512-Q5_K_M.gguf
+ 32768
+ 2048
+ 0.1
+ 8
+ 4
+ true
+ 1.1
+
+
+
+ Ministral-3-14B-Instruct-2512-Q5_K_M-C32k
+ X:/Modelle/Ministral-3-14B-Instruct-2512-Q5_K_M.gguf
+ 32768
+ 2048
+ 0.1
+ 8
+ 4
+ true
+ 1.1
+
+
+
+ Gemma-4-26B-A4B-it-UD-Q4_K_M-C32k
+ X:/Modelle/gemma-4-26B-A4B-it-UD-Q4_K_M.gguf
+ 32768
+ 8192
+ 1.0
+ 8
+ 4
+ true
+ 0.95
+ 64
+ 1.1
+ false
+
+ <end_of_turn>
+
+
+
+
+ Gemma-4-12B-it-Q4_K_M-C32k
+ X:/Modelle/gemma-4-12B-it-Q4_K_M.gguf
+ 32768
+ 8192
+ 1.0
+ 8
+ 4
+ true
+ 0.95
+ 64
+ 1.1
+ false
+
+ <end_of_turn>
+
+
+
+
+ Gemma-4-E4B-Uncensored-HauhauCS-Aggressive-Q4_K_M-C32k
+ X:/Modelle/Gemma-4-E4B-Uncensored-HauhauCS-Aggressive-Q4_K_M.gguf
+ 32768
+ 8192
+ 1.0
+ 8
+ 4
+ true
+ 0.95
+ 64
+ 1.1
+ false
+
+ <end_of_turn>
+
+
+
+
+ Gemma-4-E4B-Uncensored-HauhauCS-Aggressive-Q6_K_P-C32k
+ X:/Modelle/Gemma-4-E4B-Uncensored-HauhauCS-Aggressive-Q6_K_P.gguf
+ 32768
+ 8192
+ 1.0
+ 8
+ 4
+ true
+ 0.95
+ 64
+ 1.1
+ false
+
+ <end_of_turn>
+
+
+
+
+ Qwen3-Coder-30B-A3B-Instruct-UD-Q4_K_XL-C64k
+ X:/Modelle/Qwen3-Coder-30B-A3B-Instruct-UD-Q4_K_XL.gguf
+
+ 16384
+ 1536
+ 0.7
+ 8
+ 4
+ true
+ 0.8
+ 20
+ 1.05
+ ${ai.cachePrompt}
+
+
+
+ Qwen2.5-Coder-14B-Instruct-Q4_K_M-C32k
+ X:/Modelle/Qwen2.5-Coder-14B-Instruct-Q4_K_M.gguf
+ 32768
+ 2048
+ 0.7
+ 8
+ 4
+ true
+ 0.8
+ 20
+ 1.05
+
+
+
+ Qwen3-4B-Instruct-2507-Q5_K_M-C32k
+ X:/Modelle/Qwen3-4B-Instruct-2507-Q5_K_M.gguf
+ 32768
+ 2048
+ 0.7
+ 8
+ 4
+ true
+ 0.8
+ 20
+ 1.05
+
+
+
+ Granite-4.0-H-Tiny-Q4_K_M-C128k
+ X:/Modelle/ibm-granite_granite-4.0-h-tiny-Q4_K_M.gguf
+ 131072
+ 2048
+ 0.2
+ 8
+ 4
+ true
+ 1.1
+
+
+
+ Granite-4.0-H-Small-Q4_K_M-C128k
+ X:/Modelle/ibm-granite_granite-4.0-h-small-Q4_K_M.gguf
+ 131072
+ 2048
+ 0.2
+ 8
+ 4
+ true
+ 1.1
+
+
+
+ EXP-Qwen3.5-4B
+ X:/Modelle/Qwen3.5-4B-Q4_K_M.gguf
+ 16384
+ 1536
+ 0.7
+ 8
+ 4
+ true
+ 0.8
+ 20
+ 1.05
+ false
+
+
+ EXP-Qwen2.5-Coder-7B
+ X:/Modelle/qwen2.5-coder-7b-instruct-q5_k_m.gguf
+ 16384
+ 1536
+ 0.7
+ 8
+ 4
+ true
+ 0.8
+ 20
+ 1.05
+
+
+
+ gpt-oss-20B-c16k
+ X:/Modelle/gpt-oss-20b-UD-Q4_K_XL.gguf
+ 16384
+ ${ai.gpuLayers}
+ ${ai.mainGpu}
+ ${ai.devices}
+ 2048
+ 0.7
+ 8
+ 3
+ true
+ 1.0
+ 0
+ 0.05
+ 1.0
+ low
+
+
+ gpt-oss-20B-c48k
+ X:/Modelle/gpt-oss-20b-UD-Q4_K_XL.gguf
+ 49152
+ ${ai.gpuLayers}
+ ${ai.mainGpu}
+ ${ai.devices}
+ 4096
+ 0.7
+ 8
+ 3
+ true
+ 1.0
+ 0
+ 0.05
+ 1.0
+ low
+
+
+ gpt-oss-20B-c96k
+ X:/Modelle/gpt-oss-20b-UD-Q4_K_XL.gguf
+ 98304
+ ${ai.gpuLayers}
+ ${ai.mainGpu}
+ ${ai.devices}
+ 6144
+ 0.7
+ 8
+ 3
+ true
+ 1.0
+ 0
+ 0.05
+ 1.0
+ low
+
+
+
+
+ gpt-oss-20B-mxfp4
+ X:/Modelle/gpt-oss-20b-mxfp4.gguf
+ 98304
+ ${ai.gpuLayers}
+ ${ai.mainGpu}
+ ${ai.devices}
+ 6144
+ 0.7
+ 8
+ 3
+ true
+ 1.0
+ 0
+ 0.05
+ 1.0
+ low
+
+
+ gpt-oss-20B-Q4_K_M
+ X:/Modelle/gpt-oss-20b-Q4_K_M.gguf
+ 98304
+ ${ai.gpuLayers}
+ ${ai.mainGpu}
+ ${ai.devices}
+ 6144
+ 0.7
+ 8
+ 3
+ true
+ 1.0
+ 0
+ 0.05
+ 1.0
+ low
+
+
+ gpt-oss-20B-Q5_K_M
+ X:/Modelle/gpt-oss-20b-Q5_K_M.gguf
+ 98304
+ ${ai.gpuLayers}
+ ${ai.mainGpu}
+ ${ai.devices}
+ 6144
+ 0.7
+ 8
+ 3
+ true
+ 1.0
+ 0
+ 0.05
+ 1.0
+ low
+
+
+ gpt-oss-20B-Q8_0
+ X:/Modelle/gpt-oss-20b-Q8_0.gguf
+ 98304
+ ${ai.gpuLayers}
+ ${ai.mainGpu}
+ ${ai.devices}
+ 6144
+ 0.7
+ 8
+ 3
+ true
+ 1.0
+ 0
+ 0.05
+ 1.0
+ low
+
+
+ gpt-oss-20B-F16
+ X:/Modelle/gpt-oss-20b-F16.gguf
+ 98304
+ ${ai.gpuLayers}
+ ${ai.mainGpu}
+ ${ai.devices}
+ 6144
+ 0.7
+ 8
+ 3
+ true
+ 1.0
+ 0
+ 0.05
+ 1.0
+ low
+
+
+
+
+ granite-4.0-h-tiny-bigwindow
+ X:/Modelle/granite-4.0-h-tiny-Q4_K_M.gguf
+ 393216
+ ${ai.gpuLayers}
+ ${ai.mainGpu}
+ ${ai.devices}
+ 4096
+ 0.2
+ 8
+ 3
+ true
+ 1.0
+ 0
+ 0.05
+ 1.0
+
+
+
+
+
+ granite-4.0-h-1b-fastchunk
+ X:/Modelle/granite-4.0-h-1b-Q4_K_M.gguf
+ 16384
+ ${ai.gpuLayers}
+ ${ai.mainGpu}
+ ${ai.devices}
+ 1536
+ 0.2
+ 8
+ 3
+ true
+ 1.0
+ 0
+ 0.05
+ 1.0
+
+
+
+
+ EXP-Qwen3-Coder-30B
+ X:/Modelle/Qwen3-Coder-30B-A3B-Instruct-UD-Q4_K_XL.gguf
+ 16384
+ 1536
+ 0.7
+ 8
+ 4
+ true
+ 0.8
+ 20
+ 1.05
+
+
+
+ EXP-DeepSeek-Coder-V2-Lite
+ X:/Modelle/DeepSeek-Coder-V2-Lite-Instruct-Q4_K_M.gguf
+ 16384
+ 1536
+ 0.3
+ 8
+ 4
+ true
+ 0.9
+ 40
+ 1.05
+
+
+ EXP-Seed-Coder-8B
+ X:/Modelle/Seed-Coder-8B-Instruct-Q4_K_M.gguf
+ 16384
+ 1536
+ 0.3
+ 8
+ 4
+ true
+ 0.9
+ 40
+ 1.05
+
+
+ EXP-Granite-4.0-H-Tiny
+ X:/Modelle/granite-4.0-h-tiny-Q4_K_M.gguf
+ 16384
+ 1536
+ 0.0
+ 8
+ 4
+ true
+ 1.0
+ 0
+ 1.0
+
+
+
+ EXP-Granite-4.0-H-Small
+ X:/Modelle/granite-4.0-h-small-UD-Q4_K_XL.gguf
+ 16384
+ 1536
+ 0.0
+ 8
+ 4
+ true
+ 1.0
+ 0
+ 1.0
+
+
+ EXP-Qwen3-4B-Instruct-2507
+ X:/Modelle/Qwen3-4B-Instruct-2507-Q4_K_M.gguf
+ 16384
+ 1536
+ 0.7
+ 8
+ 4
+ true
+ 0.8
+ 20
+ 1.05
+
+
+
+
+
+
+ file-body-java
+
+
+Then output these sections as markdown. Omit any section that does not apply. Use '####' for section labels. Never use '###' or higher.
+
+#### Purpose
+One or two bullets: what the type is for.
+
+#### Type
+Kind (class / interface / enum / record / annotation) and modifiers (abstract, final, sealed). extends X; implements Y; key generics and type bounds. Notable annotations (@Mojo, @Entity, Lombok, etc.).
+
+#### Input
+What comes in: constructor and method parameters, injected dependencies, consumed fields, read resources (files, buffers, streams, config).
+
+#### Output
+What comes out: return types, produced state, mutated fields, written resources, side effects.
+
+#### Core logic
+The essential steps / algorithm / responsibility as bullets. This is the most important section.
+
+#### Public API
+Each public/protected member as `name(params) -> returnType` + a clause (max 6 words) on its purpose. For a FAMILY of near-identical members (e.g. `fooN`), do not list them all: in the analysis channel enumerate and count them one per line, then in the final answer emit only the exact total and index range, e.g. `foo1..fooN (N total)`.
+
+#### Dependencies
+Imports and referenced types, as searchable names.
+
+#### Exceptions / Errors
+Notable thrown/caught exceptions, null-handling, and error conditions.
+
+#### Concurrency
+Threading, synchronization, immutability, or thread-safety notes, if any.
+
+## Rules
+- Markdown bullets and short clauses, not prose paragraphs. Sentences allowed only where a bullet would lose meaning.
+- Weave class / type / domain names into the bullets so they are searchable.
+- No code fences, no ```markdown / ```java, no XML tags, no formatter comments.
+- COUNT EXACTLY. When you state a count of methods/fields/members, count them precisely from the source and recount before finalizing. Never round, approximate, or write "similar"/"~".
+- The filename heading is already rendered above your output. Start immediately with the blockquote lead. Never produce empty output.
+
+## Critical
+If the source contains "[EOF - source was truncated]", index ONLY what is literally present. Never infer, guess, or invent any unit, field, or behavior beyond the shown source.
+
+The file path and its full source are provided in the next (user) message: the path on the first
+line, then a blank line, then the source. Index only what is literally present there.
+ ]]>
+
+
+ file-body-sql
+
+
+Then output these sections as markdown. Omit any section that does not apply. Use '####' for section labels. Never use '###' or higher.
+
+#### Purpose
+One or two bullets: what this SQL object is for.
+
+#### Type
+SQL object kind: table / view / materialized view / procedure / function / trigger / index / sequence. Note the dialect if evident (PostgreSQL, MySQL, Oracle, T-SQL).
+
+#### Schema
+For tables/views: each column as `name type` plus constraints (PK, FK, NOT NULL, UNIQUE, DEFAULT, CHECK). Mark the primary key and any indexes.
+
+#### Reads
+Tables and columns this object READS from (FROM / JOIN / subquery sources, function inputs).
+
+#### Writes
+Tables and columns this object WRITES (INSERT / UPDATE / DELETE / MERGE targets, or the table a trigger fires on).
+
+#### Relationships
+Foreign keys and join relationships to other tables, as searchable `table.column -> table.column` pairs.
+
+#### Routine logic
+For procedures / functions / triggers: parameters, the essential steps, and the result or effect, as bullets.
+
+#### Dependencies
+Other tables, views, functions, or sequences referenced, as searchable names.
+
+## Rules
+- Markdown bullets and short clauses, not prose paragraphs.
+- Weave table / column / constraint / domain names into the bullets so they are searchable.
+- No code fences, no ```markdown / ```sql, no XML tags, no formatter comments.
+- The filename heading is already rendered above your output. Start immediately with the blockquote lead. Never produce empty output.
+
+## Critical
+If the source contains "[EOF - source was truncated]", index ONLY what is literally present. Never infer, guess, or invent any table, column, or relationship beyond the shown source.
+
+The file path and its full source are provided in the next (user) message: the path on the first
+line, then a blank line, then the source. Index only what is literally present there.
+ ]]>
+
+
+ file-body-fallback
+
+
+Then output these sections as markdown. Omit any section that does not apply. Use '####' for section labels. Never use '###' or higher.
+
+#### Purpose
+One or two bullets: what the file/unit is for.
+
+#### Type
+Kind (class / interface / enum / record / header / kernel / SQL object) and language. For OO code: extends X; implements Y; key generics. For C: header vs implementation, exported vs static. For SQL: table / view / procedure / function / trigger.
+
+#### Input
+What comes in: key parameters, consumed fields, read resources (files, buffers, streams, kernels, tables/columns, env/config).
+
+#### Output
+What comes out: return types, produced state, written resources/tables, side effects.
+
+#### Core logic
+The essential steps / algorithm / responsibility as bullets. This is the most important section.
+
+#### Public API
+Each public/exported unit as `name(params) -> returnType` + a clause (max 6 words) on its purpose. For SQL: procedures/functions with params and result.
+
+#### Dependencies
+Imports / includes / referenced modules or tables, as searchable names.
+
+#### Exceptions / Errors
+Notable thrown/handled exceptions or error conditions.
+
+## Rules
+- Markdown bullets and short clauses, not prose paragraphs. Sentences allowed only where a bullet would lose meaning.
+- Weave class / type / table / domain names into the bullets so they are searchable.
+- No code fences, no ```markdown / ```java / ```sql, no XML tags, no formatter comments.
+- The filename heading is already rendered above your output. Start immediately with the blockquote lead. Never produce empty output.
+
+## Critical
+If the source contains "[EOF - source was truncated]", index ONLY what is literally present. Never infer, guess, or invent any unit, field, table, or behavior beyond the shown source.
+
+The file path and its full source are provided in the next (user) message: the path on the first
+line, then a blank line, then the source. Index only what is literally present there.
+ ]]>
+
+
+ package-body
+
+
+Then output these sections as markdown. Omit any that do not apply. Use '####' for labels. Never '###' or higher.
+
+#### Purpose
+One or two bullets: the package's overall responsibility.
+
+#### Responsibilities
+The main functional groups inside the package, as bullets. Group files by role; do not list every file separately for large packages.
+
+#### Key units
+The central classes / interfaces / modules / SQL objects and their job, one clause each, with their searchable names.
+
+#### Data flow
+How inputs move through the package to outputs, if a clear pipeline or collaboration exists across the files.
+
+#### Dependencies
+Notable internal collaborations and external modules/packages/tables the package depends on.
+
+#### Cross-cutting
+Recurring patterns across files: shared base types/interfaces, common exception/error handling, threading/concurrency notes, configuration.
+
+## Rules
+- Markdown bullets and short clauses, not prose paragraphs.
+- Weave type / module / table / domain names in as searchable terms.
+- Base every statement only on the provided file summaries. Do NOT invent units, methods, tables, or behavior not present in them.
+- No code fences, no ```markdown, no XML tags, no formatter comments.
+- The package-name heading is already rendered above your output. Start immediately with the blockquote lead. Never empty.
+
+## Critical
+If the input contains "[EOF - source was truncated]", summarize ONLY what is present. Never infer or invent files or content beyond the provided summaries.
+
+The package path and its already-generated per-file summaries are provided in the next (user)
+message: the path on the first line, then a blank line, then the summaries to synthesize.
+ ]]>
+
+
+ project-body
+
+
+
+
+ file-body-java-v2
+
+
+Then output ONLY the sections below that carry real information. OMIT any section that would be empty, "none", or "not applicable" - do not emit a heading just to say nothing. Use '####' for section labels, never '###' or higher.
+
+TRIVIAL-FILE RULE: if the unit has no public behavior to describe (e.g. a marker/annotation, an enum that only lists constants, or a near-empty type), output ONLY the blockquote lead and a single '#### Purpose' line, and stop.
+
+#### Purpose
+One or two bullets: what the type is for.
+
+#### Type
+One line: kind (class/interface/enum/record/annotation) + modifiers; extends/implements; key generics; notable annotations (@Mojo, Lombok, etc.).
+
+#### Input
+What comes in: constructor/method parameters, injected dependencies, consumed fields, read resources.
+
+#### Output
+What comes out: return types, produced/mutated state, written resources, side effects.
+
+#### Core logic
+The essential steps/algorithm/responsibility as bullets. The most important section.
+
+#### Public API
+Each public/protected member as `name(params) -> returnType` + a <=6-word purpose clause. EXCEPTION: for plain data/config classes that are only getters/setters (e.g. Lombok beans), DO NOT list each accessor - write one line: "JavaBean getters/setters for: ".
+
+#### Dependencies
+Referenced types as searchable names. EXCLUDE this file's own type and java.lang.* .
+
+#### Exceptions / Errors
+Notable thrown/caught exceptions, null-handling, error conditions.
+
+#### Concurrency
+Threading, immutability, or thread-safety notes - only if the source actually shows them.
+
+## Rules
+- Markdown bullets and short clauses, not prose paragraphs.
+- Weave class/type/domain names into the bullets so they are searchable.
+- Describe ONLY what is literally in the source. NEVER invent units, fields, behavior, or concepts; in particular never mention keywords, tags, embeddings, search, or features the code does not contain.
+- No code fences, no ```markdown/```java, no XML tags, no formatter comments.
+- The filename heading is already rendered above your output. Start immediately with the blockquote lead. Never produce empty output.
+
+## Critical
+If the source contains "[EOF - source was truncated]", index ONLY what is literally present.
+
+The file path and its full source are provided in the next (user) message: the path on the first
+line, then a blank line, then the source. Index only what is literally present there.
+ ]]>
+
+
+ package-body-v2
+
+
+SINGLE-CHILD RULE: if the input describes only ONE child package/file and no other content, output ONLY the blockquote lead restating that child's responsibility, and stop - emit no sections.
+
+Otherwise output ONLY the sections below that carry real information. OMIT any that would be empty. Use '####' for labels, never '###' or higher.
+
+#### Purpose
+One or two bullets: the package's overall responsibility.
+
+#### Responsibilities
+The main functional groups inside the package, as bullets. Group files by role; do not list every file for large packages.
+
+#### Key units
+The central classes/interfaces/modules and their job, one clause each, with searchable names.
+
+#### Data flow
+How inputs move through the package to outputs, if a clear pipeline exists across the files.
+
+#### Dependencies
+Notable internal collaborations and external modules the package depends on. Focus on cross-unit/cross-package relationships, not raw JDK/Lombok imports.
+
+#### Cross-cutting
+Recurring patterns across files: shared base types, common error handling, concurrency, configuration.
+
+## Rules
+- Markdown bullets and short clauses, not prose paragraphs.
+- Weave type/module/domain names in as searchable terms.
+- Base every statement ONLY on the provided file summaries. NEVER invent units, methods, behavior, or concepts (in particular never mention keywords, tags, or embeddings) not present in them.
+- No code fences, no ```markdown, no XML tags, no formatter comments.
+- The package-name heading is already rendered above your output. Start immediately with the blockquote lead. Never empty.
+
+## Critical
+If the input contains "[EOF - source was truncated]", summarize ONLY what is present.
+
+The package path and its already-generated per-file summaries are provided in the next (user)
+message: the path on the first line, then a blank line, then the summaries to synthesize.
+ ]]>
+
+
+
+
+
+
+
+
+ ai-generate
+ generate-resources
+
+ generate
+
+
+
+
+ .java
+ .sql
+
+
+
+
+ java-facts
+
+ (?m)^\s*(?:public\s+|final\s+|abstract\s+|sealed\s+|non-sealed\s+|static\s+)*(?:class|interface|enum|record)\s+\w
+ \bpublic\b
+ \b(?:TODO|FIXME)\b
+ @Override\b
+
+ (?m)^[ \t]*(?:(?:public|private|protected|static|final|abstract|default|synchronized|native|strictfp)[ \t]+)*(?:<[^>]+>[ \t]*)?(?!(?:if|for|while|switch|catch|return|new|else|do|try|synchronized|assert|throw)\b)[A-Za-z_$][\w$.]*(?:<[^;{}=]*>)?(?:\[\])*[ \t]+([A-Za-z_$]\w*)[ \t]*\([^;{]*\)(?:[ \t]*throws[ \t][\w$., \t]+)?[ \t]*[{;]
+ (?m)^[ \t]*(?:(?:public|private|protected)[ \t]+)?([A-Z][A-Za-z0-9_$]*)[ \t]*\([^;{]*\)(?:[ \t]*throws[ \t][\w$., \t]+)?[ \t]*\{
+ (?m)^[ \t]*(?:(?:public|private|protected|static|transient|volatile|final)[ \t]+)*(?:public|private|protected|static|transient|volatile)[ \t]+(?:(?:public|private|protected|static|transient|volatile|final)[ \t]+)*(?!class\b|interface\b|enum\b|record\b|void\b|new\b)[A-Za-z_$][\w$.]*(?:<[^;{}=]*>)?(?:\[\])*[ \t]+([A-Za-z_$]\w*(?:[ \t]*,[ \t]*[A-Za-z_$]\w*)*)[ \t]*(?:=[^;]*)?;
+
+
+
+ sql-facts
+
+ (?im)^\s*INSERT\s+INTO\b
+ (?im)^\s*CREATE\s+TABLE\b
+ (?im)^\s*CREATE\s+(?:OR\s+REPLACE\s+)?VIEW\b
+ (?im)^\s*CREATE\s+(?:UNIQUE\s+)?INDEX\b
+ (?im)^\s*CREATE\s+(?:OR\s+REPLACE\s+)?(?:FUNCTION|PROCEDURE)\b
+
+
+
+
+
+
+ huge-java
+ file-body-java
+ granite-4.0-h-1b-fastchunk
+ 200
+
+ mapReduce
+ 6
+ java-facts
+
+
+
+
+ .java
+
+
+ 1000000
+
+
+
+
+
+
+ huge-sql
+ file-body-sql
+ granite-4.0-h-1b-fastchunk
+ 200
+ mapReduce
+ 6
+
+ sql-facts
+
+
+
+
+ .sql
+
+
+ 1000000
+
+
+
+
+
+
+ big-window-java
+ file-body-java
+ granite-4.0-h-tiny-bigwindow
+ 100
+
+
+
+
+
+ .java
+
+
+ 275000
+
+
+
+
+
+
+ big-window-sql
+ file-body-sql
+ granite-4.0-h-tiny-bigwindow
+ 100
+
+
+
+
+ .sql
+
+
+ 275000
+
+
+
+
+
+
+ java
+ file-body-java
+ ${ai.model}
+
+ java-facts
+
+ .java
+
+
+
+ sql
+ file-body-sql
+ ${ai.model}
+ sql-facts
+
+ .sql
+
+
+
+
+ fallback
+ file-body-fallback
+ ${ai.model}
+ true
+
+
+
+
+
+
+ ai-aggregate-packages
+ process-resources
+
+ aggregate-packages
+
+
+
+
+ package-body
+ ${ai.model}
+
+
+
+
+
+
+
+ ai-aggregate-project
+ prepare-package
+
+ aggregate-project
+
+
+
+
+ project-body
+ ${ai.model}
+
+
+
+
+
+
+
+
+
+
+
+ vmlens
+
+
+
+ com.vmlens
+ vmlens-maven-plugin
+
+
+
+ **/VmlensInterleavingSmokeTest.java
+
+
+
+
+ vmlens-test
+
+ test
+
+
+
+
+
+
+
+
+ jcstress
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+
+
+ jcstress
+ test
+ exec
+
+ ${java.home}/bin/java
+ test
+
+ -classpath
+
+ org.openjdk.jcstress.Main
+ -v
+ -m
+ default
+
+
+
+
+
+
+
+
+
+
diff --git a/spotbugs-exclude.xml b/llamacpp-ai-index-maven-plugin/spotbugs-exclude.xml
similarity index 93%
rename from spotbugs-exclude.xml
rename to llamacpp-ai-index-maven-plugin/spotbugs-exclude.xml
index 986f75c..8d41c61 100644
--- a/spotbugs-exclude.xml
+++ b/llamacpp-ai-index-maven-plugin/spotbugs-exclude.xml
@@ -525,4 +525,32 @@ SPDX-License-Identifier: Apache-2.0
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/java/module-info.java b/llamacpp-ai-index-maven-plugin/src/main/java/module-info.java
similarity index 100%
rename from src/main/java/module-info.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/module-info.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiCalibration.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiCalibration.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiCalibration.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiCalibration.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiCondition.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiCondition.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiCondition.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiCondition.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiConditionEvaluator.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiConditionEvaluator.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiConditionEvaluator.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiConditionEvaluator.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiConditionGroup.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiConditionGroup.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiConditionGroup.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiConditionGroup.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFactCounter.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFactCounter.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFactCounter.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFactCounter.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFactDefinition.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFactDefinition.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFactDefinition.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFactDefinition.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFactDefinitionSupport.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFactDefinitionSupport.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFactDefinitionSupport.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFactDefinitionSupport.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFactExtractor.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFactExtractor.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFactExtractor.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFactExtractor.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFieldGenerationConfig.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFieldGenerationConfig.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFieldGenerationConfig.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFieldGenerationConfig.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFieldGenerationSelector.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFieldGenerationSelector.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFieldGenerationSelector.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFieldGenerationSelector.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFileContext.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFileContext.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFileContext.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFileContext.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiGenerationConfig.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiGenerationConfig.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiGenerationConfig.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiGenerationConfig.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiGenerationKind.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiGenerationKind.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiGenerationKind.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiGenerationKind.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiModelDefinition.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiModelDefinition.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiModelDefinition.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiModelDefinition.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiModelDefinitionSupport.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiModelDefinitionSupport.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiModelDefinitionSupport.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiModelDefinitionSupport.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiOversizeStrategy.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiOversizeStrategy.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiOversizeStrategy.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiOversizeStrategy.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiRangeCondition.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiRangeCondition.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiRangeCondition.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiRangeCondition.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/package-info.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/package-info.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/package-info.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/config/package-info.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/document/AiGenerationRequest.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/document/AiGenerationRequest.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/document/AiGenerationRequest.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/document/AiGenerationRequest.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/document/AiGenerationResult.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/document/AiGenerationResult.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/document/AiGenerationResult.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/document/AiGenerationResult.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdChildEntryLineFormatter.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdChildEntryLineFormatter.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdChildEntryLineFormatter.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdChildEntryLineFormatter.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdDocument.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdDocument.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdDocument.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdDocument.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdDocumentCodec.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdDocumentCodec.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdDocumentCodec.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdDocumentCodec.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdHeader.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdHeader.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdHeader.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdHeader.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdHeaderCodec.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdHeaderCodec.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdHeaderCodec.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdHeaderCodec.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdHeaderSupport.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdHeaderSupport.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdHeaderSupport.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdHeaderSupport.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdLeadExtractor.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdLeadExtractor.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdLeadExtractor.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdLeadExtractor.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/document/package-info.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/document/package-info.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/document/package-info.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/document/package-info.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiCalibrationMeasurement.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiCalibrationMeasurement.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiCalibrationMeasurement.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiCalibrationMeasurement.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiCalibrationRunner.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiCalibrationRunner.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiCalibrationRunner.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiCalibrationRunner.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiFieldGenerationSupport.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiFieldGenerationSupport.java
similarity index 88%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiFieldGenerationSupport.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiFieldGenerationSupport.java
index 73c3be6..5fa364e 100644
--- a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiFieldGenerationSupport.java
+++ b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiFieldGenerationSupport.java
@@ -26,7 +26,8 @@
import net.ladenthin.maven.llamacpp.aiindex.support.AiGenerationTimeEstimator;
import net.ladenthin.maven.llamacpp.aiindex.support.AiSourceChunker;
import net.ladenthin.maven.llamacpp.aiindex.support.Java8CompatibilityHelper;
-import org.apache.maven.plugin.logging.Log;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* Shared field-generation logic used by both {@link SourceFileIndexer} and
@@ -35,17 +36,17 @@
*
Iterates over a list of {@link net.ladenthin.maven.llamacpp.aiindex.config.AiFieldGenerationConfig} entries, prepares the
* prompt for each, delegates generation to the configured {@link net.ladenthin.maven.llamacpp.aiindex.provider.AiGenerationProvider},
* and accumulates the generated text as the document body.
- * A trim warning is emitted via the supplied {@link Log} whenever the source text had
- * to be truncated to fit within the configured maximum input character budget.
+ * A trim warning is logged whenever the source text had to be truncated to fit within the
+ * configured maximum input character budget.
*
*
{@code toString} is generated by Lombok over the collaborator fields and the
- * maxInputChars cache. The Maven {@link Log} is excluded because its default
- * {@code toString} prints implementation details (logger configuration, output stream
- * state) that are noisy and not useful for build-log diagnostics.
+ * maxInputChars cache.
*/
@ToString
public class AiFieldGenerationSupport {
+ private static final Logger LOGGER = LoggerFactory.getLogger(AiFieldGenerationSupport.class);
+
/**
* Log message fragment inserted between the context type and the remainder of the
* trim-warning message, ensuring a consistent sentence structure regardless of whether
@@ -175,11 +176,6 @@ public class AiFieldGenerationSupport {
*/
private static final String CONTEXT_OVERFLOW_MARKER = "exceeds the available context size";
- // Maven plugin Log — its default toString prints implementation details
- // (logger configuration, output stream state); excluded from the rendered output.
- @ToString.Exclude
- private final Log log;
-
private final AiGenerationProvider generationProvider;
private final AiPromptPreparationSupport promptPreparationSupport;
private final AiModelDefinitionSupport modelDefinitionSupport;
@@ -196,17 +192,14 @@ public class AiFieldGenerationSupport {
/**
* Creates a new {@code AiFieldGenerationSupport}.
*
- * @param log Maven logger for trim warnings and diagnostics
* @param generationProvider AI backend used to generate text for each field
* @param promptPreparationSupport helper that resolves and prepares prompt templates
* @param modelDefinitionSupport lookup for {@link net.ladenthin.maven.llamacpp.aiindex.config.AiGenerationConfig} by key
*/
public AiFieldGenerationSupport(
- final Log log,
final AiGenerationProvider generationProvider,
final AiPromptPreparationSupport promptPreparationSupport,
final AiModelDefinitionSupport modelDefinitionSupport) {
- this.log = log;
this.generationProvider = generationProvider;
this.promptPreparationSupport = promptPreparationSupport;
this.modelDefinitionSupport = modelDefinitionSupport;
@@ -283,8 +276,11 @@ public AiGenerationResult processFieldGenerations(
body = factsPrefix
+ AiDeterministicSummary.body(
sourceText, contextName(contextFile), DETERMINISTIC_SAMPLE_LINES);
- log.info("Oversize " + contextType + " '" + contextFile + "' -> deterministic body (no model), "
- + sourceText.length() + " chars");
+ LOGGER.info(
+ "Oversize {} '{}' -> deterministic body (no model), {} chars",
+ contextType,
+ contextFile,
+ sourceText.length());
continue;
}
if (oversize == AiOversizeStrategy.MAP_REDUCE) {
@@ -296,11 +292,15 @@ public AiGenerationResult processFieldGenerations(
}
if (preparedPrompt.trimmed() && generationConfig.isWarnOnTrim()) {
- log.warn("Trimmed AI input for " + contextType + TRIM_WARN_FIELD_LABEL + "body': " + contextFile
- + " (source chars " + preparedPrompt.originalSourceLength()
- + " -> " + preparedPrompt.trimmedSourceLength()
- + ", available source chars " + preparedPrompt.availableSourceChars()
- + ", max input chars " + effectiveMaxInputChars + ")");
+ LOGGER.warn(
+ "Trimmed AI input for {}" + TRIM_WARN_FIELD_LABEL
+ + "body': {} (source chars {} -> {}, available source chars {}, max input chars {})",
+ contextType,
+ contextFile,
+ preparedPrompt.originalSourceLength(),
+ preparedPrompt.trimmedSourceLength(),
+ preparedPrompt.availableSourceChars(),
+ effectiveMaxInputChars);
}
final int processedSourceChars = preparedPrompt.sourceText().length();
@@ -310,16 +310,20 @@ public AiGenerationResult processFieldGenerations(
// Use the model's measured when present, so the live per-file ETA matches the
// (already calibrated) plan ETA instead of the built-in reference-CPU model.
final long estimatedSeconds = estimateSeconds(processedSourceChars, generationConfig);
- log.info(PROCESSING_LOG_PREFIX + contextType + " '" + contextFile + "'"
- + PROCESSING_LOG_SIZE_INFIX + sourceSizeKb
- + PROCESSING_LOG_TOKENS_INFIX + timeEstimator.estimatePromptTokens(processedSourceChars)
- + PROCESSING_LOG_ETA_INFIX
- + timeEstimator.formatDuration(estimatedSeconds)
- + PROCESSING_LOG_DISCLAIMER);
-
- log.info("Generating field '" + fieldGeneration.getPromptKey() + "' with temperature="
- + generationConfig.getTemperature() + ", maxInputChars="
- + effectiveMaxInputChars);
+ LOGGER.info(
+ PROCESSING_LOG_PREFIX + "{} '{}'" + PROCESSING_LOG_SIZE_INFIX + "{}" + PROCESSING_LOG_TOKENS_INFIX
+ + "{}" + PROCESSING_LOG_ETA_INFIX + "{}" + PROCESSING_LOG_DISCLAIMER,
+ contextType,
+ contextFile,
+ sourceSizeKb,
+ timeEstimator.estimatePromptTokens(processedSourceChars),
+ timeEstimator.formatDuration(estimatedSeconds));
+
+ LOGGER.info(
+ "Generating field '{}' with temperature={}, maxInputChars={}",
+ fieldGeneration.getPromptKey(),
+ generationConfig.getTemperature(),
+ effectiveMaxInputChars);
final long generationStartNanos = System.nanoTime();
final String generated = generateWithOverflowRetry(
fieldGeneration.getPromptKey(), contextFile, sourceText, baseHeader, effectiveMaxInputChars);
@@ -328,13 +332,20 @@ public AiGenerationResult processFieldGenerations(
// Log the MEASURED wall-clock duration next to the estimate so real runs are directly
// comparable across models/quants without a separate benchmark harness.
- log.info(GENERATED_LOG_PREFIX + contextType + " '" + contextFile + GENERATED_LOG_IN_INFIX
- + timeEstimator.formatDuration(actualSeconds) + GENERATED_LOG_ACTUAL_INFIX
- + timeEstimator.formatDuration(estimatedSeconds) + GENERATED_LOG_SUFFIX);
+ LOGGER.info(
+ GENERATED_LOG_PREFIX + "{} '{}" + GENERATED_LOG_IN_INFIX + "{}" + GENERATED_LOG_ACTUAL_INFIX + "{}"
+ + GENERATED_LOG_SUFFIX,
+ contextType,
+ contextFile,
+ timeEstimator.formatDuration(actualSeconds),
+ timeEstimator.formatDuration(estimatedSeconds));
if (compatibilityHelper.isBlank(generated)) {
- log.warn(EMPTY_OUTPUT_WARN_PREFIX + contextType + TRIM_WARN_FIELD_LABEL + fieldGeneration.getPromptKey()
- + "': " + contextFile);
+ LOGGER.warn(
+ EMPTY_OUTPUT_WARN_PREFIX + "{}" + TRIM_WARN_FIELD_LABEL + "{}': {}",
+ contextType,
+ fieldGeneration.getPromptKey(),
+ contextFile);
}
}
@@ -376,15 +387,18 @@ private String mapReduceSummarize(
final int overlap = Math.min(MAP_REDUCE_OVERLAP_CHARS, sourceBudget / MAP_REDUCE_OVERLAP_DIVISOR);
final List chunks =
AiSourceChunker.chunk(sourceText, sourceBudget, overlap, fieldGeneration.getMaxChunks());
- log.info("Oversize file '" + contextFile + "' -> mapReduce: " + sourceText.length() + " chars in "
- + chunks.size() + " chunk(s)");
+ LOGGER.info(
+ "Oversize file '{}' -> mapReduce: {} chars in {} chunk(s)",
+ contextFile,
+ sourceText.length(),
+ chunks.size());
final List partials = new ArrayList<>(chunks.size());
int index = 0;
for (final String chunk : chunks) {
index++;
partials.add(summarizeChunk(fieldGeneration.getPromptKey(), contextFile, chunk, baseHeader, safeWindow)
.trim());
- log.info(" mapReduce chunk " + index + "/" + chunks.size() + " summarized (" + chunk.length() + " chars)");
+ LOGGER.info(" mapReduce chunk {}/{} summarized ({} chars)", index, chunks.size(), chunk.length());
}
return reducePartials(
fieldGeneration.getPromptKey(), contextFile, baseHeader, partials, sourceBudget, safeWindow);
@@ -443,7 +457,7 @@ private String reducePartials(
next.add(summarizeChunk(promptKey, contextFile, batch.toString(), baseHeader, safeWindow)
.trim());
}
- log.info(" mapReduce reduce round " + round + ": " + level.size() + " -> " + next.size() + " partial(s)");
+ LOGGER.info(" mapReduce reduce round {}: {} -> {} partial(s)", round, level.size(), next.size());
if (next.size() >= level.size()) {
// Pathological: partials too large to combine two-at-a-time. Collapse to one trimmed reduce
// so the method always terminates rather than looping without shrinking.
@@ -522,8 +536,12 @@ private String generateWithOverflowRetry(
if (attempt >= MAX_OVERFLOW_RETRIES || reduced >= budget || !isContextOverflow(e)) {
throw e;
}
- log.warn("AI provider rejected the prompt (context overflow) for " + contextFile
- + "; retrying with a smaller window (" + budget + " -> " + reduced + " chars)");
+ LOGGER.warn(
+ "AI provider rejected the prompt (context overflow) for {}; retrying with a smaller window"
+ + " ({} -> {} chars)",
+ contextFile,
+ budget,
+ reduced);
budget = reduced;
}
}
@@ -649,20 +667,22 @@ private int calculateAndLogMaxInputChars(final AiGenerationConfig config, final
// Single source of truth for the threshold shared with the planning path (SourceFileIndexer.classify).
final int finalChars = AiInputWindowCalculator.maxInputChars(config, basePromptLength);
- log.info("Maximum input characters for source code before trimming. Calculated as: (context_size x "
- + charsPerToken + ") - overhead");
- log.info(" Context: " + contextSize + " tokens");
- log.info(" Chars per token: ~" + charsPerToken);
- log.info(" [Total available]: " + contextSize + " x " + charsPerToken + " = " + totalChars + " chars");
- log.info(" Overhead (conservative estimate):");
- log.info(" - Prompt template: ~" + promptChars + " chars");
- log.info(" - EOF marker: ~" + eofChars + " chars");
- log.info(" - Max output (" + maxOutputTokens + " tokens x " + charsPerToken + "): ~" + outputChars + " chars");
- log.info(" - Safety margin: ~" + safetyChars + " chars");
- log.info(" - [Subtotal overhead]: ~" + overheadTotal + " chars");
- log.info(" Available for source: [Total available] - [Subtotal overhead]");
- log.info(" Available for source: " + totalChars + " - " + overheadTotal + " = " + availableChars + " chars");
- log.info(" Set to: " + finalChars + " (rounded, conservative)");
+ LOGGER.info(
+ "Maximum input characters for source code before trimming. Calculated as: (context_size x {}) -"
+ + " overhead",
+ charsPerToken);
+ LOGGER.info(" Context: {} tokens", contextSize);
+ LOGGER.info(" Chars per token: ~{}", charsPerToken);
+ LOGGER.info(" [Total available]: {} x {} = {} chars", contextSize, charsPerToken, totalChars);
+ LOGGER.info(" Overhead (conservative estimate):");
+ LOGGER.info(" - Prompt template: ~{} chars", promptChars);
+ LOGGER.info(" - EOF marker: ~{} chars", eofChars);
+ LOGGER.info(" - Max output ({} tokens x {}): ~{} chars", maxOutputTokens, charsPerToken, outputChars);
+ LOGGER.info(" - Safety margin: ~{} chars", safetyChars);
+ LOGGER.info(" - [Subtotal overhead]: ~{} chars", overheadTotal);
+ LOGGER.info(" Available for source: [Total available] - [Subtotal overhead]");
+ LOGGER.info(" Available for source: {} - {} = {} chars", totalChars, overheadTotal, availableChars);
+ LOGGER.info(" Set to: {} (rounded, conservative)", finalChars);
return finalChars;
}
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiIndexPlan.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiIndexPlan.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiIndexPlan.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiIndexPlan.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiInputWindowCalculator.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiInputWindowCalculator.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiInputWindowCalculator.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiInputWindowCalculator.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/PackageIndexer.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/PackageIndexer.java
similarity index 96%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/PackageIndexer.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/PackageIndexer.java
index ad870d7..14b43cc 100644
--- a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/PackageIndexer.java
+++ b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/PackageIndexer.java
@@ -28,21 +28,21 @@
import net.ladenthin.maven.llamacpp.aiindex.support.AiPathSupport;
import net.ladenthin.maven.llamacpp.aiindex.support.AiTimeSupport;
import net.ladenthin.maven.llamacpp.aiindex.support.Java8CompatibilityHelper;
-import org.apache.maven.plugin.logging.Log;
import org.jspecify.annotations.Nullable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* Aggregates {@code package.ai.md} index files: walks the output tree, lists each
* package's contents, and fills in AI-generated summary and keyword fields.
*
- *
{@code toString} is generated by Lombok over the configuration and collaborator
- * fields. The Maven {@link Log} is excluded because its default {@code toString} prints
- * implementation details (logger configuration, output stream state) that are noisy
- * and not useful for build-log diagnostics.
+ *
{@code toString} is generated by Lombok over the configuration and collaborator fields.
*/
@ToString
public class PackageIndexer {
+ private static final Logger LOGGER = LoggerFactory.getLogger(PackageIndexer.class);
+
/**
* Section heading inserted above the contents listing in both the package source text
* and the default package body.
@@ -71,12 +71,6 @@ public class PackageIndexer {
*/
private static final String CHILD_SUMMARY_MISSING_NOTE = "(no summary available)";
- /**
- * Earliest possible date value used as the starting point when scanning child nodes
- * to find the latest index creation date.
- */
- private static final String EPOCH_DATE = "1970-01-01T00:00:00Z";
-
/**
* Context-type label passed to {@link AiFieldGenerationSupport} so that trim-warning
* log messages read "Trimmed AI input for package field '…'".
@@ -96,11 +90,6 @@ public class PackageIndexer {
return fileName.toString();
});
- // Maven plugin Log — its default toString prints implementation details
- // (logger configuration, output stream state); excluded from the rendered output.
- @ToString.Exclude
- private final Log log;
-
private final Path outputRoot;
private final String pluginVersion;
private final String aiVersion;
@@ -124,7 +113,6 @@ public class PackageIndexer {
/**
* Creates a new {@link PackageIndexer}.
*
- * @param log Maven plugin logger
* @param baseDirectory project base directory
* @param outputRoot root directory in which {@code .ai.md} files reside
* @param pluginVersion plugin version recorded in headers
@@ -137,7 +125,6 @@ public class PackageIndexer {
* @param modelDefinitionSupport AI model definition lookup
*/
public PackageIndexer(
- final Log log,
final Path baseDirectory,
final Path outputRoot,
final String pluginVersion,
@@ -148,7 +135,6 @@ public PackageIndexer(
final @Nullable Collection fieldGenerations,
final AiPromptSupport promptSupport,
final AiModelDefinitionSupport modelDefinitionSupport) {
- this.log = log;
this.outputRoot = outputRoot;
this.pluginVersion = pluginVersion;
this.aiVersion = aiVersion;
@@ -164,7 +150,7 @@ public PackageIndexer(
this.force = force;
this.fieldGenerations = fieldGenerations != null ? new ArrayList<>(fieldGenerations) : null;
this.fieldGenerationSupport = new AiFieldGenerationSupport(
- log, generationProvider, new AiPromptPreparationSupport(promptSupport), modelDefinitionSupport);
+ generationProvider, new AiPromptPreparationSupport(promptSupport), modelDefinitionSupport);
}
/**
@@ -275,7 +261,7 @@ private void writePackageFile(final Path directory) throws IOException {
childLinks);
if (!headerSupport.shouldWrite(force, packageFile, baseHeader)) {
- log.info("Unchanged package AI index file: " + packageFile);
+ LOGGER.info("Unchanged package AI index file: {}", packageFile);
return;
}
@@ -292,7 +278,7 @@ private void writePackageFile(final Path directory) throws IOException {
final AiMdDocument document = new AiMdDocument(baseHeader, body);
documentCodec.write(packageFile, document);
- log.info("Wrote package AI index file: " + packageFile);
+ LOGGER.info("Wrote package AI index file: {}", packageFile);
}
private List collectContents(final Path directory) throws IOException {
@@ -582,7 +568,7 @@ private String calculatePackageChecksum(final Path directory) throws IOException
}
private String calculatePackageDate(final Path directory) throws IOException {
- String latest = EPOCH_DATE;
+ String latest = AiTimeSupport.EPOCH_DATE;
try (Stream stream = Files.list(directory)) {
for (Path path : compatibilityHelper.toList(stream.sorted(BY_FILE_NAME))) {
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/ProjectIndexer.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/ProjectIndexer.java
similarity index 93%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/ProjectIndexer.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/ProjectIndexer.java
index 2dce903..6c29756 100644
--- a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/ProjectIndexer.java
+++ b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/ProjectIndexer.java
@@ -27,8 +27,9 @@
import net.ladenthin.maven.llamacpp.aiindex.support.AiChecksumSupport;
import net.ladenthin.maven.llamacpp.aiindex.support.AiTimeSupport;
import net.ladenthin.maven.llamacpp.aiindex.support.Java8CompatibilityHelper;
-import org.apache.maven.plugin.logging.Log;
import org.jspecify.annotations.Nullable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* Builds the single project-level AI index — the top of the three-level index.
@@ -59,14 +60,13 @@
* model, triggers a rebuild) — or when {@code force} is set. This mirrors the incremental contract of
* {@link SourceFileIndexer} and {@link PackageIndexer}.
*
- *
{@code toString} is generated by Lombok over the configuration and collaborator fields. The
- * Maven {@link Log} is excluded because its default {@code toString} prints implementation details
- * (logger configuration, output stream state) that are noisy and not useful for build-log
- * diagnostics.
+ *
{@code toString} is generated by Lombok over the configuration and collaborator fields.
*/
@ToString
public class ProjectIndexer {
+ private static final Logger LOGGER = LoggerFactory.getLogger(ProjectIndexer.class);
+
/** Markdown heading introducing the per-package listing in the project index body. */
private static final String PACKAGES_HEADING = "#### Packages";
@@ -100,17 +100,6 @@ public class ProjectIndexer {
/** Separator between a package path and its lead in the overview source listing. */
private static final String OVERVIEW_SOURCE_LEAD_SEPARATOR = ": ";
- /**
- * Earliest possible date value used as the starting point when scanning packages to find the
- * latest index creation date recorded in the project header's {@code d} field.
- */
- private static final String EPOCH_DATE = "1970-01-01T00:00:00Z";
-
- // Maven plugin Log — its default toString prints implementation details
- // (logger configuration, output stream state); excluded from the rendered output.
- @ToString.Exclude
- private final Log log;
-
private final String projectTitle;
private final String pluginVersion;
private final String aiVersion;
@@ -132,19 +121,14 @@ public class ProjectIndexer {
/**
* Creates a deterministic {@link ProjectIndexer} with no AI overview.
*
- * @param log Maven plugin logger
* @param projectTitle title recorded in the project index header (typically the Maven project name)
* @param pluginVersion plugin version recorded in the header
* @param aiVersion AI summarisation logic version recorded in the header
* @param force when {@code true}, rewrite the project index even when it is unchanged
*/
public ProjectIndexer(
- final Log log,
- final String projectTitle,
- final String pluginVersion,
- final String aiVersion,
- final boolean force) {
- this(log, projectTitle, pluginVersion, aiVersion, force, null, null, null, null);
+ final String projectTitle, final String pluginVersion, final String aiVersion, final boolean force) {
+ this(projectTitle, pluginVersion, aiVersion, force, null, null, null, null);
}
/**
@@ -154,7 +138,6 @@ public ProjectIndexer(
* {@code promptSupport}, and {@code modelDefinitionSupport} are all non-{@code null}; otherwise the
* indexer behaves exactly like the deterministic constructor above.
*
- * @param log Maven plugin logger
* @param projectTitle title recorded in the project index header
* @param pluginVersion plugin version recorded in the header
* @param aiVersion AI summarisation logic version recorded in the header
@@ -165,7 +148,6 @@ public ProjectIndexer(
* @param modelDefinitionSupport AI model definition lookup; {@code null} disables the overview
*/
public ProjectIndexer(
- final Log log,
final String projectTitle,
final String pluginVersion,
final String aiVersion,
@@ -174,7 +156,6 @@ public ProjectIndexer(
final @Nullable AiFieldGenerationConfig overviewFieldGeneration,
final @Nullable AiPromptSupport promptSupport,
final @Nullable AiModelDefinitionSupport modelDefinitionSupport) {
- this.log = log;
this.projectTitle = projectTitle;
this.pluginVersion = pluginVersion;
this.aiVersion = aiVersion;
@@ -186,7 +167,7 @@ public ProjectIndexer(
&& promptSupport != null
&& modelDefinitionSupport != null) {
this.fieldGenerationSupport = new AiFieldGenerationSupport(
- log, generationProvider, new AiPromptPreparationSupport(promptSupport), modelDefinitionSupport);
+ generationProvider, new AiPromptPreparationSupport(promptSupport), modelDefinitionSupport);
} else {
this.fieldGenerationSupport = null;
}
@@ -229,12 +210,12 @@ public int aggregate(final Path rootDirectory) throws IOException {
}
if (packageFiles.isEmpty()) {
- log.info("No package index files found under " + rootDirectory + "; skipping project index.");
+ LOGGER.info("No package index files found under {}; skipping project index.", rootDirectory);
return 0;
}
final List entries = new ArrayList<>(packageFiles.size());
- String latestDate = EPOCH_DATE;
+ String latestDate = AiTimeSupport.EPOCH_DATE;
for (final Path packageFile : packageFiles) {
final AiMdDocument document = documentCodec.read(packageFile);
final String displayPath = displayPath(rootDirectory, packageFile);
@@ -283,7 +264,7 @@ public int aggregate(final Path rootDirectory) throws IOException {
final Path projectFile = rootDirectory.resolve(AiMdHeaderCodec.PROJECT_AI_MD_FILENAME);
if (!headerSupport.shouldWrite(force, projectFile, baseHeader)) {
- log.info("Unchanged project index file: " + projectFile);
+ LOGGER.info("Unchanged project index file: {}", projectFile);
return 0;
}
@@ -298,7 +279,7 @@ public int aggregate(final Path rootDirectory) throws IOException {
}
documentCodec.write(projectFile, new AiMdDocument(baseHeader, body));
- log.info("Wrote project index file: " + projectFile + " (" + entries.size() + " packages)");
+ LOGGER.info("Wrote project index file: {} ({} packages)", projectFile, entries.size());
return 1;
}
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/SourceFileIndexer.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/SourceFileIndexer.java
similarity index 96%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/SourceFileIndexer.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/SourceFileIndexer.java
index cf9ee03..82dafef 100644
--- a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/SourceFileIndexer.java
+++ b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/SourceFileIndexer.java
@@ -34,8 +34,9 @@
import net.ladenthin.maven.llamacpp.aiindex.support.AiSourceExcludeFilter;
import net.ladenthin.maven.llamacpp.aiindex.support.AiTimeSupport;
import net.ladenthin.maven.llamacpp.aiindex.support.Java8CompatibilityHelper;
-import org.apache.maven.plugin.logging.Log;
import org.jspecify.annotations.Nullable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* Walks the configured source subtrees and writes per-file {@code .ai.md} index files.
@@ -51,24 +52,19 @@
* {@code .ai.md} with a given rule, using a provider-bearing support (one per model group).
*
*
- *
{@code toString} is generated by Lombok over the configuration fields. The Maven {@link Log} is
- * excluded because its default {@code toString} prints implementation details that are noisy in
- * build-log diagnostics.
+ *
{@code toString} is generated by Lombok over the configuration fields.
*/
@ToString
public class SourceFileIndexer {
+ private static final Logger LOGGER = LoggerFactory.getLogger(SourceFileIndexer.class);
+
/**
* Context-type label passed to {@link AiFieldGenerationSupport} so that trim-warning
* log messages read "Trimmed AI input for file field '…'".
*/
private static final String CONTEXT_TYPE_FILE = "file";
- // Maven plugin Log — its default toString prints implementation details
- // (logger configuration, output stream state); excluded from the rendered output.
- @ToString.Exclude
- private final Log log;
-
private final Path baseDirectory;
private final Path outputRoot;
private final List fileExtensions;
@@ -95,7 +91,6 @@ public class SourceFileIndexer {
* ({@link #classify(Collection, List)} / {@link #indexFile}) so a run can load a separate model per
* routing group.
*
- * @param log Maven plugin logger
* @param baseDirectory project base directory
* @param outputRoot root directory in which {@code .ai.md} files are written
* @param fileExtensions file extensions to index; may be empty (matches no files)
@@ -109,7 +104,6 @@ public class SourceFileIndexer {
* @param force when {@code true}, regenerate even when fields are populated
*/
public SourceFileIndexer(
- final Log log,
final Path baseDirectory,
final Path outputRoot,
final Collection fileExtensions,
@@ -120,7 +114,6 @@ public SourceFileIndexer(
final long minFileSizeBytes,
final long maxFileSizeBytes,
final boolean force) {
- this.log = log;
this.baseDirectory = baseDirectory;
this.outputRoot = outputRoot;
this.fileExtensions = new ArrayList<>(fileExtensions);
@@ -152,11 +145,11 @@ public List collectCandidates(final Path sourceRoot) throws IOException {
continue;
}
if (isExcluded(path)) {
- log.debug("Excluded from indexing: " + path);
+ LOGGER.debug("Excluded from indexing: {}", path);
continue;
}
if (!matchesSize(path)) {
- log.debug("Outside configured size band, skipped: " + path);
+ LOGGER.debug("Outside configured size band, skipped: {}", path);
continue;
}
candidates.add(path);
@@ -342,7 +335,7 @@ public boolean indexFile(
AiMdHeaderCodec.NODE_TYPE_FILE);
if (!headerSupport.shouldWrite(force, targetFile, baseHeader)) {
- log.info("Unchanged AI index file: " + targetFile);
+ LOGGER.info("Unchanged AI index file: {}", targetFile);
return false;
}
@@ -354,7 +347,7 @@ public boolean indexFile(
final AiMdDocument document = new AiMdDocument(baseHeader, result.body());
documentCodec.write(targetFile, document);
- log.info("Wrote AI index file: " + targetFile);
+ LOGGER.info("Wrote AI index file: {}", targetFile);
return true;
}
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/package-info.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/package-info.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/package-info.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/package-info.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/mojo/AbstractAiIndexMojo.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/mojo/AbstractAiIndexMojo.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/mojo/AbstractAiIndexMojo.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/mojo/AbstractAiIndexMojo.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/mojo/AggregatePackagesMojo.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/mojo/AggregatePackagesMojo.java
similarity index 99%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/mojo/AggregatePackagesMojo.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/mojo/AggregatePackagesMojo.java
index fcee5d8..15cec8d 100644
--- a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/mojo/AggregatePackagesMojo.java
+++ b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/mojo/AggregatePackagesMojo.java
@@ -97,7 +97,6 @@ public void execute() throws MojoExecutionException {
try (AiGenerationProvider provider =
providerFactory.create(generationProvider, buildLlamaCppJniConfig(), promptSupport)) {
final PackageIndexer packageIndexer = new PackageIndexer(
- getLog(),
basePath,
outputPath,
pluginVersion,
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/mojo/AggregateProjectMojo.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/mojo/AggregateProjectMojo.java
similarity index 95%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/mojo/AggregateProjectMojo.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/mojo/AggregateProjectMojo.java
index c7df68a..fda4c25 100644
--- a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/mojo/AggregateProjectMojo.java
+++ b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/mojo/AggregateProjectMojo.java
@@ -130,7 +130,7 @@ public void execute() throws MojoExecutionException {
written = aggregateWithOverview(outputPath, title, fieldGenerations.get(0));
} else {
getLog().info("Project overview generation: disabled (no fieldGenerations configured)");
- final ProjectIndexer indexer = new ProjectIndexer(getLog(), title, pluginVersion, aiVersion, force);
+ final ProjectIndexer indexer = new ProjectIndexer(title, pluginVersion, aiVersion, force);
written = indexer.aggregate(outputPath);
}
getLog().info("Project index files written: " + written);
@@ -162,15 +162,7 @@ private int aggregateWithOverview(final Path outputPath, final String title, fin
try (AiGenerationProvider provider =
providerFactory.create(generationProvider, buildLlamaCppJniConfig(), promptSupport)) {
final ProjectIndexer indexer = new ProjectIndexer(
- getLog(),
- title,
- pluginVersion,
- aiVersion,
- force,
- provider,
- overview,
- promptSupport,
- modelDefinitionSupport);
+ title, pluginVersion, aiVersion, force, provider, overview, promptSupport, modelDefinitionSupport);
return indexer.aggregate(outputPath);
}
}
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/mojo/CalibrateMojo.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/mojo/CalibrateMojo.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/mojo/CalibrateMojo.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/mojo/CalibrateMojo.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/mojo/GenerateMojo.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/mojo/GenerateMojo.java
similarity index 98%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/mojo/GenerateMojo.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/mojo/GenerateMojo.java
index 8a38555..d2395bc 100644
--- a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/mojo/GenerateMojo.java
+++ b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/mojo/GenerateMojo.java
@@ -173,7 +173,6 @@ public void execute() throws MojoExecutionException {
selector.validate(fieldGenerations);
final SourceFileIndexer fileIndexer = new SourceFileIndexer(
- getLog(),
basePath,
outputPath,
resolvedExtensions,
@@ -251,8 +250,8 @@ public void execute() throws MojoExecutionException {
+ group.getValue().size() + " file(s)");
try (AiGenerationProvider provider = providerFactory.create(
generationProvider, buildLlamaCppJniConfig(aiDefinitionKey), promptSupport)) {
- final AiFieldGenerationSupport support = new AiFieldGenerationSupport(
- getLog(), provider, promptPreparationSupport, modelDefinitionSupport);
+ final AiFieldGenerationSupport support =
+ new AiFieldGenerationSupport(provider, promptPreparationSupport, modelDefinitionSupport);
for (final AiIndexPlan.Entry entry : group.getValue()) {
if (fileIndexer.indexFile(entry.file(), entry.rule(), support)) {
wrote++;
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/mojo/package-info.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/mojo/package-info.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/mojo/package-info.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/mojo/package-info.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/package-info.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/package-info.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/package-info.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/package-info.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/prompt/AiPreparedPrompt.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/prompt/AiPreparedPrompt.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/prompt/AiPreparedPrompt.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/prompt/AiPreparedPrompt.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/prompt/AiPromptDefinition.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/prompt/AiPromptDefinition.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/prompt/AiPromptDefinition.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/prompt/AiPromptDefinition.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/prompt/AiPromptPreparationSupport.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/prompt/AiPromptPreparationSupport.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/prompt/AiPromptPreparationSupport.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/prompt/AiPromptPreparationSupport.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/prompt/AiPromptSupport.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/prompt/AiPromptSupport.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/prompt/AiPromptSupport.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/prompt/AiPromptSupport.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/prompt/package-info.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/prompt/package-info.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/prompt/package-info.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/prompt/package-info.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/provider/AiCompletionParser.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/provider/AiCompletionParser.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/provider/AiCompletionParser.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/provider/AiCompletionParser.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/provider/AiGenerationProvider.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/provider/AiGenerationProvider.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/provider/AiGenerationProvider.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/provider/AiGenerationProvider.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/provider/AiGenerationProviderFactory.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/provider/AiGenerationProviderFactory.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/provider/AiGenerationProviderFactory.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/provider/AiGenerationProviderFactory.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/provider/AiGenerationTimings.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/provider/AiGenerationTimings.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/provider/AiGenerationTimings.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/provider/AiGenerationTimings.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/provider/LlamaCppJniAiGenerationProvider.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/provider/LlamaCppJniAiGenerationProvider.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/provider/LlamaCppJniAiGenerationProvider.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/provider/LlamaCppJniAiGenerationProvider.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/provider/LlamaCppJniConfig.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/provider/LlamaCppJniConfig.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/provider/LlamaCppJniConfig.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/provider/LlamaCppJniConfig.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/provider/MockAiGenerationProvider.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/provider/MockAiGenerationProvider.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/provider/MockAiGenerationProvider.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/provider/MockAiGenerationProvider.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/provider/package-info.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/provider/package-info.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/provider/package-info.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/provider/package-info.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/support/AiChecksumSupport.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/support/AiChecksumSupport.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/support/AiChecksumSupport.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/support/AiChecksumSupport.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/support/AiDeterministicSummary.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/support/AiDeterministicSummary.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/support/AiDeterministicSummary.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/support/AiDeterministicSummary.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/support/AiGenerationTimeEstimator.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/support/AiGenerationTimeEstimator.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/support/AiGenerationTimeEstimator.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/support/AiGenerationTimeEstimator.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/support/AiPathSupport.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/support/AiPathSupport.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/support/AiPathSupport.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/support/AiPathSupport.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/support/AiProgressBar.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/support/AiProgressBar.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/support/AiProgressBar.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/support/AiProgressBar.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/support/AiSourceChunker.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/support/AiSourceChunker.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/support/AiSourceChunker.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/support/AiSourceChunker.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/support/AiSourceExcludeFilter.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/support/AiSourceExcludeFilter.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/support/AiSourceExcludeFilter.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/support/AiSourceExcludeFilter.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/support/AiTimeSupport.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/support/AiTimeSupport.java
similarity index 65%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/support/AiTimeSupport.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/support/AiTimeSupport.java
index 6e34998..60254f2 100644
--- a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/support/AiTimeSupport.java
+++ b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/support/AiTimeSupport.java
@@ -19,6 +19,14 @@ public AiTimeSupport() {
private static final DateTimeFormatter ISO_FORMATTER = DateTimeFormatter.ISO_INSTANT;
+ /**
+ * The earliest possible ISO-8601 date, formatted the same way as every other timestamp in this
+ * class. Used as the starting value when folding over a set of child dates to find the latest
+ * one (e.g. {@code latest = EPOCH_DATE; for (child) latest = laterDate(latest, child.date());}) —
+ * never itself persisted, since callers only run that fold when at least one child exists.
+ */
+ public static final String EPOCH_DATE = ISO_FORMATTER.format(Instant.EPOCH);
+
/**
* Formats the given instant as an ISO-8601 string truncated to seconds.
*
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/support/ConvertToRecord.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/support/ConvertToRecord.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/support/ConvertToRecord.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/support/ConvertToRecord.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/support/Java8CompatibilityHelper.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/support/Java8CompatibilityHelper.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/support/Java8CompatibilityHelper.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/support/Java8CompatibilityHelper.java
diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/support/package-info.java b/llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/support/package-info.java
similarity index 100%
rename from src/main/java/net/ladenthin/maven/llamacpp/aiindex/support/package-info.java
rename to llamacpp-ai-index-maven-plugin/src/main/java/net/ladenthin/maven/llamacpp/aiindex/support/package-info.java
diff --git a/src/site/ai/empty.md b/llamacpp-ai-index-maven-plugin/src/site/ai/empty.md
similarity index 100%
rename from src/site/ai/empty.md
rename to llamacpp-ai-index-maven-plugin/src/site/ai/empty.md
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/CommonTestFixtures.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/CommonTestFixtures.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/CommonTestFixtures.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/CommonTestFixtures.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/PluginArchitectureTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/PluginArchitectureTest.java
similarity index 85%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/PluginArchitectureTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/PluginArchitectureTest.java
index 0fab08b..2c1b2dd 100644
--- a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/PluginArchitectureTest.java
+++ b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/PluginArchitectureTest.java
@@ -15,6 +15,7 @@
import java.util.Random;
import net.ladenthin.maven.llamacpp.aiindex.config.AiModelDefinition;
import net.ladenthin.maven.llamacpp.aiindex.prompt.AiPromptDefinition;
+import org.slf4j.Logger;
@AnalyzeClasses(packages = "net.ladenthin.maven.llamacpp.aiindex", importOptions = ImportOption.DoNotIncludeTests.class)
public class PluginArchitectureTest {
@@ -43,8 +44,9 @@ public class PluginArchitectureTest {
/**
* Production code must not write to {@code System.out} / {@code System.err}; all output
- * goes through Maven's {@link org.apache.maven.plugin.logging.Log}. Currently vacuous
- * (no usage); acts as a regression guard.
+ * goes through an SLF4J {@link Logger} (mojo-lifecycle messages still use Maven's
+ * {@code Log} via {@code getLog()}). Currently vacuous (no usage); acts as a regression
+ * guard.
*/
@ArchTest
static final ArchRule noSystemOutOrErrInProduction = noClasses()
@@ -215,17 +217,40 @@ public class PluginArchitectureTest {
.allowEmptyShould(true);
/**
- * The foundation layers ({@code config}, {@code support}) must be framework-free: no Maven
- * API at all (not even {@code Log}). They are pure data + stateless utilities, so they can
- * be unit-tested without a Maven runtime.
+ * Every layer except {@code mojo} must be framework-free: no Maven API at all (not even
+ * {@code Log} — logging in {@code indexer} goes through an SLF4J {@link Logger} instead).
+ * They are plain Java, so they can be unit-tested and eventually extracted into a
+ * standalone library without a Maven runtime. Only {@code mojo} is the Maven Plugin API
+ * boundary ({@code AbstractMojo}, {@code @Parameter}, {@code MojoExecutionException}, and
+ * the injected {@code getLog()} for mojo-lifecycle messages).
*/
@ArchTest
- static final ArchRule foundationIsMavenFree = noClasses()
+ static final ArchRule nonMojoIsMavenFree = noClasses()
.that()
.resideInAnyPackage(
- "net.ladenthin.maven.llamacpp.aiindex.config..", "net.ladenthin.maven.llamacpp.aiindex.support..")
+ "net.ladenthin.maven.llamacpp.aiindex.config..",
+ "net.ladenthin.maven.llamacpp.aiindex.support..",
+ "net.ladenthin.maven.llamacpp.aiindex.document..",
+ "net.ladenthin.maven.llamacpp.aiindex.prompt..",
+ "net.ladenthin.maven.llamacpp.aiindex.provider..",
+ "net.ladenthin.maven.llamacpp.aiindex.indexer..")
.should()
.dependOnClassesThat()
.resideInAPackage("org.apache.maven..")
.allowEmptyShould(true);
+
+ /**
+ * Every SLF4J {@link Logger} field must be {@code private static final} — a single shared
+ * logger per class, never an instance field or a mutable/visible one.
+ */
+ @ArchTest
+ static final ArchRule loggersArePrivateStaticFinal = fields().that()
+ .haveRawType(Logger.class)
+ .should()
+ .bePrivate()
+ .andShould()
+ .beStatic()
+ .andShould()
+ .beFinal()
+ .allowEmptyShould(true);
}
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiCalibrationTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiCalibrationTest.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiCalibrationTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiCalibrationTest.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiConditionEvaluatorTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiConditionEvaluatorTest.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiConditionEvaluatorTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiConditionEvaluatorTest.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiConditionGroupTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiConditionGroupTest.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiConditionGroupTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiConditionGroupTest.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiConditionTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiConditionTest.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiConditionTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiConditionTest.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFactCounterTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFactCounterTest.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFactCounterTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFactCounterTest.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFactDefinitionSupportTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFactDefinitionSupportTest.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFactDefinitionSupportTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFactDefinitionSupportTest.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFactDefinitionTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFactDefinitionTest.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFactDefinitionTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFactDefinitionTest.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFactExtractorTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFactExtractorTest.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFactExtractorTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFactExtractorTest.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFieldGenerationConfigTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFieldGenerationConfigTest.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFieldGenerationConfigTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFieldGenerationConfigTest.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFieldGenerationSelectorTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFieldGenerationSelectorTest.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFieldGenerationSelectorTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFieldGenerationSelectorTest.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFileContextTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFileContextTest.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFileContextTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFileContextTest.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiGenerationConfigTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiGenerationConfigTest.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiGenerationConfigTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiGenerationConfigTest.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiGenerationKindLincheckTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiGenerationKindLincheckTest.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiGenerationKindLincheckTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiGenerationKindLincheckTest.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiModelDefinitionSupportTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiModelDefinitionSupportTest.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiModelDefinitionSupportTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiModelDefinitionSupportTest.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiModelDefinitionTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiModelDefinitionTest.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiModelDefinitionTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiModelDefinitionTest.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiOversizeStrategyTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiOversizeStrategyTest.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiOversizeStrategyTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiOversizeStrategyTest.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiRangeConditionTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiRangeConditionTest.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiRangeConditionTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiRangeConditionTest.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/JavaStructureFactPatternsTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/JavaStructureFactPatternsTest.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/JavaStructureFactPatternsTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/config/JavaStructureFactPatternsTest.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdChildEntryLineFormatterTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdChildEntryLineFormatterTest.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdChildEntryLineFormatterTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdChildEntryLineFormatterTest.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdDocumentCodecTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdDocumentCodecTest.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdDocumentCodecTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdDocumentCodecTest.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdHeaderCodecProperties.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdHeaderCodecProperties.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdHeaderCodecProperties.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdHeaderCodecProperties.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdHeaderCodecTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdHeaderCodecTest.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdHeaderCodecTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdHeaderCodecTest.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdHeaderSupportTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdHeaderSupportTest.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdHeaderSupportTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdHeaderSupportTest.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdHeaderTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdHeaderTest.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdHeaderTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdHeaderTest.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdLeadExtractorTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdLeadExtractorTest.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdLeadExtractorTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdLeadExtractorTest.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiCalibrationMeasurementTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiCalibrationMeasurementTest.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiCalibrationMeasurementTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiCalibrationMeasurementTest.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiCalibrationRunnerTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiCalibrationRunnerTest.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiCalibrationRunnerTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiCalibrationRunnerTest.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiFieldGenerationSupportRealModelTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiFieldGenerationSupportRealModelTest.java
similarity index 97%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiFieldGenerationSupportRealModelTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiFieldGenerationSupportRealModelTest.java
index 16faeba..77e31a5 100644
--- a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiFieldGenerationSupportRealModelTest.java
+++ b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiFieldGenerationSupportRealModelTest.java
@@ -25,7 +25,6 @@
import net.ladenthin.maven.llamacpp.aiindex.prompt.AiPromptSupport;
import net.ladenthin.maven.llamacpp.aiindex.provider.LlamaCppJniAiGenerationProvider;
import net.ladenthin.maven.llamacpp.aiindex.provider.LlamaCppJniConfig;
-import org.apache.maven.plugin.logging.SystemStreamLog;
import org.junit.jupiter.api.Assumptions;
import org.junit.jupiter.api.Test;
@@ -120,8 +119,7 @@ public void mapReduceWithFacts_realModel_producesFactsPlusSummary() throws Excep
final Path contextFile = Files.createTempFile("Data", ".java");
try (LlamaCppJniAiGenerationProvider provider = new LlamaCppJniAiGenerationProvider(jniConfig, promptSupport)) {
- final AiFieldGenerationSupport support =
- new AiFieldGenerationSupport(new SystemStreamLog(), provider, prep, models);
+ final AiFieldGenerationSupport support = new AiFieldGenerationSupport(provider, prep, models);
final AiGenerationResult result = support.processFieldGenerations(
Collections.singletonList(rule), contextFile, "file", source, header());
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiFieldGenerationSupportTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiFieldGenerationSupportTest.java
similarity index 91%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiFieldGenerationSupportTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiFieldGenerationSupportTest.java
index a989c07..b0e62d2 100644
--- a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiFieldGenerationSupportTest.java
+++ b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiFieldGenerationSupportTest.java
@@ -10,6 +10,10 @@
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.jupiter.api.Assertions.assertThrows;
+import ch.qos.logback.classic.Level;
+import ch.qos.logback.classic.Logger;
+import ch.qos.logback.classic.spi.ILoggingEvent;
+import ch.qos.logback.core.read.ListAppender;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
@@ -30,53 +34,61 @@
import net.ladenthin.maven.llamacpp.aiindex.prompt.AiPromptPreparationSupport;
import net.ladenthin.maven.llamacpp.aiindex.prompt.AiPromptSupport;
import net.ladenthin.maven.llamacpp.aiindex.provider.AiGenerationProvider;
-import org.apache.maven.plugin.logging.SystemStreamLog;
+import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
+import org.slf4j.LoggerFactory;
public class AiFieldGenerationSupportTest {
/**
- * Simple {@link Log} implementation that captures all messages passed to
- * {@link #warn(CharSequence)} and {@link #info(CharSequence)} for later assertion.
+ * Lower bound on chunks needed to force a second reduce round: strictly above the production
+ * {@code MAX_REDUCE_FANIN} (16) so the reduce cannot combine every partial in a single call.
*/
- private static class WarnCapturingLog extends SystemStreamLog {
+ private static final long MIN_CHUNKS_FOR_TWO_REDUCE_ROUNDS = 16L;
- private final List capturedWarnings = new ArrayList<>();
- private final List capturedInfos = new ArrayList<>();
+ /**
+ * Captures the SLF4J log output of {@link AiFieldGenerationSupport} via a logback
+ * {@link ListAppender} attached directly to its logger, replacing the constructor-injected
+ * Maven {@code Log} the production class used previously.
+ */
+ private ListAppender logAppender;
- @Override
- public void warn(final CharSequence content) {
- capturedWarnings.add(content.toString());
- super.warn(content);
- }
+ private static Logger loggerUnderTest() {
+ return (Logger) LoggerFactory.getLogger(AiFieldGenerationSupport.class);
+ }
- @Override
- public void info(final CharSequence content) {
- capturedInfos.add(content.toString());
- super.info(content);
- }
+ @BeforeEach
+ public void setUp() {
+ logAppender = new ListAppender<>();
+ logAppender.start();
+ final Logger logger = loggerUnderTest();
+ logger.setLevel(Level.DEBUG);
+ logger.setAdditive(false);
+ logger.addAppender(logAppender);
+ }
- public List getCapturedWarnings() {
- return capturedWarnings;
- }
+ @AfterEach
+ public void tearDown() {
+ loggerUnderTest().detachAppender(logAppender);
+ }
- public List getCapturedInfos() {
- return capturedInfos;
+ private List capturedMessages(final Level level) {
+ final List messages = new ArrayList<>();
+ for (final ILoggingEvent event : logAppender.list) {
+ if (event.getLevel() == level) {
+ messages.add(event.getFormattedMessage());
+ }
}
+ return messages;
}
- /**
- * Lower bound on chunks needed to force a second reduce round: strictly above the production
- * {@code MAX_REDUCE_FANIN} (16) so the reduce cannot combine every partial in a single call.
- */
- private static final long MIN_CHUNKS_FOR_TWO_REDUCE_ROUNDS = 16L;
-
- private WarnCapturingLog capturingLog;
+ private List getCapturedWarnings() {
+ return capturedMessages(Level.WARN);
+ }
- @BeforeEach
- public void setUp() {
- capturingLog = new WarnCapturingLog();
+ private List getCapturedInfos() {
+ return capturedMessages(Level.INFO);
}
//
@@ -96,7 +108,6 @@ public void processFieldGenerations_providerReturnsNonEmpty_noWarningLogged() th
final AiPromptSupport promptSupport = new AiPromptSupport(CommonTestFixtures.createFilePromptDefinitions());
final AiGenerationProvider nonEmptyProvider = request -> "A real summary.";
final AiFieldGenerationSupport support = new AiFieldGenerationSupport(
- capturingLog,
nonEmptyProvider,
new AiPromptPreparationSupport(promptSupport),
CommonTestFixtures.createDefaultAiModelDefinitionSupport());
@@ -106,7 +117,7 @@ public void processFieldGenerations_providerReturnsNonEmpty_noWarningLogged() th
CommonTestFixtures.createFileFieldGenerations(), contextFile, "file", "public class Test {}", header);
// assert
- assertThat(capturingLog.getCapturedWarnings().isEmpty(), is(true));
+ assertThat(getCapturedWarnings().isEmpty(), is(true));
}
@Test
@@ -125,7 +136,6 @@ public void processFieldGenerations_providerReturnsEmpty_warningContainsContextF
final AiPromptSupport promptSupport = new AiPromptSupport(CommonTestFixtures.createFilePromptDefinitions());
final AiGenerationProvider emptyProvider = request -> "";
final AiFieldGenerationSupport support = new AiFieldGenerationSupport(
- capturingLog,
emptyProvider,
new AiPromptPreparationSupport(promptSupport),
CommonTestFixtures.createDefaultAiModelDefinitionSupport());
@@ -139,8 +149,8 @@ public void processFieldGenerations_providerReturnsEmpty_warningContainsContextF
header);
// assert
- assertThat(capturingLog.getCapturedWarnings().size(), is(equalTo(1)));
- assertThat(capturingLog.getCapturedWarnings().get(0), containsString(contextFile.toString()));
+ assertThat(getCapturedWarnings().size(), is(equalTo(1)));
+ assertThat(getCapturedWarnings().get(0), containsString(contextFile.toString()));
}
@Test
@@ -159,7 +169,6 @@ public void processFieldGenerations_providerReturnsEmpty_warningContainsPromptKe
final AiPromptSupport promptSupport = new AiPromptSupport(CommonTestFixtures.createFilePromptDefinitions());
final AiGenerationProvider emptyProvider = request -> "";
final AiFieldGenerationSupport support = new AiFieldGenerationSupport(
- capturingLog,
emptyProvider,
new AiPromptPreparationSupport(promptSupport),
CommonTestFixtures.createDefaultAiModelDefinitionSupport());
@@ -169,8 +178,8 @@ public void processFieldGenerations_providerReturnsEmpty_warningContainsPromptKe
CommonTestFixtures.createFileFieldGenerations(), contextFile, "file", "public class Test {}", header);
// assert
- assertThat(capturingLog.getCapturedWarnings().size(), is(equalTo(1)));
- assertThat(capturingLog.getCapturedWarnings().get(0), containsString(CommonTestFixtures.PROMPT_KEY_FILE_BODY));
+ assertThat(getCapturedWarnings().size(), is(equalTo(1)));
+ assertThat(getCapturedWarnings().get(0), containsString(CommonTestFixtures.PROMPT_KEY_FILE_BODY));
}
@Test
@@ -189,7 +198,6 @@ public void processFieldGenerations_providerReturnsEmpty_resultBodyIsEmpty() thr
final AiPromptSupport promptSupport = new AiPromptSupport(CommonTestFixtures.createFilePromptDefinitions());
final AiGenerationProvider emptyProvider = request -> "";
final AiFieldGenerationSupport support = new AiFieldGenerationSupport(
- capturingLog,
emptyProvider,
new AiPromptPreparationSupport(promptSupport),
CommonTestFixtures.createDefaultAiModelDefinitionSupport());
@@ -227,7 +235,6 @@ public String generate(final AiGenerationRequest request) {
}
};
final AiFieldGenerationSupport support = new AiFieldGenerationSupport(
- capturingLog,
alwaysEmptyProvider,
new AiPromptPreparationSupport(promptSupport),
CommonTestFixtures.createDefaultAiModelDefinitionSupport());
@@ -238,7 +245,7 @@ public String generate(final AiGenerationRequest request) {
// assert — provider invoked exactly once (no retries), one warning, empty body
assertThat(callCount.get(), is(equalTo(1)));
- assertThat(capturingLog.getCapturedWarnings().size(), is(equalTo(1)));
+ assertThat(getCapturedWarnings().size(), is(equalTo(1)));
assertThat(result.body(), is(equalTo("")));
}
@@ -263,7 +270,6 @@ public String generate(final AiGenerationRequest request) {
}
};
final AiFieldGenerationSupport support = new AiFieldGenerationSupport(
- capturingLog,
alwaysEmptyProvider,
new AiPromptPreparationSupport(promptSupport),
CommonTestFixtures.createDefaultAiModelDefinitionSupport());
@@ -274,7 +280,7 @@ public String generate(final AiGenerationRequest request) {
// assert — exactly three INFO lines: the per-file processing/ETA line, the generation line,
// and the measured actual-duration line. No retry lines (the retry mechanism was removed).
- final List infos = capturingLog.getCapturedInfos();
+ final List infos = getCapturedInfos();
assertThat(infos.size(), is(equalTo(3)));
// First message: the per-file processing line with size + token + duration estimate
@@ -325,8 +331,7 @@ private AiFieldGenerationSupport supportWith(final AiGenerationProvider provider
private AiFieldGenerationSupport supportWithModels(
final AiGenerationProvider provider, final AiModelDefinitionSupport models) {
final AiPromptSupport promptSupport = new AiPromptSupport(CommonTestFixtures.createFilePromptDefinitions());
- return new AiFieldGenerationSupport(
- capturingLog, provider, new AiPromptPreparationSupport(promptSupport), models);
+ return new AiFieldGenerationSupport(provider, new AiPromptPreparationSupport(promptSupport), models);
}
/** A model with a normal window, so a small source fits and is NOT treated as over-window. */
@@ -529,7 +534,7 @@ public void onOversize_mapReduce_unbounded_reducesHierarchicallyInMultipleRounds
largeSource(3000),
anyHeader());
- final List infos = capturingLog.getCapturedInfos();
+ final List infos = getCapturedInfos();
final long mapChunks =
infos.stream().filter(m -> m.contains("summarized (")).count();
final boolean hasRound1 = infos.stream().anyMatch(m -> m.contains("reduce round 1:"));
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiIndexPlanTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiIndexPlanTest.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiIndexPlanTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiIndexPlanTest.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiInputWindowCalculatorTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiInputWindowCalculatorTest.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiInputWindowCalculatorTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiInputWindowCalculatorTest.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/PackageIndexerTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/PackageIndexerTest.java
similarity index 98%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/PackageIndexerTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/PackageIndexerTest.java
index d80e8e7..a23c133 100644
--- a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/PackageIndexerTest.java
+++ b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/PackageIndexerTest.java
@@ -26,7 +26,6 @@
import net.ladenthin.maven.llamacpp.aiindex.prompt.AiPromptSupport;
import net.ladenthin.maven.llamacpp.aiindex.provider.AiGenerationProvider;
import net.ladenthin.maven.llamacpp.aiindex.provider.MockAiGenerationProvider;
-import org.apache.maven.plugin.logging.SystemStreamLog;
import org.junit.jupiter.api.Test;
public class PackageIndexerTest {
@@ -59,7 +58,6 @@ public void aggregate_singleChildFile_createsPackageAiMdFile() throws Exception
final AiPromptSupport promptSupport = new AiPromptSupport(CommonTestFixtures.createPackagePromptDefinitions());
final PackageIndexer indexer = new PackageIndexer(
- new SystemStreamLog(),
baseDirectory,
outputRoot,
"1.0.0",
@@ -113,7 +111,6 @@ public void aggregate_childFileBodies_areEmbeddedInPackageSourceText() throws Ex
final CapturingProvider provider = new CapturingProvider();
final AiPromptSupport promptSupport = new AiPromptSupport(CommonTestFixtures.createPackagePromptDefinitions());
final PackageIndexer indexer = new PackageIndexer(
- new SystemStreamLog(),
temp,
outputRoot,
"1.0.0",
@@ -153,7 +150,6 @@ public void aggregate_subPackageBody_isEmbeddedInParentSourceText() throws Excep
final CapturingProvider provider = new CapturingProvider();
final AiPromptSupport promptSupport = new AiPromptSupport(CommonTestFixtures.createPackagePromptDefinitions());
final PackageIndexer indexer = new PackageIndexer(
- new SystemStreamLog(),
temp,
outputRoot,
"1.0.0",
@@ -205,7 +201,6 @@ public void aggregate_projectAiMdInOutputRoot_isNotEmbeddedAsChild() throws Exce
final CapturingProvider provider = new CapturingProvider();
final AiPromptSupport promptSupport = new AiPromptSupport(CommonTestFixtures.createPackagePromptDefinitions());
final PackageIndexer indexer = new PackageIndexer(
- new SystemStreamLog(),
temp,
outputRoot,
"1.0.0",
@@ -243,7 +238,6 @@ public void aggregate_packageHeader_listsChildLinksInHeader() throws Exception {
final AiPromptSupport promptSupport = new AiPromptSupport(CommonTestFixtures.createPackagePromptDefinitions());
final PackageIndexer indexer = new PackageIndexer(
- new SystemStreamLog(),
temp,
outputRoot,
"1.0.0",
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/ProjectIndexerTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/ProjectIndexerTest.java
similarity index 90%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/ProjectIndexerTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/ProjectIndexerTest.java
index f62b71f..770d0dd 100644
--- a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/ProjectIndexerTest.java
+++ b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/ProjectIndexerTest.java
@@ -24,7 +24,6 @@
import net.ladenthin.maven.llamacpp.aiindex.prompt.AiPromptDefinition;
import net.ladenthin.maven.llamacpp.aiindex.prompt.AiPromptSupport;
import net.ladenthin.maven.llamacpp.aiindex.provider.MockAiGenerationProvider;
-import org.apache.maven.plugin.logging.SystemStreamLog;
import org.junit.jupiter.api.Test;
public class ProjectIndexerTest {
@@ -47,8 +46,7 @@ public void aggregate_multiplePackages_writesProjectIndexHeaderAndListing() thro
"main/java/com/example/billing",
"> Creates and sends invoices.\n\n#### Purpose\n- billing\n");
- final ProjectIndexer indexer =
- new ProjectIndexer(new SystemStreamLog(), PROJECT_TITLE, "1.0.0", "0.0.0", false);
+ final ProjectIndexer indexer = new ProjectIndexer(PROJECT_TITLE, "1.0.0", "0.0.0", false);
// act
final int written = indexer.aggregate(outputRoot);
@@ -91,8 +89,7 @@ public void aggregate_noPackages_writesNothing() throws Exception {
final Path outputRoot = Files.createTempDirectory("ai-index-test").resolve("ai");
Files.createDirectories(outputRoot);
- final ProjectIndexer indexer =
- new ProjectIndexer(new SystemStreamLog(), PROJECT_TITLE, "1.0.0", "0.0.0", false);
+ final ProjectIndexer indexer = new ProjectIndexer(PROJECT_TITLE, "1.0.0", "0.0.0", false);
// act
final int written = indexer.aggregate(outputRoot);
@@ -114,13 +111,10 @@ public void aggregate_unchanged_isNotRewritten() throws Exception {
"> Example package.\n");
// first run writes the file
- assertThat(
- new ProjectIndexer(new SystemStreamLog(), PROJECT_TITLE, "1.0.0", "0.0.0", false).aggregate(outputRoot),
- is(equalTo(1)));
+ assertThat(new ProjectIndexer(PROJECT_TITLE, "1.0.0", "0.0.0", false).aggregate(outputRoot), is(equalTo(1)));
// act: a second run over the same packages must detect no change
- final int second =
- new ProjectIndexer(new SystemStreamLog(), PROJECT_TITLE, "1.0.0", "0.0.0", false).aggregate(outputRoot);
+ final int second = new ProjectIndexer(PROJECT_TITLE, "1.0.0", "0.0.0", false).aggregate(outputRoot);
// assert
assertThat(second, is(equalTo(0)));
@@ -134,11 +128,10 @@ public void aggregate_force_rewritesEvenWhenUnchanged() throws Exception {
outputRoot.resolve("main/java/com/example/package.ai.md"),
"main/java/com/example",
"> Example package.\n");
- new ProjectIndexer(new SystemStreamLog(), PROJECT_TITLE, "1.0.0", "0.0.0", false).aggregate(outputRoot);
+ new ProjectIndexer(PROJECT_TITLE, "1.0.0", "0.0.0", false).aggregate(outputRoot);
// act: force=true rewrites despite no content change
- final int forced =
- new ProjectIndexer(new SystemStreamLog(), PROJECT_TITLE, "1.0.0", "0.0.0", true).aggregate(outputRoot);
+ final int forced = new ProjectIndexer(PROJECT_TITLE, "1.0.0", "0.0.0", true).aggregate(outputRoot);
// assert
assertThat(forced, is(equalTo(1)));
@@ -152,8 +145,7 @@ public void aggregate_packageWithoutLead_listsPathWithoutLeadSeparator() throws
final Path outputRoot = Files.createTempDirectory("ai-index-test").resolve("ai");
writePackageFile(outputRoot.resolve("main/java/com/example/package.ai.md"), "main/java/com/example", "");
- final ProjectIndexer indexer =
- new ProjectIndexer(new SystemStreamLog(), PROJECT_TITLE, "1.0.0", "0.0.0", false);
+ final ProjectIndexer indexer = new ProjectIndexer(PROJECT_TITLE, "1.0.0", "0.0.0", false);
// act
indexer.aggregate(outputRoot);
@@ -173,8 +165,7 @@ public void aggregate_rootPackage_isListedAsDot() throws Exception {
final Path outputRoot = Files.createTempDirectory("ai-index-test").resolve("ai");
writePackageFile(outputRoot.resolve("package.ai.md"), "ai", "> The whole project.\n");
- final ProjectIndexer indexer =
- new ProjectIndexer(new SystemStreamLog(), PROJECT_TITLE, "1.0.0", "0.0.0", false);
+ final ProjectIndexer indexer = new ProjectIndexer(PROJECT_TITLE, "1.0.0", "0.0.0", false);
// act
indexer.aggregate(outputRoot);
@@ -220,7 +211,7 @@ public void aggregate_overviewDisabled_hasNoOverviewSection() throws Exception {
"> Example package.\n");
// act: the deterministic constructor performs no AI call
- new ProjectIndexer(new SystemStreamLog(), PROJECT_TITLE, "1.0.0", "0.0.0", false).aggregate(outputRoot);
+ new ProjectIndexer(PROJECT_TITLE, "1.0.0", "0.0.0", false).aggregate(outputRoot);
// assert
final AiMdDocument document = documentCodec.read(outputRoot.resolve(AiMdHeaderCodec.PROJECT_AI_MD_FILENAME));
@@ -255,9 +246,7 @@ public void aggregate_enablingOverview_rewritesPreviouslyDeterministicIndex() th
outputRoot.resolve("main/java/com/example/package.ai.md"),
"main/java/com/example",
"> Example package.\n");
- assertThat(
- new ProjectIndexer(new SystemStreamLog(), PROJECT_TITLE, "1.0.0", "0.0.0", false).aggregate(outputRoot),
- is(equalTo(1)));
+ assertThat(new ProjectIndexer(PROJECT_TITLE, "1.0.0", "0.0.0", false).aggregate(outputRoot), is(equalTo(1)));
// act: enabling the overview changes the generation signature in the checksum -> regenerate
final int rewritten = overviewIndexer(false).aggregate(outputRoot);
@@ -293,7 +282,6 @@ private ProjectIndexer overviewIndexer(final boolean force) {
final AiPromptSupport promptSupport = new AiPromptSupport(Collections.singletonList(prompt));
return new ProjectIndexer(
- new SystemStreamLog(),
PROJECT_TITLE,
"1.0.0",
"0.0.0",
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/SourceFileIndexerTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/SourceFileIndexerTest.java
similarity index 98%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/SourceFileIndexerTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/SourceFileIndexerTest.java
index 26871ed..709a98f 100644
--- a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/SourceFileIndexerTest.java
+++ b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/SourceFileIndexerTest.java
@@ -23,7 +23,6 @@
import net.ladenthin.maven.llamacpp.aiindex.prompt.AiPromptPreparationSupport;
import net.ladenthin.maven.llamacpp.aiindex.prompt.AiPromptSupport;
import net.ladenthin.maven.llamacpp.aiindex.provider.MockAiGenerationProvider;
-import org.apache.maven.plugin.logging.SystemStreamLog;
import org.junit.jupiter.api.Test;
public class SourceFileIndexerTest {
@@ -37,7 +36,6 @@ private SourceFileIndexer indexer(
final long minSizeBytes,
final long maxSizeBytes) {
return new SourceFileIndexer(
- new SystemStreamLog(),
baseDirectory,
outputRoot,
Arrays.asList(".java"),
@@ -53,7 +51,6 @@ private SourceFileIndexer indexer(
private AiFieldGenerationSupport mockSupport() {
final AiPromptSupport promptSupport = new AiPromptSupport(CommonTestFixtures.createFilePromptDefinitions());
return new AiFieldGenerationSupport(
- new SystemStreamLog(),
new MockAiGenerationProvider(),
new AiPromptPreparationSupport(promptSupport),
CommonTestFixtures.createDefaultAiModelDefinitionSupport());
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/jcstress/AiGenerationKindRace.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/jcstress/AiGenerationKindRace.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/jcstress/AiGenerationKindRace.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/jcstress/AiGenerationKindRace.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/mojo/MojoPhaseSkipTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/mojo/MojoPhaseSkipTest.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/mojo/MojoPhaseSkipTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/mojo/MojoPhaseSkipTest.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/prompt/AiPreparedPromptTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/prompt/AiPreparedPromptTest.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/prompt/AiPreparedPromptTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/prompt/AiPreparedPromptTest.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/prompt/AiPromptPreparationSupportTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/prompt/AiPromptPreparationSupportTest.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/prompt/AiPromptPreparationSupportTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/prompt/AiPromptPreparationSupportTest.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/prompt/AiPromptSupportTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/prompt/AiPromptSupportTest.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/prompt/AiPromptSupportTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/prompt/AiPromptSupportTest.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/provider/AiCompletionParserTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/provider/AiCompletionParserTest.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/provider/AiCompletionParserTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/provider/AiCompletionParserTest.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/provider/AiGenerationProviderDefaultTimingsTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/provider/AiGenerationProviderDefaultTimingsTest.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/provider/AiGenerationProviderDefaultTimingsTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/provider/AiGenerationProviderDefaultTimingsTest.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/provider/AiGenerationProviderFactoryTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/provider/AiGenerationProviderFactoryTest.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/provider/AiGenerationProviderFactoryTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/provider/AiGenerationProviderFactoryTest.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/provider/AiGenerationTimingsTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/provider/AiGenerationTimingsTest.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/provider/AiGenerationTimingsTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/provider/AiGenerationTimingsTest.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/provider/LlamaCppJniAiGenerationProviderTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/provider/LlamaCppJniAiGenerationProviderTest.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/provider/LlamaCppJniAiGenerationProviderTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/provider/LlamaCppJniAiGenerationProviderTest.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/provider/MockAiGenerationProviderTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/provider/MockAiGenerationProviderTest.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/provider/MockAiGenerationProviderTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/provider/MockAiGenerationProviderTest.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/support/AiChecksumSupportTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/support/AiChecksumSupportTest.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/support/AiChecksumSupportTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/support/AiChecksumSupportTest.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/support/AiDeterministicSummaryTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/support/AiDeterministicSummaryTest.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/support/AiDeterministicSummaryTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/support/AiDeterministicSummaryTest.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/support/AiGenerationTimeEstimatorTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/support/AiGenerationTimeEstimatorTest.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/support/AiGenerationTimeEstimatorTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/support/AiGenerationTimeEstimatorTest.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/support/AiPathSupportTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/support/AiPathSupportTest.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/support/AiPathSupportTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/support/AiPathSupportTest.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/support/AiProgressBarTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/support/AiProgressBarTest.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/support/AiProgressBarTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/support/AiProgressBarTest.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/support/AiSourceChunkerTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/support/AiSourceChunkerTest.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/support/AiSourceChunkerTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/support/AiSourceChunkerTest.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/support/AiSourceExcludeFilterTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/support/AiSourceExcludeFilterTest.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/support/AiSourceExcludeFilterTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/support/AiSourceExcludeFilterTest.java
diff --git a/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/support/AiTimeSupportTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/support/AiTimeSupportTest.java
new file mode 100644
index 0000000..0d5220e
--- /dev/null
+++ b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/support/AiTimeSupportTest.java
@@ -0,0 +1,35 @@
+// SPDX-FileCopyrightText: 2026 Bernard Ladenthin
+//
+// SPDX-License-Identifier: Apache-2.0
+package net.ladenthin.maven.llamacpp.aiindex.support;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+import java.time.Instant;
+import org.junit.jupiter.api.Test;
+
+public class AiTimeSupportTest {
+
+ private final AiTimeSupport timeSupport = new AiTimeSupport();
+
+ @Test
+ public void formatInstant_formatsAsIso8601WithSecondPrecision() {
+ Instant instant = Instant.parse("2026-01-02T03:04:05.678Z");
+ assertThat(timeSupport.formatInstant(instant), is("2026-01-02T03:04:05Z"));
+ }
+
+ @Test
+ public void formatInstant_epoch_matchesEpochDateConstant() {
+ // Ties the two derivations of the Unix epoch string together: EPOCH_DATE is a static-context
+ // constant (used as a fold seed by PackageIndexer/ProjectIndexer, where no instance-bound
+ // formatInstant call is convenient), formatInstant is the instance-bound formatter every other
+ // timestamp in a .ai.md header goes through. Both must agree.
+ assertThat(timeSupport.formatInstant(Instant.EPOCH), is(AiTimeSupport.EPOCH_DATE));
+ }
+
+ @Test
+ public void epochDate_isTheUnixEpochInIso8601() {
+ assertThat(AiTimeSupport.EPOCH_DATE, is("1970-01-01T00:00:00Z"));
+ }
+}
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/support/Java8CompatibilityHelperTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/support/Java8CompatibilityHelperTest.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/support/Java8CompatibilityHelperTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/support/Java8CompatibilityHelperTest.java
diff --git a/src/test/java/net/ladenthin/maven/llamacpp/aiindex/vmlens/VmlensInterleavingSmokeTest.java b/llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/vmlens/VmlensInterleavingSmokeTest.java
similarity index 100%
rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/vmlens/VmlensInterleavingSmokeTest.java
rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/vmlens/VmlensInterleavingSmokeTest.java
diff --git a/src/test/resources/SmolLM2-135M-Instruct-Q3_K_M.gguf b/llamacpp-ai-index-maven-plugin/src/test/resources/SmolLM2-135M-Instruct-Q3_K_M.gguf
similarity index 100%
rename from src/test/resources/SmolLM2-135M-Instruct-Q3_K_M.gguf
rename to llamacpp-ai-index-maven-plugin/src/test/resources/SmolLM2-135M-Instruct-Q3_K_M.gguf
diff --git a/pom.xml b/pom.xml
index bcf86b0..31c443f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -11,12 +11,12 @@ SPDX-License-Identifier: Apache-2.0
4.0.0net.ladenthin
- llamacpp-ai-index-maven-plugin
- 1.0.3-SNAPSHOT
- maven-plugin
+ srcmorph-parent
+ 1.1.0-SNAPSHOT
+ pom
- llamacpp-ai-index-maven-plugin
- Free Maven plugin for hierarchical AI-readable indexing and summarization of source code projects using llama.cpp-compatible local models.
+ ${project.groupId}:${project.artifactId}
+ Reactor parent for srcmorph: a prompt-driven source-tree transformer using local llama.cpp models, and its Maven plugin.https://github.com/bernardladenthin/llamacpp-ai-index-maven-plugin
@@ -52,87 +52,15 @@ SPDX-License-Identifier: Apache-2.0
-
- bernardladenthin
- 8
- 21
- UTF-8
- 3.15.2
- 3.9.16
-
- 5.0.6
-
-
-
- gpt-oss-20B-mxfp4
-
- -1
-
- -1
-
-
- 6.1.2
- 3.0
- 1.37
- 0.16
- 3.6
- 1.2.28
- 2.50.0
- 0.13.7
- 1.0.0
- 4.2.1
-
- 1.9.3
- 1.4.2
- 4.10.2.0
- 1.18.46
- 7.7.4
- 1.14.0
- 3.8.0
- 2.94.0
-
- ${project.basedir}/src/site/ai
-
-
- true
-
-
-
- ${git.commit.time}
-
-
+
+
+ llamacpp-ai-index-maven-plugin
+
@@ -146,650 +74,25 @@ SPDX-License-Identifier: Apache-2.0
slf4j-api2.0.18
+
+
+ ch.qos.logback
+ logback-classic
+ 1.5.37
+
-
-
- org.projectlombok
- lombok
- ${lombok.version}
- provided
-
-
- org.jspecify
- jspecify
- ${jspecify.version}
-
-
- org.checkerframework
- checker-qual
- ${checker.version}
-
-
- net.ladenthin
- llama
- ${llama.version}
- ${llama.classifier}
-
-
-
- org.apache.maven
- maven-plugin-api
- ${maven.version}
- provided
-
-
-
- org.apache.maven.plugin-tools
- maven-plugin-annotations
- ${maven.plugin.tools.version}
- provided
-
-
-
- org.junit.jupiter
- junit-jupiter
- ${junit.version}
- test
-
-
-
- org.hamcrest
- hamcrest
- ${hamcrest.version}
- test
-
-
- net.jqwik
- jqwik
- ${jqwik.version}
- test
-
-
- com.tngtech.archunit
- archunit-junit5
- ${archunit.version}
- test
-
-
- org.openjdk.jmh
- jmh-core
- ${jmh.version}
- test
-
-
- org.openjdk.jmh
- jmh-generator-annprocess
- ${jmh.version}
- test
-
-
- org.openjdk.jcstress
- jcstress-core
- ${jcstress.version}
- test
-
-
- org.jetbrains.lincheck
- lincheck
- ${lincheck.version}
- test
-
+
-
- com.vmlens
- api
- ${vmlens.version}
- test
-
-
-
-
-
-
-
- com.diffplug.spotless
- spotless-maven-plugin
- ${spotless.version}
-
-
- com.github.spotbugs
- spotbugs-maven-plugin
- ${spotbugs.version}
-
-
- com.vmlens
- vmlens-maven-plugin
- ${vmlens.version}
-
-
- io.github.git-commit-id
- git-commit-id-maven-plugin
- 10.0.0
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
- 3.15.0
-
-
- org.apache.maven.plugins
- maven-enforcer-plugin
- 3.6.3
-
-
- org.apache.maven.plugins
- maven-gpg-plugin
- 3.2.8
-
-
- org.apache.maven.plugins
- maven-jar-plugin
- 3.5.0
-
-
- org.apache.maven.plugins
- maven-javadoc-plugin
- 3.12.0
-
-
- org.apache.maven.plugins
- maven-plugin-plugin
- ${maven.plugin.tools.version}
-
-
- org.apache.maven.plugins
- maven-source-plugin
- 3.4.0
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
- 3.5.6
-
-
- @{argLine} -Xmx2g -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=. -XX:ErrorFile=hs_err_pid%p.log
-
-
- **/VmlensInterleavingSmokeTest.java
-
-
-
-
- org.codehaus.mojo
- exec-maven-plugin
- 3.6.3
-
-
- org.jacoco
- jacoco-maven-plugin
- 0.8.15
-
-
- org.pitest
- pitest-maven
- 1.25.7
-
-
- org.sonatype.central
- central-publishing-maven-plugin
- 0.11.0
-
-
-
-
-
- io.github.git-commit-id
- git-commit-id-maven-plugin
-
-
- get-git-properties
-
- revision
-
- initialize
-
-
-
- yyyy-MM-dd'T'HH:mm:ss'Z'
- UTC
- false
- false
-
-
-
- org.apache.maven.plugins
- maven-enforcer-plugin
-
-
- enforce-maven
-
- enforce
-
-
-
-
- [3.6.3,)
-
-
- [1.8,)
-
-
-
-
-
- commons-logging:commons-logging
-
- log4j:log4j
-
- org.hamcrest:hamcrest-core
- org.hamcrest:hamcrest-library
- org.hamcrest:hamcrest-all
-
- junit:junit
- junit:junit-dep
-
-
-
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
- ${maven.compiler.release}
- ${maven.compiler.testRelease}
- true
- true
-
-
- -Xlint:all,-serial,-options,-classfile,-processing
- -Werror
-
- -processor
- lombok.launch.AnnotationProcessorHider$AnnotationProcessor,lombok.launch.AnnotationProcessorHider$ClaimingProcessor,org.checkerframework.checker.nullness.NullnessChecker
-
- -AskipDefs=^net\.ladenthin\.llamacpp_ai_index_maven_plugin\..*$
- -XDaddTypeAnnotationsToSymbol=true
- -XDcompilePolicy=simple
- --should-stop=ifError=FLOW
-
- -Xplugin:ErrorProne -XepExcludedPaths:.*/generated-sources/.* -Xep:NullAway:ERROR -XepOpt:NullAway:OnlyNullMarked=true -XepOpt:NullAway:ExcludedFieldAnnotations=org.apache.maven.plugins.annotations.Parameter,org.apache.maven.plugins.annotations.Component -XepOpt:NullAway:JSpecifyMode=true -XepOpt:NullAway:CheckOptionalEmptiness=true -XepOpt:NullAway:AcknowledgeRestrictiveAnnotations=true -XepOpt:NullAway:AcknowledgeAndroidRecent=true -XepOpt:NullAway:AssertsEnabled=true -Xep:BoxedPrimitiveEquality:ERROR -Xep:EqualsHashCode:ERROR -Xep:EqualsIncompatibleType:ERROR -Xep:IdentityBinaryExpression:ERROR -Xep:SelfAssignment:ERROR -Xep:SelfComparison:ERROR -Xep:SelfEquals:ERROR -Xep:DeadException:ERROR -Xep:FormatString:ERROR -Xep:InvalidPatternSyntax:ERROR -Xep:OptionalEquality:ERROR -Xep:ImpossibleNullComparison:ERROR
-
-
-
- org.projectlombok
- lombok
- ${lombok.version}
-
-
- com.google.errorprone
- error_prone_core
- ${errorprone.version}
-
-
- com.uber.nullaway
- nullaway
- ${nullaway.version}
-
-
- org.checkerframework
- checker
- ${checker.version}
-
-
-
-
-
- default-compile
-
-
-
- module-info.java
-
-
-
-
- module-info-compile
- compile
-
- compile
-
-
-
- 9
-
- module-info.java
-
-
-
-
-
-
- default-testCompile
-
-
- false
-
- -XDaddTypeAnnotationsToSymbol=true
- -XDcompilePolicy=simple
- --should-stop=ifError=FLOW
- -Xplugin:ErrorProne -Xep:NullAway:OFF -Xep:GuardedBy:OFF -Xep:IdentityBinaryExpression:OFF
-
-
-
- org.openjdk.jcstress
- jcstress-core
- ${jcstress.version}
-
-
- org.openjdk.jmh
- jmh-generator-annprocess
- ${jmh.version}
-
-
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
-
-
-
- org.apache.maven.plugins
- maven-source-plugin
-
-
- attach-sources
- verify
-
- jar-no-fork
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-javadoc-plugin
-
- ${maven.compiler.release}
- true
- true
- all
-
- **/HelpMojo.java
-
-
-
-
- attach-javadocs
-
- jar
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-plugin-plugin
-
- ai-index
-
-
-
- default-descriptor
-
- descriptor
-
-
-
- help-goal
-
- helpmojo
-
-
-
-
-
-
- org.jacoco
- jacoco-maven-plugin
-
-
- prepare-agent
-
- prepare-agent
-
-
-
- report
- test
-
- report
-
-
-
-
-
- com.diffplug.spotless
- spotless-maven-plugin
-
-
-
- src/main/java/**/*.java
- src/test/java/**/*.java
-
-
- ${palantir-java-format.version}
-
-
-
-
-
-
-
-
- spotless-check
- verify
-
- check
-
-
-
-
-
- com.github.spotbugs
- spotbugs-maven-plugin
-
- Max
- Low
- true
- false
- spotbugs-exclude.xml
-
-
- com.mebigfatguy.fb-contrib
- fb-contrib
- ${fb-contrib.version}
-
-
- com.h3xstream.findsecbugs
- findsecbugs-plugin
- ${findsecbugs.version}
-
-
-
-
-
- spotbugs-check
- verify
-
- check
-
-
-
-
-
- org.codehaus.mojo
- exec-maven-plugin
-
- org.openjdk.jmh.Main
- test
-
-
-
-
- org.pitest
- pitest-maven
-
-
- org.pitest
- pitest-junit5-plugin
- 1.2.3
-
-
-
-
-
- net.ladenthin.maven.llamacpp.aiindex.config.AiCalibration
- net.ladenthin.maven.llamacpp.aiindex.config.AiCondition
- net.ladenthin.maven.llamacpp.aiindex.config.AiConditionEvaluator
- net.ladenthin.maven.llamacpp.aiindex.config.AiFieldGenerationConfig
- net.ladenthin.maven.llamacpp.aiindex.config.AiFieldGenerationSelector
- net.ladenthin.maven.llamacpp.aiindex.config.AiFileContext
- net.ladenthin.maven.llamacpp.aiindex.config.AiGenerationConfig
- net.ladenthin.maven.llamacpp.aiindex.config.AiRangeCondition
- net.ladenthin.maven.llamacpp.aiindex.config.AiModelDefinition
- net.ladenthin.maven.llamacpp.aiindex.config.AiModelDefinitionSupport
- net.ladenthin.maven.llamacpp.aiindex.indexer.AiCalibrationMeasurement
- net.ladenthin.maven.llamacpp.aiindex.indexer.AiInputWindowCalculator
- net.ladenthin.maven.llamacpp.aiindex.document.AiGenerationRequest
- net.ladenthin.maven.llamacpp.aiindex.document.AiGenerationResult
- net.ladenthin.maven.llamacpp.aiindex.document.AiMdChildEntryLineFormatter
- net.ladenthin.maven.llamacpp.aiindex.document.AiMdDocument
- net.ladenthin.maven.llamacpp.aiindex.document.AiMdHeader
- net.ladenthin.maven.llamacpp.aiindex.document.AiMdHeaderSupport
- net.ladenthin.maven.llamacpp.aiindex.document.AiMdLeadExtractor
- net.ladenthin.maven.llamacpp.aiindex.prompt.AiPreparedPrompt
- net.ladenthin.maven.llamacpp.aiindex.prompt.AiPromptDefinition
- net.ladenthin.maven.llamacpp.aiindex.prompt.AiPromptPreparationSupport
- net.ladenthin.maven.llamacpp.aiindex.prompt.AiPromptSupport
- net.ladenthin.maven.llamacpp.aiindex.provider.AiCompletionParser
- net.ladenthin.maven.llamacpp.aiindex.provider.AiGenerationTimings
- net.ladenthin.maven.llamacpp.aiindex.provider.AiGenerationProvider
- net.ladenthin.maven.llamacpp.aiindex.provider.AiGenerationProviderFactory
- net.ladenthin.maven.llamacpp.aiindex.provider.MockAiGenerationProvider
- net.ladenthin.maven.llamacpp.aiindex.config.AiOversizeStrategy
- net.ladenthin.maven.llamacpp.aiindex.config.AiFactCounter
- net.ladenthin.maven.llamacpp.aiindex.config.AiFactDefinition
- net.ladenthin.maven.llamacpp.aiindex.config.AiFactDefinitionSupport
- net.ladenthin.maven.llamacpp.aiindex.config.AiFactExtractor
- net.ladenthin.maven.llamacpp.aiindex.support.AiChecksumSupport
- net.ladenthin.maven.llamacpp.aiindex.support.AiDeterministicSummary
- net.ladenthin.maven.llamacpp.aiindex.support.AiGenerationTimeEstimator
- net.ladenthin.maven.llamacpp.aiindex.support.AiPathSupport
- net.ladenthin.maven.llamacpp.aiindex.support.AiProgressBar
- net.ladenthin.maven.llamacpp.aiindex.support.AiSourceExcludeFilter
- net.ladenthin.maven.llamacpp.aiindex.support.AiTimeSupport
- net.ladenthin.maven.llamacpp.aiindex.support.Java8CompatibilityHelper
-
-
- net.ladenthin.maven.llamacpp.aiindex.*
-
- 100
- 30000
-
-
-
-
-
-
-
-
- gpu-cuda
-
- cuda13-windows-x86-64
-
-
-
- gpu-vulkan
-
- vulkan-windows-x86-64
-
-
-
release
@@ -797,6 +100,9 @@ SPDX-License-Identifier: Apache-2.0
org.apache.maven.pluginsmaven-gpg-plugin
+
+ 3.2.8sign-artifacts
@@ -816,6 +122,9 @@ SPDX-License-Identifier: Apache-2.0
org.sonatype.centralcentral-publishing-maven-plugin
+
+ 0.11.0truecentral
@@ -829,1564 +138,5 @@ SPDX-License-Identifier: Apache-2.0
-
-
- ai-index-selftest
-
-
-
- ${project.groupId}
- ${project.artifactId}
- ${project.version}
-
-
- ${ai.index.output.directory}
-
-
- src/main/java/net/ladenthin/maven/llamacpp/aiindex/config
- src/main/java/net/ladenthin/maven/llamacpp/aiindex/provider
-
-
-
-
- **/package-info.java
- **/module-info.java
-
-
- llamacpp-jni
-
-
-
-
-
-
- Mistral-7B-Instruct-v0.3-Q4_K_M-C16k
- X:/Modelle/Mistral-7B-Instruct-v0.3-Q4_K_M.gguf
- 16384
- 2048
- 1.0
- 8
- 4
- true
- 1.1
-
-
-
- Meta-Llama-3.1-8B-Instruct-Q5_K_M-C32k
- X:/Modelle/Meta-Llama-3.1-8B-Instruct-Q5_K_M.gguf
- 32768
- 1536
- 1.0
- 8
- 4
- true
- 1.1
-
-
-
- Codestral-22B-v0.1-Q4_K_M-C32k
- X:/Modelle/Codestral-22B-v0.1-Q4_K_M.gguf
- 32768
- 1536
- 1.0
- 8
- 4
- true
- 1.1
-
-
-
- Codestral-22B-v0.1-Q6_K-C32k
- X:/Modelle/Codestral-22B-v0.1-Q6_K.gguf
- 32768
- 1536
- 1.0
- 8
- 4
- true
- 1.1
-
-
-
- Qwen2.5-Coder-7B-Instruct-Q5_K_M-C16k
- X:/Modelle/qwen2.5-coder-7b-instruct-q5_k_m.gguf
- 16384
- 2048
- 1.0
- 8
- 4
- true
- 1.1
-
-
-
- Ministral-3-8B-Instruct-2512-Q4_K_M-C32k
- X:/Modelle/Ministral-3-8B-Instruct-2512-Q4_K_M.gguf
- 32768
- 2048
- 0.1
- 8
- 4
- true
- 1.1
-
-
-
- Ministral-3-14B-Instruct-2512-Q4_K_M-C32k
- X:/Modelle/Ministral-3-14B-Instruct-2512-Q4_K_M.gguf
- 32768
- 2048
- 0.1
- 8
- 4
- true
- 1.1
-
-
-
- Ministral-3-8B-Instruct-2512-Q5_K_M-C32k
- X:/Modelle/Ministral-3-8B-Instruct-2512-Q5_K_M.gguf
- 32768
- 2048
- 0.1
- 8
- 4
- true
- 1.1
-
-
-
- Ministral-3-14B-Instruct-2512-Q5_K_M-C32k
- X:/Modelle/Ministral-3-14B-Instruct-2512-Q5_K_M.gguf
- 32768
- 2048
- 0.1
- 8
- 4
- true
- 1.1
-
-
-
- Gemma-4-26B-A4B-it-UD-Q4_K_M-C32k
- X:/Modelle/gemma-4-26B-A4B-it-UD-Q4_K_M.gguf
- 32768
- 8192
- 1.0
- 8
- 4
- true
- 0.95
- 64
- 1.1
- false
-
- <end_of_turn>
-
-
-
-
- Gemma-4-12B-it-Q4_K_M-C32k
- X:/Modelle/gemma-4-12B-it-Q4_K_M.gguf
- 32768
- 8192
- 1.0
- 8
- 4
- true
- 0.95
- 64
- 1.1
- false
-
- <end_of_turn>
-
-
-
-
- Gemma-4-E4B-Uncensored-HauhauCS-Aggressive-Q4_K_M-C32k
- X:/Modelle/Gemma-4-E4B-Uncensored-HauhauCS-Aggressive-Q4_K_M.gguf
- 32768
- 8192
- 1.0
- 8
- 4
- true
- 0.95
- 64
- 1.1
- false
-
- <end_of_turn>
-
-
-
-
- Gemma-4-E4B-Uncensored-HauhauCS-Aggressive-Q6_K_P-C32k
- X:/Modelle/Gemma-4-E4B-Uncensored-HauhauCS-Aggressive-Q6_K_P.gguf
- 32768
- 8192
- 1.0
- 8
- 4
- true
- 0.95
- 64
- 1.1
- false
-
- <end_of_turn>
-
-
-
-
- Qwen3-Coder-30B-A3B-Instruct-UD-Q4_K_XL-C64k
- X:/Modelle/Qwen3-Coder-30B-A3B-Instruct-UD-Q4_K_XL.gguf
-
- 16384
- 1536
- 0.7
- 8
- 4
- true
- 0.8
- 20
- 1.05
- ${ai.cachePrompt}
-
-
-
- Qwen2.5-Coder-14B-Instruct-Q4_K_M-C32k
- X:/Modelle/Qwen2.5-Coder-14B-Instruct-Q4_K_M.gguf
- 32768
- 2048
- 0.7
- 8
- 4
- true
- 0.8
- 20
- 1.05
-
-
-
- Qwen3-4B-Instruct-2507-Q5_K_M-C32k
- X:/Modelle/Qwen3-4B-Instruct-2507-Q5_K_M.gguf
- 32768
- 2048
- 0.7
- 8
- 4
- true
- 0.8
- 20
- 1.05
-
-
-
- Granite-4.0-H-Tiny-Q4_K_M-C128k
- X:/Modelle/ibm-granite_granite-4.0-h-tiny-Q4_K_M.gguf
- 131072
- 2048
- 0.2
- 8
- 4
- true
- 1.1
-
-
-
- Granite-4.0-H-Small-Q4_K_M-C128k
- X:/Modelle/ibm-granite_granite-4.0-h-small-Q4_K_M.gguf
- 131072
- 2048
- 0.2
- 8
- 4
- true
- 1.1
-
-
-
- EXP-Qwen3.5-4B
- X:/Modelle/Qwen3.5-4B-Q4_K_M.gguf
- 16384
- 1536
- 0.7
- 8
- 4
- true
- 0.8
- 20
- 1.05
- false
-
-
- EXP-Qwen2.5-Coder-7B
- X:/Modelle/qwen2.5-coder-7b-instruct-q5_k_m.gguf
- 16384
- 1536
- 0.7
- 8
- 4
- true
- 0.8
- 20
- 1.05
-
-
-
- gpt-oss-20B-c16k
- X:/Modelle/gpt-oss-20b-UD-Q4_K_XL.gguf
- 16384
- ${ai.gpuLayers}
- ${ai.mainGpu}
- ${ai.devices}
- 2048
- 0.7
- 8
- 3
- true
- 1.0
- 0
- 0.05
- 1.0
- low
-
-
- gpt-oss-20B-c48k
- X:/Modelle/gpt-oss-20b-UD-Q4_K_XL.gguf
- 49152
- ${ai.gpuLayers}
- ${ai.mainGpu}
- ${ai.devices}
- 4096
- 0.7
- 8
- 3
- true
- 1.0
- 0
- 0.05
- 1.0
- low
-
-
- gpt-oss-20B-c96k
- X:/Modelle/gpt-oss-20b-UD-Q4_K_XL.gguf
- 98304
- ${ai.gpuLayers}
- ${ai.mainGpu}
- ${ai.devices}
- 6144
- 0.7
- 8
- 3
- true
- 1.0
- 0
- 0.05
- 1.0
- low
-
-
-
-
- gpt-oss-20B-mxfp4
- X:/Modelle/gpt-oss-20b-mxfp4.gguf
- 98304
- ${ai.gpuLayers}
- ${ai.mainGpu}
- ${ai.devices}
- 6144
- 0.7
- 8
- 3
- true
- 1.0
- 0
- 0.05
- 1.0
- low
-
-
- gpt-oss-20B-Q4_K_M
- X:/Modelle/gpt-oss-20b-Q4_K_M.gguf
- 98304
- ${ai.gpuLayers}
- ${ai.mainGpu}
- ${ai.devices}
- 6144
- 0.7
- 8
- 3
- true
- 1.0
- 0
- 0.05
- 1.0
- low
-
-
- gpt-oss-20B-Q5_K_M
- X:/Modelle/gpt-oss-20b-Q5_K_M.gguf
- 98304
- ${ai.gpuLayers}
- ${ai.mainGpu}
- ${ai.devices}
- 6144
- 0.7
- 8
- 3
- true
- 1.0
- 0
- 0.05
- 1.0
- low
-
-
- gpt-oss-20B-Q8_0
- X:/Modelle/gpt-oss-20b-Q8_0.gguf
- 98304
- ${ai.gpuLayers}
- ${ai.mainGpu}
- ${ai.devices}
- 6144
- 0.7
- 8
- 3
- true
- 1.0
- 0
- 0.05
- 1.0
- low
-
-
- gpt-oss-20B-F16
- X:/Modelle/gpt-oss-20b-F16.gguf
- 98304
- ${ai.gpuLayers}
- ${ai.mainGpu}
- ${ai.devices}
- 6144
- 0.7
- 8
- 3
- true
- 1.0
- 0
- 0.05
- 1.0
- low
-
-
-
-
- granite-4.0-h-tiny-bigwindow
- X:/Modelle/granite-4.0-h-tiny-Q4_K_M.gguf
- 393216
- ${ai.gpuLayers}
- ${ai.mainGpu}
- ${ai.devices}
- 4096
- 0.2
- 8
- 3
- true
- 1.0
- 0
- 0.05
- 1.0
-
-
-
-
-
- granite-4.0-h-1b-fastchunk
- X:/Modelle/granite-4.0-h-1b-Q4_K_M.gguf
- 16384
- ${ai.gpuLayers}
- ${ai.mainGpu}
- ${ai.devices}
- 1536
- 0.2
- 8
- 3
- true
- 1.0
- 0
- 0.05
- 1.0
-
-
-
-
- EXP-Qwen3-Coder-30B
- X:/Modelle/Qwen3-Coder-30B-A3B-Instruct-UD-Q4_K_XL.gguf
- 16384
- 1536
- 0.7
- 8
- 4
- true
- 0.8
- 20
- 1.05
-
-
-
- EXP-DeepSeek-Coder-V2-Lite
- X:/Modelle/DeepSeek-Coder-V2-Lite-Instruct-Q4_K_M.gguf
- 16384
- 1536
- 0.3
- 8
- 4
- true
- 0.9
- 40
- 1.05
-
-
- EXP-Seed-Coder-8B
- X:/Modelle/Seed-Coder-8B-Instruct-Q4_K_M.gguf
- 16384
- 1536
- 0.3
- 8
- 4
- true
- 0.9
- 40
- 1.05
-
-
- EXP-Granite-4.0-H-Tiny
- X:/Modelle/granite-4.0-h-tiny-Q4_K_M.gguf
- 16384
- 1536
- 0.0
- 8
- 4
- true
- 1.0
- 0
- 1.0
-
-
-
- EXP-Granite-4.0-H-Small
- X:/Modelle/granite-4.0-h-small-UD-Q4_K_XL.gguf
- 16384
- 1536
- 0.0
- 8
- 4
- true
- 1.0
- 0
- 1.0
-
-
- EXP-Qwen3-4B-Instruct-2507
- X:/Modelle/Qwen3-4B-Instruct-2507-Q4_K_M.gguf
- 16384
- 1536
- 0.7
- 8
- 4
- true
- 0.8
- 20
- 1.05
-
-
-
-
-
-
- file-body-java
-
-
-Then output these sections as markdown. Omit any section that does not apply. Use '####' for section labels. Never use '###' or higher.
-
-#### Purpose
-One or two bullets: what the type is for.
-
-#### Type
-Kind (class / interface / enum / record / annotation) and modifiers (abstract, final, sealed). extends X; implements Y; key generics and type bounds. Notable annotations (@Mojo, @Entity, Lombok, etc.).
-
-#### Input
-What comes in: constructor and method parameters, injected dependencies, consumed fields, read resources (files, buffers, streams, config).
-
-#### Output
-What comes out: return types, produced state, mutated fields, written resources, side effects.
-
-#### Core logic
-The essential steps / algorithm / responsibility as bullets. This is the most important section.
-
-#### Public API
-Each public/protected member as `name(params) -> returnType` + a clause (max 6 words) on its purpose. For a FAMILY of near-identical members (e.g. `fooN`), do not list them all: in the analysis channel enumerate and count them one per line, then in the final answer emit only the exact total and index range, e.g. `foo1..fooN (N total)`.
-
-#### Dependencies
-Imports and referenced types, as searchable names.
-
-#### Exceptions / Errors
-Notable thrown/caught exceptions, null-handling, and error conditions.
-
-#### Concurrency
-Threading, synchronization, immutability, or thread-safety notes, if any.
-
-## Rules
-- Markdown bullets and short clauses, not prose paragraphs. Sentences allowed only where a bullet would lose meaning.
-- Weave class / type / domain names into the bullets so they are searchable.
-- No code fences, no ```markdown / ```java, no XML tags, no formatter comments.
-- COUNT EXACTLY. When you state a count of methods/fields/members, count them precisely from the source and recount before finalizing. Never round, approximate, or write "similar"/"~".
-- The filename heading is already rendered above your output. Start immediately with the blockquote lead. Never produce empty output.
-
-## Critical
-If the source contains "[EOF - source was truncated]", index ONLY what is literally present. Never infer, guess, or invent any unit, field, or behavior beyond the shown source.
-
-The file path and its full source are provided in the next (user) message: the path on the first
-line, then a blank line, then the source. Index only what is literally present there.
- ]]>
-
-
- file-body-sql
-
-
-Then output these sections as markdown. Omit any section that does not apply. Use '####' for section labels. Never use '###' or higher.
-
-#### Purpose
-One or two bullets: what this SQL object is for.
-
-#### Type
-SQL object kind: table / view / materialized view / procedure / function / trigger / index / sequence. Note the dialect if evident (PostgreSQL, MySQL, Oracle, T-SQL).
-
-#### Schema
-For tables/views: each column as `name type` plus constraints (PK, FK, NOT NULL, UNIQUE, DEFAULT, CHECK). Mark the primary key and any indexes.
-
-#### Reads
-Tables and columns this object READS from (FROM / JOIN / subquery sources, function inputs).
-
-#### Writes
-Tables and columns this object WRITES (INSERT / UPDATE / DELETE / MERGE targets, or the table a trigger fires on).
-
-#### Relationships
-Foreign keys and join relationships to other tables, as searchable `table.column -> table.column` pairs.
-
-#### Routine logic
-For procedures / functions / triggers: parameters, the essential steps, and the result or effect, as bullets.
-
-#### Dependencies
-Other tables, views, functions, or sequences referenced, as searchable names.
-
-## Rules
-- Markdown bullets and short clauses, not prose paragraphs.
-- Weave table / column / constraint / domain names into the bullets so they are searchable.
-- No code fences, no ```markdown / ```sql, no XML tags, no formatter comments.
-- The filename heading is already rendered above your output. Start immediately with the blockquote lead. Never produce empty output.
-
-## Critical
-If the source contains "[EOF - source was truncated]", index ONLY what is literally present. Never infer, guess, or invent any table, column, or relationship beyond the shown source.
-
-The file path and its full source are provided in the next (user) message: the path on the first
-line, then a blank line, then the source. Index only what is literally present there.
- ]]>
-
-
- file-body-fallback
-
-
-Then output these sections as markdown. Omit any section that does not apply. Use '####' for section labels. Never use '###' or higher.
-
-#### Purpose
-One or two bullets: what the file/unit is for.
-
-#### Type
-Kind (class / interface / enum / record / header / kernel / SQL object) and language. For OO code: extends X; implements Y; key generics. For C: header vs implementation, exported vs static. For SQL: table / view / procedure / function / trigger.
-
-#### Input
-What comes in: key parameters, consumed fields, read resources (files, buffers, streams, kernels, tables/columns, env/config).
-
-#### Output
-What comes out: return types, produced state, written resources/tables, side effects.
-
-#### Core logic
-The essential steps / algorithm / responsibility as bullets. This is the most important section.
-
-#### Public API
-Each public/exported unit as `name(params) -> returnType` + a clause (max 6 words) on its purpose. For SQL: procedures/functions with params and result.
-
-#### Dependencies
-Imports / includes / referenced modules or tables, as searchable names.
-
-#### Exceptions / Errors
-Notable thrown/handled exceptions or error conditions.
-
-## Rules
-- Markdown bullets and short clauses, not prose paragraphs. Sentences allowed only where a bullet would lose meaning.
-- Weave class / type / table / domain names into the bullets so they are searchable.
-- No code fences, no ```markdown / ```java / ```sql, no XML tags, no formatter comments.
-- The filename heading is already rendered above your output. Start immediately with the blockquote lead. Never produce empty output.
-
-## Critical
-If the source contains "[EOF - source was truncated]", index ONLY what is literally present. Never infer, guess, or invent any unit, field, table, or behavior beyond the shown source.
-
-The file path and its full source are provided in the next (user) message: the path on the first
-line, then a blank line, then the source. Index only what is literally present there.
- ]]>
-
-
- package-body
-
-
-Then output these sections as markdown. Omit any that do not apply. Use '####' for labels. Never '###' or higher.
-
-#### Purpose
-One or two bullets: the package's overall responsibility.
-
-#### Responsibilities
-The main functional groups inside the package, as bullets. Group files by role; do not list every file separately for large packages.
-
-#### Key units
-The central classes / interfaces / modules / SQL objects and their job, one clause each, with their searchable names.
-
-#### Data flow
-How inputs move through the package to outputs, if a clear pipeline or collaboration exists across the files.
-
-#### Dependencies
-Notable internal collaborations and external modules/packages/tables the package depends on.
-
-#### Cross-cutting
-Recurring patterns across files: shared base types/interfaces, common exception/error handling, threading/concurrency notes, configuration.
-
-## Rules
-- Markdown bullets and short clauses, not prose paragraphs.
-- Weave type / module / table / domain names in as searchable terms.
-- Base every statement only on the provided file summaries. Do NOT invent units, methods, tables, or behavior not present in them.
-- No code fences, no ```markdown, no XML tags, no formatter comments.
-- The package-name heading is already rendered above your output. Start immediately with the blockquote lead. Never empty.
-
-## Critical
-If the input contains "[EOF - source was truncated]", summarize ONLY what is present. Never infer or invent files or content beyond the provided summaries.
-
-The package path and its already-generated per-file summaries are provided in the next (user)
-message: the path on the first line, then a blank line, then the summaries to synthesize.
- ]]>
-
-
- project-body
-
-
-
-
- file-body-java-v2
-
-
-Then output ONLY the sections below that carry real information. OMIT any section that would be empty, "none", or "not applicable" - do not emit a heading just to say nothing. Use '####' for section labels, never '###' or higher.
-
-TRIVIAL-FILE RULE: if the unit has no public behavior to describe (e.g. a marker/annotation, an enum that only lists constants, or a near-empty type), output ONLY the blockquote lead and a single '#### Purpose' line, and stop.
-
-#### Purpose
-One or two bullets: what the type is for.
-
-#### Type
-One line: kind (class/interface/enum/record/annotation) + modifiers; extends/implements; key generics; notable annotations (@Mojo, Lombok, etc.).
-
-#### Input
-What comes in: constructor/method parameters, injected dependencies, consumed fields, read resources.
-
-#### Output
-What comes out: return types, produced/mutated state, written resources, side effects.
-
-#### Core logic
-The essential steps/algorithm/responsibility as bullets. The most important section.
-
-#### Public API
-Each public/protected member as `name(params) -> returnType` + a <=6-word purpose clause. EXCEPTION: for plain data/config classes that are only getters/setters (e.g. Lombok beans), DO NOT list each accessor - write one line: "JavaBean getters/setters for: ".
-
-#### Dependencies
-Referenced types as searchable names. EXCLUDE this file's own type and java.lang.* .
-
-#### Exceptions / Errors
-Notable thrown/caught exceptions, null-handling, error conditions.
-
-#### Concurrency
-Threading, immutability, or thread-safety notes - only if the source actually shows them.
-
-## Rules
-- Markdown bullets and short clauses, not prose paragraphs.
-- Weave class/type/domain names into the bullets so they are searchable.
-- Describe ONLY what is literally in the source. NEVER invent units, fields, behavior, or concepts; in particular never mention keywords, tags, embeddings, search, or features the code does not contain.
-- No code fences, no ```markdown/```java, no XML tags, no formatter comments.
-- The filename heading is already rendered above your output. Start immediately with the blockquote lead. Never produce empty output.
-
-## Critical
-If the source contains "[EOF - source was truncated]", index ONLY what is literally present.
-
-The file path and its full source are provided in the next (user) message: the path on the first
-line, then a blank line, then the source. Index only what is literally present there.
- ]]>
-
-
- package-body-v2
-
-
-SINGLE-CHILD RULE: if the input describes only ONE child package/file and no other content, output ONLY the blockquote lead restating that child's responsibility, and stop - emit no sections.
-
-Otherwise output ONLY the sections below that carry real information. OMIT any that would be empty. Use '####' for labels, never '###' or higher.
-
-#### Purpose
-One or two bullets: the package's overall responsibility.
-
-#### Responsibilities
-The main functional groups inside the package, as bullets. Group files by role; do not list every file for large packages.
-
-#### Key units
-The central classes/interfaces/modules and their job, one clause each, with searchable names.
-
-#### Data flow
-How inputs move through the package to outputs, if a clear pipeline exists across the files.
-
-#### Dependencies
-Notable internal collaborations and external modules the package depends on. Focus on cross-unit/cross-package relationships, not raw JDK/Lombok imports.
-
-#### Cross-cutting
-Recurring patterns across files: shared base types, common error handling, concurrency, configuration.
-
-## Rules
-- Markdown bullets and short clauses, not prose paragraphs.
-- Weave type/module/domain names in as searchable terms.
-- Base every statement ONLY on the provided file summaries. NEVER invent units, methods, behavior, or concepts (in particular never mention keywords, tags, or embeddings) not present in them.
-- No code fences, no ```markdown, no XML tags, no formatter comments.
-- The package-name heading is already rendered above your output. Start immediately with the blockquote lead. Never empty.
-
-## Critical
-If the input contains "[EOF - source was truncated]", summarize ONLY what is present.
-
-The package path and its already-generated per-file summaries are provided in the next (user)
-message: the path on the first line, then a blank line, then the summaries to synthesize.
- ]]>
-
-
-
-
-
-
-
-
- ai-generate
- generate-resources
-
- generate
-
-
-
-
- .java
- .sql
-
-
-
-
- java-facts
-
- (?m)^\s*(?:public\s+|final\s+|abstract\s+|sealed\s+|non-sealed\s+|static\s+)*(?:class|interface|enum|record)\s+\w
- \bpublic\b
- \b(?:TODO|FIXME)\b
- @Override\b
-
- (?m)^[ \t]*(?:(?:public|private|protected|static|final|abstract|default|synchronized|native|strictfp)[ \t]+)*(?:<[^>]+>[ \t]*)?(?!(?:if|for|while|switch|catch|return|new|else|do|try|synchronized|assert|throw)\b)[A-Za-z_$][\w$.]*(?:<[^;{}=]*>)?(?:\[\])*[ \t]+([A-Za-z_$]\w*)[ \t]*\([^;{]*\)(?:[ \t]*throws[ \t][\w$., \t]+)?[ \t]*[{;]
- (?m)^[ \t]*(?:(?:public|private|protected)[ \t]+)?([A-Z][A-Za-z0-9_$]*)[ \t]*\([^;{]*\)(?:[ \t]*throws[ \t][\w$., \t]+)?[ \t]*\{
- (?m)^[ \t]*(?:(?:public|private|protected|static|transient|volatile|final)[ \t]+)*(?:public|private|protected|static|transient|volatile)[ \t]+(?:(?:public|private|protected|static|transient|volatile|final)[ \t]+)*(?!class\b|interface\b|enum\b|record\b|void\b|new\b)[A-Za-z_$][\w$.]*(?:<[^;{}=]*>)?(?:\[\])*[ \t]+([A-Za-z_$]\w*(?:[ \t]*,[ \t]*[A-Za-z_$]\w*)*)[ \t]*(?:=[^;]*)?;
-
-
-
- sql-facts
-
- (?im)^\s*INSERT\s+INTO\b
- (?im)^\s*CREATE\s+TABLE\b
- (?im)^\s*CREATE\s+(?:OR\s+REPLACE\s+)?VIEW\b
- (?im)^\s*CREATE\s+(?:UNIQUE\s+)?INDEX\b
- (?im)^\s*CREATE\s+(?:OR\s+REPLACE\s+)?(?:FUNCTION|PROCEDURE)\b
-
-
-
-
-
-
- huge-java
- file-body-java
- granite-4.0-h-1b-fastchunk
- 200
-
- mapReduce
- 6
- java-facts
-
-
-
-
- .java
-
-
- 1000000
-
-
-
-
-
-
- huge-sql
- file-body-sql
- granite-4.0-h-1b-fastchunk
- 200
- mapReduce
- 6
-
- sql-facts
-
-
-
-
- .sql
-
-
- 1000000
-
-
-
-
-
-
- big-window-java
- file-body-java
- granite-4.0-h-tiny-bigwindow
- 100
-
-
-
-
-
- .java
-
-
- 275000
-
-
-
-
-
-
- big-window-sql
- file-body-sql
- granite-4.0-h-tiny-bigwindow
- 100
-
-
-
-
- .sql
-
-
- 275000
-
-
-
-
-
-
- java
- file-body-java
- ${ai.model}
-
- java-facts
-
- .java
-
-
-
- sql
- file-body-sql
- ${ai.model}
- sql-facts
-
- .sql
-
-
-
-
- fallback
- file-body-fallback
- ${ai.model}
- true
-
-
-
-
-
-
- ai-aggregate-packages
- process-resources
-
- aggregate-packages
-
-
-
-
- package-body
- ${ai.model}
-
-
-
-
-
-
-
- ai-aggregate-project
- prepare-package
-
- aggregate-project
-
-
-
-
- project-body
- ${ai.model}
-
-
-
-
-
-
-
-
-
-
-
- vmlens
-
-
-
- com.vmlens
- vmlens-maven-plugin
-
-
-
- **/VmlensInterleavingSmokeTest.java
-
-
-
-
- vmlens-test
-
- test
-
-
-
-
-
-
-
-
- jcstress
-
-
-
- org.codehaus.mojo
- exec-maven-plugin
-
-
- jcstress
- test
- exec
-
- ${java.home}/bin/java
- test
-
- -classpath
-
- org.openjdk.jcstress.Main
- -v
- -m
- default
-
-
-
-
-
-
-
-