@jingyi0605/codingns 0.3.6 → 0.4.0

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 (185) hide show
  1. package/README.md +3 -0
  2. package/bin/codingns.mjs +489 -1
  3. package/dist/public/assets/{TerminalPage-D00S4KM6.js → TerminalPage-6jHZV9Mh.js} +17 -17
  4. package/dist/public/assets/index-CSVhg7I8.js +123 -0
  5. package/dist/public/assets/index-Ce1VX19m.css +1 -0
  6. package/dist/public/index.html +2 -2
  7. package/dist/server/modules/assistant-capability/assistant-capability-controller.d.ts +173 -0
  8. package/dist/server/modules/assistant-capability/assistant-capability-controller.js +307 -0
  9. package/dist/server/modules/assistant-capability/assistant-capability-controller.js.map +1 -1
  10. package/dist/server/modules/assistant-capability/assistant-capability-service.d.ts +199 -2
  11. package/dist/server/modules/assistant-capability/assistant-capability-service.js +565 -3
  12. package/dist/server/modules/assistant-capability/assistant-capability-service.js.map +1 -1
  13. package/dist/server/modules/butler/assistant-automation-service.d.ts +110 -0
  14. package/dist/server/modules/butler/assistant-automation-service.js +786 -0
  15. package/dist/server/modules/butler/assistant-automation-service.js.map +1 -0
  16. package/dist/server/modules/butler/assistant-automation-trigger.d.ts +94 -0
  17. package/dist/server/modules/butler/assistant-automation-trigger.js +400 -0
  18. package/dist/server/modules/butler/assistant-automation-trigger.js.map +1 -0
  19. package/dist/server/modules/butler/assistant-sandbox-service.d.ts +55 -0
  20. package/dist/server/modules/butler/assistant-sandbox-service.js +266 -0
  21. package/dist/server/modules/butler/assistant-sandbox-service.js.map +1 -0
  22. package/dist/server/modules/butler/butler-action-context-service.d.ts +4 -1
  23. package/dist/server/modules/butler/butler-action-context-service.js +8 -2
  24. package/dist/server/modules/butler/butler-action-context-service.js.map +1 -1
  25. package/dist/server/modules/butler/butler-control-session-service.d.ts +8 -1
  26. package/dist/server/modules/butler/butler-control-session-service.js +154 -40
  27. package/dist/server/modules/butler/butler-control-session-service.js.map +1 -1
  28. package/dist/server/modules/butler/butler-control-timer-scheduler.d.ts +32 -0
  29. package/dist/server/modules/butler/butler-control-timer-scheduler.js +93 -0
  30. package/dist/server/modules/butler/butler-control-timer-scheduler.js.map +1 -0
  31. package/dist/server/modules/butler/butler-control-timer-service.d.ts +42 -0
  32. package/dist/server/modules/butler/butler-control-timer-service.js +132 -0
  33. package/dist/server/modules/butler/butler-control-timer-service.js.map +1 -0
  34. package/dist/server/modules/butler/butler-controller.d.ts +42 -2
  35. package/dist/server/modules/butler/butler-controller.js +79 -12
  36. package/dist/server/modules/butler/butler-controller.js.map +1 -1
  37. package/dist/server/modules/butler/butler-follow-up-service.d.ts +9 -1
  38. package/dist/server/modules/butler/butler-follow-up-service.js +273 -181
  39. package/dist/server/modules/butler/butler-follow-up-service.js.map +1 -1
  40. package/dist/server/modules/butler/butler-inbox-analysis-service.d.ts +4 -1
  41. package/dist/server/modules/butler/butler-inbox-analysis-service.js +18 -4
  42. package/dist/server/modules/butler/butler-inbox-analysis-service.js.map +1 -1
  43. package/dist/server/modules/butler/butler-profile-service.js +2 -5
  44. package/dist/server/modules/butler/butler-profile-service.js.map +1 -1
  45. package/dist/server/modules/butler/butler-project-service.d.ts +3 -1
  46. package/dist/server/modules/butler/butler-project-service.js +7 -1
  47. package/dist/server/modules/butler/butler-project-service.js.map +1 -1
  48. package/dist/server/modules/butler/butler-session-service.d.ts +3 -1
  49. package/dist/server/modules/butler/butler-session-service.js +12 -1
  50. package/dist/server/modules/butler/butler-session-service.js.map +1 -1
  51. package/dist/server/modules/butler/butler-session-summary-service.js +2 -1
  52. package/dist/server/modules/butler/butler-session-summary-service.js.map +1 -1
  53. package/dist/server/modules/butler/butler-workspace-context.d.ts +3 -0
  54. package/dist/server/modules/butler/butler-workspace-context.js +164 -44
  55. package/dist/server/modules/butler/butler-workspace-context.js.map +1 -1
  56. package/dist/server/modules/butler/patrol-execution-service.js +2 -1
  57. package/dist/server/modules/butler/patrol-execution-service.js.map +1 -1
  58. package/dist/server/modules/butler/provider-adapter-registry.d.ts +3 -0
  59. package/dist/server/modules/butler/provider-adapter-registry.js +18 -1
  60. package/dist/server/modules/butler/provider-adapter-registry.js.map +1 -1
  61. package/dist/server/modules/butler/verification-run-service.d.ts +9 -2
  62. package/dist/server/modules/butler/verification-run-service.js +188 -34
  63. package/dist/server/modules/butler/verification-run-service.js.map +1 -1
  64. package/dist/server/modules/debug-target/debug-target-controller.js +1 -1
  65. package/dist/server/modules/debug-target/debug-target-controller.js.map +1 -1
  66. package/dist/server/modules/debug-target/debug-target-service.d.ts +7 -2
  67. package/dist/server/modules/debug-target/debug-target-service.js +563 -100
  68. package/dist/server/modules/debug-target/debug-target-service.js.map +1 -1
  69. package/dist/server/modules/git/git-command-helper-client.d.ts +1 -0
  70. package/dist/server/modules/git/git-command-helper-client.js +19 -26
  71. package/dist/server/modules/git/git-command-helper-client.js.map +1 -1
  72. package/dist/server/modules/git/git-command-runner.js +19 -1
  73. package/dist/server/modules/git/git-command-runner.js.map +1 -1
  74. package/dist/server/modules/preferences/profile-service.d.ts +3 -1
  75. package/dist/server/modules/preferences/profile-service.js +74 -3
  76. package/dist/server/modules/preferences/profile-service.js.map +1 -1
  77. package/dist/server/modules/provider/provider-discovery-helper-client.d.ts +5 -3
  78. package/dist/server/modules/provider/provider-discovery-helper-client.js +129 -43
  79. package/dist/server/modules/provider/provider-discovery-helper-client.js.map +1 -1
  80. package/dist/server/modules/provider/provider-discovery-helper-process.js +44 -0
  81. package/dist/server/modules/provider/provider-discovery-helper-process.js.map +1 -1
  82. package/dist/server/modules/provider/provider-discovery-runtime.js +83 -3
  83. package/dist/server/modules/provider/provider-discovery-runtime.js.map +1 -1
  84. package/dist/server/modules/sessions/claude-runtime-helper-client.js +23 -1
  85. package/dist/server/modules/sessions/claude-runtime-helper-client.js.map +1 -1
  86. package/dist/server/modules/sessions/session-history-service.d.ts +7 -1
  87. package/dist/server/modules/sessions/session-history-service.js +251 -41
  88. package/dist/server/modules/sessions/session-history-service.js.map +1 -1
  89. package/dist/server/modules/sessions/session-live-runtime-service.d.ts +6 -0
  90. package/dist/server/modules/sessions/session-live-runtime-service.js +97 -11
  91. package/dist/server/modules/sessions/session-live-runtime-service.js.map +1 -1
  92. package/dist/server/modules/sessions/session-message-origin-utils.d.ts +12 -0
  93. package/dist/server/modules/sessions/session-message-origin-utils.js +45 -0
  94. package/dist/server/modules/sessions/session-message-origin-utils.js.map +1 -0
  95. package/dist/server/modules/sessions/session-permission-request-service.js +167 -0
  96. package/dist/server/modules/sessions/session-permission-request-service.js.map +1 -1
  97. package/dist/server/modules/skills/builtin-skill-service.js +1 -1
  98. package/dist/server/modules/skills/builtin-skill-service.js.map +1 -1
  99. package/dist/server/modules/skills/builtin-skills/codingns-assistant/SKILL.md +19 -12
  100. package/dist/server/modules/skills/builtin-skills/codingns-assistant/references/cli-workflow.md +9 -3
  101. package/dist/server/modules/tasks/task-helper-client.d.ts +5 -2
  102. package/dist/server/modules/tasks/task-helper-client.js +118 -38
  103. package/dist/server/modules/tasks/task-helper-client.js.map +1 -1
  104. package/dist/server/modules/tasks/task-helper-process.js +94 -3
  105. package/dist/server/modules/tasks/task-helper-process.js.map +1 -1
  106. package/dist/server/modules/tasks/task-types.d.ts +3 -0
  107. package/dist/server/modules/tasks/task-types.js +4 -1
  108. package/dist/server/modules/tasks/task-types.js.map +1 -1
  109. package/dist/server/modules/terminal/command-template-service.d.ts +9 -0
  110. package/dist/server/modules/terminal/command-template-service.js +87 -5
  111. package/dist/server/modules/terminal/command-template-service.js.map +1 -1
  112. package/dist/server/modules/terminal/terminal-controller.d.ts +3 -0
  113. package/dist/server/modules/terminal/terminal-controller.js +41 -0
  114. package/dist/server/modules/terminal/terminal-controller.js.map +1 -1
  115. package/dist/server/modules/workbench/workbench-service.d.ts +3 -0
  116. package/dist/server/modules/workbench/workbench-service.js +4 -3
  117. package/dist/server/modules/workbench/workbench-service.js.map +1 -1
  118. package/dist/server/modules/workbench/workspace-file-watcher.d.ts +14 -6
  119. package/dist/server/modules/workbench/workspace-file-watcher.js +267 -57
  120. package/dist/server/modules/workbench/workspace-file-watcher.js.map +1 -1
  121. package/dist/server/modules/workbench/workspace-panel-snapshot-service.d.ts +2 -0
  122. package/dist/server/modules/workbench/workspace-panel-snapshot-service.js +32 -3
  123. package/dist/server/modules/workbench/workspace-panel-snapshot-service.js.map +1 -1
  124. package/dist/server/modules/worktree/worktree-manager.d.ts +9 -1
  125. package/dist/server/modules/worktree/worktree-manager.js +9 -1
  126. package/dist/server/modules/worktree/worktree-manager.js.map +1 -1
  127. package/dist/server/routes/assistant.js +19 -0
  128. package/dist/server/routes/assistant.js.map +1 -1
  129. package/dist/server/routes/butler.js +5 -0
  130. package/dist/server/routes/butler.js.map +1 -1
  131. package/dist/server/server/create-server.d.ts +8 -0
  132. package/dist/server/server/create-server.js +36 -13
  133. package/dist/server/server/create-server.js.map +1 -1
  134. package/dist/server/storage/repositories/assistant-automation-run-repository.d.ts +12 -0
  135. package/dist/server/storage/repositories/assistant-automation-run-repository.js +139 -0
  136. package/dist/server/storage/repositories/assistant-automation-run-repository.js.map +1 -0
  137. package/dist/server/storage/repositories/assistant-automation-task-repository.d.ts +15 -0
  138. package/dist/server/storage/repositories/assistant-automation-task-repository.js +173 -0
  139. package/dist/server/storage/repositories/assistant-automation-task-repository.js.map +1 -0
  140. package/dist/server/storage/repositories/assistant-sandbox-workspace-repository.d.ts +17 -0
  141. package/dist/server/storage/repositories/assistant-sandbox-workspace-repository.js +164 -0
  142. package/dist/server/storage/repositories/assistant-sandbox-workspace-repository.js.map +1 -0
  143. package/dist/server/storage/repositories/butler-control-session-repository.js +27 -3
  144. package/dist/server/storage/repositories/butler-control-session-repository.js.map +1 -1
  145. package/dist/server/storage/repositories/butler-control-timer-repository.d.ts +15 -0
  146. package/dist/server/storage/repositories/butler-control-timer-repository.js +157 -0
  147. package/dist/server/storage/repositories/butler-control-timer-repository.js.map +1 -0
  148. package/dist/server/storage/repositories/user-preference-profile-repository.js +6 -3
  149. package/dist/server/storage/repositories/user-preference-profile-repository.js.map +1 -1
  150. package/dist/server/storage/sqlite/client.js +239 -2
  151. package/dist/server/storage/sqlite/client.js.map +1 -1
  152. package/dist/server/storage/sqlite/schema.sql +107 -1
  153. package/dist/server/types/domain.d.ts +89 -2
  154. package/dist/server/ws/workbench-ws-hub.d.ts +14 -8
  155. package/dist/server/ws/workbench-ws-hub.js +299 -163
  156. package/dist/server/ws/workbench-ws-hub.js.map +1 -1
  157. package/node_modules/@codingns/session-sync-core/dist/providers/claude-code.d.ts +4 -1
  158. package/node_modules/@codingns/session-sync-core/dist/providers/claude-code.js +111 -3
  159. package/node_modules/@codingns/session-sync-core/dist/providers/claude-code.js.map +1 -1
  160. package/node_modules/@codingns/session-sync-core/dist/providers/codex.d.ts +6 -1
  161. package/node_modules/@codingns/session-sync-core/dist/providers/codex.js +306 -31
  162. package/node_modules/@codingns/session-sync-core/dist/providers/codex.js.map +1 -1
  163. package/node_modules/@codingns/session-sync-core/dist/providers/gemini.d.ts +5 -1
  164. package/node_modules/@codingns/session-sync-core/dist/providers/gemini.js +187 -26
  165. package/node_modules/@codingns/session-sync-core/dist/providers/gemini.js.map +1 -1
  166. package/node_modules/@codingns/session-sync-core/dist/providers/kimi.d.ts +4 -1
  167. package/node_modules/@codingns/session-sync-core/dist/providers/kimi.js +98 -1
  168. package/node_modules/@codingns/session-sync-core/dist/providers/kimi.js.map +1 -1
  169. package/node_modules/@codingns/session-sync-core/dist/providers/opencode.d.ts +2 -0
  170. package/node_modules/@codingns/session-sync-core/dist/providers/opencode.js +71 -8
  171. package/node_modules/@codingns/session-sync-core/dist/providers/opencode.js.map +1 -1
  172. package/node_modules/@codingns/session-sync-core/dist/providers/utils.d.ts +1 -0
  173. package/node_modules/@codingns/session-sync-core/dist/providers/utils.js +4 -1
  174. package/node_modules/@codingns/session-sync-core/dist/providers/utils.js.map +1 -1
  175. package/node_modules/@codingns/session-sync-core/dist/runtime/claude-runtime.js +44 -0
  176. package/node_modules/@codingns/session-sync-core/dist/runtime/claude-runtime.js.map +1 -1
  177. package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js +9 -3
  178. package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js.map +1 -1
  179. package/node_modules/@codingns/session-sync-core/dist/runtime/types.d.ts +1 -0
  180. package/node_modules/@codingns/session-sync-core/dist/services.js +17 -8
  181. package/node_modules/@codingns/session-sync-core/dist/services.js.map +1 -1
  182. package/node_modules/@codingns/session-sync-core/dist/types.d.ts +4 -0
  183. package/package.json +1 -1
  184. package/dist/public/assets/index-BlOinYqR.js +0 -122
  185. package/dist/public/assets/index-Dg_7g6lA.css +0 -1
@@ -2,6 +2,7 @@ import { AppError } from "../../shared/errors/app-error.js";
2
2
  import { createId } from "../../shared/utils/id.js";
3
3
  import { nowIso } from "../../shared/utils/time.js";
4
4
  import { syncButlerWorkspaceContext } from "./butler-workspace-context.js";
5
+ import { recordButlerProxyMessageOrigin } from "../sessions/session-message-origin-utils.js";
5
6
  export class ButlerControlSessionService {
6
7
  butlerProfileService;
7
8
  butlerControlSessionRepository;
@@ -13,7 +14,11 @@ export class ButlerControlSessionService {
13
14
  skillManagerService;
14
15
  codexHomeDir;
15
16
  sourceCodexHomeDir;
16
- constructor(butlerProfileService, butlerControlSessionRepository, workspaceService, sessionHistoryService, sessionLiveRuntimeService, butlerContextAggregator, butlerAuthService, skillManagerService, codexHomeDir = null, sourceCodexHomeDir = null) {
17
+ claudeCodeHomeDir;
18
+ sourceClaudeCodeHomeDir;
19
+ sessionMessageOriginRepository;
20
+ assistantSandboxService;
21
+ constructor(butlerProfileService, butlerControlSessionRepository, workspaceService, sessionHistoryService, sessionLiveRuntimeService, butlerContextAggregator, butlerAuthService, skillManagerService, codexHomeDir = null, sourceCodexHomeDir = null, claudeCodeHomeDir = null, sourceClaudeCodeHomeDir = null, sessionMessageOriginRepository = null, assistantSandboxService = null) {
17
22
  this.butlerProfileService = butlerProfileService;
18
23
  this.butlerControlSessionRepository = butlerControlSessionRepository;
19
24
  this.workspaceService = workspaceService;
@@ -24,6 +29,10 @@ export class ButlerControlSessionService {
24
29
  this.skillManagerService = skillManagerService;
25
30
  this.codexHomeDir = codexHomeDir;
26
31
  this.sourceCodexHomeDir = sourceCodexHomeDir;
32
+ this.claudeCodeHomeDir = claudeCodeHomeDir;
33
+ this.sourceClaudeCodeHomeDir = sourceClaudeCodeHomeDir;
34
+ this.sessionMessageOriginRepository = sessionMessageOriginRepository;
35
+ this.assistantSandboxService = assistantSandboxService;
27
36
  }
28
37
  getCurrentSession(userId) {
29
38
  const profile = this.butlerProfileService.ensureInitialized();
@@ -61,8 +70,16 @@ export class ButlerControlSessionService {
61
70
  async startSession(userId, input = {}) {
62
71
  const profile = this.butlerProfileService.ensureInitialized();
63
72
  const content = normalizeControlContent(input.content, "");
73
+ const model = normalizeNullableText(input.model);
74
+ const reasoningLevel = normalizeNullableText(input.reasoningLevel);
75
+ const permissionMode = normalizeNullableText(input.permissionMode);
76
+ const clientRequestId = normalizeNullableText(input.clientRequestId)
77
+ ?? `assistant-origin:butler-control-start:${createId()}`;
64
78
  const promptContext = await this.butlerContextAggregator.resolvePromptContext(userId, input.content ?? null);
65
- const workspace = this.prepareWorkspace(profile, promptContext, userId);
79
+ const preparedWorkspace = await this.prepareWorkspace(profile, promptContext, userId, {
80
+ title: normalizeNullableText(input.title),
81
+ content
82
+ });
66
83
  const current = this.butlerControlSessionRepository.findLatestOpenByProvider(profile.providerId);
67
84
  if (current && current.status !== "closed") {
68
85
  this.butlerControlSessionRepository.update({
@@ -71,40 +88,67 @@ export class ButlerControlSessionService {
71
88
  updatedAt: nowIso()
72
89
  });
73
90
  }
74
- const started = await this.sessionLiveRuntimeService.startLiveSession({
75
- workspaceId: workspace.id,
76
- userId,
77
- provider: profile.providerId,
78
- content,
79
- clientRequestId: normalizeNullableText(input.clientRequestId),
80
- runtimeOptions: {
81
- model: normalizeNullableText(input.model),
82
- reasoningLevel: normalizeNullableText(input.reasoningLevel),
83
- permissionMode: normalizeNullableText(input.permissionMode),
84
- attachments: []
91
+ try {
92
+ const started = await this.sessionLiveRuntimeService.startLiveSession({
93
+ workspaceId: preparedWorkspace.workspaceId,
94
+ userId,
95
+ provider: profile.providerId,
96
+ content,
97
+ clientRequestId,
98
+ runtimeOptions: {
99
+ model,
100
+ reasoningLevel,
101
+ permissionMode,
102
+ attachments: []
103
+ }
104
+ });
105
+ recordButlerProxyMessageOrigin(this.sessionMessageOriginRepository, {
106
+ sessionId: started.sessionId,
107
+ clientRequestId,
108
+ messageId: started.message?.messageId ?? null,
109
+ content,
110
+ createdAt: started.acceptedAt,
111
+ fallbackKey: `butler-control-start:${started.sessionId}:${started.acceptedAt}`
112
+ });
113
+ const timestamp = started.acceptedAt;
114
+ const created = this.butlerControlSessionRepository.create({
115
+ id: createId(),
116
+ providerId: profile.providerId,
117
+ sessionId: started.sessionId,
118
+ purpose: input.purpose ?? "chat",
119
+ title: normalizeNullableText(input.title),
120
+ sourceItemId: normalizeNullableText(input.sourceItemId),
121
+ model,
122
+ reasoningLevel,
123
+ permissionMode,
124
+ status: "running",
125
+ lastContextVersion: promptContext.version,
126
+ lastSummary: normalizeNullableText(input.title) ?? summarizeMessage(content),
127
+ createdAt: timestamp,
128
+ updatedAt: timestamp
129
+ });
130
+ if (preparedWorkspace.sandboxId && this.assistantSandboxService) {
131
+ this.assistantSandboxService.markSandboxUsedByControlSession(preparedWorkspace.sandboxId, userId, created.id);
85
132
  }
86
- });
87
- const timestamp = started.acceptedAt;
88
- const created = this.butlerControlSessionRepository.create({
89
- id: createId(),
90
- providerId: profile.providerId,
91
- sessionId: started.sessionId,
92
- purpose: input.purpose ?? "chat",
93
- title: normalizeNullableText(input.title),
94
- sourceItemId: normalizeNullableText(input.sourceItemId),
95
- status: "running",
96
- lastContextVersion: promptContext.version,
97
- lastSummary: normalizeNullableText(input.title) ?? summarizeMessage(content),
98
- createdAt: timestamp,
99
- updatedAt: timestamp
100
- });
101
- return this.toView(created, userId);
133
+ return this.toView(created, userId);
134
+ }
135
+ catch (error) {
136
+ if (preparedWorkspace.sandboxId && this.assistantSandboxService) {
137
+ try {
138
+ this.assistantSandboxService.removeSandbox(preparedWorkspace.sandboxId, userId);
139
+ }
140
+ catch {
141
+ // 控制会话没真正启动成功时,尽量把新建的空白沙箱收口,避免残留无主目录。
142
+ }
143
+ }
144
+ throw error;
145
+ }
102
146
  }
103
147
  async resumeCurrentSession(userId) {
104
148
  const profile = this.butlerProfileService.ensureInitialized();
105
149
  const current = this.requireCurrentSession(profile.providerId);
106
150
  const promptContext = await this.butlerContextAggregator.resolvePromptContext(userId, null);
107
- this.syncWorkspaceContext(profile, promptContext, userId);
151
+ this.syncWorkspaceContext(profile, promptContext, userId, this.resolveControlSessionWorkspacePath(profile, current.id, userId));
108
152
  try {
109
153
  const resumed = await this.sessionHistoryService.resumeSession(current.sessionId);
110
154
  const updated = this.butlerControlSessionRepository.update({
@@ -131,23 +175,45 @@ export class ButlerControlSessionService {
131
175
  ? this.requireSessionById(input.controlSessionId, profile.providerId)
132
176
  : this.requireCurrentSession(profile.providerId);
133
177
  const content = normalizeControlContent(input.content, "");
178
+ const requestedAt = nowIso();
179
+ const clientRequestId = recordButlerProxyMessageOrigin(this.sessionMessageOriginRepository, {
180
+ sessionId: current.sessionId,
181
+ clientRequestId: normalizeNullableText(input.clientRequestId),
182
+ content,
183
+ createdAt: requestedAt,
184
+ fallbackKey: `butler-control-send:${current.id}:${requestedAt}`
185
+ });
186
+ const model = normalizeNullableText(input.model) ?? current.model;
187
+ const reasoningLevel = normalizeNullableText(input.reasoningLevel) ?? current.reasoningLevel;
188
+ const permissionMode = normalizeNullableText(input.permissionMode) ?? current.permissionMode;
134
189
  const promptContext = await this.butlerContextAggregator.resolvePromptContext(userId, content);
135
- this.syncWorkspaceContext(profile, promptContext, userId);
190
+ this.syncWorkspaceContext(profile, promptContext, userId, this.resolveControlSessionWorkspacePath(profile, current.id, userId));
136
191
  try {
137
192
  const result = await this.sessionLiveRuntimeService.sendLiveMessage({
138
193
  sessionId: current.sessionId,
139
194
  userId,
140
195
  content,
141
- clientRequestId: normalizeNullableText(input.clientRequestId),
196
+ clientRequestId,
142
197
  runtimeOptions: {
143
- model: normalizeNullableText(input.model),
144
- reasoningLevel: normalizeNullableText(input.reasoningLevel),
145
- permissionMode: normalizeNullableText(input.permissionMode),
198
+ model,
199
+ reasoningLevel,
200
+ permissionMode,
146
201
  attachments: []
147
202
  }
148
203
  });
204
+ recordButlerProxyMessageOrigin(this.sessionMessageOriginRepository, {
205
+ sessionId: current.sessionId,
206
+ clientRequestId,
207
+ messageId: result.message?.messageId ?? null,
208
+ content,
209
+ createdAt: result.acceptedAt,
210
+ fallbackKey: `butler-control-send:${current.id}:${result.acceptedAt}`
211
+ });
149
212
  const updated = this.butlerControlSessionRepository.update({
150
213
  ...current,
214
+ model,
215
+ reasoningLevel,
216
+ permissionMode,
151
217
  status: "running",
152
218
  lastContextVersion: promptContext.version,
153
219
  lastSummary: summarizeMessage(content),
@@ -196,21 +262,66 @@ export class ButlerControlSessionService {
196
262
  session: this.sessionHistoryService.getSession(record.sessionId, userId)
197
263
  };
198
264
  }
199
- prepareWorkspace(profile, promptContext, userId) {
200
- this.syncWorkspaceContext(profile, promptContext, userId);
201
- return this.workspaceService.importWorkspace(profile.workspacePath, "代码助手");
265
+ async prepareWorkspace(profile, promptContext, userId, input) {
266
+ if (!this.assistantSandboxService) {
267
+ this.syncWorkspaceContext(profile, promptContext, userId, profile.workspacePath);
268
+ const workspace = this.workspaceService.importWorkspace(profile.workspacePath, "代码助手");
269
+ return {
270
+ workspaceId: workspace.id,
271
+ sandboxId: null
272
+ };
273
+ }
274
+ const sandbox = await this.assistantSandboxService.createSandbox({
275
+ userId,
276
+ title: inferControlSessionSandboxTitle(input.title, input.content),
277
+ description: "当前助手会话独占的临时工作区",
278
+ purpose: "butler_control_session",
279
+ source: {
280
+ kind: "blank",
281
+ directoryName: `control-session-${createId().slice(0, 8)}`
282
+ }
283
+ });
284
+ const workspacePath = sandbox.workspace?.path?.trim();
285
+ if (!workspacePath) {
286
+ throw new AppError({
287
+ statusCode: 500,
288
+ errorCode: "BUTLER_CONTROL_SANDBOX_UNAVAILABLE",
289
+ detail: "已创建助手沙箱,但未能解析对应工作区路径"
290
+ });
291
+ }
292
+ this.syncWorkspaceContext(profile, promptContext, userId, workspacePath);
293
+ return {
294
+ workspaceId: sandbox.workspaceId,
295
+ sandboxId: sandbox.id
296
+ };
202
297
  }
203
- syncWorkspaceContext(profile, promptContext, userId) {
298
+ syncWorkspaceContext(profile, promptContext, userId, workspacePath) {
204
299
  syncButlerWorkspaceContext({
205
300
  profile,
206
301
  promptContext,
207
302
  userId,
303
+ workspacePath,
208
304
  butlerAuthService: this.butlerAuthService,
209
305
  skillManagerService: this.skillManagerService,
210
306
  codexHomeDir: this.codexHomeDir,
211
- sourceCodexHomeDir: this.sourceCodexHomeDir
307
+ sourceCodexHomeDir: this.sourceCodexHomeDir,
308
+ claudeCodeHomeDir: this.claudeCodeHomeDir,
309
+ sourceClaudeCodeHomeDir: this.sourceClaudeCodeHomeDir
212
310
  });
213
311
  }
312
+ resolveControlSessionWorkspacePath(profile, controlSessionId, userId) {
313
+ const sandboxWorkspacePath = this.assistantSandboxService
314
+ ?.listSandboxes({
315
+ userId,
316
+ controlSessionId,
317
+ statuses: ["active", "archived"],
318
+ limit: 1
319
+ })[0]
320
+ ?.workspace
321
+ ?.path
322
+ ?.trim();
323
+ return sandboxWorkspacePath || profile.workspacePath;
324
+ }
214
325
  markFailed(record, fallbackSummary) {
215
326
  this.butlerControlSessionRepository.update({
216
327
  ...record,
@@ -251,4 +362,7 @@ function normalizeNullableText(value) {
251
362
  function summarizeMessage(content) {
252
363
  return content.length > 120 ? `${content.slice(0, 117)}...` : content;
253
364
  }
365
+ function inferControlSessionSandboxTitle(title, content) {
366
+ return title ?? summarizeMessage(content) ?? "助手临时工作区";
367
+ }
254
368
  //# sourceMappingURL=butler-control-session-service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"butler-control-session-service.js","sourceRoot":"","sources":["../../../../src/modules/butler/butler-control-session-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"butler-control-session-service.js","sourceRoot":"","sources":["../../../../src/modules/butler/butler-control-session-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { type SchedulerMetrics } from "../tasks/scheduler-metrics.js";
2
+ import type { ButlerControlTimerService } from "./butler-control-timer-service.js";
3
+ interface ButlerControlTimerSchedulerLogger {
4
+ error(message: string, detail?: unknown): void;
5
+ }
6
+ interface ButlerControlTimerSchedulerOptions {
7
+ intervalMs?: number;
8
+ maxIntervalMs?: number;
9
+ now?: () => string;
10
+ logger?: ButlerControlTimerSchedulerLogger;
11
+ schedulerMetrics?: SchedulerMetrics;
12
+ }
13
+ export declare class ButlerControlTimerScheduler {
14
+ private readonly butlerControlTimerService;
15
+ private readonly intervalMs;
16
+ private readonly maxIntervalMs;
17
+ private readonly now;
18
+ private readonly logger;
19
+ private readonly schedulerMetrics;
20
+ private timer;
21
+ private ticking;
22
+ private started;
23
+ private disposed;
24
+ private idleStreak;
25
+ constructor(butlerControlTimerService: Pick<ButlerControlTimerService, "runDueTimers">, options?: ButlerControlTimerSchedulerOptions);
26
+ start(): void;
27
+ dispose(): Promise<void>;
28
+ runOnce(): Promise<void>;
29
+ private scheduleNext;
30
+ private tick;
31
+ }
32
+ export {};
@@ -0,0 +1,93 @@
1
+ import { nowIso } from "../../shared/utils/time.js";
2
+ import { resolveAdaptiveSchedulerDelayMs } from "../tasks/scheduler-metrics.js";
3
+ const DEFAULT_INTERVAL_MS = 10_000;
4
+ export class ButlerControlTimerScheduler {
5
+ butlerControlTimerService;
6
+ intervalMs;
7
+ maxIntervalMs;
8
+ now;
9
+ logger;
10
+ schedulerMetrics;
11
+ timer = null;
12
+ ticking = false;
13
+ started = false;
14
+ disposed = false;
15
+ idleStreak = 0;
16
+ constructor(butlerControlTimerService, options = {}) {
17
+ this.butlerControlTimerService = butlerControlTimerService;
18
+ this.intervalMs = Math.max(5_000, options.intervalMs ?? DEFAULT_INTERVAL_MS);
19
+ this.maxIntervalMs = Math.max(this.intervalMs, options.maxIntervalMs ?? this.intervalMs * 8);
20
+ this.now = options.now ?? nowIso;
21
+ this.logger = options.logger ?? console;
22
+ this.schedulerMetrics = options.schedulerMetrics ?? null;
23
+ }
24
+ start() {
25
+ if (this.timer || this.disposed) {
26
+ return;
27
+ }
28
+ this.started = true;
29
+ this.scheduleNext(0);
30
+ }
31
+ async dispose() {
32
+ this.started = false;
33
+ this.disposed = true;
34
+ if (this.timer) {
35
+ clearTimeout(this.timer);
36
+ this.timer = null;
37
+ }
38
+ while (this.ticking) {
39
+ await new Promise((resolve) => setTimeout(resolve, 10));
40
+ }
41
+ }
42
+ async runOnce() {
43
+ await this.tick(false);
44
+ }
45
+ scheduleNext(delayMs) {
46
+ this.timer = setTimeout(() => {
47
+ this.timer = null;
48
+ void this.tick();
49
+ }, delayMs);
50
+ this.timer.unref?.();
51
+ }
52
+ async tick(shouldScheduleNext = true) {
53
+ if (this.ticking) {
54
+ return;
55
+ }
56
+ this.ticking = true;
57
+ const tickStartedAt = Date.now();
58
+ const referenceAt = this.now();
59
+ let result = null;
60
+ let errorCount = 0;
61
+ try {
62
+ result = await this.butlerControlTimerService.runDueTimers(referenceAt);
63
+ }
64
+ catch (error) {
65
+ errorCount = 1;
66
+ this.logger.error("[butler-control-timer-scheduler] tick failed", {
67
+ error: error instanceof Error ? error.message : String(error),
68
+ referenceAt
69
+ });
70
+ }
71
+ finally {
72
+ this.ticking = false;
73
+ const idle = result?.idle ?? true;
74
+ const taskCount = result?.dueTimerCount ?? 0;
75
+ this.idleStreak = idle ? this.idleStreak + 1 : 0;
76
+ const nextDelayMs = resolveAdaptiveSchedulerDelayMs(this.intervalMs, this.maxIntervalMs, this.idleStreak);
77
+ this.schedulerMetrics?.recordTick({
78
+ schedulerName: "butler_control_timer",
79
+ referenceAt,
80
+ durationMs: Date.now() - tickStartedAt,
81
+ taskCount,
82
+ idle,
83
+ errorCount,
84
+ nextDelayMs,
85
+ idleStreak: this.idleStreak
86
+ });
87
+ if (shouldScheduleNext && this.started && !this.disposed && this.timer === null) {
88
+ this.scheduleNext(nextDelayMs);
89
+ }
90
+ }
91
+ }
92
+ }
93
+ //# sourceMappingURL=butler-control-timer-scheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"butler-control-timer-scheduler.js","sourceRoot":"","sources":["../../../../src/modules/butler/butler-control-timer-scheduler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import type { ButlerControlTimer, ButlerControlTimerStatus } from "../../types/domain.js";
2
+ import type { ButlerProfileService } from "./butler-profile-service.js";
3
+ import type { ButlerControlSessionService, ButlerControlSessionView } from "./butler-control-session-service.js";
4
+ import type { ButlerControlTimerRepository } from "../../storage/repositories/butler-control-timer-repository.js";
5
+ import type { AssistantAutomationService } from "./assistant-automation-service.js";
6
+ export interface ButlerControlTimerView extends ButlerControlTimer {
7
+ controlSession: ButlerControlSessionView | null;
8
+ }
9
+ export interface CreateButlerControlTimerInput {
10
+ userId: string;
11
+ controlSessionId?: string | null;
12
+ projectId?: string | null;
13
+ targetSessionId?: string | null;
14
+ title?: string | null;
15
+ content: string;
16
+ dueAt?: string | null;
17
+ afterSeconds?: number | null;
18
+ }
19
+ export interface ButlerControlTimerRunDueTimersResult {
20
+ activeTimerCount: number;
21
+ dueTimerCount: number;
22
+ processedTimerCount: number;
23
+ idle: boolean;
24
+ }
25
+ export declare class ButlerControlTimerService {
26
+ private readonly butlerProfileService;
27
+ private readonly butlerControlSessionService;
28
+ private readonly butlerControlTimerRepository;
29
+ private readonly assistantAutomationService;
30
+ constructor(butlerProfileService: Pick<ButlerProfileService, "ensureInitialized">, butlerControlSessionService: Pick<ButlerControlSessionService, "getCurrentSession" | "getSession" | "sendMessage">, butlerControlTimerRepository: ButlerControlTimerRepository, assistantAutomationService: Pick<AssistantAutomationService, "listTasks" | "getTask" | "createTask" | "cancelTask" | "runDueTasks">);
31
+ listTimers(filters: {
32
+ userId: string;
33
+ statuses?: ButlerControlTimerStatus[];
34
+ controlSessionId?: string | null;
35
+ limit?: number;
36
+ }): ButlerControlTimerView[];
37
+ getTimer(timerId: string, userId: string): ButlerControlTimerView;
38
+ createTimer(input: CreateButlerControlTimerInput): ButlerControlTimerView;
39
+ cancelTimer(timerId: string, userId: string): ButlerControlTimerView;
40
+ runDueTimers(referenceAt: string): Promise<ButlerControlTimerRunDueTimersResult>;
41
+ private mapTaskToTimerView;
42
+ }
@@ -0,0 +1,132 @@
1
+ import { AppError } from "../../shared/errors/app-error.js";
2
+ export class ButlerControlTimerService {
3
+ butlerProfileService;
4
+ butlerControlSessionService;
5
+ butlerControlTimerRepository;
6
+ assistantAutomationService;
7
+ constructor(butlerProfileService, butlerControlSessionService, butlerControlTimerRepository, assistantAutomationService) {
8
+ this.butlerProfileService = butlerProfileService;
9
+ this.butlerControlSessionService = butlerControlSessionService;
10
+ this.butlerControlTimerRepository = butlerControlTimerRepository;
11
+ this.assistantAutomationService = assistantAutomationService;
12
+ }
13
+ listTimers(filters) {
14
+ this.butlerProfileService.ensureInitialized();
15
+ return this.assistantAutomationService
16
+ .listTasks({
17
+ userId: filters.userId,
18
+ statuses: mapTimerStatusesToAutomationStatuses(filters.statuses),
19
+ controlSessionId: filters.controlSessionId?.trim() || null,
20
+ limit: filters.limit
21
+ })
22
+ .filter((task) => task.triggerType === "once")
23
+ .map((task) => this.mapTaskToTimerView(task));
24
+ }
25
+ getTimer(timerId, userId) {
26
+ this.butlerProfileService.ensureInitialized();
27
+ return this.mapTaskToTimerView(this.assistantAutomationService.getTask(timerId.trim(), userId));
28
+ }
29
+ createTimer(input) {
30
+ this.butlerProfileService.ensureInitialized();
31
+ const created = this.assistantAutomationService.createTask({
32
+ userId: input.userId,
33
+ controlSessionId: input.controlSessionId,
34
+ projectId: input.projectId,
35
+ title: input.title,
36
+ trigger: {
37
+ type: "once",
38
+ dueAt: input.dueAt,
39
+ afterSeconds: input.afterSeconds ?? null
40
+ },
41
+ action: {
42
+ type: "send_control_message",
43
+ content: input.content,
44
+ includeTriggerContext: false,
45
+ targetSessionId: input.targetSessionId
46
+ }
47
+ });
48
+ return this.mapTaskToTimerView(created);
49
+ }
50
+ cancelTimer(timerId, userId) {
51
+ this.butlerProfileService.ensureInitialized();
52
+ return this.mapTaskToTimerView(this.assistantAutomationService.cancelTask(timerId.trim(), userId));
53
+ }
54
+ async runDueTimers(referenceAt) {
55
+ this.butlerProfileService.ensureInitialized();
56
+ const result = await this.assistantAutomationService.runDueTasks(referenceAt);
57
+ return {
58
+ activeTimerCount: result.activeTaskCount,
59
+ dueTimerCount: result.dueTaskCount,
60
+ processedTimerCount: result.processedTaskCount,
61
+ idle: result.idle
62
+ };
63
+ }
64
+ mapTaskToTimerView(task) {
65
+ if (task.triggerType !== "once") {
66
+ throw new AppError({
67
+ statusCode: 409,
68
+ errorCode: "BUTLER_CONTROL_TIMER_COMPATIBILITY_ERROR",
69
+ detail: "当前计时器兼容视图只支持 once 类型自动化"
70
+ });
71
+ }
72
+ const triggerConfig = parseOnceTriggerConfig(task.triggerConfigJson);
73
+ const actionConfig = parseSendControlMessageActionConfig(task.actionConfigJson);
74
+ return {
75
+ id: task.id,
76
+ controlSessionId: task.controlSessionId,
77
+ sessionId: task.controlSession?.sessionId ?? "",
78
+ userId: task.userId,
79
+ projectId: task.projectId,
80
+ targetSessionId: actionConfig.targetSessionId,
81
+ title: task.title,
82
+ content: actionConfig.content,
83
+ dueAt: triggerConfig.dueAt,
84
+ status: mapAutomationStatusToTimerStatus(task.status),
85
+ triggeredAt: task.lastRunAt,
86
+ lastError: task.lastError,
87
+ createdAt: task.createdAt,
88
+ updatedAt: task.updatedAt,
89
+ cancelledAt: task.cancelledAt,
90
+ controlSession: task.controlSession
91
+ };
92
+ }
93
+ }
94
+ function mapTimerStatusesToAutomationStatuses(statuses) {
95
+ return statuses?.map((status) => (status === "active" ? "active" : status));
96
+ }
97
+ function mapAutomationStatusToTimerStatus(status) {
98
+ if (status === "paused") {
99
+ return "active";
100
+ }
101
+ return status;
102
+ }
103
+ function parseOnceTriggerConfig(value) {
104
+ const parsed = JSON.parse(value);
105
+ const dueAt = parsed.dueAt?.trim();
106
+ if (!dueAt) {
107
+ throw new AppError({
108
+ statusCode: 500,
109
+ errorCode: "BUTLER_CONTROL_TIMER_COMPATIBILITY_ERROR",
110
+ detail: "自动化缺少 once 触发时间,无法映射为计时器"
111
+ });
112
+ }
113
+ return {
114
+ dueAt
115
+ };
116
+ }
117
+ function parseSendControlMessageActionConfig(value) {
118
+ const parsed = JSON.parse(value);
119
+ const content = parsed.content?.trim();
120
+ if (!content) {
121
+ throw new AppError({
122
+ statusCode: 500,
123
+ errorCode: "BUTLER_CONTROL_TIMER_COMPATIBILITY_ERROR",
124
+ detail: "自动化缺少控制会话消息内容,无法映射为计时器"
125
+ });
126
+ }
127
+ return {
128
+ content,
129
+ targetSessionId: parsed.targetSessionId?.trim() || null
130
+ };
131
+ }
132
+ //# sourceMappingURL=butler-control-timer-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"butler-control-timer-service.js","sourceRoot":"","sources":["../../../../src/modules/butler/butler-control-timer-service.ts"],"names":[],"mappings":"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"}