@jingyi0605/codingns 0.1.4 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. package/dist/public/assets/{TerminalPage-4ulgBhv9.js → TerminalPage-4p6EBqrR.js} +1 -1
  2. package/dist/public/assets/gemini-D4G1NbrE.png +0 -0
  3. package/dist/public/assets/index-CxeghocY.css +1 -0
  4. package/dist/public/assets/index-DXusStl0.js +108 -0
  5. package/dist/public/assets/kimi-BWNNSh7e.png +0 -0
  6. package/dist/public/index.html +2 -2
  7. package/dist/server/config/env.d.ts +6 -0
  8. package/dist/server/config/env.js +145 -0
  9. package/dist/server/config/env.js.map +1 -1
  10. package/dist/server/config/opencode-system-probe-helper-process.d.ts +24 -0
  11. package/dist/server/config/opencode-system-probe-helper-process.js +70 -5
  12. package/dist/server/config/opencode-system-probe-helper-process.js.map +1 -1
  13. package/dist/server/modules/butler/butler-action-context-service.d.ts +30 -0
  14. package/dist/server/modules/butler/butler-action-context-service.js +108 -0
  15. package/dist/server/modules/butler/butler-action-context-service.js.map +1 -0
  16. package/dist/server/modules/butler/butler-auth-service.d.ts +17 -0
  17. package/dist/server/modules/butler/butler-auth-service.js +91 -0
  18. package/dist/server/modules/butler/butler-auth-service.js.map +1 -0
  19. package/dist/server/modules/butler/butler-control-action-service.d.ts +65 -0
  20. package/dist/server/modules/butler/butler-control-action-service.js +296 -0
  21. package/dist/server/modules/butler/butler-control-action-service.js.map +1 -0
  22. package/dist/server/modules/butler/butler-control-session-service.d.ts +55 -0
  23. package/dist/server/modules/butler/butler-control-session-service.js +367 -0
  24. package/dist/server/modules/butler/butler-control-session-service.js.map +1 -0
  25. package/dist/server/modules/butler/butler-controller.d.ts +367 -0
  26. package/dist/server/modules/butler/butler-controller.js +475 -0
  27. package/dist/server/modules/butler/butler-controller.js.map +1 -0
  28. package/dist/server/modules/butler/butler-follow-up-evaluation-instruction-adapter.d.ts +34 -0
  29. package/dist/server/modules/butler/butler-follow-up-evaluation-instruction-adapter.js +77 -0
  30. package/dist/server/modules/butler/butler-follow-up-evaluation-instruction-adapter.js.map +1 -0
  31. package/dist/server/modules/butler/butler-follow-up-scheduler.d.ts +23 -0
  32. package/dist/server/modules/butler/butler-follow-up-scheduler.js +57 -0
  33. package/dist/server/modules/butler/butler-follow-up-scheduler.js.map +1 -0
  34. package/dist/server/modules/butler/butler-follow-up-service.d.ts +86 -0
  35. package/dist/server/modules/butler/butler-follow-up-service.js +948 -0
  36. package/dist/server/modules/butler/butler-follow-up-service.js.map +1 -0
  37. package/dist/server/modules/butler/butler-inbox-service.d.ts +35 -0
  38. package/dist/server/modules/butler/butler-inbox-service.js +136 -0
  39. package/dist/server/modules/butler/butler-inbox-service.js.map +1 -0
  40. package/dist/server/modules/butler/butler-notification-service.d.ts +12 -0
  41. package/dist/server/modules/butler/butler-notification-service.js +45 -0
  42. package/dist/server/modules/butler/butler-notification-service.js.map +1 -0
  43. package/dist/server/modules/butler/butler-profile-service.d.ts +26 -0
  44. package/dist/server/modules/butler/butler-profile-service.js +529 -0
  45. package/dist/server/modules/butler/butler-profile-service.js.map +1 -0
  46. package/dist/server/modules/butler/butler-project-service.d.ts +48 -0
  47. package/dist/server/modules/butler/butler-project-service.js +253 -0
  48. package/dist/server/modules/butler/butler-project-service.js.map +1 -0
  49. package/dist/server/modules/butler/butler-session-service.d.ts +79 -0
  50. package/dist/server/modules/butler/butler-session-service.js +503 -0
  51. package/dist/server/modules/butler/butler-session-service.js.map +1 -0
  52. package/dist/server/modules/butler/butler-session-summary-service.d.ts +55 -0
  53. package/dist/server/modules/butler/butler-session-summary-service.js +382 -0
  54. package/dist/server/modules/butler/butler-session-summary-service.js.map +1 -0
  55. package/dist/server/modules/butler/context-aggregator.d.ts +187 -0
  56. package/dist/server/modules/butler/context-aggregator.js +807 -0
  57. package/dist/server/modules/butler/context-aggregator.js.map +1 -0
  58. package/dist/server/modules/butler/instruction-adapter.d.ts +28 -0
  59. package/dist/server/modules/butler/instruction-adapter.js +101 -0
  60. package/dist/server/modules/butler/instruction-adapter.js.map +1 -0
  61. package/dist/server/modules/butler/patrol-execution-service.d.ts +47 -0
  62. package/dist/server/modules/butler/patrol-execution-service.js +347 -0
  63. package/dist/server/modules/butler/patrol-execution-service.js.map +1 -0
  64. package/dist/server/modules/butler/patrol-plan-service.d.ts +54 -0
  65. package/dist/server/modules/butler/patrol-plan-service.js +272 -0
  66. package/dist/server/modules/butler/patrol-plan-service.js.map +1 -0
  67. package/dist/server/modules/butler/patrol-run-service.d.ts +60 -0
  68. package/dist/server/modules/butler/patrol-run-service.js +185 -0
  69. package/dist/server/modules/butler/patrol-run-service.js.map +1 -0
  70. package/dist/server/modules/butler/patrol-scheduler.d.ts +36 -0
  71. package/dist/server/modules/butler/patrol-scheduler.js +99 -0
  72. package/dist/server/modules/butler/patrol-scheduler.js.map +1 -0
  73. package/dist/server/modules/butler/project-memory-service.d.ts +30 -0
  74. package/dist/server/modules/butler/project-memory-service.js +103 -0
  75. package/dist/server/modules/butler/project-memory-service.js.map +1 -0
  76. package/dist/server/modules/butler/provider-adapter-registry.d.ts +61 -0
  77. package/dist/server/modules/butler/provider-adapter-registry.js +430 -0
  78. package/dist/server/modules/butler/provider-adapter-registry.js.map +1 -0
  79. package/dist/server/modules/butler/session-summary-instruction-adapter.d.ts +28 -0
  80. package/dist/server/modules/butler/session-summary-instruction-adapter.js +79 -0
  81. package/dist/server/modules/butler/session-summary-instruction-adapter.js.map +1 -0
  82. package/dist/server/modules/butler/session-summary-scheduler.d.ts +23 -0
  83. package/dist/server/modules/butler/session-summary-scheduler.js +57 -0
  84. package/dist/server/modules/butler/session-summary-scheduler.js.map +1 -0
  85. package/dist/server/modules/butler/verification-run-service.d.ts +73 -0
  86. package/dist/server/modules/butler/verification-run-service.js +633 -0
  87. package/dist/server/modules/butler/verification-run-service.js.map +1 -0
  88. package/dist/server/modules/preferences/profile-service.js +8 -2
  89. package/dist/server/modules/preferences/profile-service.js.map +1 -1
  90. package/dist/server/modules/sessions/claude-runtime-helper-process.js +1 -1
  91. package/dist/server/modules/sessions/claude-runtime-helper-process.js.map +1 -1
  92. package/dist/server/modules/sessions/codex-app-server-helper-client.d.ts +5 -1
  93. package/dist/server/modules/sessions/codex-app-server-helper-client.js +10 -2
  94. package/dist/server/modules/sessions/codex-app-server-helper-client.js.map +1 -1
  95. package/dist/server/modules/sessions/session-controller.d.ts +3 -1
  96. package/dist/server/modules/sessions/session-controller.js +11 -2
  97. package/dist/server/modules/sessions/session-controller.js.map +1 -1
  98. package/dist/server/modules/sessions/session-history-service.d.ts +14 -1
  99. package/dist/server/modules/sessions/session-history-service.js +291 -30
  100. package/dist/server/modules/sessions/session-history-service.js.map +1 -1
  101. package/dist/server/modules/sessions/session-live-runtime-service.d.ts +25 -2
  102. package/dist/server/modules/sessions/session-live-runtime-service.js +526 -158
  103. package/dist/server/modules/sessions/session-live-runtime-service.js.map +1 -1
  104. package/dist/server/modules/sessions/session-provider-error-mapper.js +28 -0
  105. package/dist/server/modules/sessions/session-provider-error-mapper.js.map +1 -1
  106. package/dist/server/modules/workbench/workbench-service.d.ts +7 -1
  107. package/dist/server/modules/workbench/workbench-service.js +31 -7
  108. package/dist/server/modules/workbench/workbench-service.js.map +1 -1
  109. package/dist/server/routes/butler.d.ts +3 -0
  110. package/dist/server/routes/butler.js +54 -0
  111. package/dist/server/routes/butler.js.map +1 -0
  112. package/dist/server/server/create-server.d.ts +61 -0
  113. package/dist/server/server/create-server.js +148 -4
  114. package/dist/server/server/create-server.js.map +1 -1
  115. package/dist/server/storage/repositories/butler-control-event-repository.d.ts +8 -0
  116. package/dist/server/storage/repositories/butler-control-event-repository.js +78 -0
  117. package/dist/server/storage/repositories/butler-control-event-repository.js.map +1 -0
  118. package/dist/server/storage/repositories/butler-control-session-repository.d.ts +11 -0
  119. package/dist/server/storage/repositories/butler-control-session-repository.js +86 -0
  120. package/dist/server/storage/repositories/butler-control-session-repository.js.map +1 -0
  121. package/dist/server/storage/repositories/butler-follow-up-task-repository.d.ts +16 -0
  122. package/dist/server/storage/repositories/butler-follow-up-task-repository.js +252 -0
  123. package/dist/server/storage/repositories/butler-follow-up-task-repository.js.map +1 -0
  124. package/dist/server/storage/repositories/butler-inbox-item-repository.d.ts +15 -0
  125. package/dist/server/storage/repositories/butler-inbox-item-repository.js +111 -0
  126. package/dist/server/storage/repositories/butler-inbox-item-repository.js.map +1 -0
  127. package/dist/server/storage/repositories/butler-notification-archive-repository.d.ts +9 -0
  128. package/dist/server/storage/repositories/butler-notification-archive-repository.js +48 -0
  129. package/dist/server/storage/repositories/butler-notification-archive-repository.js.map +1 -0
  130. package/dist/server/storage/repositories/butler-profile-repository.d.ts +9 -0
  131. package/dist/server/storage/repositories/butler-profile-repository.js +86 -0
  132. package/dist/server/storage/repositories/butler-profile-repository.js.map +1 -0
  133. package/dist/server/storage/repositories/butler-project-repository.d.ts +14 -0
  134. package/dist/server/storage/repositories/butler-project-repository.js +140 -0
  135. package/dist/server/storage/repositories/butler-project-repository.js.map +1 -0
  136. package/dist/server/storage/repositories/butler-session-repository.d.ts +11 -0
  137. package/dist/server/storage/repositories/butler-session-repository.js +106 -0
  138. package/dist/server/storage/repositories/butler-session-repository.js.map +1 -0
  139. package/dist/server/storage/repositories/butler-session-summary-state-repository.d.ts +8 -0
  140. package/dist/server/storage/repositories/butler-session-summary-state-repository.js +62 -0
  141. package/dist/server/storage/repositories/butler-session-summary-state-repository.js.map +1 -0
  142. package/dist/server/storage/repositories/patrol-plan-repository.d.ts +27 -0
  143. package/dist/server/storage/repositories/patrol-plan-repository.js +119 -0
  144. package/dist/server/storage/repositories/patrol-plan-repository.js.map +1 -0
  145. package/dist/server/storage/repositories/patrol-run-repository.d.ts +28 -0
  146. package/dist/server/storage/repositories/patrol-run-repository.js +121 -0
  147. package/dist/server/storage/repositories/patrol-run-repository.js.map +1 -0
  148. package/dist/server/storage/repositories/project-memory-repository.d.ts +15 -0
  149. package/dist/server/storage/repositories/project-memory-repository.js +150 -0
  150. package/dist/server/storage/repositories/project-memory-repository.js.map +1 -0
  151. package/dist/server/storage/repositories/session-checkpoint-repository.d.ts +9 -0
  152. package/dist/server/storage/repositories/session-checkpoint-repository.js +72 -0
  153. package/dist/server/storage/repositories/session-checkpoint-repository.js.map +1 -0
  154. package/dist/server/storage/repositories/session-message-origin-repository.d.ts +10 -0
  155. package/dist/server/storage/repositories/session-message-origin-repository.js +93 -0
  156. package/dist/server/storage/repositories/session-message-origin-repository.js.map +1 -0
  157. package/dist/server/storage/repositories/verification-run-repository.d.ts +29 -0
  158. package/dist/server/storage/repositories/verification-run-repository.js +125 -0
  159. package/dist/server/storage/repositories/verification-run-repository.js.map +1 -0
  160. package/dist/server/storage/sqlite/client.js +39 -0
  161. package/dist/server/storage/sqlite/client.js.map +1 -1
  162. package/dist/server/storage/sqlite/schema.sql +324 -0
  163. package/dist/server/types/domain.d.ts +261 -1
  164. package/dist/server/ws/ws-server.d.ts +2 -1
  165. package/dist/server/ws/ws-server.js +2 -1
  166. package/dist/server/ws/ws-server.js.map +1 -1
  167. package/node_modules/@codingns/session-sync-core/dist/index.d.ts +4 -0
  168. package/node_modules/@codingns/session-sync-core/dist/index.js +4 -0
  169. package/node_modules/@codingns/session-sync-core/dist/index.js.map +1 -1
  170. package/node_modules/@codingns/session-sync-core/dist/kimi-message-normalizer.d.ts +18 -0
  171. package/node_modules/@codingns/session-sync-core/dist/kimi-message-normalizer.js +659 -0
  172. package/node_modules/@codingns/session-sync-core/dist/kimi-message-normalizer.js.map +1 -0
  173. package/node_modules/@codingns/session-sync-core/dist/kimi-shared.d.ts +11 -0
  174. package/node_modules/@codingns/session-sync-core/dist/kimi-shared.js +72 -0
  175. package/node_modules/@codingns/session-sync-core/dist/kimi-shared.js.map +1 -0
  176. package/node_modules/@codingns/session-sync-core/dist/patch-builder.d.ts +8 -0
  177. package/node_modules/@codingns/session-sync-core/dist/patch-builder.js +89 -0
  178. package/node_modules/@codingns/session-sync-core/dist/patch-builder.js.map +1 -1
  179. package/node_modules/@codingns/session-sync-core/dist/providers/codex.js +4 -1
  180. package/node_modules/@codingns/session-sync-core/dist/providers/codex.js.map +1 -1
  181. package/node_modules/@codingns/session-sync-core/dist/providers/gemini.d.ts +41 -0
  182. package/node_modules/@codingns/session-sync-core/dist/providers/gemini.js +1086 -0
  183. package/node_modules/@codingns/session-sync-core/dist/providers/gemini.js.map +1 -0
  184. package/node_modules/@codingns/session-sync-core/dist/providers/kimi.d.ts +29 -0
  185. package/node_modules/@codingns/session-sync-core/dist/providers/kimi.js +578 -0
  186. package/node_modules/@codingns/session-sync-core/dist/providers/kimi.js.map +1 -0
  187. package/node_modules/@codingns/session-sync-core/dist/providers/opencode.js +2 -1
  188. package/node_modules/@codingns/session-sync-core/dist/providers/opencode.js.map +1 -1
  189. package/node_modules/@codingns/session-sync-core/dist/providers/utils.js +30 -2
  190. package/node_modules/@codingns/session-sync-core/dist/providers/utils.js.map +1 -1
  191. package/node_modules/@codingns/session-sync-core/dist/runtime/active-run-registry.d.ts +2 -0
  192. package/node_modules/@codingns/session-sync-core/dist/runtime/active-run-registry.js +43 -5
  193. package/node_modules/@codingns/session-sync-core/dist/runtime/active-run-registry.js.map +1 -1
  194. package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.d.ts +2 -0
  195. package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js +320 -69
  196. package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js.map +1 -1
  197. package/node_modules/@codingns/session-sync-core/dist/runtime/gemini-runtime.d.ts +21 -0
  198. package/node_modules/@codingns/session-sync-core/dist/runtime/gemini-runtime.js +537 -0
  199. package/node_modules/@codingns/session-sync-core/dist/runtime/gemini-runtime.js.map +1 -0
  200. package/node_modules/@codingns/session-sync-core/dist/runtime/kimi-runtime.d.ts +38 -0
  201. package/node_modules/@codingns/session-sync-core/dist/runtime/kimi-runtime.js +911 -0
  202. package/node_modules/@codingns/session-sync-core/dist/runtime/kimi-runtime.js.map +1 -0
  203. package/node_modules/@codingns/session-sync-core/dist/sqlite/node-sqlite.d.ts +6 -0
  204. package/node_modules/@codingns/session-sync-core/dist/sqlite/node-sqlite.js +9 -0
  205. package/node_modules/@codingns/session-sync-core/dist/sqlite/node-sqlite.js.map +1 -0
  206. package/node_modules/@codingns/session-sync-core/package.json +8 -0
  207. package/package.json +1 -1
  208. package/dist/public/assets/index-C5lu52cQ.css +0 -1
  209. package/dist/public/assets/index-WpdUo_Vs.js +0 -108
@@ -0,0 +1,475 @@
1
+ import { requireUserId } from "../preferences/common.js";
2
+ export class ButlerController {
3
+ butlerProfileService;
4
+ butlerControlSessionService;
5
+ butlerControlActionService;
6
+ butlerContextAggregator;
7
+ butlerFollowUpService;
8
+ butlerInboxService;
9
+ butlerNotificationService;
10
+ butlerProjectService;
11
+ butlerSessionService;
12
+ projectMemoryService;
13
+ patrolPlanService;
14
+ patrolRunService;
15
+ patrolExecutionService;
16
+ verificationRunService;
17
+ butlerActionContextService;
18
+ constructor(butlerProfileService, butlerControlSessionService, butlerControlActionService, butlerContextAggregator, butlerFollowUpService, butlerInboxService, butlerNotificationService, butlerProjectService, butlerSessionService, projectMemoryService, patrolPlanService, patrolRunService, patrolExecutionService, verificationRunService, butlerActionContextService) {
19
+ this.butlerProfileService = butlerProfileService;
20
+ this.butlerControlSessionService = butlerControlSessionService;
21
+ this.butlerControlActionService = butlerControlActionService;
22
+ this.butlerContextAggregator = butlerContextAggregator;
23
+ this.butlerFollowUpService = butlerFollowUpService;
24
+ this.butlerInboxService = butlerInboxService;
25
+ this.butlerNotificationService = butlerNotificationService;
26
+ this.butlerProjectService = butlerProjectService;
27
+ this.butlerSessionService = butlerSessionService;
28
+ this.projectMemoryService = projectMemoryService;
29
+ this.patrolPlanService = patrolPlanService;
30
+ this.patrolRunService = patrolRunService;
31
+ this.patrolExecutionService = patrolExecutionService;
32
+ this.verificationRunService = verificationRunService;
33
+ this.butlerActionContextService = butlerActionContextService;
34
+ }
35
+ getProfile = async (_request, reply) => {
36
+ const profile = this.butlerProfileService.getProfile();
37
+ reply.send({
38
+ initialized: profile !== null,
39
+ profile
40
+ });
41
+ };
42
+ initProfile = async (request, reply) => {
43
+ const profile = this.butlerProfileService.initProfile(request.body ?? {});
44
+ reply.status(201).send({
45
+ initialized: true,
46
+ profile
47
+ });
48
+ };
49
+ updateProfile = async (request, reply) => {
50
+ const profile = this.butlerProfileService.updateProfile(request.body ?? {});
51
+ reply.send({
52
+ initialized: true,
53
+ profile
54
+ });
55
+ };
56
+ getCurrentControlSession = async (request, reply) => {
57
+ reply.send({
58
+ controlSession: this.butlerControlSessionService.getCurrentSession(requireUserId(request))
59
+ });
60
+ };
61
+ listControlSessionEvents = async (_request, reply) => {
62
+ reply.send({
63
+ items: this.butlerControlActionService.listCurrentEvents()
64
+ });
65
+ };
66
+ resetControlSession = async (_request, reply) => {
67
+ this.butlerControlSessionService.resetCurrentSession();
68
+ reply.send({
69
+ controlSession: null
70
+ });
71
+ };
72
+ startControlSession = async (request, reply) => {
73
+ const controlSession = await this.butlerControlSessionService.startSession(requireUserId(request), request.body ?? {});
74
+ reply.status(201).send({ controlSession });
75
+ };
76
+ resumeControlSession = async (request, reply) => {
77
+ reply.send(await this.butlerControlSessionService.resumeCurrentSession(requireUserId(request)));
78
+ };
79
+ sendControlMessage = async (request, reply) => {
80
+ reply.status(202).send(await this.butlerControlSessionService.sendMessage(requireUserId(request), request.body ?? {}));
81
+ };
82
+ getOverview = async (request, reply) => {
83
+ reply.send({
84
+ overview: await this.butlerContextAggregator.getOverview(requireUserId(request))
85
+ });
86
+ };
87
+ listInboxItems = async (request, reply) => {
88
+ reply.send({
89
+ items: this.butlerInboxService.listItems({
90
+ workspaceId: request.query.workspaceId,
91
+ projectId: request.query.projectId,
92
+ status: request.query.status,
93
+ itemType: request.query.itemType
94
+ })
95
+ });
96
+ };
97
+ listFollowUpTasks = async (request, reply) => {
98
+ reply.send({
99
+ items: this.butlerFollowUpService.listTasks({
100
+ statuses: request.query.status ? [request.query.status] : undefined,
101
+ projectId: request.query.projectId,
102
+ sessionId: request.query.sessionId
103
+ })
104
+ });
105
+ };
106
+ createFollowUpTask = async (request, reply) => {
107
+ const task = await this.butlerFollowUpService.createTask(request.body ?? {}, requireUserId(request));
108
+ this.butlerActionContextService?.invalidateSessionActionContext(task.sessionId);
109
+ reply.status(201).send({
110
+ task
111
+ });
112
+ };
113
+ getFollowUpTask = async (request, reply) => {
114
+ reply.send({
115
+ task: this.butlerFollowUpService.getTask(request.params.taskId)
116
+ });
117
+ };
118
+ cancelFollowUpTask = async (request, reply) => {
119
+ const task = this.butlerFollowUpService.cancelTask(request.params.taskId, requireUserId(request));
120
+ this.butlerActionContextService?.invalidateSessionActionContext(task.sessionId);
121
+ reply.send({
122
+ task
123
+ });
124
+ };
125
+ createInboxItem = async (request, reply) => {
126
+ const item = this.butlerInboxService.createItem({
127
+ projectId: request.body.projectId,
128
+ itemType: request.body.itemType,
129
+ title: request.body.title,
130
+ content: request.body.content,
131
+ priority: request.body.priority,
132
+ status: request.body.status
133
+ });
134
+ reply.status(201).send({ item });
135
+ };
136
+ updateInboxItem = async (request, reply) => {
137
+ reply.send({
138
+ item: this.butlerInboxService.updateItem(request.params.itemId, {
139
+ projectId: request.body.projectId,
140
+ itemType: request.body.itemType,
141
+ title: request.body.title,
142
+ content: request.body.content,
143
+ priority: request.body.priority,
144
+ status: request.body.status
145
+ })
146
+ });
147
+ };
148
+ deleteInboxItem = async (request, reply) => {
149
+ this.butlerInboxService.deleteItem(request.params.itemId);
150
+ reply.status(204).send();
151
+ };
152
+ listNotificationArchives = async (request, reply) => {
153
+ reply.send({
154
+ items: this.butlerNotificationService.listArchivedNotifications(requireUserId(request))
155
+ });
156
+ };
157
+ updateNotificationArchive = async (request, reply) => {
158
+ const item = this.butlerNotificationService.setArchived(requireUserId(request), request.params.notificationId, request.body.archived === true);
159
+ reply.send({ item });
160
+ };
161
+ getContextSnapshot = async (request, reply) => {
162
+ reply.send({
163
+ snapshot: await this.butlerContextAggregator.getSnapshot(requireUserId(request))
164
+ });
165
+ };
166
+ getProjectContext = async (request, reply) => {
167
+ reply.send({
168
+ context: await this.butlerContextAggregator.getProjectContext(request.params.projectId, requireUserId(request))
169
+ });
170
+ };
171
+ searchSummaries = async (request, reply) => {
172
+ reply.send({
173
+ result: await this.butlerContextAggregator.searchSummaries(requireUserId(request), request.query.q ?? "", {
174
+ projectId: request.query.projectId?.trim() || null,
175
+ includeArchived: request.query.includeArchived === "true"
176
+ })
177
+ });
178
+ };
179
+ getSessionTarget = async (request, reply) => {
180
+ const sessionId = request.query.sessionId?.trim() ?? "";
181
+ const userId = requireUserId(request);
182
+ if (this.butlerActionContextService) {
183
+ const context = await this.butlerActionContextService.getSessionActionContext(sessionId, userId);
184
+ reply.send({
185
+ target: {
186
+ workspaceId: context.workspaceId,
187
+ project: context.project,
188
+ session: context.session
189
+ }
190
+ });
191
+ return;
192
+ }
193
+ const workspaceId = this.butlerSessionService.getSessionWorkspaceId(sessionId);
194
+ const project = this.butlerProjectService.resolveWorkspaceActionProject(workspaceId);
195
+ const target = await this.butlerSessionService.resolveActionTarget(project.id, sessionId, userId);
196
+ reply.send({
197
+ target: {
198
+ workspaceId: target.workspaceId,
199
+ project,
200
+ session: target.session
201
+ }
202
+ });
203
+ };
204
+ getSessionActionContext = async (request, reply) => {
205
+ const sessionId = request.query.sessionId?.trim() ?? "";
206
+ const userId = requireUserId(request);
207
+ if (this.butlerActionContextService) {
208
+ reply.send({
209
+ context: await this.butlerActionContextService.getSessionActionContext(sessionId, userId)
210
+ });
211
+ return;
212
+ }
213
+ const workspaceId = this.butlerSessionService.getSessionWorkspaceId(sessionId);
214
+ const project = this.butlerProjectService.resolveWorkspaceActionProject(workspaceId);
215
+ const target = await this.butlerSessionService.resolveActionTarget(project.id, sessionId, userId);
216
+ const latestFollowUpTask = this.butlerFollowUpService.listTasks({
217
+ sessionId,
218
+ limit: 1
219
+ })[0] ?? null;
220
+ reply.send({
221
+ context: {
222
+ workspaceId: target.workspaceId,
223
+ project: {
224
+ id: project.id,
225
+ workspaceId: project.workspaceId,
226
+ name: project.name,
227
+ repoRoot: project.repoRoot,
228
+ lifecycleStatus: project.lifecycleStatus,
229
+ riskLevel: project.riskLevel
230
+ },
231
+ session: target.session,
232
+ latestFollowUpTask
233
+ }
234
+ });
235
+ };
236
+ openProjectAction = async (request, reply) => {
237
+ const projectId = request.body.projectId?.trim() ?? "";
238
+ reply.send({
239
+ result: await this.butlerControlActionService.openProject(projectId, requireUserId(request))
240
+ });
241
+ };
242
+ resumeProjectSessionAction = async (request, reply) => {
243
+ reply.send({
244
+ result: await this.butlerControlActionService.resumeProjectSession({
245
+ projectId: request.body.projectId?.trim() ?? "",
246
+ butlerSessionId: request.body.butlerSessionId?.trim() ?? ""
247
+ }, requireUserId(request))
248
+ });
249
+ };
250
+ startPatrolAction = async (request, reply) => {
251
+ reply.status(201).send({
252
+ result: await this.butlerControlActionService.startPatrol({
253
+ projectId: request.body.projectId?.trim() ?? "",
254
+ planId: request.body.planId?.trim() || null,
255
+ triggerRef: request.body.triggerRef?.trim() || null,
256
+ butlerSessionId: request.body.butlerSessionId?.trim() || null,
257
+ suggestions: request.body.suggestions
258
+ })
259
+ });
260
+ };
261
+ startVerificationAction = async (request, reply) => {
262
+ reply.status(201).send({
263
+ result: await this.butlerControlActionService.startVerification({
264
+ projectId: request.body.projectId?.trim() ?? "",
265
+ verificationType: request.body.verificationType,
266
+ targetRef: request.body.targetRef?.trim() || null,
267
+ butlerSessionId: request.body.butlerSessionId?.trim() || null,
268
+ sourcePatrolRunId: request.body.sourcePatrolRunId?.trim() || null,
269
+ spec: request.body.spec
270
+ })
271
+ });
272
+ };
273
+ listProjects = async (request, reply) => {
274
+ reply.send({
275
+ items: this.butlerProjectService.list({
276
+ workspaceId: request.query.workspaceId?.trim() || undefined,
277
+ lifecycleStatus: request.query.status,
278
+ riskLevel: request.query.riskLevel
279
+ })
280
+ });
281
+ };
282
+ createProject = async (request, reply) => {
283
+ const project = this.butlerProjectService.create({
284
+ workspaceId: request.body.workspaceId?.trim() || "",
285
+ name: request.body.name?.trim() || "",
286
+ repoRoot: request.body.repoRoot?.trim() || "",
287
+ defaultProvider: request.body.defaultProvider?.trim() || null,
288
+ approvalMode: request.body.approvalMode,
289
+ config: request.body.config
290
+ });
291
+ reply.status(201).send({ project });
292
+ };
293
+ getProject = async (request, reply) => {
294
+ reply.send({
295
+ project: this.butlerProjectService.getById(request.params.projectId)
296
+ });
297
+ };
298
+ updateProject = async (request, reply) => {
299
+ reply.send({
300
+ project: this.butlerProjectService.update(request.params.projectId, {
301
+ name: request.body.name?.trim(),
302
+ defaultProvider: request.body.defaultProvider === undefined
303
+ ? undefined
304
+ : request.body.defaultProvider?.trim() || null,
305
+ approvalMode: request.body.approvalMode,
306
+ lifecycleStatus: request.body.lifecycleStatus,
307
+ riskLevel: request.body.riskLevel,
308
+ config: request.body.config
309
+ })
310
+ });
311
+ };
312
+ getProjectOverview = async (request, reply) => {
313
+ const userId = requireUserId(request);
314
+ await this.butlerSessionService.ensureProjectSessionsSynced(request.params.projectId, userId);
315
+ const overview = this.butlerProjectService.getOverview(request.params.projectId);
316
+ reply.send({
317
+ ...overview,
318
+ activeSessions: this.butlerSessionService.listByProject(request.params.projectId, userId)
319
+ });
320
+ };
321
+ listProjectSessions = async (request, reply) => {
322
+ await this.butlerSessionService.ensureProjectSessionsSynced(request.params.projectId, requireUserId(request));
323
+ reply.send({
324
+ items: this.butlerSessionService.listByProject(request.params.projectId, requireUserId(request))
325
+ });
326
+ };
327
+ importProjectSession = async (request, reply) => {
328
+ const session = this.butlerSessionService.importSession(request.params.projectId, {
329
+ sessionId: request.body.sessionId?.trim() || "",
330
+ role: request.body.role,
331
+ ownershipMode: request.body.ownershipMode
332
+ }, requireUserId(request));
333
+ reply.status(201).send({ session });
334
+ };
335
+ startProjectSession = async (request, reply) => {
336
+ const session = await this.butlerSessionService.startSession(request.params.projectId, {
337
+ providerId: request.body.providerId,
338
+ role: request.body.role,
339
+ ownershipMode: request.body.ownershipMode,
340
+ content: request.body.content,
341
+ model: request.body.model,
342
+ reasoningLevel: request.body.reasoningLevel,
343
+ permissionMode: request.body.permissionMode
344
+ }, requireUserId(request));
345
+ reply.status(201).send({ session });
346
+ };
347
+ captureProjectSessionSnapshot = async (request, reply) => {
348
+ const session = this.butlerSessionService.captureSessionSnapshot(request.params.projectId, request.params.butlerSessionId, requireUserId(request), {
349
+ sourceKind: request.body?.sourceKind
350
+ });
351
+ reply.status(201).send({ session });
352
+ };
353
+ resumeProjectSession = async (request, reply) => {
354
+ const resumed = await this.butlerSessionService.resumeSession(request.params.projectId, request.params.butlerSessionId, requireUserId(request));
355
+ reply.send(resumed);
356
+ };
357
+ listProjectMemories = async (request, reply) => {
358
+ reply.send({
359
+ items: this.projectMemoryService.listMemories(request.params.projectId, {
360
+ status: request.query.status,
361
+ memoryType: request.query.memoryType,
362
+ scopePath: request.query.scopePath?.trim() || undefined,
363
+ query: request.query.q?.trim() || undefined
364
+ })
365
+ });
366
+ };
367
+ createProjectMemory = async (request, reply) => {
368
+ const memory = this.projectMemoryService.createMemory(request.params.projectId, {
369
+ title: request.body.title,
370
+ scopePath: request.body.scopePath?.trim() || null,
371
+ content: request.body.content,
372
+ tags: request.body.tags,
373
+ confidence: request.body.confidence,
374
+ status: request.body.status,
375
+ memoryType: request.body.memoryType,
376
+ evidence: request.body.evidence
377
+ });
378
+ reply.status(201).send({ memory });
379
+ };
380
+ updateProjectMemory = async (request, reply) => {
381
+ reply.send({
382
+ memory: this.projectMemoryService.updateMemory(request.params.projectId, request.params.memoryId, {
383
+ title: request.body.title,
384
+ scopePath: request.body.scopePath === undefined ? undefined : request.body.scopePath?.trim() || null,
385
+ content: request.body.content,
386
+ tags: request.body.tags,
387
+ confidence: request.body.confidence,
388
+ status: request.body.status,
389
+ memoryType: request.body.memoryType,
390
+ evidence: request.body.evidence
391
+ })
392
+ });
393
+ };
394
+ listPatrolPlans = async (request, reply) => {
395
+ reply.send({
396
+ items: this.patrolPlanService.listPlans(request.params.projectId, {
397
+ enabled: request.query.enabled === undefined
398
+ ? undefined
399
+ : request.query.enabled === "true",
400
+ executionMode: request.query.executionMode
401
+ })
402
+ });
403
+ };
404
+ createPatrolPlan = async (request, reply) => {
405
+ const plan = this.patrolPlanService.createPlan(request.params.projectId, {
406
+ name: request.body.name?.trim() || "",
407
+ triggerType: request.body.triggerType ?? "manual",
408
+ triggerConfig: request.body.triggerConfig ?? {},
409
+ executionMode: request.body.executionMode ?? "readonly",
410
+ patrolScope: request.body.patrolScope ?? {},
411
+ enabled: request.body.enabled
412
+ });
413
+ reply.status(201).send({ plan });
414
+ };
415
+ updatePatrolPlan = async (request, reply) => {
416
+ reply.send({
417
+ plan: this.patrolPlanService.updatePlan(request.params.projectId, request.params.planId, {
418
+ name: request.body.name,
419
+ triggerConfig: request.body.triggerConfig,
420
+ executionMode: request.body.executionMode,
421
+ patrolScope: request.body.patrolScope,
422
+ enabled: request.body.enabled,
423
+ lastScheduledAt: request.body.lastScheduledAt ?? undefined,
424
+ nextRunAt: request.body.nextRunAt ?? undefined
425
+ })
426
+ });
427
+ };
428
+ listPatrolRuns = async (request, reply) => {
429
+ reply.send({
430
+ items: this.patrolRunService.listRuns(request.params.projectId, {
431
+ status: request.query.status
432
+ })
433
+ });
434
+ };
435
+ startPatrolRun = async (request, reply) => {
436
+ const queuedRun = this.patrolRunService.startRun(request.params.projectId, {
437
+ planId: request.body.planId?.trim() || null,
438
+ triggeredBy: request.body.triggeredBy,
439
+ triggerRef: request.body.triggerRef?.trim() || null,
440
+ butlerSessionId: request.body.butlerSessionId?.trim() || null,
441
+ suggestions: request.body.suggestions
442
+ });
443
+ const run = await this.patrolExecutionService.executeQueuedRun(queuedRun.id);
444
+ reply.status(201).send({ run });
445
+ };
446
+ getPatrolRun = async (request, reply) => {
447
+ reply.send({
448
+ run: this.patrolRunService.getRun(request.params.projectId, request.params.runId)
449
+ });
450
+ };
451
+ listVerificationRuns = async (request, reply) => {
452
+ reply.send({
453
+ items: this.verificationRunService.listRuns(request.params.projectId, {
454
+ status: request.query.status,
455
+ verificationType: request.query.verificationType
456
+ })
457
+ });
458
+ };
459
+ startVerificationRun = async (request, reply) => {
460
+ const run = await this.verificationRunService.startRun(request.params.projectId, {
461
+ verificationType: request.body.verificationType,
462
+ targetRef: request.body.targetRef?.trim() || null,
463
+ butlerSessionId: request.body.butlerSessionId?.trim() || null,
464
+ sourcePatrolRunId: request.body.sourcePatrolRunId?.trim() || null,
465
+ spec: request.body.spec
466
+ });
467
+ reply.status(201).send({ run });
468
+ };
469
+ getVerificationRun = async (request, reply) => {
470
+ reply.send({
471
+ run: this.verificationRunService.getRun(request.params.projectId, request.params.verificationId)
472
+ });
473
+ };
474
+ }
475
+ //# sourceMappingURL=butler-controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"butler-controller.js","sourceRoot":"","sources":["../../../../src/modules/butler/butler-controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import type { ButlerProject, SessionRunningState } from "../../types/domain.js";
2
+ export type ButlerFollowUpEvaluationDecision = "continue" | "waiting_user" | "completed" | "failed";
3
+ export interface ButlerFollowUpEvaluationInstructionEnvelope {
4
+ providerId: "codex" | "claude-code";
5
+ outputContractVersion: string;
6
+ prompt: string;
7
+ metadata: {
8
+ projectId: string;
9
+ projectName: string;
10
+ sessionId: string;
11
+ butlerSessionId: string;
12
+ transcriptLineCount: number;
13
+ };
14
+ }
15
+ export interface BuildButlerFollowUpEvaluationInstructionInput {
16
+ providerId: "codex" | "claude-code";
17
+ project: ButlerProject;
18
+ sessionId: string;
19
+ butlerSessionId: string;
20
+ sessionTitle: string | null;
21
+ objective: string;
22
+ completionCriteria: string;
23
+ runningState: SessionRunningState | null;
24
+ messageCount: number;
25
+ lastMessageAt: string | null;
26
+ autoContinueCount: number;
27
+ maxAutoContinueCount: number;
28
+ lastAutomationSummary: string | null;
29
+ latestAssistantText: string | null;
30
+ transcriptLines: string[];
31
+ }
32
+ export declare class ButlerFollowUpEvaluationInstructionAdapter {
33
+ buildInstruction(input: BuildButlerFollowUpEvaluationInstructionInput): ButlerFollowUpEvaluationInstructionEnvelope;
34
+ }
@@ -0,0 +1,77 @@
1
+ const OUTPUT_CONTRACT_VERSION = "butler-follow-up-evaluation-v1";
2
+ export class ButlerFollowUpEvaluationInstructionAdapter {
3
+ buildInstruction(input) {
4
+ const transcript = input.transcriptLines.length > 0
5
+ ? input.transcriptLines.join("\n")
6
+ : "- 最近没有可用消息,请保守判断,并明确说明缺口。";
7
+ const prompt = [
8
+ "你现在是代码助手的后台跟进评估器,不负责和用户闲聊,也不负责直接开发。",
9
+ "你的唯一职责是判断:当前开发会话是否已经真正完成用户目标,是否必须等用户决定,还是应该继续自动推动。",
10
+ "禁止用套话凑结论,禁止只看最后一句就草率下判断。要结合目标、当前运行态和最近消息整体判断。",
11
+ "如果目标或上下文里提到了 spec,完成标准只能按 spec 明确要求的必做项判断。",
12
+ "不要把“建议下一步”“最佳实践”“可选优化”“顺手补一下”这类建议项扩成新的开发范围。",
13
+ "如果没有 spec,就先从目标和最近消息里归纳一句当前核心任务,后续只围绕这个核心任务判断是否完成。",
14
+ "除非目标本身明确要求,否则重构、补测试、补体验优化、顺手整理代码都不是必须完成条件。",
15
+ "如果信息不足,可以明确说信息不足;但只有在真的缺关键决策信息时,才返回 waiting_user。",
16
+ "如果已经达到预设的自动推进轮数上限,你不能再通过新增目标来继续扩会话范围。",
17
+ "",
18
+ "判断标准:",
19
+ "1. 只有目标已经实质完成,而且满足预设结束条件,才返回 completed;不能把建议项没做当成未完成。",
20
+ "2. 只有确实需要用户做选择、补业务信息、确认高风险操作,或者已经达到自动推进轮数上限时,才返回 waiting_user。",
21
+ "3. 只要目标还没完成、而且继续推进不会越权,就返回 continue,并给出下一条要发给开发会话的明确中文指令。",
22
+ "4. 只有当前上下文已经无法可靠判断,或者会话明显坏掉到无法继续时,才返回 failed。",
23
+ "",
24
+ "输出要求:",
25
+ "- 全部使用中文。",
26
+ "- 先写一小段中文结论,控制在 2 句内。",
27
+ "- 最后必须补一个 JSON 代码块,字段必须完整。",
28
+ "- decision 只能是 continue / waiting_user / completed / failed。",
29
+ "- continuePrompt 必须是要发给开发会话的下一条中文消息;decision 不是 continue 时填 null。",
30
+ "- waitingReason 只在 decision=waiting_user 时填写,其它情况填 null。",
31
+ "",
32
+ `项目名称:${input.project.name}`,
33
+ `项目路径:${input.project.repoRoot}`,
34
+ `代码助手会话 ID:${input.butlerSessionId}`,
35
+ `真实会话 ID:${input.sessionId}`,
36
+ `会话标题:${input.sessionTitle ?? "未命名会话"}`,
37
+ `用户目标:${input.objective}`,
38
+ `预设结束条件:${input.completionCriteria}`,
39
+ `当前运行态:${input.runningState ?? "未知"}`,
40
+ `当前消息数:${input.messageCount}`,
41
+ `最近消息时间:${input.lastMessageAt ?? "未知"}`,
42
+ `历史自动推进次数:${input.autoContinueCount}`,
43
+ `预设最多自动推进轮数:${input.maxAutoContinueCount}`,
44
+ `剩余自动推进轮数:${Math.max(input.maxAutoContinueCount - input.autoContinueCount, 0)}`,
45
+ `上一轮自动化摘要:${input.lastAutomationSummary?.trim() || "无"}`,
46
+ `最近一条助手结论:${input.latestAssistantText?.trim() || "无"}`,
47
+ "",
48
+ "最近消息摘录:",
49
+ transcript,
50
+ "",
51
+ "最终输出格式:",
52
+ "```json",
53
+ JSON.stringify({
54
+ decision: "continue",
55
+ summary: "一句中文结论",
56
+ waitingReason: null,
57
+ continuePrompt: "继续未完成的开发工作,先核对当前目标还有哪些没做完,然后直接补齐,不要只做总结。",
58
+ riskLevel: "medium"
59
+ }, null, 2),
60
+ "```",
61
+ "riskLevel 只能是 low / medium / high。"
62
+ ].join("\n");
63
+ return {
64
+ providerId: input.providerId,
65
+ outputContractVersion: OUTPUT_CONTRACT_VERSION,
66
+ prompt,
67
+ metadata: {
68
+ projectId: input.project.id,
69
+ projectName: input.project.name,
70
+ sessionId: input.sessionId,
71
+ butlerSessionId: input.butlerSessionId,
72
+ transcriptLineCount: input.transcriptLines.length
73
+ }
74
+ };
75
+ }
76
+ }
77
+ //# sourceMappingURL=butler-follow-up-evaluation-instruction-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"butler-follow-up-evaluation-instruction-adapter.js","sourceRoot":"","sources":["../../../../src/modules/butler/butler-follow-up-evaluation-instruction-adapter.ts"],"names":[],"mappings":"AAEA,MAAM,uBAAuB,GAAG,gCAAgC,CAAC;AAuCjE,MAAM,OAAO,0CAA0C;IACrD,gBAAgB,CACd,KAAoD;QAEpD,MAAM,UAAU,GACd,KAAK,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC;YAC9B,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;YAClC,CAAC,CAAC,2BAA2B,CAAC;QAClC,MAAM,MAAM,GAAG;YACb,qCAAqC;YACrC,oDAAoD;YACpD,+CAA+C;YAC/C,4CAA4C;YAC5C,6CAA6C;YAC7C,oDAAoD;YACpD,4CAA4C;YAC5C,mDAAmD;YACnD,uCAAuC;YACvC,EAAE;YACF,OAAO;YACP,uDAAuD;YACvD,gEAAgE;YAChE,2DAA2D;YAC3D,+CAA+C;YAC/C,EAAE;YACF,OAAO;YACP,WAAW;YACX,uBAAuB;YACvB,4BAA4B;YAC5B,8DAA8D;YAC9D,mEAAmE;YACnE,0DAA0D;YAC1D,EAAE;YACF,QAAQ,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE;YAC5B,QAAQ,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE;YAChC,aAAa,KAAK,CAAC,eAAe,EAAE;YACpC,WAAW,KAAK,CAAC,SAAS,EAAE;YAC5B,QAAQ,KAAK,CAAC,YAAY,IAAI,OAAO,EAAE;YACvC,QAAQ,KAAK,CAAC,SAAS,EAAE;YACzB,UAAU,KAAK,CAAC,kBAAkB,EAAE;YACpC,SAAS,KAAK,CAAC,YAAY,IAAI,IAAI,EAAE;YACrC,SAAS,KAAK,CAAC,YAAY,EAAE;YAC7B,UAAU,KAAK,CAAC,aAAa,IAAI,IAAI,EAAE;YACvC,YAAY,KAAK,CAAC,iBAAiB,EAAE;YACrC,cAAc,KAAK,CAAC,oBAAoB,EAAE;YAC1C,YAAY,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,oBAAoB,GAAG,KAAK,CAAC,iBAAiB,EAAE,CAAC,CAAC,EAAE;YAC/E,YAAY,KAAK,CAAC,qBAAqB,EAAE,IAAI,EAAE,IAAI,GAAG,EAAE;YACxD,YAAY,KAAK,CAAC,mBAAmB,EAAE,IAAI,EAAE,IAAI,GAAG,EAAE;YACtD,EAAE;YACF,SAAS;YACT,UAAU;YACV,EAAE;YACF,SAAS;YACT,SAAS;YACT,IAAI,CAAC,SAAS,CACZ;gBACE,QAAQ,EAAE,UAAU;gBACpB,OAAO,EAAE,QAAQ;gBACjB,aAAa,EAAE,IAAI;gBACnB,cAAc,EAAE,0CAA0C;gBAC1D,SAAS,EAAE,QAAQ;aACpB,EACD,IAAI,EACJ,CAAC,CACF;YACD,KAAK;YACL,oCAAoC;SACrC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,OAAO;YACL,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,qBAAqB,EAAE,uBAAuB;YAC9C,MAAM;YACN,QAAQ,EAAE;gBACR,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE;gBAC3B,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI;gBAC/B,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,eAAe,EAAE,KAAK,CAAC,eAAe;gBACtC,mBAAmB,EAAE,KAAK,CAAC,eAAe,CAAC,MAAM;aAClD;SACF,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,23 @@
1
+ import type { ButlerFollowUpService } from "./butler-follow-up-service.js";
2
+ interface ButlerFollowUpSchedulerLogger {
3
+ error(message: string, detail?: unknown): void;
4
+ }
5
+ interface ButlerFollowUpSchedulerOptions {
6
+ intervalMs?: number;
7
+ now?: () => string;
8
+ logger?: ButlerFollowUpSchedulerLogger;
9
+ }
10
+ export declare class ButlerFollowUpScheduler {
11
+ private readonly butlerFollowUpService;
12
+ private readonly intervalMs;
13
+ private readonly now;
14
+ private readonly logger;
15
+ private timer;
16
+ private ticking;
17
+ constructor(butlerFollowUpService: Pick<ButlerFollowUpService, "runDueTasks">, options?: ButlerFollowUpSchedulerOptions);
18
+ start(): void;
19
+ dispose(): Promise<void>;
20
+ runOnce(): Promise<void>;
21
+ private tick;
22
+ }
23
+ export {};