From 7292d9937804bed3fbf2b1690923e2ef62502e33 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 15 Jul 2026 02:02:31 +0000 Subject: [PATCH 1/3] Replace Maven Log with SLF4J in the indexer layer SourceFileIndexer, PackageIndexer, ProjectIndexer, and AiFieldGenerationSupport now log via org.slf4j.Logger instead of a constructor-injected Maven Log, closing the long-standing "no SLF4J usage" gap and decoupling these classes from the Maven Plugin API as the first step toward extracting them into a standalone library. Only the 5 mojos still touch org.apache.maven, enforced by a broadened ArchUnit rule (nonMojoIsMavenFree) plus a new loggersArePrivateStaticFinal rule. All log calls use parameterized {} placeholders instead of string concatenation, fixing a genuine SpotBugs LO_APPENDED_STRING_IN_FORMAT_STRING finding; a narrowly-scoped CRLF_INJECTION_LOGS suppression was added for the four converted classes (local filesystem paths only, no untrusted input, matching the project's existing suppression style). AiFieldGenerationSupportTest's log-capturing tests now attach a logback ListAppender to the class logger instead of a hand-rolled Maven SystemStreamLog subclass; logback-classic is added as a direct test-scope dependency (already resolved transitively via llama) and slf4j-api becomes a direct compile dependency. Verified: full test suite green (414 tests, 3 expected native-model skips), spotless/spotbugs clean, and an end-to-end run of the generate goal against a scratch project confirms the SLF4J log lines surface identically as [INFO] lines in Maven's console output via maven-slf4j-provider. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_016DByQrKSWzzpBt4iSRcmRP --- TODO.md | 2 +- pom.xml | 32 +++++ spotbugs-exclude.xml | 28 ++++ .../indexer/AiFieldGenerationSupport.java | 132 ++++++++++-------- .../aiindex/indexer/PackageIndexer.java | 24 ++-- .../aiindex/indexer/ProjectIndexer.java | 35 ++--- .../aiindex/indexer/SourceFileIndexer.java | 25 ++-- .../aiindex/mojo/AggregatePackagesMojo.java | 1 - .../aiindex/mojo/AggregateProjectMojo.java | 12 +- .../llamacpp/aiindex/mojo/GenerateMojo.java | 5 +- .../aiindex/PluginArchitectureTest.java | 39 +++++- ...AiFieldGenerationSupportRealModelTest.java | 4 +- .../indexer/AiFieldGenerationSupportTest.java | 99 ++++++------- .../aiindex/indexer/PackageIndexerTest.java | 6 - .../aiindex/indexer/ProjectIndexerTest.java | 32 ++--- .../indexer/SourceFileIndexerTest.java | 3 - 16 files changed, 264 insertions(+), 215 deletions(-) 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/pom.xml b/pom.xml index bcf86b0..c240661 100644 --- a/pom.xml +++ b/pom.xml @@ -146,6 +146,16 @@ SPDX-License-Identifier: Apache-2.0 slf4j-api 2.0.18 + + + ch.qos.logback + logback-classic + 1.5.37 + @@ -173,6 +183,17 @@ SPDX-License-Identifier: Apache-2.0 ${llama.classifier} + + + org.slf4j + slf4j-api + + org.apache.maven maven-plugin-api @@ -251,6 +272,17 @@ SPDX-License-Identifier: Apache-2.0 ${vmlens.version} test + + + ch.qos.logback + logback-classic + test + diff --git a/spotbugs-exclude.xml b/spotbugs-exclude.xml index 986f75c..8d41c61 100644 --- a/spotbugs-exclude.xml +++ b/spotbugs-exclude.xml @@ -525,4 +525,32 @@ SPDX-License-Identifier: Apache-2.0 + + + + + + + + + + + diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiFieldGenerationSupport.java b/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/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/PackageIndexer.java b/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/PackageIndexer.java index ad870d7..c0e2012 100644 --- a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/PackageIndexer.java +++ b/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. @@ -96,11 +96,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 +119,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 +131,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 +141,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 +156,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 +267,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 +284,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 { diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/ProjectIndexer.java b/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/ProjectIndexer.java index 2dce903..cc6e8dd 100644 --- a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/ProjectIndexer.java +++ b/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"; @@ -106,11 +106,6 @@ public class ProjectIndexer { */ 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 +127,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 +144,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 +154,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 +162,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 +173,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,7 +216,7 @@ 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; } @@ -283,7 +270,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 +285,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/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/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/mojo/AggregatePackagesMojo.java b/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/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/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/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/GenerateMojo.java b/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/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/test/java/net/ladenthin/maven/llamacpp/aiindex/PluginArchitectureTest.java b/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/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/indexer/AiFieldGenerationSupportRealModelTest.java b/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/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/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/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/PackageIndexerTest.java b/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/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/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/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/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/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()); From 4f03055ce4b6765e056befa691aa153975c97551 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 15 Jul 2026 11:27:33 +0000 Subject: [PATCH 2/3] Deduplicate the EPOCH_DATE sentinel into AiTimeSupport PackageIndexer and ProjectIndexer each hardcoded their own private "1970-01-01T00:00:00Z" literal as the seed value for folding over child dates to find the latest one. Both are exactly Instant.EPOCH formatted through the same ISO_INSTANT formatter AiTimeSupport.formatInstant already uses for every other timestamp in a .ai.md header, so the duplicate literals are now a single derived AiTimeSupport.EPOCH_DATE constant. Added AiTimeSupportTest (previously untested despite being in the PIT 100%-threshold targetClasses list) to cover formatInstant and pin the new constant; verified 1/1 mutations killed on AiTimeSupport. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_016DByQrKSWzzpBt4iSRcmRP --- .../aiindex/indexer/PackageIndexer.java | 8 +---- .../aiindex/indexer/ProjectIndexer.java | 8 +---- .../aiindex/support/AiTimeSupport.java | 8 +++++ .../aiindex/support/AiTimeSupportTest.java | 35 +++++++++++++++++++ 4 files changed, 45 insertions(+), 14 deletions(-) create mode 100644 src/test/java/net/ladenthin/maven/llamacpp/aiindex/support/AiTimeSupportTest.java diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/PackageIndexer.java b/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/PackageIndexer.java index c0e2012..14b43cc 100644 --- a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/PackageIndexer.java +++ b/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/PackageIndexer.java @@ -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 '…'". @@ -574,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/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/ProjectIndexer.java index cc6e8dd..6c29756 100644 --- a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/ProjectIndexer.java +++ b/src/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/ProjectIndexer.java @@ -100,12 +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"; - private final String projectTitle; private final String pluginVersion; private final String aiVersion; @@ -221,7 +215,7 @@ public int aggregate(final Path rootDirectory) throws IOException { } 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); diff --git a/src/main/java/net/ladenthin/maven/llamacpp/aiindex/support/AiTimeSupport.java b/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/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/test/java/net/ladenthin/maven/llamacpp/aiindex/support/AiTimeSupportTest.java b/src/test/java/net/ladenthin/maven/llamacpp/aiindex/support/AiTimeSupportTest.java new file mode 100644 index 0000000..0d5220e --- /dev/null +++ b/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")); + } +} From 6af25cd099b09680d0483a18bc8dd4083b88af07 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 15 Jul 2026 11:57:41 +0000 Subject: [PATCH 3/3] Reactor-ify into a parent + plugin module (srcmorph step 3) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Introduces the root net.ladenthin:srcmorph-parent (packaging=pom) as the first step of the srcmorph multi-module migration. The existing plugin moves into llamacpp-ai-index-maven-plugin/ with its coordinates, Java package, and goalPrefix completely unchanged — this step is a pure structural move, not a rename. The coordinate/package/goalPrefix rename to srcmorph is deferred to the final migration step, once the core library and CLI modules exist and the whole reactor is proven working end-to-end. Hoisted to the parent (reactor-wide, so future core/CLI modules can share it without duplication): project metadata (licenses, developers, scm, issueManagement, url, distributionManagement), the slf4j-api/ logback-classic dependencyManagement convergence pins, and the `release` profile (GPG signing + central-publishing-maven-plugin) so a single `mvn -P release deploy` from the root signs and publishes every reactor module. Everything else (dependencies, the full build-plugin chain, all other profiles) stays in the plugin module unchanged. Version bumped 1.0.3-SNAPSHOT -> 1.1.0-SNAPSHOT (parent + child, by inheritance) since adding modules is a feature-level change. Moved with git mv (history preserved): pom.xml, src/, and spotbugs-exclude.xml into llamacpp-ai-index-maven-plugin/ (spotbugs resolves its exclude file relative to the module basedir; lombok.config stays at the repo root, since Lombok's config search bubbles up from each source file until it finds one, and stopBubbling only stops the search at the file where it's declared — one shared root config already works correctly for every future module). Updated the path-relative references that break under the move: .gitignore module-scoped patterns, REUSE.toml file annotations, and every target/... path in .github/workflows/publish.yml (build artifacts, jacoco/PIT/vmlens reports, crash dumps, signed-artifact collection). Verified: `mvn verify` from the reactor root — BUILD SUCCESS, both modules green, 417 tests (3 expected native-model skips), spotless and spotbugs clean via their verify-phase bindings. Byte-diffed the generated plugin.xml descriptor against a pre-move build of the same commit: identical except the version number, confirming the mojo/ parameter/goalPrefix descriptor is completely unaffected by the restructuring. `mvn -P release help:effective-pom` confirms the parent's release profile (gpg + central-publishing) correctly resolves into the child module's effective build. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_016DByQrKSWzzpBt4iSRcmRP --- .github/workflows/publish.yml | 42 +- .gitignore | 15 +- REUSE.toml | 4 +- llamacpp-ai-index-maven-plugin/pom.xml | 2341 +++++++++++++++++ .../spotbugs-exclude.xml | 0 .../src}/main/java/module-info.java | 0 .../aiindex/config/AiCalibration.java | 0 .../llamacpp/aiindex/config/AiCondition.java | 0 .../aiindex/config/AiConditionEvaluator.java | 0 .../aiindex/config/AiConditionGroup.java | 0 .../aiindex/config/AiFactCounter.java | 0 .../aiindex/config/AiFactDefinition.java | 0 .../config/AiFactDefinitionSupport.java | 0 .../aiindex/config/AiFactExtractor.java | 0 .../config/AiFieldGenerationConfig.java | 0 .../config/AiFieldGenerationSelector.java | 0 .../aiindex/config/AiFileContext.java | 0 .../aiindex/config/AiGenerationConfig.java | 0 .../aiindex/config/AiGenerationKind.java | 0 .../aiindex/config/AiModelDefinition.java | 0 .../config/AiModelDefinitionSupport.java | 0 .../aiindex/config/AiOversizeStrategy.java | 0 .../aiindex/config/AiRangeCondition.java | 0 .../llamacpp/aiindex/config/package-info.java | 0 .../aiindex/document/AiGenerationRequest.java | 0 .../aiindex/document/AiGenerationResult.java | 0 .../document/AiMdChildEntryLineFormatter.java | 0 .../aiindex/document/AiMdDocument.java | 0 .../aiindex/document/AiMdDocumentCodec.java | 0 .../llamacpp/aiindex/document/AiMdHeader.java | 0 .../aiindex/document/AiMdHeaderCodec.java | 0 .../aiindex/document/AiMdHeaderSupport.java | 0 .../aiindex/document/AiMdLeadExtractor.java | 0 .../aiindex/document/package-info.java | 0 .../indexer/AiCalibrationMeasurement.java | 0 .../aiindex/indexer/AiCalibrationRunner.java | 0 .../indexer/AiFieldGenerationSupport.java | 0 .../llamacpp/aiindex/indexer/AiIndexPlan.java | 0 .../indexer/AiInputWindowCalculator.java | 0 .../aiindex/indexer/PackageIndexer.java | 0 .../aiindex/indexer/ProjectIndexer.java | 0 .../aiindex/indexer/SourceFileIndexer.java | 0 .../aiindex/indexer/package-info.java | 0 .../aiindex/mojo/AbstractAiIndexMojo.java | 0 .../aiindex/mojo/AggregatePackagesMojo.java | 0 .../aiindex/mojo/AggregateProjectMojo.java | 0 .../llamacpp/aiindex/mojo/CalibrateMojo.java | 0 .../llamacpp/aiindex/mojo/GenerateMojo.java | 0 .../llamacpp/aiindex/mojo/package-info.java | 0 .../maven/llamacpp/aiindex/package-info.java | 0 .../aiindex/prompt/AiPreparedPrompt.java | 0 .../aiindex/prompt/AiPromptDefinition.java | 0 .../prompt/AiPromptPreparationSupport.java | 0 .../aiindex/prompt/AiPromptSupport.java | 0 .../llamacpp/aiindex/prompt/package-info.java | 0 .../aiindex/provider/AiCompletionParser.java | 0 .../provider/AiGenerationProvider.java | 0 .../provider/AiGenerationProviderFactory.java | 0 .../aiindex/provider/AiGenerationTimings.java | 0 .../LlamaCppJniAiGenerationProvider.java | 0 .../aiindex/provider/LlamaCppJniConfig.java | 0 .../provider/MockAiGenerationProvider.java | 0 .../aiindex/provider/package-info.java | 0 .../aiindex/support/AiChecksumSupport.java | 0 .../support/AiDeterministicSummary.java | 0 .../support/AiGenerationTimeEstimator.java | 0 .../aiindex/support/AiPathSupport.java | 0 .../aiindex/support/AiProgressBar.java | 0 .../aiindex/support/AiSourceChunker.java | 0 .../support/AiSourceExcludeFilter.java | 0 .../aiindex/support/AiTimeSupport.java | 0 .../aiindex/support/ConvertToRecord.java | 0 .../support/Java8CompatibilityHelper.java | 0 .../aiindex/support/package-info.java | 0 .../src}/site/ai/empty.md | 0 .../llamacpp/aiindex/CommonTestFixtures.java | 0 .../aiindex/PluginArchitectureTest.java | 0 .../aiindex/config/AiCalibrationTest.java | 0 .../config/AiConditionEvaluatorTest.java | 0 .../aiindex/config/AiConditionGroupTest.java | 0 .../aiindex/config/AiConditionTest.java | 0 .../aiindex/config/AiFactCounterTest.java | 0 .../config/AiFactDefinitionSupportTest.java | 0 .../aiindex/config/AiFactDefinitionTest.java | 0 .../aiindex/config/AiFactExtractorTest.java | 0 .../config/AiFieldGenerationConfigTest.java | 0 .../config/AiFieldGenerationSelectorTest.java | 0 .../aiindex/config/AiFileContextTest.java | 0 .../config/AiGenerationConfigTest.java | 0 .../config/AiGenerationKindLincheckTest.java | 0 .../config/AiModelDefinitionSupportTest.java | 0 .../aiindex/config/AiModelDefinitionTest.java | 0 .../config/AiOversizeStrategyTest.java | 0 .../aiindex/config/AiRangeConditionTest.java | 0 .../config/JavaStructureFactPatternsTest.java | 0 .../AiMdChildEntryLineFormatterTest.java | 0 .../document/AiMdDocumentCodecTest.java | 0 .../document/AiMdHeaderCodecProperties.java | 0 .../aiindex/document/AiMdHeaderCodecTest.java | 0 .../document/AiMdHeaderSupportTest.java | 0 .../aiindex/document/AiMdHeaderTest.java | 0 .../document/AiMdLeadExtractorTest.java | 0 .../indexer/AiCalibrationMeasurementTest.java | 0 .../indexer/AiCalibrationRunnerTest.java | 0 ...AiFieldGenerationSupportRealModelTest.java | 0 .../indexer/AiFieldGenerationSupportTest.java | 0 .../aiindex/indexer/AiIndexPlanTest.java | 0 .../indexer/AiInputWindowCalculatorTest.java | 0 .../aiindex/indexer/PackageIndexerTest.java | 0 .../aiindex/indexer/ProjectIndexerTest.java | 0 .../indexer/SourceFileIndexerTest.java | 0 .../jcstress/AiGenerationKindRace.java | 0 .../aiindex/mojo/MojoPhaseSkipTest.java | 0 .../aiindex/prompt/AiPreparedPromptTest.java | 0 .../AiPromptPreparationSupportTest.java | 0 .../aiindex/prompt/AiPromptSupportTest.java | 0 .../provider/AiCompletionParserTest.java | 0 ...iGenerationProviderDefaultTimingsTest.java | 0 .../AiGenerationProviderFactoryTest.java | 0 .../provider/AiGenerationTimingsTest.java | 0 .../LlamaCppJniAiGenerationProviderTest.java | 0 .../MockAiGenerationProviderTest.java | 0 .../support/AiChecksumSupportTest.java | 0 .../support/AiDeterministicSummaryTest.java | 0 .../AiGenerationTimeEstimatorTest.java | 0 .../aiindex/support/AiPathSupportTest.java | 0 .../aiindex/support/AiProgressBarTest.java | 0 .../aiindex/support/AiSourceChunkerTest.java | 0 .../support/AiSourceExcludeFilterTest.java | 0 .../aiindex/support/AiTimeSupportTest.java | 0 .../support/Java8CompatibilityHelperTest.java | 0 .../vmlens/VmlensInterleavingSmokeTest.java | 0 .../SmolLM2-135M-Instruct-Q3_K_M.gguf | Bin pom.xml | 2330 +--------------- 134 files changed, 2396 insertions(+), 2336 deletions(-) create mode 100644 llamacpp-ai-index-maven-plugin/pom.xml rename spotbugs-exclude.xml => llamacpp-ai-index-maven-plugin/spotbugs-exclude.xml (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/module-info.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiCalibration.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiCondition.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiConditionEvaluator.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiConditionGroup.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFactCounter.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFactDefinition.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFactDefinitionSupport.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFactExtractor.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFieldGenerationConfig.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFieldGenerationSelector.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFileContext.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiGenerationConfig.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiGenerationKind.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiModelDefinition.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiModelDefinitionSupport.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiOversizeStrategy.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/config/AiRangeCondition.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/config/package-info.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/document/AiGenerationRequest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/document/AiGenerationResult.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdChildEntryLineFormatter.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdDocument.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdDocumentCodec.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdHeader.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdHeaderCodec.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdHeaderSupport.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdLeadExtractor.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/document/package-info.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiCalibrationMeasurement.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiCalibrationRunner.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiFieldGenerationSupport.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiIndexPlan.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiInputWindowCalculator.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/PackageIndexer.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/ProjectIndexer.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/SourceFileIndexer.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/indexer/package-info.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/mojo/AbstractAiIndexMojo.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/mojo/AggregatePackagesMojo.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/mojo/AggregateProjectMojo.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/mojo/CalibrateMojo.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/mojo/GenerateMojo.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/mojo/package-info.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/package-info.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/prompt/AiPreparedPrompt.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/prompt/AiPromptDefinition.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/prompt/AiPromptPreparationSupport.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/prompt/AiPromptSupport.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/prompt/package-info.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/provider/AiCompletionParser.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/provider/AiGenerationProvider.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/provider/AiGenerationProviderFactory.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/provider/AiGenerationTimings.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/provider/LlamaCppJniAiGenerationProvider.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/provider/LlamaCppJniConfig.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/provider/MockAiGenerationProvider.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/provider/package-info.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/support/AiChecksumSupport.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/support/AiDeterministicSummary.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/support/AiGenerationTimeEstimator.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/support/AiPathSupport.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/support/AiProgressBar.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/support/AiSourceChunker.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/support/AiSourceExcludeFilter.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/support/AiTimeSupport.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/support/ConvertToRecord.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/support/Java8CompatibilityHelper.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/main/java/net/ladenthin/maven/llamacpp/aiindex/support/package-info.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/site/ai/empty.md (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/CommonTestFixtures.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/PluginArchitectureTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiCalibrationTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiConditionEvaluatorTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiConditionGroupTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiConditionTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFactCounterTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFactDefinitionSupportTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFactDefinitionTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFactExtractorTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFieldGenerationConfigTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFieldGenerationSelectorTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiFileContextTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiGenerationConfigTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiGenerationKindLincheckTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiModelDefinitionSupportTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiModelDefinitionTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiOversizeStrategyTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/config/AiRangeConditionTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/config/JavaStructureFactPatternsTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdChildEntryLineFormatterTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdDocumentCodecTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdHeaderCodecProperties.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdHeaderCodecTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdHeaderSupportTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdHeaderTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/document/AiMdLeadExtractorTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiCalibrationMeasurementTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiCalibrationRunnerTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiFieldGenerationSupportRealModelTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiFieldGenerationSupportTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiIndexPlanTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/AiInputWindowCalculatorTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/PackageIndexerTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/ProjectIndexerTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/indexer/SourceFileIndexerTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/jcstress/AiGenerationKindRace.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/mojo/MojoPhaseSkipTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/prompt/AiPreparedPromptTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/prompt/AiPromptPreparationSupportTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/prompt/AiPromptSupportTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/provider/AiCompletionParserTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/provider/AiGenerationProviderDefaultTimingsTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/provider/AiGenerationProviderFactoryTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/provider/AiGenerationTimingsTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/provider/LlamaCppJniAiGenerationProviderTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/provider/MockAiGenerationProviderTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/support/AiChecksumSupportTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/support/AiDeterministicSummaryTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/support/AiGenerationTimeEstimatorTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/support/AiPathSupportTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/support/AiProgressBarTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/support/AiSourceChunkerTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/support/AiSourceExcludeFilterTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/support/AiTimeSupportTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/support/Java8CompatibilityHelperTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/java/net/ladenthin/maven/llamacpp/aiindex/vmlens/VmlensInterleavingSmokeTest.java (100%) rename {src => llamacpp-ai-index-maven-plugin/src}/test/resources/SmolLM2-135M-Instruct-Q3_K_M.gguf (100%) 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/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 + + + + file-body-sql + + + + file-body-fallback + + + + package-body + + + + project-body + + + + + file-body-java-v2 + + + + package-body-v2 + + + + + + + + + + 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 100% rename from spotbugs-exclude.xml rename to llamacpp-ai-index-maven-plugin/spotbugs-exclude.xml 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 100% 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 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 100% 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 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 100% 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 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 100% 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 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 100% 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 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 100% 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 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 100% 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 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 100% 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 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 100% 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 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 100% 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 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 100% 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 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 100% 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 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 100% 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 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 100% 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 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/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 similarity index 100% rename from src/test/java/net/ladenthin/maven/llamacpp/aiindex/support/AiTimeSupportTest.java rename to llamacpp-ai-index-maven-plugin/src/test/java/net/ladenthin/maven/llamacpp/aiindex/support/AiTimeSupportTest.java 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 c240661..31c443f 100644 --- a/pom.xml +++ b/pom.xml @@ -11,12 +11,12 @@ SPDX-License-Identifier: Apache-2.0 4.0.0 net.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 + @@ -159,669 +87,12 @@ SPDX-License-Identifier: Apache-2.0 - - - 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 - - - release @@ -829,6 +100,9 @@ SPDX-License-Identifier: Apache-2.0 org.apache.maven.plugins maven-gpg-plugin + + 3.2.8 sign-artifacts @@ -848,6 +122,9 @@ SPDX-License-Identifier: Apache-2.0 org.sonatype.central central-publishing-maven-plugin + + 0.11.0 true central @@ -861,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 - - - - file-body-sql - - - - file-body-fallback - - - - package-body - - - - project-body - - - - - file-body-java-v2 - - - - package-body-v2 - - - - - - - - - - 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 - - - - - - - -