@jingyi0605/codingns 0.1.3 → 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.
- package/bin/codingns.mjs +47 -8
- package/dist/public/assets/{TerminalPage-Nq5sPc5c.js → TerminalPage-4p6EBqrR.js} +19 -19
- package/dist/public/assets/gemini-D4G1NbrE.png +0 -0
- package/dist/public/assets/index-CxeghocY.css +1 -0
- package/dist/public/assets/index-DXusStl0.js +108 -0
- package/dist/public/assets/kimi-BWNNSh7e.png +0 -0
- package/dist/public/index.html +2 -2
- package/dist/server/config/env.d.ts +7 -0
- package/dist/server/config/env.js +147 -1
- package/dist/server/config/env.js.map +1 -1
- package/dist/server/config/opencode-system-probe-helper-process.d.ts +24 -0
- package/dist/server/config/opencode-system-probe-helper-process.js +70 -5
- package/dist/server/config/opencode-system-probe-helper-process.js.map +1 -1
- package/dist/server/modules/auth/auth-service.d.ts +7 -1
- package/dist/server/modules/auth/auth-service.js +23 -3
- package/dist/server/modules/auth/auth-service.js.map +1 -1
- package/dist/server/modules/bootstrap/bootstrap-service.d.ts +3 -1
- package/dist/server/modules/bootstrap/bootstrap-service.js +7 -2
- package/dist/server/modules/bootstrap/bootstrap-service.js.map +1 -1
- package/dist/server/modules/butler/butler-action-context-service.d.ts +30 -0
- package/dist/server/modules/butler/butler-action-context-service.js +108 -0
- package/dist/server/modules/butler/butler-action-context-service.js.map +1 -0
- package/dist/server/modules/butler/butler-auth-service.d.ts +17 -0
- package/dist/server/modules/butler/butler-auth-service.js +91 -0
- package/dist/server/modules/butler/butler-auth-service.js.map +1 -0
- package/dist/server/modules/butler/butler-control-action-service.d.ts +65 -0
- package/dist/server/modules/butler/butler-control-action-service.js +296 -0
- package/dist/server/modules/butler/butler-control-action-service.js.map +1 -0
- package/dist/server/modules/butler/butler-control-session-service.d.ts +55 -0
- package/dist/server/modules/butler/butler-control-session-service.js +367 -0
- package/dist/server/modules/butler/butler-control-session-service.js.map +1 -0
- package/dist/server/modules/butler/butler-controller.d.ts +367 -0
- package/dist/server/modules/butler/butler-controller.js +475 -0
- package/dist/server/modules/butler/butler-controller.js.map +1 -0
- package/dist/server/modules/butler/butler-follow-up-evaluation-instruction-adapter.d.ts +34 -0
- package/dist/server/modules/butler/butler-follow-up-evaluation-instruction-adapter.js +77 -0
- package/dist/server/modules/butler/butler-follow-up-evaluation-instruction-adapter.js.map +1 -0
- package/dist/server/modules/butler/butler-follow-up-scheduler.d.ts +23 -0
- package/dist/server/modules/butler/butler-follow-up-scheduler.js +57 -0
- package/dist/server/modules/butler/butler-follow-up-scheduler.js.map +1 -0
- package/dist/server/modules/butler/butler-follow-up-service.d.ts +86 -0
- package/dist/server/modules/butler/butler-follow-up-service.js +948 -0
- package/dist/server/modules/butler/butler-follow-up-service.js.map +1 -0
- package/dist/server/modules/butler/butler-inbox-service.d.ts +35 -0
- package/dist/server/modules/butler/butler-inbox-service.js +136 -0
- package/dist/server/modules/butler/butler-inbox-service.js.map +1 -0
- package/dist/server/modules/butler/butler-notification-service.d.ts +12 -0
- package/dist/server/modules/butler/butler-notification-service.js +45 -0
- package/dist/server/modules/butler/butler-notification-service.js.map +1 -0
- package/dist/server/modules/butler/butler-profile-service.d.ts +26 -0
- package/dist/server/modules/butler/butler-profile-service.js +529 -0
- package/dist/server/modules/butler/butler-profile-service.js.map +1 -0
- package/dist/server/modules/butler/butler-project-service.d.ts +48 -0
- package/dist/server/modules/butler/butler-project-service.js +253 -0
- package/dist/server/modules/butler/butler-project-service.js.map +1 -0
- package/dist/server/modules/butler/butler-session-service.d.ts +79 -0
- package/dist/server/modules/butler/butler-session-service.js +503 -0
- package/dist/server/modules/butler/butler-session-service.js.map +1 -0
- package/dist/server/modules/butler/butler-session-summary-service.d.ts +55 -0
- package/dist/server/modules/butler/butler-session-summary-service.js +382 -0
- package/dist/server/modules/butler/butler-session-summary-service.js.map +1 -0
- package/dist/server/modules/butler/context-aggregator.d.ts +187 -0
- package/dist/server/modules/butler/context-aggregator.js +807 -0
- package/dist/server/modules/butler/context-aggregator.js.map +1 -0
- package/dist/server/modules/butler/instruction-adapter.d.ts +28 -0
- package/dist/server/modules/butler/instruction-adapter.js +101 -0
- package/dist/server/modules/butler/instruction-adapter.js.map +1 -0
- package/dist/server/modules/butler/patrol-execution-service.d.ts +47 -0
- package/dist/server/modules/butler/patrol-execution-service.js +347 -0
- package/dist/server/modules/butler/patrol-execution-service.js.map +1 -0
- package/dist/server/modules/butler/patrol-plan-service.d.ts +54 -0
- package/dist/server/modules/butler/patrol-plan-service.js +272 -0
- package/dist/server/modules/butler/patrol-plan-service.js.map +1 -0
- package/dist/server/modules/butler/patrol-run-service.d.ts +60 -0
- package/dist/server/modules/butler/patrol-run-service.js +185 -0
- package/dist/server/modules/butler/patrol-run-service.js.map +1 -0
- package/dist/server/modules/butler/patrol-scheduler.d.ts +36 -0
- package/dist/server/modules/butler/patrol-scheduler.js +99 -0
- package/dist/server/modules/butler/patrol-scheduler.js.map +1 -0
- package/dist/server/modules/butler/project-memory-service.d.ts +30 -0
- package/dist/server/modules/butler/project-memory-service.js +103 -0
- package/dist/server/modules/butler/project-memory-service.js.map +1 -0
- package/dist/server/modules/butler/provider-adapter-registry.d.ts +61 -0
- package/dist/server/modules/butler/provider-adapter-registry.js +430 -0
- package/dist/server/modules/butler/provider-adapter-registry.js.map +1 -0
- package/dist/server/modules/butler/session-summary-instruction-adapter.d.ts +28 -0
- package/dist/server/modules/butler/session-summary-instruction-adapter.js +79 -0
- package/dist/server/modules/butler/session-summary-instruction-adapter.js.map +1 -0
- package/dist/server/modules/butler/session-summary-scheduler.d.ts +23 -0
- package/dist/server/modules/butler/session-summary-scheduler.js +57 -0
- package/dist/server/modules/butler/session-summary-scheduler.js.map +1 -0
- package/dist/server/modules/butler/verification-run-service.d.ts +73 -0
- package/dist/server/modules/butler/verification-run-service.js +633 -0
- package/dist/server/modules/butler/verification-run-service.js.map +1 -0
- package/dist/server/modules/demo/demo-cleanup-service.d.ts +41 -0
- package/dist/server/modules/demo/demo-cleanup-service.js +111 -0
- package/dist/server/modules/demo/demo-cleanup-service.js.map +1 -0
- package/dist/server/modules/preferences/profile-service.js +8 -2
- package/dist/server/modules/preferences/profile-service.js.map +1 -1
- package/dist/server/modules/sessions/claude-runtime-helper-process.js +1 -1
- package/dist/server/modules/sessions/claude-runtime-helper-process.js.map +1 -1
- package/dist/server/modules/sessions/codex-app-server-helper-client.d.ts +5 -1
- package/dist/server/modules/sessions/codex-app-server-helper-client.js +10 -2
- package/dist/server/modules/sessions/codex-app-server-helper-client.js.map +1 -1
- package/dist/server/modules/sessions/session-controller.d.ts +3 -1
- package/dist/server/modules/sessions/session-controller.js +11 -2
- package/dist/server/modules/sessions/session-controller.js.map +1 -1
- package/dist/server/modules/sessions/session-history-service.d.ts +14 -1
- package/dist/server/modules/sessions/session-history-service.js +291 -30
- package/dist/server/modules/sessions/session-history-service.js.map +1 -1
- package/dist/server/modules/sessions/session-live-runtime-service.d.ts +25 -2
- package/dist/server/modules/sessions/session-live-runtime-service.js +526 -158
- package/dist/server/modules/sessions/session-live-runtime-service.js.map +1 -1
- package/dist/server/modules/sessions/session-provider-error-mapper.js +28 -0
- package/dist/server/modules/sessions/session-provider-error-mapper.js.map +1 -1
- package/dist/server/modules/terminal/terminal-service.js +2 -2
- package/dist/server/modules/terminal/terminal-service.js.map +1 -1
- package/dist/server/modules/workbench/workbench-service.d.ts +7 -1
- package/dist/server/modules/workbench/workbench-service.js +31 -7
- package/dist/server/modules/workbench/workbench-service.js.map +1 -1
- package/dist/server/routes/butler.d.ts +3 -0
- package/dist/server/routes/butler.js +54 -0
- package/dist/server/routes/butler.js.map +1 -0
- package/dist/server/routes/sessions.d.ts +1 -0
- package/dist/server/routes/sessions.js +12 -3
- package/dist/server/routes/sessions.js.map +1 -1
- package/dist/server/server/create-server.d.ts +61 -0
- package/dist/server/server/create-server.js +180 -10
- package/dist/server/server/create-server.js.map +1 -1
- package/dist/server/storage/repositories/butler-control-event-repository.d.ts +8 -0
- package/dist/server/storage/repositories/butler-control-event-repository.js +78 -0
- package/dist/server/storage/repositories/butler-control-event-repository.js.map +1 -0
- package/dist/server/storage/repositories/butler-control-session-repository.d.ts +11 -0
- package/dist/server/storage/repositories/butler-control-session-repository.js +86 -0
- package/dist/server/storage/repositories/butler-control-session-repository.js.map +1 -0
- package/dist/server/storage/repositories/butler-follow-up-task-repository.d.ts +16 -0
- package/dist/server/storage/repositories/butler-follow-up-task-repository.js +252 -0
- package/dist/server/storage/repositories/butler-follow-up-task-repository.js.map +1 -0
- package/dist/server/storage/repositories/butler-inbox-item-repository.d.ts +15 -0
- package/dist/server/storage/repositories/butler-inbox-item-repository.js +111 -0
- package/dist/server/storage/repositories/butler-inbox-item-repository.js.map +1 -0
- package/dist/server/storage/repositories/butler-notification-archive-repository.d.ts +9 -0
- package/dist/server/storage/repositories/butler-notification-archive-repository.js +48 -0
- package/dist/server/storage/repositories/butler-notification-archive-repository.js.map +1 -0
- package/dist/server/storage/repositories/butler-profile-repository.d.ts +9 -0
- package/dist/server/storage/repositories/butler-profile-repository.js +86 -0
- package/dist/server/storage/repositories/butler-profile-repository.js.map +1 -0
- package/dist/server/storage/repositories/butler-project-repository.d.ts +14 -0
- package/dist/server/storage/repositories/butler-project-repository.js +140 -0
- package/dist/server/storage/repositories/butler-project-repository.js.map +1 -0
- package/dist/server/storage/repositories/butler-session-repository.d.ts +11 -0
- package/dist/server/storage/repositories/butler-session-repository.js +106 -0
- package/dist/server/storage/repositories/butler-session-repository.js.map +1 -0
- package/dist/server/storage/repositories/butler-session-summary-state-repository.d.ts +8 -0
- package/dist/server/storage/repositories/butler-session-summary-state-repository.js +62 -0
- package/dist/server/storage/repositories/butler-session-summary-state-repository.js.map +1 -0
- package/dist/server/storage/repositories/patrol-plan-repository.d.ts +27 -0
- package/dist/server/storage/repositories/patrol-plan-repository.js +119 -0
- package/dist/server/storage/repositories/patrol-plan-repository.js.map +1 -0
- package/dist/server/storage/repositories/patrol-run-repository.d.ts +28 -0
- package/dist/server/storage/repositories/patrol-run-repository.js +121 -0
- package/dist/server/storage/repositories/patrol-run-repository.js.map +1 -0
- package/dist/server/storage/repositories/project-memory-repository.d.ts +15 -0
- package/dist/server/storage/repositories/project-memory-repository.js +150 -0
- package/dist/server/storage/repositories/project-memory-repository.js.map +1 -0
- package/dist/server/storage/repositories/session-checkpoint-repository.d.ts +9 -0
- package/dist/server/storage/repositories/session-checkpoint-repository.js +72 -0
- package/dist/server/storage/repositories/session-checkpoint-repository.js.map +1 -0
- package/dist/server/storage/repositories/session-message-origin-repository.d.ts +10 -0
- package/dist/server/storage/repositories/session-message-origin-repository.js +93 -0
- package/dist/server/storage/repositories/session-message-origin-repository.js.map +1 -0
- package/dist/server/storage/repositories/verification-run-repository.d.ts +29 -0
- package/dist/server/storage/repositories/verification-run-repository.js +125 -0
- package/dist/server/storage/repositories/verification-run-repository.js.map +1 -0
- package/dist/server/storage/sqlite/client.js +39 -0
- package/dist/server/storage/sqlite/client.js.map +1 -1
- package/dist/server/storage/sqlite/schema.sql +324 -0
- package/dist/server/types/domain.d.ts +261 -1
- package/dist/server/ws/ws-server.d.ts +2 -1
- package/dist/server/ws/ws-server.js +2 -1
- package/dist/server/ws/ws-server.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/index.d.ts +4 -0
- package/node_modules/@codingns/session-sync-core/dist/index.js +4 -0
- package/node_modules/@codingns/session-sync-core/dist/index.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/kimi-message-normalizer.d.ts +18 -0
- package/node_modules/@codingns/session-sync-core/dist/kimi-message-normalizer.js +659 -0
- package/node_modules/@codingns/session-sync-core/dist/kimi-message-normalizer.js.map +1 -0
- package/node_modules/@codingns/session-sync-core/dist/kimi-shared.d.ts +11 -0
- package/node_modules/@codingns/session-sync-core/dist/kimi-shared.js +72 -0
- package/node_modules/@codingns/session-sync-core/dist/kimi-shared.js.map +1 -0
- package/node_modules/@codingns/session-sync-core/dist/patch-builder.d.ts +8 -0
- package/node_modules/@codingns/session-sync-core/dist/patch-builder.js +89 -0
- package/node_modules/@codingns/session-sync-core/dist/patch-builder.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/codex.js +4 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/codex.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/gemini.d.ts +41 -0
- package/node_modules/@codingns/session-sync-core/dist/providers/gemini.js +1086 -0
- package/node_modules/@codingns/session-sync-core/dist/providers/gemini.js.map +1 -0
- package/node_modules/@codingns/session-sync-core/dist/providers/kimi.d.ts +29 -0
- package/node_modules/@codingns/session-sync-core/dist/providers/kimi.js +578 -0
- package/node_modules/@codingns/session-sync-core/dist/providers/kimi.js.map +1 -0
- package/node_modules/@codingns/session-sync-core/dist/providers/opencode.js +2 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/opencode.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/utils.js +30 -2
- package/node_modules/@codingns/session-sync-core/dist/providers/utils.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/active-run-registry.d.ts +2 -0
- package/node_modules/@codingns/session-sync-core/dist/runtime/active-run-registry.js +43 -5
- package/node_modules/@codingns/session-sync-core/dist/runtime/active-run-registry.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.d.ts +2 -0
- package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js +320 -69
- package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/gemini-runtime.d.ts +21 -0
- package/node_modules/@codingns/session-sync-core/dist/runtime/gemini-runtime.js +537 -0
- package/node_modules/@codingns/session-sync-core/dist/runtime/gemini-runtime.js.map +1 -0
- package/node_modules/@codingns/session-sync-core/dist/runtime/kimi-runtime.d.ts +38 -0
- package/node_modules/@codingns/session-sync-core/dist/runtime/kimi-runtime.js +911 -0
- package/node_modules/@codingns/session-sync-core/dist/runtime/kimi-runtime.js.map +1 -0
- package/node_modules/@codingns/session-sync-core/dist/sqlite/node-sqlite.d.ts +6 -0
- package/node_modules/@codingns/session-sync-core/dist/sqlite/node-sqlite.js +9 -0
- package/node_modules/@codingns/session-sync-core/dist/sqlite/node-sqlite.js.map +1 -0
- package/node_modules/@codingns/session-sync-core/package.json +8 -0
- package/package.json +1 -1
- package/dist/public/assets/index-9hnprhO7.css +0 -1
- package/dist/public/assets/index-BTpmuKhG.js +0 -108
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workbench-service.js","sourceRoot":"","sources":["../../../../src/modules/workbench/workbench-service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"workbench-service.js","sourceRoot":"","sources":["../../../../src/modules/workbench/workbench-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
export async function registerButlerRoutes(app, butlerController) {
|
|
2
|
+
app.get("/api/butler/profile", butlerController.getProfile);
|
|
3
|
+
app.post("/api/butler/profile/init", butlerController.initProfile);
|
|
4
|
+
app.patch("/api/butler/profile", butlerController.updateProfile);
|
|
5
|
+
app.get("/api/butler/control-session", butlerController.getCurrentControlSession);
|
|
6
|
+
app.get("/api/butler/control-session/events", butlerController.listControlSessionEvents);
|
|
7
|
+
app.post("/api/butler/control-session/reset", butlerController.resetControlSession);
|
|
8
|
+
app.post("/api/butler/control-session/start", butlerController.startControlSession);
|
|
9
|
+
app.post("/api/butler/control-session/resume", butlerController.resumeControlSession);
|
|
10
|
+
app.post("/api/butler/control-session/messages", butlerController.sendControlMessage);
|
|
11
|
+
app.get("/api/butler/overview", butlerController.getOverview);
|
|
12
|
+
app.get("/api/butler/follow-up-tasks", butlerController.listFollowUpTasks);
|
|
13
|
+
app.get("/api/butler/follow-up-tasks/:taskId", butlerController.getFollowUpTask);
|
|
14
|
+
app.post("/api/butler/follow-up-tasks", butlerController.createFollowUpTask);
|
|
15
|
+
app.post("/api/butler/follow-up-tasks/:taskId/cancel", butlerController.cancelFollowUpTask);
|
|
16
|
+
app.get("/api/butler/inbox", butlerController.listInboxItems);
|
|
17
|
+
app.post("/api/butler/inbox", butlerController.createInboxItem);
|
|
18
|
+
app.patch("/api/butler/inbox/:itemId", butlerController.updateInboxItem);
|
|
19
|
+
app.delete("/api/butler/inbox/:itemId", butlerController.deleteInboxItem);
|
|
20
|
+
app.get("/api/butler/notifications/archives", butlerController.listNotificationArchives);
|
|
21
|
+
app.patch("/api/butler/notifications/archives/:notificationId", butlerController.updateNotificationArchive);
|
|
22
|
+
app.get("/api/butler/context-snapshot", butlerController.getContextSnapshot);
|
|
23
|
+
app.get("/api/butler/search", butlerController.searchSummaries);
|
|
24
|
+
app.get("/api/butler/session-target", butlerController.getSessionTarget);
|
|
25
|
+
app.get("/api/butler/session-action-context", butlerController.getSessionActionContext);
|
|
26
|
+
app.post("/api/butler/actions/open-project", butlerController.openProjectAction);
|
|
27
|
+
app.post("/api/butler/actions/resume-session", butlerController.resumeProjectSessionAction);
|
|
28
|
+
app.post("/api/butler/actions/start-patrol", butlerController.startPatrolAction);
|
|
29
|
+
app.post("/api/butler/actions/start-verification", butlerController.startVerificationAction);
|
|
30
|
+
app.get("/api/butler/projects", butlerController.listProjects);
|
|
31
|
+
app.post("/api/butler/projects", butlerController.createProject);
|
|
32
|
+
app.get("/api/butler/projects/:projectId", butlerController.getProject);
|
|
33
|
+
app.patch("/api/butler/projects/:projectId", butlerController.updateProject);
|
|
34
|
+
app.get("/api/butler/projects/:projectId/context", butlerController.getProjectContext);
|
|
35
|
+
app.get("/api/butler/projects/:projectId/overview", butlerController.getProjectOverview);
|
|
36
|
+
app.get("/api/butler/projects/:projectId/sessions", butlerController.listProjectSessions);
|
|
37
|
+
app.post("/api/butler/projects/:projectId/sessions/start", butlerController.startProjectSession);
|
|
38
|
+
app.post("/api/butler/projects/:projectId/sessions/import", butlerController.importProjectSession);
|
|
39
|
+
app.post("/api/butler/projects/:projectId/sessions/:butlerSessionId/resume", butlerController.resumeProjectSession);
|
|
40
|
+
app.post("/api/butler/projects/:projectId/sessions/:butlerSessionId/snapshot", butlerController.captureProjectSessionSnapshot);
|
|
41
|
+
app.get("/api/butler/projects/:projectId/memories", butlerController.listProjectMemories);
|
|
42
|
+
app.post("/api/butler/projects/:projectId/memories", butlerController.createProjectMemory);
|
|
43
|
+
app.patch("/api/butler/projects/:projectId/memories/:memoryId", butlerController.updateProjectMemory);
|
|
44
|
+
app.get("/api/butler/projects/:projectId/patrol-plans", butlerController.listPatrolPlans);
|
|
45
|
+
app.post("/api/butler/projects/:projectId/patrol-plans", butlerController.createPatrolPlan);
|
|
46
|
+
app.patch("/api/butler/projects/:projectId/patrol-plans/:planId", butlerController.updatePatrolPlan);
|
|
47
|
+
app.get("/api/butler/projects/:projectId/patrol-runs", butlerController.listPatrolRuns);
|
|
48
|
+
app.post("/api/butler/projects/:projectId/patrol-runs/start", butlerController.startPatrolRun);
|
|
49
|
+
app.get("/api/butler/projects/:projectId/patrol-runs/:runId", butlerController.getPatrolRun);
|
|
50
|
+
app.get("/api/butler/projects/:projectId/verifications", butlerController.listVerificationRuns);
|
|
51
|
+
app.post("/api/butler/projects/:projectId/verifications", butlerController.startVerificationRun);
|
|
52
|
+
app.get("/api/butler/projects/:projectId/verifications/:verificationId", butlerController.getVerificationRun);
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=butler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"butler.js","sourceRoot":"","sources":["../../../src/routes/butler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import type { FastifyInstance } from "fastify";
|
|
2
2
|
import type { SessionController } from "../modules/sessions/session-controller.js";
|
|
3
|
+
export declare const SESSION_MESSAGE_BODY_LIMIT_BYTES: number;
|
|
3
4
|
export declare function registerSessionRoutes(app: FastifyInstance, sessionController: SessionController): Promise<void>;
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
// 会话图片附件当前通过 JSON + base64 直接提交,Fastify 默认 1MB bodyLimit
|
|
2
|
+
// 对首条/追加/排队消息都过小,合法图片会在进入 controller 前就被 413 拦掉。
|
|
3
|
+
export const SESSION_MESSAGE_BODY_LIMIT_BYTES = 64 * 1024 * 1024;
|
|
1
4
|
export async function registerSessionRoutes(app, sessionController) {
|
|
2
5
|
app.get("/api/sessions", sessionController.list);
|
|
3
6
|
app.get("/api/sessions/:sessionId", sessionController.getDetail);
|
|
@@ -12,15 +15,21 @@ export async function registerSessionRoutes(app, sessionController) {
|
|
|
12
15
|
app.patch("/api/sessions/:sessionId/archive", sessionController.updateArchiveState);
|
|
13
16
|
app.patch("/api/sessions/:sessionId/favorite", sessionController.updateFavoriteState);
|
|
14
17
|
app.post("/api/sessions/:sessionId/messages", sessionController.sendMessage);
|
|
15
|
-
app.post("/api/sessions/:sessionId/messages/live",
|
|
18
|
+
app.post("/api/sessions/:sessionId/messages/live", {
|
|
19
|
+
bodyLimit: SESSION_MESSAGE_BODY_LIMIT_BYTES
|
|
20
|
+
}, sessionController.sendLiveMessage);
|
|
16
21
|
app.post("/api/sessions/:sessionId/permission-requests/:requestId/reply", sessionController.replyPermissionRequest);
|
|
17
|
-
app.post("/api/sessions/:sessionId/queue",
|
|
22
|
+
app.post("/api/sessions/:sessionId/queue", {
|
|
23
|
+
bodyLimit: SESSION_MESSAGE_BODY_LIMIT_BYTES
|
|
24
|
+
}, sessionController.enqueueLiveMessage);
|
|
18
25
|
app.post("/api/sessions/:sessionId/queue/:queueItemId/steer", sessionController.steerQueuedMessage);
|
|
19
26
|
app.post("/api/sessions/:sessionId/interrupt", sessionController.interrupt);
|
|
20
27
|
app.post("/api/sessions/:sessionId/seen", sessionController.markSeen);
|
|
21
28
|
app.post("/api/sessions/:sessionId/resume", sessionController.resume);
|
|
22
29
|
app.post("/api/sessions/start", sessionController.start);
|
|
23
|
-
app.post("/api/sessions/start-live",
|
|
30
|
+
app.post("/api/sessions/start-live", {
|
|
31
|
+
bodyLimit: SESSION_MESSAGE_BODY_LIMIT_BYTES
|
|
32
|
+
}, sessionController.startLive);
|
|
24
33
|
app.delete("/api/sessions/:sessionId/queue/:queueItemId", sessionController.deleteQueuedMessage);
|
|
25
34
|
}
|
|
26
35
|
//# sourceMappingURL=sessions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../../src/routes/sessions.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,GAAoB,EACpB,iBAAoC;IAEpC,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACjD,GAAG,CAAC,GAAG,CAAC,0BAA0B,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACjE,GAAG,CAAC,GAAG,CAAC,wCAAwC,EAAE,iBAAiB,CAAC,eAAe,CAAC,CAAC;IACrF,GAAG,CAAC,GAAG,CAAC,mCAAmC,EAAE,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAC7E,GAAG,CAAC,GAAG,CAAC,4DAA4D,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC;IACxG,GAAG,CAAC,GAAG,CAAC,uCAAuC,EAAE,iBAAiB,CAAC,eAAe,CAAC,CAAC;IACpF,GAAG,CAAC,GAAG,CAAC,8CAA8C,EAAE,iBAAiB,CAAC,sBAAsB,CAAC,CAAC;IAClG,GAAG,CAAC,GAAG,CAAC,gCAAgC,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACvE,GAAG,CAAC,GAAG,CAAC,kCAAkC,EAAE,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAC1E,GAAG,CAAC,KAAK,CAAC,gCAAgC,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC3E,GAAG,CAAC,KAAK,CAAC,kCAAkC,EAAE,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;IACpF,GAAG,CAAC,KAAK,CAAC,mCAAmC,EAAE,iBAAiB,CAAC,mBAAmB,CAAC,CAAC;IACtF,GAAG,CAAC,IAAI,CAAC,mCAAmC,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC7E,GAAG,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../../src/routes/sessions.ts"],"names":[],"mappings":"AAIA,yDAAyD;AACzD,iDAAiD;AACjD,MAAM,CAAC,MAAM,gCAAgC,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAEjE,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,GAAoB,EACpB,iBAAoC;IAEpC,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACjD,GAAG,CAAC,GAAG,CAAC,0BAA0B,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACjE,GAAG,CAAC,GAAG,CAAC,wCAAwC,EAAE,iBAAiB,CAAC,eAAe,CAAC,CAAC;IACrF,GAAG,CAAC,GAAG,CAAC,mCAAmC,EAAE,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAC7E,GAAG,CAAC,GAAG,CAAC,4DAA4D,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC;IACxG,GAAG,CAAC,GAAG,CAAC,uCAAuC,EAAE,iBAAiB,CAAC,eAAe,CAAC,CAAC;IACpF,GAAG,CAAC,GAAG,CAAC,8CAA8C,EAAE,iBAAiB,CAAC,sBAAsB,CAAC,CAAC;IAClG,GAAG,CAAC,GAAG,CAAC,gCAAgC,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACvE,GAAG,CAAC,GAAG,CAAC,kCAAkC,EAAE,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAC1E,GAAG,CAAC,KAAK,CAAC,gCAAgC,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC3E,GAAG,CAAC,KAAK,CAAC,kCAAkC,EAAE,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;IACpF,GAAG,CAAC,KAAK,CAAC,mCAAmC,EAAE,iBAAiB,CAAC,mBAAmB,CAAC,CAAC;IACtF,GAAG,CAAC,IAAI,CAAC,mCAAmC,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC7E,GAAG,CAAC,IAAI,CACN,wCAAwC,EACxC;QACE,SAAS,EAAE,gCAAgC;KAC5C,EACD,iBAAiB,CAAC,eAAe,CAClC,CAAC;IACF,GAAG,CAAC,IAAI,CACN,+DAA+D,EAC/D,iBAAiB,CAAC,sBAAsB,CACzC,CAAC;IACF,GAAG,CAAC,IAAI,CACN,gCAAgC,EAChC;QACE,SAAS,EAAE,gCAAgC;KAC5C,EACD,iBAAiB,CAAC,kBAAkB,CACrC,CAAC;IACF,GAAG,CAAC,IAAI,CAAC,mDAAmD,EAAE,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;IACpG,GAAG,CAAC,IAAI,CAAC,oCAAoC,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAC5E,GAAG,CAAC,IAAI,CAAC,+BAA+B,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACtE,GAAG,CAAC,IAAI,CAAC,iCAAiC,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACtE,GAAG,CAAC,IAAI,CAAC,qBAAqB,EAAE,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACzD,GAAG,CAAC,IAAI,CACN,0BAA0B,EAC1B;QACE,SAAS,EAAE,gCAAgC;KAC5C,EACD,iBAAiB,CAAC,SAAS,CAC5B,CAAC;IACF,GAAG,CAAC,MAAM,CAAC,6CAA6C,EAAE,iBAAiB,CAAC,mBAAmB,CAAC,CAAC;AACnG,CAAC"}
|
|
@@ -2,6 +2,21 @@ import Fastify from "fastify";
|
|
|
2
2
|
import type { HostConfig } from "../config/env.js";
|
|
3
3
|
import { AuthService } from "../modules/auth/auth-service.js";
|
|
4
4
|
import { BootstrapService } from "../modules/bootstrap/bootstrap-service.js";
|
|
5
|
+
import { ButlerControlSessionService } from "../modules/butler/butler-control-session-service.js";
|
|
6
|
+
import { ButlerControlActionService } from "../modules/butler/butler-control-action-service.js";
|
|
7
|
+
import { ButlerActionContextService } from "../modules/butler/butler-action-context-service.js";
|
|
8
|
+
import { ButlerFollowUpScheduler } from "../modules/butler/butler-follow-up-scheduler.js";
|
|
9
|
+
import { ButlerFollowUpService } from "../modules/butler/butler-follow-up-service.js";
|
|
10
|
+
import { ButlerProfileService } from "../modules/butler/butler-profile-service.js";
|
|
11
|
+
import { ButlerProjectService } from "../modules/butler/butler-project-service.js";
|
|
12
|
+
import { ButlerSessionService } from "../modules/butler/butler-session-service.js";
|
|
13
|
+
import { ButlerSessionSummaryService } from "../modules/butler/butler-session-summary-service.js";
|
|
14
|
+
import { PatrolPlanService } from "../modules/butler/patrol-plan-service.js";
|
|
15
|
+
import { PatrolRunService } from "../modules/butler/patrol-run-service.js";
|
|
16
|
+
import { PatrolScheduler } from "../modules/butler/patrol-scheduler.js";
|
|
17
|
+
import { ProjectMemoryService } from "../modules/butler/project-memory-service.js";
|
|
18
|
+
import { SessionSummaryScheduler } from "../modules/butler/session-summary-scheduler.js";
|
|
19
|
+
import { VerificationRunService } from "../modules/butler/verification-run-service.js";
|
|
5
20
|
import { ClientService } from "../modules/client/client-service.js";
|
|
6
21
|
import { FileContentService } from "../modules/file/file-content-service.js";
|
|
7
22
|
import { FileContextService } from "../modules/file/file-context-service.js";
|
|
@@ -26,13 +41,28 @@ import { WorkspaceService } from "../modules/workspace/workspace-service.js";
|
|
|
26
41
|
import { AuthTokenRepository } from "../storage/repositories/auth-token-repository.js";
|
|
27
42
|
import { AuthUserRepository } from "../storage/repositories/auth-user-repository.js";
|
|
28
43
|
import { BootstrapStateRepository } from "../storage/repositories/bootstrap-state-repository.js";
|
|
44
|
+
import { ButlerControlSessionRepository } from "../storage/repositories/butler-control-session-repository.js";
|
|
45
|
+
import { ButlerControlEventRepository } from "../storage/repositories/butler-control-event-repository.js";
|
|
46
|
+
import { ButlerFollowUpTaskRepository } from "../storage/repositories/butler-follow-up-task-repository.js";
|
|
47
|
+
import { ButlerInboxItemRepository } from "../storage/repositories/butler-inbox-item-repository.js";
|
|
48
|
+
import { ButlerNotificationArchiveRepository } from "../storage/repositories/butler-notification-archive-repository.js";
|
|
49
|
+
import { ButlerProfileRepository } from "../storage/repositories/butler-profile-repository.js";
|
|
50
|
+
import { ButlerProjectRepository } from "../storage/repositories/butler-project-repository.js";
|
|
51
|
+
import { ButlerSessionRepository } from "../storage/repositories/butler-session-repository.js";
|
|
52
|
+
import { ButlerSessionSummaryStateRepository } from "../storage/repositories/butler-session-summary-state-repository.js";
|
|
53
|
+
import { PatrolPlanRepository } from "../storage/repositories/patrol-plan-repository.js";
|
|
54
|
+
import { PatrolRunRepository } from "../storage/repositories/patrol-run-repository.js";
|
|
55
|
+
import { ProjectMemoryRepository } from "../storage/repositories/project-memory-repository.js";
|
|
56
|
+
import { VerificationRunRepository } from "../storage/repositories/verification-run-repository.js";
|
|
29
57
|
import { CommitRuleProfileRepository } from "../storage/repositories/commit-rule-profile-repository.js";
|
|
30
58
|
import { FileContextBindingRepository } from "../storage/repositories/file-context-binding-repository.js";
|
|
31
59
|
import { RecentFileRepository } from "../storage/repositories/recent-file-repository.js";
|
|
32
60
|
import { SessionBindingRepository } from "../storage/repositories/session-binding-repository.js";
|
|
33
61
|
import { SessionChangedFileRepository } from "../storage/repositories/session-changed-file-repository.js";
|
|
34
62
|
import { SessionIndexRepository } from "../storage/repositories/session-index-repository.js";
|
|
63
|
+
import { SessionCheckpointRepository } from "../storage/repositories/session-checkpoint-repository.js";
|
|
35
64
|
import { SessionMessageAttachmentRepository } from "../storage/repositories/session-message-attachment-repository.js";
|
|
65
|
+
import { SessionMessageOriginRepository } from "../storage/repositories/session-message-origin-repository.js";
|
|
36
66
|
import { SessionSendQueueRepository } from "../storage/repositories/session-send-queue-repository.js";
|
|
37
67
|
import { SessionStateRepository } from "../storage/repositories/session-state-repository.js";
|
|
38
68
|
import { SessionStatusSnapshotRepository } from "../storage/repositories/session-status-snapshot-repository.js";
|
|
@@ -56,13 +86,28 @@ export declare function createServer(config: HostConfig): {
|
|
|
56
86
|
authUserRepository: AuthUserRepository;
|
|
57
87
|
authTokenRepository: AuthTokenRepository;
|
|
58
88
|
workspaceRepository: WorkspaceRepository;
|
|
89
|
+
butlerControlSessionRepository: ButlerControlSessionRepository;
|
|
90
|
+
butlerControlEventRepository: ButlerControlEventRepository;
|
|
91
|
+
butlerFollowUpTaskRepository: ButlerFollowUpTaskRepository;
|
|
92
|
+
butlerInboxItemRepository: ButlerInboxItemRepository;
|
|
93
|
+
butlerNotificationArchiveRepository: ButlerNotificationArchiveRepository;
|
|
94
|
+
butlerProfileRepository: ButlerProfileRepository;
|
|
95
|
+
butlerProjectRepository: ButlerProjectRepository;
|
|
96
|
+
butlerSessionRepository: ButlerSessionRepository;
|
|
97
|
+
butlerSessionSummaryStateRepository: ButlerSessionSummaryStateRepository;
|
|
98
|
+
projectMemoryRepository: ProjectMemoryRepository;
|
|
99
|
+
patrolPlanRepository: PatrolPlanRepository;
|
|
100
|
+
patrolRunRepository: PatrolRunRepository;
|
|
101
|
+
verificationRunRepository: VerificationRunRepository;
|
|
59
102
|
commitRuleProfileRepository: CommitRuleProfileRepository;
|
|
60
103
|
recentFileRepository: RecentFileRepository;
|
|
61
104
|
fileContextBindingRepository: FileContextBindingRepository;
|
|
62
105
|
sessionBindingRepository: SessionBindingRepository;
|
|
63
106
|
sessionChangedFileRepository: SessionChangedFileRepository;
|
|
107
|
+
sessionCheckpointRepository: SessionCheckpointRepository;
|
|
64
108
|
sessionIndexRepository: SessionIndexRepository;
|
|
65
109
|
sessionMessageAttachmentRepository: SessionMessageAttachmentRepository;
|
|
110
|
+
sessionMessageOriginRepository: SessionMessageOriginRepository;
|
|
66
111
|
sessionSendQueueRepository: SessionSendQueueRepository;
|
|
67
112
|
sessionStateRepository: SessionStateRepository;
|
|
68
113
|
sessionStatusSnapshotRepository: SessionStatusSnapshotRepository;
|
|
@@ -80,6 +125,22 @@ export declare function createServer(config: HostConfig): {
|
|
|
80
125
|
authService: AuthService;
|
|
81
126
|
workspaceService: WorkspaceService;
|
|
82
127
|
workbenchService: WorkbenchService;
|
|
128
|
+
butlerProfileService: ButlerProfileService;
|
|
129
|
+
butlerSessionLiveRuntimeService: SessionLiveRuntimeService;
|
|
130
|
+
butlerControlSessionService: ButlerControlSessionService;
|
|
131
|
+
butlerControlActionService: ButlerControlActionService;
|
|
132
|
+
butlerFollowUpService: ButlerFollowUpService;
|
|
133
|
+
butlerActionContextService: ButlerActionContextService;
|
|
134
|
+
butlerProjectService: ButlerProjectService;
|
|
135
|
+
butlerSessionService: ButlerSessionService;
|
|
136
|
+
projectMemoryService: ProjectMemoryService;
|
|
137
|
+
patrolPlanService: PatrolPlanService;
|
|
138
|
+
patrolRunService: PatrolRunService;
|
|
139
|
+
verificationRunService: VerificationRunService;
|
|
140
|
+
patrolScheduler: PatrolScheduler;
|
|
141
|
+
butlerSessionSummaryService: ButlerSessionSummaryService;
|
|
142
|
+
sessionSummaryScheduler: SessionSummaryScheduler;
|
|
143
|
+
butlerFollowUpScheduler: ButlerFollowUpScheduler;
|
|
83
144
|
workspacePanelSnapshotService: WorkspacePanelSnapshotService;
|
|
84
145
|
fileTreeService: FileTreeService;
|
|
85
146
|
fileSearchService: FileSearchService;
|
|
@@ -5,6 +5,31 @@ import { AuthController } from "../modules/auth/auth-controller.js";
|
|
|
5
5
|
import { AuthService } from "../modules/auth/auth-service.js";
|
|
6
6
|
import { BootstrapController } from "../modules/bootstrap/bootstrap-controller.js";
|
|
7
7
|
import { BootstrapService } from "../modules/bootstrap/bootstrap-service.js";
|
|
8
|
+
import { ButlerControlSessionService } from "../modules/butler/butler-control-session-service.js";
|
|
9
|
+
import { ButlerControlActionService } from "../modules/butler/butler-control-action-service.js";
|
|
10
|
+
import { ButlerController } from "../modules/butler/butler-controller.js";
|
|
11
|
+
import { ButlerActionContextService } from "../modules/butler/butler-action-context-service.js";
|
|
12
|
+
import { ButlerContextAggregator } from "../modules/butler/context-aggregator.js";
|
|
13
|
+
import { ButlerAuthService } from "../modules/butler/butler-auth-service.js";
|
|
14
|
+
import { ButlerFollowUpEvaluationInstructionAdapter } from "../modules/butler/butler-follow-up-evaluation-instruction-adapter.js";
|
|
15
|
+
import { ButlerFollowUpScheduler } from "../modules/butler/butler-follow-up-scheduler.js";
|
|
16
|
+
import { ButlerFollowUpService } from "../modules/butler/butler-follow-up-service.js";
|
|
17
|
+
import { ButlerInboxService } from "../modules/butler/butler-inbox-service.js";
|
|
18
|
+
import { ButlerNotificationService } from "../modules/butler/butler-notification-service.js";
|
|
19
|
+
import { ButlerProfileService } from "../modules/butler/butler-profile-service.js";
|
|
20
|
+
import { ButlerProjectService } from "../modules/butler/butler-project-service.js";
|
|
21
|
+
import { ButlerSessionService } from "../modules/butler/butler-session-service.js";
|
|
22
|
+
import { ButlerSessionSummaryService } from "../modules/butler/butler-session-summary-service.js";
|
|
23
|
+
import { InstructionAdapter } from "../modules/butler/instruction-adapter.js";
|
|
24
|
+
import { PatrolPlanService } from "../modules/butler/patrol-plan-service.js";
|
|
25
|
+
import { PatrolExecutionService } from "../modules/butler/patrol-execution-service.js";
|
|
26
|
+
import { ProviderAdapterRegistry, RuntimePatrolProviderAdapter } from "../modules/butler/provider-adapter-registry.js";
|
|
27
|
+
import { PatrolRunService } from "../modules/butler/patrol-run-service.js";
|
|
28
|
+
import { PatrolScheduler } from "../modules/butler/patrol-scheduler.js";
|
|
29
|
+
import { ProjectMemoryService } from "../modules/butler/project-memory-service.js";
|
|
30
|
+
import { SessionSummaryInstructionAdapter } from "../modules/butler/session-summary-instruction-adapter.js";
|
|
31
|
+
import { SessionSummaryScheduler } from "../modules/butler/session-summary-scheduler.js";
|
|
32
|
+
import { VerificationRunService } from "../modules/butler/verification-run-service.js";
|
|
8
33
|
import { ClientController } from "../modules/client/client-controller.js";
|
|
9
34
|
import { ClientService } from "../modules/client/client-service.js";
|
|
10
35
|
import { FileAccessGuard } from "../modules/file/file-access-guard.js";
|
|
@@ -48,6 +73,7 @@ import { WorkspaceFileWatcher } from "../modules/workbench/workspace-file-watche
|
|
|
48
73
|
import { WorkspaceController } from "../modules/workspace/workspace-controller.js";
|
|
49
74
|
import { WorkspaceService } from "../modules/workspace/workspace-service.js";
|
|
50
75
|
import { registerAuthRoutes } from "../routes/auth.js";
|
|
76
|
+
import { registerButlerRoutes } from "../routes/butler.js";
|
|
51
77
|
import { registerClientRoutes } from "../routes/client.js";
|
|
52
78
|
import { registerFileRoutes } from "../routes/files.js";
|
|
53
79
|
import { registerGitRoutes } from "../routes/git.js";
|
|
@@ -60,18 +86,34 @@ import { registerSessionRoutes } from "../routes/sessions.js";
|
|
|
60
86
|
import { registerTerminalRoutes } from "../routes/terminals.js";
|
|
61
87
|
import { registerWorkbenchRoutes } from "../routes/workbench.js";
|
|
62
88
|
import { registerWorkspaceRoutes } from "../routes/workspaces.js";
|
|
89
|
+
import { DemoCleanupService, DemoOnlineTracker } from "../modules/demo/demo-cleanup-service.js";
|
|
63
90
|
import { setErrorHandler } from "../shared/http/error-handler.js";
|
|
64
91
|
import { startTerminalDebugEventLoopLagMonitor } from "../shared/utils/terminal-debug-log.js";
|
|
65
92
|
import { AuthTokenRepository } from "../storage/repositories/auth-token-repository.js";
|
|
66
93
|
import { AuthUserRepository } from "../storage/repositories/auth-user-repository.js";
|
|
67
94
|
import { BootstrapStateRepository } from "../storage/repositories/bootstrap-state-repository.js";
|
|
95
|
+
import { ButlerControlSessionRepository } from "../storage/repositories/butler-control-session-repository.js";
|
|
96
|
+
import { ButlerControlEventRepository } from "../storage/repositories/butler-control-event-repository.js";
|
|
97
|
+
import { ButlerFollowUpTaskRepository } from "../storage/repositories/butler-follow-up-task-repository.js";
|
|
98
|
+
import { ButlerInboxItemRepository } from "../storage/repositories/butler-inbox-item-repository.js";
|
|
99
|
+
import { ButlerNotificationArchiveRepository } from "../storage/repositories/butler-notification-archive-repository.js";
|
|
100
|
+
import { ButlerProfileRepository } from "../storage/repositories/butler-profile-repository.js";
|
|
101
|
+
import { ButlerProjectRepository } from "../storage/repositories/butler-project-repository.js";
|
|
102
|
+
import { ButlerSessionRepository } from "../storage/repositories/butler-session-repository.js";
|
|
103
|
+
import { ButlerSessionSummaryStateRepository } from "../storage/repositories/butler-session-summary-state-repository.js";
|
|
104
|
+
import { PatrolPlanRepository } from "../storage/repositories/patrol-plan-repository.js";
|
|
105
|
+
import { PatrolRunRepository } from "../storage/repositories/patrol-run-repository.js";
|
|
106
|
+
import { ProjectMemoryRepository } from "../storage/repositories/project-memory-repository.js";
|
|
107
|
+
import { VerificationRunRepository } from "../storage/repositories/verification-run-repository.js";
|
|
68
108
|
import { CommitRuleProfileRepository } from "../storage/repositories/commit-rule-profile-repository.js";
|
|
69
109
|
import { FileContextBindingRepository } from "../storage/repositories/file-context-binding-repository.js";
|
|
70
110
|
import { RecentFileRepository } from "../storage/repositories/recent-file-repository.js";
|
|
71
111
|
import { SessionBindingRepository } from "../storage/repositories/session-binding-repository.js";
|
|
72
112
|
import { SessionChangedFileRepository } from "../storage/repositories/session-changed-file-repository.js";
|
|
73
113
|
import { SessionIndexRepository } from "../storage/repositories/session-index-repository.js";
|
|
114
|
+
import { SessionCheckpointRepository } from "../storage/repositories/session-checkpoint-repository.js";
|
|
74
115
|
import { SessionMessageAttachmentRepository } from "../storage/repositories/session-message-attachment-repository.js";
|
|
116
|
+
import { SessionMessageOriginRepository } from "../storage/repositories/session-message-origin-repository.js";
|
|
75
117
|
import { SessionSendQueueRepository } from "../storage/repositories/session-send-queue-repository.js";
|
|
76
118
|
import { SessionStateRepository } from "../storage/repositories/session-state-repository.js";
|
|
77
119
|
import { SessionStatusSnapshotRepository } from "../storage/repositories/session-status-snapshot-repository.js";
|
|
@@ -90,6 +132,10 @@ import { createWsServer } from "../ws/ws-server.js";
|
|
|
90
132
|
import { WsAuthGuard } from "../ws/ws-auth-guard.js";
|
|
91
133
|
import { registerStaticWebRoutes } from "./static-web.js";
|
|
92
134
|
export function createServer(config) {
|
|
135
|
+
// Demo 模式下覆盖 token TTL 为 15 分钟
|
|
136
|
+
const effectiveConfig = config.demoMode
|
|
137
|
+
? { ...config, accessTokenTtlSeconds: 900, refreshTokenTtlSeconds: 900 }
|
|
138
|
+
: config;
|
|
93
139
|
const app = Fastify({
|
|
94
140
|
logger: false
|
|
95
141
|
});
|
|
@@ -100,13 +146,28 @@ export function createServer(config) {
|
|
|
100
146
|
authUserRepository: new AuthUserRepository(database.db),
|
|
101
147
|
authTokenRepository: new AuthTokenRepository(database.db),
|
|
102
148
|
workspaceRepository: new WorkspaceRepository(database.db),
|
|
149
|
+
butlerControlSessionRepository: new ButlerControlSessionRepository(database.db),
|
|
150
|
+
butlerControlEventRepository: new ButlerControlEventRepository(database.db),
|
|
151
|
+
butlerFollowUpTaskRepository: new ButlerFollowUpTaskRepository(database.db),
|
|
152
|
+
butlerInboxItemRepository: new ButlerInboxItemRepository(database.db),
|
|
153
|
+
butlerNotificationArchiveRepository: new ButlerNotificationArchiveRepository(database.db),
|
|
154
|
+
butlerProfileRepository: new ButlerProfileRepository(database.db),
|
|
155
|
+
butlerProjectRepository: new ButlerProjectRepository(database.db),
|
|
156
|
+
butlerSessionRepository: new ButlerSessionRepository(database.db),
|
|
157
|
+
butlerSessionSummaryStateRepository: new ButlerSessionSummaryStateRepository(database.db),
|
|
158
|
+
projectMemoryRepository: new ProjectMemoryRepository(database.db),
|
|
159
|
+
patrolPlanRepository: new PatrolPlanRepository(database.db),
|
|
160
|
+
patrolRunRepository: new PatrolRunRepository(database.db),
|
|
161
|
+
verificationRunRepository: new VerificationRunRepository(database.db),
|
|
103
162
|
commitRuleProfileRepository: new CommitRuleProfileRepository(database.db),
|
|
104
163
|
recentFileRepository: new RecentFileRepository(database.db),
|
|
105
164
|
fileContextBindingRepository: new FileContextBindingRepository(database.db),
|
|
106
165
|
sessionBindingRepository: new SessionBindingRepository(database.db),
|
|
107
166
|
sessionChangedFileRepository: new SessionChangedFileRepository(database.db),
|
|
167
|
+
sessionCheckpointRepository: new SessionCheckpointRepository(database.db),
|
|
108
168
|
sessionIndexRepository: new SessionIndexRepository(database.db),
|
|
109
169
|
sessionMessageAttachmentRepository: new SessionMessageAttachmentRepository(database.db),
|
|
170
|
+
sessionMessageOriginRepository: new SessionMessageOriginRepository(database.db),
|
|
110
171
|
sessionSendQueueRepository: new SessionSendQueueRepository(database.db),
|
|
111
172
|
sessionStateRepository: new SessionStateRepository(database.db),
|
|
112
173
|
sessionStatusSnapshotRepository: new SessionStatusSnapshotRepository(database.db),
|
|
@@ -118,9 +179,19 @@ export function createServer(config) {
|
|
|
118
179
|
terminalRuntimeSessionRepository: new TerminalRuntimeSessionRepository(database.db),
|
|
119
180
|
terminalCommandTemplateRepository: new TerminalCommandTemplateRepository(database.db)
|
|
120
181
|
};
|
|
121
|
-
const bootstrapService = new BootstrapService(database.db, repositories.bootstrapStateRepository, repositories.authUserRepository);
|
|
182
|
+
const bootstrapService = new BootstrapService(database.db, repositories.bootstrapStateRepository, repositories.authUserRepository, config.demoMode);
|
|
122
183
|
const clientService = new ClientService(config);
|
|
123
|
-
|
|
184
|
+
// Demo 模式服务
|
|
185
|
+
const demoCleanupService = config.demoMode
|
|
186
|
+
? new DemoCleanupService(database.db, config.databasePath)
|
|
187
|
+
: undefined;
|
|
188
|
+
const demoOnlineTracker = config.demoMode
|
|
189
|
+
? new DemoOnlineTracker()
|
|
190
|
+
: undefined;
|
|
191
|
+
const demoServices = (demoCleanupService && demoOnlineTracker)
|
|
192
|
+
? { cleanupService: demoCleanupService, onlineTracker: demoOnlineTracker }
|
|
193
|
+
: undefined;
|
|
194
|
+
const authService = new AuthService(repositories.bootstrapStateRepository, repositories.authUserRepository, repositories.authTokenRepository, effectiveConfig, demoServices);
|
|
124
195
|
const gitCommandRunner = new GitCommandRunner({
|
|
125
196
|
preferHelperProcess: !process.env.VITEST
|
|
126
197
|
});
|
|
@@ -144,9 +215,69 @@ export function createServer(config) {
|
|
|
144
215
|
const sessionMessageAttachmentService = new SessionMessageAttachmentService(repositories.sessionMessageAttachmentRepository, config);
|
|
145
216
|
const sessionChangedFileService = new SessionChangedFileService(repositories.sessionChangedFileRepository);
|
|
146
217
|
const sessionActivityAuthorityService = new SessionActivityAuthorityService();
|
|
147
|
-
const sessionHistoryService = new SessionHistoryService(database.db, repositories.workspaceRepository, repositories.sessionBindingRepository, sessionChangedFileService, repositories.sessionIndexRepository, sessionMessageAttachmentService, repositories.sessionStateRepository, repositories.sessionStatusSnapshotRepository, config, sessionActivityAuthorityService);
|
|
218
|
+
const sessionHistoryService = new SessionHistoryService(database.db, repositories.workspaceRepository, repositories.sessionBindingRepository, sessionChangedFileService, repositories.sessionIndexRepository, sessionMessageAttachmentService, repositories.sessionStateRepository, repositories.sessionStatusSnapshotRepository, config, sessionActivityAuthorityService, repositories.sessionMessageOriginRepository);
|
|
148
219
|
const sessionLiveRuntimeService = new SessionLiveRuntimeService(sessionHistoryService, sessionMessageAttachmentService, workspaceService, sessionChangedFileService, repositories.sessionBindingRepository, repositories.authUserRepository, repositories.sessionSendQueueRepository, repositories.sessionIndexRepository, repositories.sessionStateRepository, repositories.sessionStatusSnapshotRepository, config, sessionActivityAuthorityService);
|
|
149
|
-
const
|
|
220
|
+
const butlerProfileService = new ButlerProfileService(repositories.butlerProfileRepository, repositories.butlerProjectRepository, path.dirname(config.databasePath));
|
|
221
|
+
const butlerRuntimeRootDir = path.join(path.dirname(config.databasePath), "butler-runtime");
|
|
222
|
+
const butlerRuntimeConfig = {
|
|
223
|
+
...config,
|
|
224
|
+
codexHomeDir: path.join(butlerRuntimeRootDir, "codex-home"),
|
|
225
|
+
claudeCodeHomeDir: path.join(butlerRuntimeRootDir, "claude-home")
|
|
226
|
+
};
|
|
227
|
+
const butlerSummaryRuntimeConfig = {
|
|
228
|
+
...config,
|
|
229
|
+
codexHomeDir: path.join(butlerRuntimeRootDir, "summary-codex-home"),
|
|
230
|
+
claudeCodeHomeDir: path.join(butlerRuntimeRootDir, "summary-claude-home")
|
|
231
|
+
};
|
|
232
|
+
const butlerFollowUpRuntimeConfig = {
|
|
233
|
+
...config,
|
|
234
|
+
codexHomeDir: path.join(butlerRuntimeRootDir, "follow-up-codex-home"),
|
|
235
|
+
claudeCodeHomeDir: path.join(butlerRuntimeRootDir, "follow-up-claude-home")
|
|
236
|
+
};
|
|
237
|
+
const butlerSessionLiveRuntimeService = new SessionLiveRuntimeService(sessionHistoryService, sessionMessageAttachmentService, workspaceService, sessionChangedFileService, repositories.sessionBindingRepository, repositories.authUserRepository, repositories.sessionSendQueueRepository, repositories.sessionIndexRepository, repositories.sessionStateRepository, repositories.sessionStatusSnapshotRepository, butlerRuntimeConfig, sessionActivityAuthorityService);
|
|
238
|
+
const butlerSummarySessionLiveRuntimeService = new SessionLiveRuntimeService(sessionHistoryService, sessionMessageAttachmentService, workspaceService, sessionChangedFileService, repositories.sessionBindingRepository, repositories.authUserRepository, repositories.sessionSendQueueRepository, repositories.sessionIndexRepository, repositories.sessionStateRepository, repositories.sessionStatusSnapshotRepository, butlerSummaryRuntimeConfig, sessionActivityAuthorityService);
|
|
239
|
+
const butlerFollowUpSessionLiveRuntimeService = new SessionLiveRuntimeService(sessionHistoryService, sessionMessageAttachmentService, workspaceService, sessionChangedFileService, repositories.sessionBindingRepository, repositories.authUserRepository, repositories.sessionSendQueueRepository, repositories.sessionIndexRepository, repositories.sessionStateRepository, repositories.sessionStatusSnapshotRepository, butlerFollowUpRuntimeConfig, sessionActivityAuthorityService);
|
|
240
|
+
const workbenchService = new WorkbenchService(repositories.workspaceRepository, sessionHistoryService, butlerProfileService, repositories.butlerControlSessionRepository);
|
|
241
|
+
const butlerProjectService = new ButlerProjectService(repositories.butlerProjectRepository, repositories.butlerSessionRepository, repositories.workspaceRepository, butlerProfileService);
|
|
242
|
+
const butlerInboxService = new ButlerInboxService(repositories.butlerProjectRepository, repositories.butlerInboxItemRepository);
|
|
243
|
+
const butlerNotificationService = new ButlerNotificationService(repositories.butlerNotificationArchiveRepository);
|
|
244
|
+
const butlerSessionService = new ButlerSessionService(repositories.butlerProjectRepository, repositories.butlerSessionRepository, repositories.sessionCheckpointRepository, repositories.sessionBindingRepository, repositories.sessionIndexRepository, repositories.sessionStateRepository, sessionLiveRuntimeService, sessionHistoryService);
|
|
245
|
+
const projectMemoryService = new ProjectMemoryService(repositories.butlerProjectRepository, repositories.projectMemoryRepository);
|
|
246
|
+
const patrolPlanService = new PatrolPlanService(repositories.butlerProjectRepository, repositories.patrolPlanRepository);
|
|
247
|
+
const patrolRunService = new PatrolRunService(repositories.butlerProjectRepository, repositories.patrolPlanRepository, repositories.patrolRunRepository);
|
|
248
|
+
const instructionAdapter = new InstructionAdapter();
|
|
249
|
+
const providerAdapterRegistry = new ProviderAdapterRegistry([
|
|
250
|
+
new RuntimePatrolProviderAdapter("codex", sessionLiveRuntimeService, sessionHistoryService),
|
|
251
|
+
new RuntimePatrolProviderAdapter("claude-code", sessionLiveRuntimeService, sessionHistoryService)
|
|
252
|
+
]);
|
|
253
|
+
const summaryProviderAdapterRegistry = new ProviderAdapterRegistry([
|
|
254
|
+
new RuntimePatrolProviderAdapter("codex", butlerSummarySessionLiveRuntimeService, sessionHistoryService),
|
|
255
|
+
new RuntimePatrolProviderAdapter("claude-code", butlerSummarySessionLiveRuntimeService, sessionHistoryService)
|
|
256
|
+
]);
|
|
257
|
+
const followUpProviderAdapterRegistry = new ProviderAdapterRegistry([
|
|
258
|
+
new RuntimePatrolProviderAdapter("codex", butlerFollowUpSessionLiveRuntimeService, sessionHistoryService),
|
|
259
|
+
new RuntimePatrolProviderAdapter("claude-code", butlerFollowUpSessionLiveRuntimeService, sessionHistoryService)
|
|
260
|
+
]);
|
|
261
|
+
const patrolExecutionService = new PatrolExecutionService(repositories.butlerProjectRepository, repositories.butlerSessionRepository, repositories.sessionCheckpointRepository, repositories.patrolPlanRepository, patrolRunService, repositories.projectMemoryRepository, repositories.sessionChangedFileRepository, repositories.authUserRepository, providerAdapterRegistry, instructionAdapter);
|
|
262
|
+
const patrolScheduler = new PatrolScheduler(patrolPlanService, patrolRunService, patrolExecutionService);
|
|
263
|
+
const sessionSummaryInstructionAdapter = new SessionSummaryInstructionAdapter();
|
|
264
|
+
const butlerFollowUpEvaluationInstructionAdapter = new ButlerFollowUpEvaluationInstructionAdapter();
|
|
265
|
+
const verificationRunService = new VerificationRunService(repositories.butlerProjectRepository, repositories.butlerSessionRepository, repositories.sessionCheckpointRepository, repositories.verificationRunRepository);
|
|
266
|
+
const butlerContextAggregator = new ButlerContextAggregator(butlerProfileService, butlerProjectService, butlerSessionService, butlerInboxService, projectMemoryService, patrolRunService, verificationRunService, repositories.sessionCheckpointRepository);
|
|
267
|
+
const butlerAuthService = new ButlerAuthService(repositories.authTokenRepository, config);
|
|
268
|
+
const butlerSessionSummaryService = new ButlerSessionSummaryService(butlerProfileService, butlerProjectService, butlerSessionService, repositories.butlerSessionRepository, repositories.butlerSessionSummaryStateRepository, repositories.sessionCheckpointRepository, repositories.sessionIndexRepository, repositories.authUserRepository, workspaceService, sessionHistoryService, summaryProviderAdapterRegistry, sessionSummaryInstructionAdapter, {
|
|
269
|
+
summaryCodexHomeDir: butlerSummaryRuntimeConfig.codexHomeDir,
|
|
270
|
+
sourceCodexHomeDir: config.codexHomeDir
|
|
271
|
+
});
|
|
272
|
+
const butlerFollowUpService = new ButlerFollowUpService(butlerProfileService, butlerProjectService, butlerSessionService, repositories.butlerFollowUpTaskRepository, sessionHistoryService, repositories.sessionIndexRepository, sessionLiveRuntimeService, workspaceService, followUpProviderAdapterRegistry, butlerFollowUpEvaluationInstructionAdapter, butlerFollowUpRuntimeConfig.codexHomeDir, config.codexHomeDir, repositories.sessionMessageOriginRepository);
|
|
273
|
+
const butlerActionContextService = new ButlerActionContextService(butlerProjectService, butlerSessionService, butlerFollowUpService);
|
|
274
|
+
const sessionSummaryScheduler = new SessionSummaryScheduler(butlerSessionSummaryService);
|
|
275
|
+
const butlerFollowUpScheduler = new ButlerFollowUpScheduler(butlerFollowUpService);
|
|
276
|
+
const butlerFollowUpTerminalSubscription = sessionLiveRuntimeService.registerTerminalStateListener(async (event) => {
|
|
277
|
+
await butlerFollowUpService.handleSessionTerminal(event.sessionId, event.timestamp);
|
|
278
|
+
});
|
|
279
|
+
const butlerControlSessionService = new ButlerControlSessionService(butlerProfileService, repositories.butlerControlSessionRepository, workspaceService, sessionHistoryService, butlerSessionLiveRuntimeService, butlerContextAggregator, butlerAuthService, butlerRuntimeConfig.codexHomeDir, config.codexHomeDir);
|
|
280
|
+
const butlerControlActionService = new ButlerControlActionService(butlerProfileService, repositories.butlerControlSessionRepository, repositories.butlerControlEventRepository, butlerProjectService, butlerSessionService, patrolRunService, patrolExecutionService, verificationRunService, butlerContextAggregator);
|
|
150
281
|
const fileContextService = new FileContextService(sessionHistoryService, repositories.fileContextBindingRepository);
|
|
151
282
|
const terminalService = new TerminalService(database.db, repositories.terminalInstanceRepository, repositories.terminalRuntimeSessionRepository, workspaceService, config.terminalIdleTimeoutSeconds, {
|
|
152
283
|
terminalLogRootDir: path.join(path.dirname(config.databasePath), "terminal-logs"),
|
|
@@ -162,7 +293,8 @@ export function createServer(config) {
|
|
|
162
293
|
const authController = new AuthController(authService);
|
|
163
294
|
const workspaceController = new WorkspaceController(workspaceService);
|
|
164
295
|
const workbenchController = new WorkbenchController(workbenchService);
|
|
165
|
-
const
|
|
296
|
+
const butlerController = new ButlerController(butlerProfileService, butlerControlSessionService, butlerControlActionService, butlerContextAggregator, butlerFollowUpService, butlerInboxService, butlerNotificationService, butlerProjectService, butlerSessionService, projectMemoryService, patrolPlanService, patrolRunService, patrolExecutionService, verificationRunService, butlerActionContextService);
|
|
297
|
+
const sessionController = new SessionController(sessionHistoryService, sessionLiveRuntimeService, repositories.butlerControlSessionRepository);
|
|
166
298
|
const providerController = new ProviderController(sessionHistoryService, sessionLiveRuntimeService, config);
|
|
167
299
|
const quickPhraseController = new QuickPhraseController(quickPhraseService);
|
|
168
300
|
const profileController = new ProfileController(preferenceProfileService);
|
|
@@ -170,12 +302,12 @@ export function createServer(config) {
|
|
|
170
302
|
const fileContextController = new FileContextController(fileContentService, fileContextService);
|
|
171
303
|
const gitController = new GitController(gitReadService, gitWriteService, commitOrchestrator);
|
|
172
304
|
const terminalController = new TerminalController(terminalService, commandTemplateService);
|
|
173
|
-
const wsHandle = createWsServer(app.server, new WsAuthGuard(authService), sessionHistoryService, sessionLiveRuntimeService, new TerminalWsHub(terminalService), new WorkbenchWsHub(workbenchService, workspacePanelSnapshotService, fileWatcher));
|
|
305
|
+
const wsHandle = createWsServer(app.server, new WsAuthGuard(authService), sessionHistoryService, sessionLiveRuntimeService, new TerminalWsHub(terminalService), new WorkbenchWsHub(workbenchService, workspacePanelSnapshotService, fileWatcher), butlerActionContextService);
|
|
174
306
|
app.server.on("upgrade", (request, socket, head) => {
|
|
175
307
|
templateReverseProxyService.handleWebSocketUpgrade(request, socket, head);
|
|
176
308
|
});
|
|
177
309
|
app.addHook("onRequest", async (request, reply) => {
|
|
178
|
-
applyCorsHeaders(request.headers.origin, reply);
|
|
310
|
+
applyCorsHeaders(request.headers.origin, reply, config.demoMode);
|
|
179
311
|
if (request.method === "OPTIONS") {
|
|
180
312
|
reply.code(204).send();
|
|
181
313
|
return reply;
|
|
@@ -183,12 +315,20 @@ export function createServer(config) {
|
|
|
183
315
|
});
|
|
184
316
|
app.addHook("onRequest", createAuthGuard(authService));
|
|
185
317
|
app.setErrorHandler(setErrorHandler);
|
|
318
|
+
// Demo 模式:自动创建演示用户
|
|
319
|
+
if (config.demoMode) {
|
|
320
|
+
const status = bootstrapService.getStatus();
|
|
321
|
+
if (!status.initialized) {
|
|
322
|
+
bootstrapService.setup({ username: "demo", password: "codingns" });
|
|
323
|
+
}
|
|
324
|
+
}
|
|
186
325
|
void registerPublicRoutes(app, bootstrapController);
|
|
187
326
|
void registerProxyRoutes(app, templateReverseProxyService);
|
|
188
327
|
void registerAuthRoutes(app, authController);
|
|
189
328
|
void registerClientRoutes(app, clientController);
|
|
190
329
|
void registerWorkspaceRoutes(app, workspaceController);
|
|
191
330
|
void registerWorkbenchRoutes(app, workbenchController);
|
|
331
|
+
void registerButlerRoutes(app, butlerController);
|
|
192
332
|
void registerSessionRoutes(app, sessionController);
|
|
193
333
|
void registerPreferenceRoutes(app, quickPhraseController, profileController);
|
|
194
334
|
void registerFileRoutes(app, fileController);
|
|
@@ -196,12 +336,22 @@ export function createServer(config) {
|
|
|
196
336
|
void registerTerminalRoutes(app, terminalController);
|
|
197
337
|
void registerProviderRoutes(app, providerController);
|
|
198
338
|
void registerGitRoutes(app, gitController);
|
|
339
|
+
patrolScheduler.start();
|
|
340
|
+
sessionSummaryScheduler.start();
|
|
341
|
+
butlerFollowUpScheduler.start();
|
|
199
342
|
if (config.webUiDir) {
|
|
200
343
|
registerStaticWebRoutes(app, config.webUiDir);
|
|
201
344
|
}
|
|
202
345
|
app.addHook("onClose", async () => {
|
|
203
346
|
stopTerminalDebugEventLoopLagMonitor();
|
|
347
|
+
butlerFollowUpTerminalSubscription.close();
|
|
348
|
+
await patrolScheduler.dispose();
|
|
349
|
+
await sessionSummaryScheduler.dispose();
|
|
350
|
+
await butlerFollowUpScheduler.dispose();
|
|
204
351
|
await terminalService.dispose();
|
|
352
|
+
await butlerFollowUpSessionLiveRuntimeService.dispose();
|
|
353
|
+
await butlerSummarySessionLiveRuntimeService.dispose();
|
|
354
|
+
await butlerSessionLiveRuntimeService.dispose();
|
|
205
355
|
await sessionLiveRuntimeService.dispose();
|
|
206
356
|
await wsHandle.close();
|
|
207
357
|
gitCommandRunner.dispose();
|
|
@@ -219,6 +369,22 @@ export function createServer(config) {
|
|
|
219
369
|
authService,
|
|
220
370
|
workspaceService,
|
|
221
371
|
workbenchService,
|
|
372
|
+
butlerProfileService,
|
|
373
|
+
butlerSessionLiveRuntimeService,
|
|
374
|
+
butlerControlSessionService,
|
|
375
|
+
butlerControlActionService,
|
|
376
|
+
butlerFollowUpService,
|
|
377
|
+
butlerActionContextService,
|
|
378
|
+
butlerProjectService,
|
|
379
|
+
butlerSessionService,
|
|
380
|
+
projectMemoryService,
|
|
381
|
+
patrolPlanService,
|
|
382
|
+
patrolRunService,
|
|
383
|
+
verificationRunService,
|
|
384
|
+
patrolScheduler,
|
|
385
|
+
butlerSessionSummaryService,
|
|
386
|
+
sessionSummaryScheduler,
|
|
387
|
+
butlerFollowUpScheduler,
|
|
222
388
|
workspacePanelSnapshotService,
|
|
223
389
|
fileTreeService,
|
|
224
390
|
fileSearchService,
|
|
@@ -242,8 +408,8 @@ export function createServer(config) {
|
|
|
242
408
|
startWs: () => wsHandle
|
|
243
409
|
};
|
|
244
410
|
}
|
|
245
|
-
function applyCorsHeaders(origin, reply) {
|
|
246
|
-
const allowedOrigin = resolveAllowedCorsOrigin(origin);
|
|
411
|
+
function applyCorsHeaders(origin, reply, demoMode) {
|
|
412
|
+
const allowedOrigin = resolveAllowedCorsOrigin(origin, demoMode);
|
|
247
413
|
if (!allowedOrigin) {
|
|
248
414
|
return;
|
|
249
415
|
}
|
|
@@ -253,10 +419,14 @@ function applyCorsHeaders(origin, reply) {
|
|
|
253
419
|
reply.header("Access-Control-Allow-Headers", "Authorization, Content-Type");
|
|
254
420
|
reply.header("Access-Control-Allow-Methods", "GET,POST,PUT,PATCH,DELETE,OPTIONS");
|
|
255
421
|
}
|
|
256
|
-
function resolveAllowedCorsOrigin(origin) {
|
|
422
|
+
function resolveAllowedCorsOrigin(origin, demoMode) {
|
|
257
423
|
if (!origin) {
|
|
258
424
|
return null;
|
|
259
425
|
}
|
|
426
|
+
// Demo 模式:放行所有来源
|
|
427
|
+
if (demoMode) {
|
|
428
|
+
return origin;
|
|
429
|
+
}
|
|
260
430
|
try {
|
|
261
431
|
const parsed = new URL(origin);
|
|
262
432
|
const hostname = parsed.hostname.toLowerCase();
|