You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@grails.apache.org by jd...@apache.org on 2026/10/13 22:03:57 UTC
(grails-core) 01/01: Merge pull request #16599 from jdaugherty/feat/grails-ai
This is an automated email from the ASF dual-hosted git repository.
jdaugherty pushed a commit to branch 8.1.x
in repository https://gitbox.apache.org/repos/asf/grails-core.git
commit 6089445541718282334bebbdcd2ee8e3aaf6ec37
Merge: 9fc21da6b2 ea0698edeb
Author: James Daugherty <jd...@jdresources.net>
AuthorDate: Tue Oct 13 23:03:50 2026 +0100
Merge pull request #16599 from jdaugherty/feat/grails-ai
Integrate Spring AI through a grails-spring-ai plugin and stream Publishers from actions
.agents/skills/README.md | 1 +
.agents/skills/grails-ai-developer | 1 +
.github/dependency-graph/external-references.yml | 1 +
AGENTS.md | 2 +
.../org/apache/grails/buildsrc/SbomPlugin.groovy | 4 +
dependencies.gradle | 4 +
end-to-end/agent-skills-plain-build/build.gradle | 1 +
end-to-end/agent-skills/build.gradle | 1 +
.../grails/e2e/skills/AgentSkillsSpec.groovy | 1 +
gradle/docs-dependencies.gradle | 6 +
gradle/publish-root-config.gradle | 2 +
grails-async/plugin/build.gradle | 6 +
.../grails/async/web/StreamItemRenderer.groovy | 41 +++
.../web/async/ControllersAsyncGrailsPlugin.groovy | 51 ++-
.../web/async/mvc/DefaultStreamItemRenderer.groovy | 55 +++
.../web/async/mvc/JacksonStreamItemRenderer.groovy | 67 ++++
.../mvc/PublisherActionResultTransformer.groovy | 177 ++++++++++
.../web/async/mvc/ServerSentEventFormatter.groovy | 126 +++++++
.../web/async/mvc/ServerSentEventSubscriber.groovy | 209 +++++++++++
.../web/async/mvc/SingleValueSubscriber.groovy | 86 +++++
.../additional-spring-configuration-metadata.json | 21 ++
.../async/ControllersAsyncGrailsPluginSpec.groovy | 94 +++++
.../PublisherActionResultTransformerSpec.groovy | 388 +++++++++++++++++++++
.../async/mvc/ServerSentEventFormatterSpec.groovy | 133 +++++++
grails-doc/build.gradle | 14 +-
grails-doc/src/en/guide/async/asyncStreaming.adoc | 110 ++++++
.../guide/async/rxjava/asyncServerSentEvents.adoc | 2 +
.../src/en/guide/commandLine/creatingProject.adoc | 2 +-
.../src/en/guide/commandLine/interactiveMode.adoc | 10 +-
.../src/en/guide/gettingStarted/agentSkills.adoc | 3 +
grails-doc/src/en/guide/introduction/whatsNew.adoc | 14 +
grails-doc/src/en/guide/toc.yml | 10 +
.../src/en/guide/upgrading/upgrading81x.adoc | 31 ++
grails-doc/src/en/guide/usingAi.adoc | 32 ++
grails-doc/src/en/guide/usingAi/aiChatClient.adoc | 87 +++++
.../src/en/guide/usingAi/aiConfiguration.adoc | 74 ++++
.../src/en/guide/usingAi/aiInstallation.adoc | 43 +++
grails-doc/src/en/guide/usingAi/aiProviders.adoc | 213 +++++++++++
grails-doc/src/en/guide/usingAi/aiStreaming.adoc | 64 ++++
grails-doc/src/en/guide/usingAi/aiTesting.adoc | 77 ++++
.../src/en/ref/Command Line/create-plugin.adoc | 2 +-
.../src/en/ref/Command Line/create-restapi.adoc | 2 +-
.../src/en/ref/Command Line/create-web-plugin.adoc | 2 +-
grails-doc/src/en/ref/Command Line/help.adoc | 4 +-
.../src/en/ref/Command Line/list-features.adoc | 6 +
.../java/org/grails/forge/feature/Category.java | 1 +
.../grails/forge/feature/ai/GrailsSpringAi.java | 86 +++++
.../grails/forge/feature/ai/SpringAiAnthropic.java | 61 ++++
.../grails/forge/feature/ai/SpringAiOllama.java | 67 ++++
.../grails/forge/feature/ai/SpringAiOpenAi.java | 61 ++++
.../forge/feature/ai/SpringAiProviderFeature.java | 89 +++++
.../forge/feature/ai/GrailsSpringAiSpec.groovy | 147 ++++++++
grails-skills/ai/build.gradle | 34 ++
.../ai/skills/grails-ai-developer/SKILL.md | 270 ++++++++++++++
.../developer/skills/grails-developer/SKILL.md | 3 +
grails-spring-ai/build.gradle | 96 +++++
grails-spring-ai/grails-app/conf/plugin.yml | 33 ++
.../apache/grails/ai/SpringAiGrailsPlugin.groovy | 57 +++
.../ai/async/ChatResponseStreamItemRenderer.groovy | 68 ++++
...rk.boot.autoconfigure.AutoConfiguration.imports | 1 +
.../grails/ai/SpringAiAutoConfigurationSpec.groovy | 74 ++++
.../grails/ai/SpringAiPluginDefaultsSpec.groovy | 57 +++
.../grails/ai/SpringAiPromptLoggingSpec.groovy | 89 +++++
.../ChatResponseStreamItemRendererSpec.groovy | 75 ++++
grails-test-examples/ai/build.gradle | 54 +++
.../ai/grails-app/conf/application.yml | 34 ++
.../ai/grails-app/conf/logback.xml | 31 ++
.../controllers/aiapp/ChatController.groovy | 40 +++
.../controllers/aiapp/StreamController.groovy | 71 ++++
.../controllers/aiapp/UrlMappings.groovy | 30 ++
.../ai/grails-app/init/aiapp/Application.groovy | 33 ++
.../grails-app/services/aiapp/AnswerService.groovy | 52 +++
.../groovy/aiapp/AiDefaultsSpec.groovy | 80 +++++
.../groovy/aiapp/ChatFunctionalSpec.groovy | 79 +++++
.../groovy/aiapp/OwnChatModelFunctionalSpec.groovy | 60 ++++
.../groovy/aiapp/OwnModelApplication.groovy | 56 +++
.../groovy/aiapp/StreamingFunctionalSpec.groovy | 84 +++++
.../src/test/groovy/aiapp/AnswerServiceSpec.groovy | 46 +++
.../build.gradle | 42 ++-
.../groovy/grails/testing/ai/AiUnitTest.groovy | 112 ++++++
.../ai/AiStubEnvironmentPostProcessor.groovy | 115 ++++++
.../grails/testing/ai/AiStubProperties.groovy | 49 +++
.../apache/grails/testing/ai/AiTestBeans.groovy | 96 +++++
.../testing/ai/AiTestingAutoConfiguration.groovy | 70 ++++
.../AiTestingVectorStoreAutoConfiguration.groovy | 67 ++++
.../testing/ai/ResettableSimpleVectorStore.groovy | 46 +++
.../grails/testing/ai/ScriptedChatModel.groovy | 165 +++++++++
.../testing/ai/SimpleVectorStoreBeans.groovy | 59 ++++
.../grails/testing/ai/StubEmbeddingModel.groovy | 129 +++++++
.../testing/ai/spock/AiSetupInterceptor.groovy | 55 +++
.../testing/ai/spock/AiSetupSpecInterceptor.groovy | 46 +++
.../ai/spock/AiTestingSupportExtension.groovy | 47 +++
.../additional-spring-configuration-metadata.json | 21 ++
...ockframework.runtime.extension.IGlobalExtension | 1 +
.../src/main/resources/META-INF/spring.factories | 16 +
...rk.boot.autoconfigure.AutoConfiguration.imports | 2 +
.../testing/ai/AiUnitTestConfiguredSpec.groovy | 85 +++++
.../testing/ai/AiUnitTestOwnBeansSpec.groovy | 97 ++++++
.../groovy/grails/testing/ai/AiUnitTestSpec.groovy | 113 ++++++
.../groovy/grails/testing/ai/AnswerService.groovy | 34 ++
.../ai/AiStubEnvironmentPostProcessorSpec.groovy | 162 +++++++++
.../ai/AiTestingAutoConfigurationSpec.groovy | 222 ++++++++++++
.../grails/testing/ai/ScriptedChatModelSpec.groovy | 216 ++++++++++++
.../testing/ai/StubEmbeddingModelSpec.groovy | 154 ++++++++
settings.gradle | 8 +
105 files changed, 6602 insertions(+), 26 deletions(-)