66 "fmt"
77
88 appconfig "github.com/BetaGoRobot/BetaGo-Redefine/internal/application/config"
9+ "github.com/BetaGoRobot/BetaGo-Redefine/internal/application/lark/agentruntime"
10+ "github.com/BetaGoRobot/BetaGo-Redefine/internal/application/lark/agentruntime/runtimecutover"
11+ "github.com/BetaGoRobot/BetaGo-Redefine/internal/application/lark/agentruntime/runtimewire"
912 appcardaction "github.com/BetaGoRobot/BetaGo-Redefine/internal/application/lark/cardaction"
1013 larkchunking "github.com/BetaGoRobot/BetaGo-Redefine/internal/application/lark/chunking"
1114 "github.com/BetaGoRobot/BetaGo-Redefine/internal/application/lark/handlers"
@@ -14,7 +17,7 @@ import (
1417 "github.com/BetaGoRobot/BetaGo-Redefine/internal/application/lark/reaction"
1518 scheduleapp "github.com/BetaGoRobot/BetaGo-Redefine/internal/application/lark/schedule"
1619 todoapp "github.com/BetaGoRobot/BetaGo-Redefine/internal/application/lark/todo"
17- "github.com/BetaGoRobot/BetaGo-Redefine/internal/infrastructure/aktool "
20+ "github.com/BetaGoRobot/BetaGo-Redefine/internal/infrastructure/akshareapi "
1821 "github.com/BetaGoRobot/BetaGo-Redefine/internal/infrastructure/ark_dal"
1922 infraConfig "github.com/BetaGoRobot/BetaGo-Redefine/internal/infrastructure/config"
2023 "github.com/BetaGoRobot/BetaGo-Redefine/internal/infrastructure/db"
@@ -31,6 +34,7 @@ import (
3134 "github.com/BetaGoRobot/BetaGo-Redefine/pkg/logs"
3235 "github.com/BetaGoRobot/BetaGo-Redefine/pkg/xhttp"
3336 "github.com/larksuite/oapi-sdk-go/v3/event/dispatcher"
37+ larkim "github.com/larksuite/oapi-sdk-go/v3/service/im/v1"
3438)
3539
3640type appComponents struct {
@@ -45,7 +49,23 @@ type appComponents struct {
4549
4650// scheduler 仍保留为包级句柄,是因为当前调度器本身还没有实现
4751// runtime.Module。真正的生命周期仍由装配阶段注册的模块接管。
48- var scheduler * scheduleapp.Scheduler
52+ var (
53+ scheduler * scheduleapp.Scheduler
54+ resumeWorker workerHandle
55+ buildAgentRuntimeResumeWorker = func (ctx context.Context ) workerHandle {
56+ return runtimewire .BuildResumeWorker (ctx )
57+ }
58+ )
59+
60+ func startAgentRuntimeResumeWorker (ctx context.Context ) error {
61+ worker := buildAgentRuntimeResumeWorker (ctx )
62+ if worker == nil || ! worker .Available () {
63+ return fmt .Errorf ("%w: agent runtime resume worker unavailable" , appruntime .ErrDisabled )
64+ }
65+ resumeWorker = worker
66+ resumeWorker .Start ()
67+ return nil
68+ }
4969
5070// buildApp 是当前单体进程的装配根。这里集中完成:
5171// 1. 构造受控执行器和 handler 入口;
@@ -79,6 +99,13 @@ func newAppComponents(cfg *infraConfig.BaseConfig) *appComponents {
7999 chunkExecutor := appruntime .NewExecutor (executorConfigs ["chunk" ])
80100 scheduleExecutor := appruntime .NewExecutor (executorConfigs ["schedule" ])
81101
102+ agentruntime .SetRuntimeAgenticCutoverBuilder (runtimecutover .BuildDefaultHandler )
103+ // agentruntime.SetRuntimeStandardCutoverBuilder(runtimecutover.BuildDefaultStandardHandler)
104+ agentruntime .SetDefaultChatToolProvider (handlers .BuildLarkTools )
105+ agentruntime .SetChatGenerationPlanExecutor (agentruntime .NewDefaultChatGenerationPlanExecutor ())
106+ runtimewire .SetDefaultCapabilityProvider (func () []agentruntime.Capability {
107+ return agentruntime .BuildToolCapabilities (handlers .BuildLarkTools (), nil , (* larkim .P2MessageReceiveV1 )(nil ))
108+ })
82109 messageProcessor := messages .NewMessageProcessor (appconfig .GetManager ())
83110 reactionProcessor := reaction .NewReactionProcessor ()
84111 handlerSet := larkiface .NewHandlerSet (larkiface.HandlerSetOptions {
@@ -173,10 +200,10 @@ func addInfrastructureModules(app *appruntime.App, cfg *infraConfig.BaseConfig)
173200 }, func (context.Context ) error {
174201 return gotify .ErrUnavailable ()
175202 }))
176- app .AddModule (newOptionalModule ("aktool " , func () {
177- aktool .Init ()
203+ app .AddModule (newOptionalModule ("akshareapi " , func () {
204+ akshareapi .Init ()
178205 }, func (context.Context ) error {
179- if ok , reason := aktool .Status (); ! ok {
206+ if ok , reason := akshareapi .Status (); ! ok {
180207 return errors .New (reason )
181208 }
182209 return nil
@@ -276,13 +303,39 @@ func addApplicationModules(app *appruntime.App, cfg *infraConfig.BaseConfig, com
276303 },
277304 Stats : components .scheduleExecutor .Stats ,
278305 }))
306+ app .AddModule (appruntime .NewFuncModule (appruntime.FuncModuleOptions {
307+ Name : "agent_runtime_resume_worker" ,
308+ Critical : false ,
309+ Start : func (ctx context.Context ) error {
310+ return startAgentRuntimeResumeWorker (ctx )
311+ },
312+ Stop : func (context.Context ) error {
313+ if resumeWorker != nil {
314+ resumeWorker .Stop ()
315+ }
316+ return nil
317+ },
318+ Stats : func () map [string ]any {
319+ if resumeWorker == nil {
320+ return nil
321+ }
322+ return resumeWorker .Stats ()
323+ },
324+ }))
279325 app .AddModule (appruntime .NewLarkWSModule (
280326 cfg .LarkConfig .AppID ,
281327 cfg .LarkConfig .AppSecret ,
282328 components .eventDispatcher ,
283329 ))
284330}
285331
332+ type workerHandle interface {
333+ Start ()
334+ Stop ()
335+ Stats () map [string ]any
336+ Available () bool
337+ }
338+
286339// newEventDispatcher 负责把运行时管理的 HandlerSet 绑定到当前订阅的
287340// Lark 事件类型上。
288341func newEventDispatcher (handlerSet * larkiface.HandlerSet ) * dispatcher.EventDispatcher {
0 commit comments