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(-)