@jingyi0605/codingns 0.2.5 → 0.3.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 +278 -2
- package/dist/public/assets/{TerminalPage-BkjqU9NG.js → TerminalPage-CgrfstRm.js} +19 -19
- package/dist/public/assets/index-Cek6u0b9.css +1 -0
- package/dist/public/assets/index-THHY79si.js +122 -0
- package/dist/public/index.html +2 -2
- package/dist/server/config/env.d.ts +4 -0
- package/dist/server/config/env.js +67 -3
- package/dist/server/config/env.js.map +1 -1
- package/dist/server/modules/auth/auth-service.d.ts +18 -1
- package/dist/server/modules/auth/auth-service.js +168 -7
- package/dist/server/modules/auth/auth-service.js.map +1 -1
- package/dist/server/modules/butler/butler-codex-model-policy.d.ts +1 -0
- package/dist/server/modules/butler/butler-codex-model-policy.js +36 -0
- package/dist/server/modules/butler/butler-codex-model-policy.js.map +1 -0
- package/dist/server/modules/butler/butler-control-session-service.d.ts +16 -2
- package/dist/server/modules/butler/butler-control-session-service.js +58 -210
- package/dist/server/modules/butler/butler-control-session-service.js.map +1 -1
- package/dist/server/modules/butler/butler-controller.d.ts +17 -0
- package/dist/server/modules/butler/butler-controller.js +20 -1
- package/dist/server/modules/butler/butler-controller.js.map +1 -1
- package/dist/server/modules/butler/butler-follow-up-service.js +7 -3
- package/dist/server/modules/butler/butler-follow-up-service.js.map +1 -1
- package/dist/server/modules/butler/butler-inbox-analysis-service.d.ts +36 -0
- package/dist/server/modules/butler/butler-inbox-analysis-service.js +375 -0
- package/dist/server/modules/butler/butler-inbox-analysis-service.js.map +1 -0
- package/dist/server/modules/butler/butler-inbox-instruction-adapter.d.ts +23 -0
- package/dist/server/modules/butler/butler-inbox-instruction-adapter.js +96 -0
- package/dist/server/modules/butler/butler-inbox-instruction-adapter.js.map +1 -0
- package/dist/server/modules/butler/butler-inbox-service.d.ts +39 -2
- package/dist/server/modules/butler/butler-inbox-service.js +392 -2
- package/dist/server/modules/butler/butler-inbox-service.js.map +1 -1
- package/dist/server/modules/butler/butler-session-service.d.ts +9 -0
- package/dist/server/modules/butler/butler-session-service.js +277 -68
- package/dist/server/modules/butler/butler-session-service.js.map +1 -1
- package/dist/server/modules/butler/butler-session-summary-service.d.ts +1 -0
- package/dist/server/modules/butler/butler-session-summary-service.js +48 -23
- package/dist/server/modules/butler/butler-session-summary-service.js.map +1 -1
- package/dist/server/modules/butler/butler-workspace-context.d.ts +13 -0
- package/dist/server/modules/butler/butler-workspace-context.js +223 -0
- package/dist/server/modules/butler/butler-workspace-context.js.map +1 -0
- package/dist/server/modules/client/client-controller.d.ts +6 -0
- package/dist/server/modules/client/client-controller.js +30 -8
- package/dist/server/modules/client/client-controller.js.map +1 -1
- package/dist/server/modules/client/client-service.d.ts +22 -10
- package/dist/server/modules/client/client-service.js +77 -100
- package/dist/server/modules/client/client-service.js.map +1 -1
- package/dist/server/modules/client/npm-global-package-service.d.ts +21 -0
- package/dist/server/modules/client/npm-global-package-service.js +210 -0
- package/dist/server/modules/client/npm-global-package-service.js.map +1 -0
- package/dist/server/modules/client/service-update-task-service.d.ts +15 -0
- package/dist/server/modules/client/service-update-task-service.js +147 -0
- package/dist/server/modules/client/service-update-task-service.js.map +1 -0
- package/dist/server/modules/client/service-update-types.d.ts +30 -0
- package/dist/server/modules/client/service-update-types.js +2 -0
- package/dist/server/modules/client/service-update-types.js.map +1 -0
- package/dist/server/modules/debug-target/debug-target-service.d.ts +5 -2
- package/dist/server/modules/debug-target/debug-target-service.js +170 -10
- package/dist/server/modules/debug-target/debug-target-service.js.map +1 -1
- package/dist/server/modules/file/file-constants.d.ts +1 -0
- package/dist/server/modules/file/file-constants.js +1 -0
- package/dist/server/modules/file/file-constants.js.map +1 -1
- package/dist/server/modules/file/file-controller.js +12 -3
- package/dist/server/modules/file/file-controller.js.map +1 -1
- package/dist/server/modules/file/file-preview-link-service.js +6 -37
- package/dist/server/modules/file/file-preview-link-service.js.map +1 -1
- package/dist/server/modules/file/file-preview-service.d.ts +6 -12
- package/dist/server/modules/file/file-preview-service.js +114 -28
- package/dist/server/modules/file/file-preview-service.js.map +1 -1
- package/dist/server/modules/file/file-preview-types.d.ts +37 -0
- package/dist/server/modules/file/file-preview-types.js +84 -0
- package/dist/server/modules/file/file-preview-types.js.map +1 -0
- package/dist/server/modules/git/git-controller.d.ts +6 -0
- package/dist/server/modules/git/git-controller.js +13 -0
- package/dist/server/modules/git/git-controller.js.map +1 -1
- package/dist/server/modules/git/git-read-service.d.ts +2 -1
- package/dist/server/modules/git/git-read-service.js +100 -0
- package/dist/server/modules/git/git-read-service.js.map +1 -1
- package/dist/server/modules/git/types.d.ts +23 -0
- package/dist/server/modules/model-switch/cc-switch-adapter.d.ts +36 -0
- package/dist/server/modules/model-switch/cc-switch-adapter.js +317 -0
- package/dist/server/modules/model-switch/cc-switch-adapter.js.map +1 -0
- package/dist/server/modules/model-switch/model-switch-controller.d.ts +11 -0
- package/dist/server/modules/model-switch/model-switch-controller.js +30 -0
- package/dist/server/modules/model-switch/model-switch-controller.js.map +1 -0
- package/dist/server/modules/model-switch/model-switch-service.d.ts +16 -0
- package/dist/server/modules/model-switch/model-switch-service.js +29 -0
- package/dist/server/modules/model-switch/model-switch-service.js.map +1 -0
- package/dist/server/modules/preferences/profile-service.d.ts +1 -0
- package/dist/server/modules/preferences/profile-service.js +9 -0
- package/dist/server/modules/preferences/profile-service.js.map +1 -1
- package/dist/server/modules/sessions/codex-app-server-helper-process.js +3 -0
- package/dist/server/modules/sessions/codex-app-server-helper-process.js.map +1 -1
- package/dist/server/modules/sessions/session-activity-authority-service.d.ts +3 -1
- package/dist/server/modules/sessions/session-activity-authority-service.js +16 -1
- package/dist/server/modules/sessions/session-activity-authority-service.js.map +1 -1
- package/dist/server/modules/sessions/session-activity-inspector.d.ts +1 -1
- package/dist/server/modules/sessions/session-activity-inspector.js +52 -9
- package/dist/server/modules/sessions/session-activity-inspector.js.map +1 -1
- package/dist/server/modules/sessions/session-controller.d.ts +3 -3
- package/dist/server/modules/sessions/session-controller.js +3 -3
- package/dist/server/modules/sessions/session-controller.js.map +1 -1
- package/dist/server/modules/sessions/session-history-service.d.ts +11 -2
- package/dist/server/modules/sessions/session-history-service.js +373 -78
- package/dist/server/modules/sessions/session-history-service.js.map +1 -1
- package/dist/server/modules/sessions/session-live-runtime-service.d.ts +9 -4
- package/dist/server/modules/sessions/session-live-runtime-service.js +59 -11
- package/dist/server/modules/sessions/session-live-runtime-service.js.map +1 -1
- package/dist/server/modules/sessions/session-message-attachment-service.d.ts +8 -8
- package/dist/server/modules/sessions/session-message-attachment-service.js +25 -34
- package/dist/server/modules/sessions/session-message-attachment-service.js.map +1 -1
- package/dist/server/modules/sessions/session-provider-error-mapper.js +7 -0
- package/dist/server/modules/sessions/session-provider-error-mapper.js.map +1 -1
- package/dist/server/modules/skills/skill-controller.d.ts +23 -0
- package/dist/server/modules/skills/skill-controller.js +35 -0
- package/dist/server/modules/skills/skill-controller.js.map +1 -0
- package/dist/server/modules/skills/skill-manager-service.d.ts +86 -0
- package/dist/server/modules/skills/skill-manager-service.js +557 -0
- package/dist/server/modules/skills/skill-manager-service.js.map +1 -0
- package/dist/server/modules/skills/skill-reconciler.d.ts +21 -0
- package/dist/server/modules/skills/skill-reconciler.js +99 -0
- package/dist/server/modules/skills/skill-reconciler.js.map +1 -0
- package/dist/server/modules/skills/skill-sync-planner.d.ts +8 -0
- package/dist/server/modules/skills/skill-sync-planner.js +20 -0
- package/dist/server/modules/skills/skill-sync-planner.js.map +1 -0
- package/dist/server/modules/skills/skill-target-adapter.d.ts +34 -0
- package/dist/server/modules/skills/skill-target-adapter.js +65 -0
- package/dist/server/modules/skills/skill-target-adapter.js.map +1 -0
- package/dist/server/modules/tailscale/tailscale-controller.d.ts +15 -0
- package/dist/server/modules/tailscale/tailscale-controller.js +33 -0
- package/dist/server/modules/tailscale/tailscale-controller.js.map +1 -0
- package/dist/server/modules/tailscale/tailscale-helper-client.d.ts +41 -0
- package/dist/server/modules/tailscale/tailscale-helper-client.js +135 -0
- package/dist/server/modules/tailscale/tailscale-helper-client.js.map +1 -0
- package/dist/server/modules/tailscale/tailscale-helper-process.d.ts +1 -0
- package/dist/server/modules/tailscale/tailscale-helper-process.js +327 -0
- package/dist/server/modules/tailscale/tailscale-helper-process.js.map +1 -0
- package/dist/server/modules/tailscale/tailscale-manager.d.ts +41 -0
- package/dist/server/modules/tailscale/tailscale-manager.js +263 -0
- package/dist/server/modules/tailscale/tailscale-manager.js.map +1 -0
- package/dist/server/modules/tailscale/tailscale-service.d.ts +43 -0
- package/dist/server/modules/tailscale/tailscale-service.js +201 -0
- package/dist/server/modules/tailscale/tailscale-service.js.map +1 -0
- package/dist/server/modules/tasks/task-lane-executors.js +3 -0
- package/dist/server/modules/tasks/task-lane-executors.js.map +1 -1
- package/dist/server/modules/tasks/task-types.d.ts +2 -0
- package/dist/server/modules/tasks/task-types.js +3 -1
- package/dist/server/modules/tasks/task-types.js.map +1 -1
- package/dist/server/modules/terminal/command-template-service.js +10 -1
- package/dist/server/modules/terminal/command-template-service.js.map +1 -1
- package/dist/server/modules/terminal/template-port-runtime.d.ts +12 -1
- package/dist/server/modules/terminal/template-port-runtime.js +189 -17
- package/dist/server/modules/terminal/template-port-runtime.js.map +1 -1
- package/dist/server/modules/terminal/terminal-service.js +30 -3
- package/dist/server/modules/terminal/terminal-service.js.map +1 -1
- package/dist/server/modules/workspace/workspace-code-composition.js +95 -2
- package/dist/server/modules/workspace/workspace-code-composition.js.map +1 -1
- package/dist/server/routes/butler.js +4 -0
- package/dist/server/routes/butler.js.map +1 -1
- package/dist/server/routes/client.js +2 -0
- package/dist/server/routes/client.js.map +1 -1
- package/dist/server/routes/git.js +1 -0
- package/dist/server/routes/git.js.map +1 -1
- package/dist/server/routes/sessions.js +1 -1
- package/dist/server/routes/sessions.js.map +1 -1
- package/dist/server/routes/skills.d.ts +3 -0
- package/dist/server/routes/skills.js +7 -0
- package/dist/server/routes/skills.js.map +1 -0
- package/dist/server/routes/system.d.ts +4 -0
- package/dist/server/routes/system.js +11 -0
- package/dist/server/routes/system.js.map +1 -0
- package/dist/server/server/create-server.d.ts +16 -0
- package/dist/server/server/create-server.js +91 -8
- package/dist/server/server/create-server.js.map +1 -1
- package/dist/server/shared/errors/app-error.d.ts +2 -0
- package/dist/server/shared/errors/app-error.js +2 -0
- package/dist/server/shared/errors/app-error.js.map +1 -1
- package/dist/server/shared/http/error-handler.d.ts +2 -1
- package/dist/server/shared/http/error-handler.js +3 -2
- package/dist/server/shared/http/error-handler.js.map +1 -1
- package/dist/server/shared/utils/command-availability.d.ts +1 -0
- package/dist/server/shared/utils/command-availability.js +26 -3
- package/dist/server/shared/utils/command-availability.js.map +1 -1
- package/dist/server/storage/repositories/auth-login-attempt-repository.d.ts +9 -0
- package/dist/server/storage/repositories/auth-login-attempt-repository.js +59 -0
- package/dist/server/storage/repositories/auth-login-attempt-repository.js.map +1 -0
- package/dist/server/storage/repositories/butler-control-session-repository.d.ts +3 -0
- package/dist/server/storage/repositories/butler-control-session-repository.js +80 -4
- package/dist/server/storage/repositories/butler-control-session-repository.js.map +1 -1
- package/dist/server/storage/repositories/butler-inbox-item-repository.js +54 -3
- package/dist/server/storage/repositories/butler-inbox-item-repository.js.map +1 -1
- package/dist/server/storage/repositories/instance-tailscale-repository.d.ts +10 -0
- package/dist/server/storage/repositories/instance-tailscale-repository.js +112 -0
- package/dist/server/storage/repositories/instance-tailscale-repository.js.map +1 -0
- package/dist/server/storage/repositories/managed-skill-repository.d.ts +11 -0
- package/dist/server/storage/repositories/managed-skill-repository.js +102 -0
- package/dist/server/storage/repositories/managed-skill-repository.js.map +1 -0
- package/dist/server/storage/repositories/skill-target-binding-repository.d.ts +10 -0
- package/dist/server/storage/repositories/skill-target-binding-repository.js +77 -0
- package/dist/server/storage/repositories/skill-target-binding-repository.js.map +1 -0
- package/dist/server/storage/repositories/terminal-instance-repository.js +1 -1
- package/dist/server/storage/repositories/terminal-instance-repository.js.map +1 -1
- package/dist/server/storage/repositories/user-preference-profile-repository.js +6 -3
- package/dist/server/storage/repositories/user-preference-profile-repository.js.map +1 -1
- package/dist/server/storage/sqlite/client.js +137 -0
- package/dist/server/storage/sqlite/client.js.map +1 -1
- package/dist/server/storage/sqlite/schema.sql +84 -1
- package/dist/server/types/domain.d.ts +109 -1
- package/dist/server/ws/ws-server.js +4 -4
- package/dist/server/ws/ws-server.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/patch-builder.d.ts +23 -0
- package/node_modules/@codingns/session-sync-core/dist/patch-builder.js +162 -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.d.ts +1 -0
- package/node_modules/@codingns/session-sync-core/dist/providers/codex.js +89 -33
- package/node_modules/@codingns/session-sync-core/dist/providers/codex.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/active-run-registry.js +18 -2
- 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 +3 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js +238 -53
- package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/provider-runtime-service.js +1 -0
- package/node_modules/@codingns/session-sync-core/dist/runtime/provider-runtime-service.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/types.d.ts +6 -2
- package/node_modules/@codingns/session-sync-core/dist/types.d.ts +1 -1
- package/package.json +1 -1
- package/dist/public/assets/index-C6U8-9jg.css +0 -1
- package/dist/public/assets/index-CKSumuV2.js +0 -109
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
const OUTPUT_CONTRACT_VERSION = "butler-inbox-analysis-v2";
|
|
2
|
+
export function buildButlerInboxAnalysisInstruction(input) {
|
|
3
|
+
const prompt = [
|
|
4
|
+
"你现在是代码助手里的代办分析器,不直接开发,只负责为单条代办生成真正有针对性的执行提示词。",
|
|
5
|
+
"你必须在分析过程中实际调用 codingns assistant CLI 补查信息,不能只复述 BUTLER_CONTEXT.md,也不能只根据这条代办内容脑补答案。",
|
|
6
|
+
"你的分析必须只围绕当前代办,不要把项目里无关的风险、旧问题、建议项硬塞进结果。",
|
|
7
|
+
"如果信息不足,可以明确承认不足,但生成的执行提示词仍然必须告诉后续开发会话该先查什么、先看哪里。",
|
|
8
|
+
"你输出的 generatedPrompt 将直接作为后续实际开发会话的首条提示词,所以它必须像开发负责人交接任务,而不是像泛泛而谈的总结。",
|
|
9
|
+
"",
|
|
10
|
+
"## 强制执行的查询步骤",
|
|
11
|
+
"1. 先阅读 BUTLER_CONTEXT.md 和 BUTLER_API.md。",
|
|
12
|
+
"2. 先确认 CLI 可用:至少执行一次 `codingns assistant capabilities list`。",
|
|
13
|
+
`3. 必须读取当前项目详情:至少执行一次 \`codingns assistant projects get ${input.project.id}\`。`,
|
|
14
|
+
`4. 必须检查项目会话:至少执行一次 \`codingns assistant sessions list --project ${input.project.id}\`。`,
|
|
15
|
+
"5. 如果发现与当前代办直接相关的会话,继续按需读取 `sessions runtime` 和 `sessions messages`,只看最相关的 1 到 3 个会话。",
|
|
16
|
+
"6. 如果项目下存在可用终端,按需读取 `terminals list` 和 `terminals history`,但不要发送任何终端输入。",
|
|
17
|
+
"7. 必须根据你查到的真实信息判断:当前仓库是否已经有相关实现、相关会话是否已经做过一半、当前最合理的下一步是什么。",
|
|
18
|
+
"",
|
|
19
|
+
"## 严格禁止",
|
|
20
|
+
"- 禁止发送 `sessions send`。",
|
|
21
|
+
"- 禁止发送 `terminals send`。",
|
|
22
|
+
"- 禁止 fork 会话。",
|
|
23
|
+
"- 禁止直接修改任何项目代码。",
|
|
24
|
+
"",
|
|
25
|
+
"## 当前代办",
|
|
26
|
+
`- 项目名称:${input.project.name}`,
|
|
27
|
+
`- 项目 ID:${input.project.id}`,
|
|
28
|
+
`- 仓库路径:${input.project.repoRoot}`,
|
|
29
|
+
`- 代办 ID:${input.item.id}`,
|
|
30
|
+
`- 标题:${input.item.title}`,
|
|
31
|
+
`- 类型:${input.item.itemType}`,
|
|
32
|
+
`- 当前状态:${input.item.status}`,
|
|
33
|
+
`- 优先级:${input.item.priority}`,
|
|
34
|
+
`- 描述:${input.item.content}`,
|
|
35
|
+
"",
|
|
36
|
+
"## 输出目标",
|
|
37
|
+
"你要产出四个字段:",
|
|
38
|
+
"- analysisSummary:给用户看的中文摘要,只总结和当前代办直接相关的发现,而且必须体现你查到的真实线索。",
|
|
39
|
+
"- generatedPrompt:给后续开发会话的中文执行提示词,必须具体、可执行、围绕当前代办,不能夹带无关项目噪音。",
|
|
40
|
+
"- followUpObjective:给后台跟进系统的目标描述,要聚焦这条代办本身。",
|
|
41
|
+
"- completionCriteria:这条代办什么时候算完成,要写成明确结束条件。",
|
|
42
|
+
"",
|
|
43
|
+
"## generatedPrompt 的质量要求",
|
|
44
|
+
"1. 必须写成 4 个小节,标题固定为:`问题判断`、`仓库现状`、`实际开发思路`、`验证与风险`。",
|
|
45
|
+
"2. `问题判断` 必须先说清楚这条代办真正要解决的问题,不要泛泛而谈。",
|
|
46
|
+
"3. `仓库现状` 必须引用你通过 CLI 查到的真实线索,例如项目详情、已有会话、终端历史、已经做到哪一步;不能编造文件名、分支名或进度。",
|
|
47
|
+
"4. `实际开发思路` 必须明确后续开发会话第一步该检查哪些代码或现有会话线索;如果你查不到具体文件,就老实写“先定位相关代码路径”,不要假装知道。",
|
|
48
|
+
"5. `实际开发思路` 必须强调最小必要改动,不能破坏现有行为,也不能顺手扩需求。",
|
|
49
|
+
"6. `验证与风险` 必须要求跑必要验证;如果当前查不到验证入口或跑不了,就说明原因、缺口和残余风险。",
|
|
50
|
+
"7. 禁止把与当前代办无关的历史问题、项目全局治理建议、顺手优化项塞进提示词。",
|
|
51
|
+
"",
|
|
52
|
+
"## 输出格式",
|
|
53
|
+
"- 先用不超过 2 句中文给一个结论。",
|
|
54
|
+
"- 最后必须给一个 JSON 代码块,字段完整。",
|
|
55
|
+
"- cliEvidence 必须列出你实际使用过的 CLI 命令或关键读取动作,至少 3 条。",
|
|
56
|
+
"- analysisSummary 和 generatedPrompt 都必须能被人一眼看出是针对这条代办,而不是通用模板。",
|
|
57
|
+
"",
|
|
58
|
+
"```json",
|
|
59
|
+
JSON.stringify({
|
|
60
|
+
analysisSummary: "一句聚焦当前代办的中文摘要",
|
|
61
|
+
generatedPrompt: [
|
|
62
|
+
"问题判断",
|
|
63
|
+
"这里说明这条代办真正要解决的问题。",
|
|
64
|
+
"",
|
|
65
|
+
"仓库现状",
|
|
66
|
+
"这里写通过 CLI 查到的当前实现状态、已有会话线索或需要继续确认的部分。",
|
|
67
|
+
"",
|
|
68
|
+
"实际开发思路",
|
|
69
|
+
"这里写后续开发会话应先查什么、再改什么、保持哪些行为不破坏。",
|
|
70
|
+
"",
|
|
71
|
+
"验证与风险",
|
|
72
|
+
"这里写必须补的验证,以及当前还存在的风险。"
|
|
73
|
+
].join("\\n"),
|
|
74
|
+
followUpObjective: "围绕当前代办推进的中文目标",
|
|
75
|
+
completionCriteria: "当前代办的明确完成标准",
|
|
76
|
+
cliEvidence: [
|
|
77
|
+
"codingns assistant capabilities list",
|
|
78
|
+
`codingns assistant projects get ${input.project.id}`,
|
|
79
|
+
`codingns assistant sessions list --project ${input.project.id}`
|
|
80
|
+
]
|
|
81
|
+
}, null, 2),
|
|
82
|
+
"```"
|
|
83
|
+
].join("\n");
|
|
84
|
+
return {
|
|
85
|
+
providerId: input.providerId,
|
|
86
|
+
outputContractVersion: OUTPUT_CONTRACT_VERSION,
|
|
87
|
+
prompt,
|
|
88
|
+
metadata: {
|
|
89
|
+
projectId: input.project.id,
|
|
90
|
+
projectName: input.project.name,
|
|
91
|
+
itemId: input.item.id,
|
|
92
|
+
itemTitle: input.item.title
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=butler-inbox-instruction-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"butler-inbox-instruction-adapter.js","sourceRoot":"","sources":["../../../../src/modules/butler/butler-inbox-instruction-adapter.ts"],"names":[],"mappings":"AAKA,MAAM,uBAAuB,GAAG,0BAA0B,CAAC;AAqB3D,MAAM,UAAU,mCAAmC,CAAC,KAInD;IACC,MAAM,MAAM,GAAG;QACb,+CAA+C;QAC/C,qFAAqF;QACrF,yCAAyC;QACzC,kDAAkD;QAClD,uEAAuE;QACvE,EAAE;QACF,cAAc;QACd,2CAA2C;QAC3C,8DAA8D;QAC9D,0DAA0D,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK;QAC/E,mEAAmE,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK;QACxF,uFAAuF;QACvF,yEAAyE;QACzE,4DAA4D;QAC5D,EAAE;QACF,SAAS;QACT,yBAAyB;QACzB,0BAA0B;QAC1B,eAAe;QACf,iBAAiB;QACjB,EAAE;QACF,SAAS;QACT,UAAU,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE;QAC9B,WAAW,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE;QAC7B,UAAU,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE;QAClC,WAAW,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE;QAC1B,QAAQ,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE;QAC1B,QAAQ,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE;QAC7B,UAAU,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE;QAC7B,SAAS,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE;QAC9B,QAAQ,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE;QAC5B,EAAE;QACF,SAAS;QACT,WAAW;QACX,6DAA6D;QAC7D,+DAA+D;QAC/D,6CAA6C;QAC7C,6CAA6C;QAC7C,EAAE;QACF,0BAA0B;QAC1B,qDAAqD;QACrD,sCAAsC;QACtC,wEAAwE;QACxE,4EAA4E;QAC5E,2CAA2C;QAC3C,qDAAqD;QACrD,yCAAyC;QACzC,EAAE;QACF,SAAS;QACT,qBAAqB;QACrB,0BAA0B;QAC1B,iDAAiD;QACjD,gEAAgE;QAChE,EAAE;QACF,SAAS;QACT,IAAI,CAAC,SAAS,CACZ;YACE,eAAe,EAAE,eAAe;YAChC,eAAe,EAAE;gBACf,MAAM;gBACN,mBAAmB;gBACnB,EAAE;gBACF,MAAM;gBACN,uCAAuC;gBACvC,EAAE;gBACF,QAAQ;gBACR,gCAAgC;gBAChC,EAAE;gBACF,OAAO;gBACP,uBAAuB;aACxB,CAAC,IAAI,CAAC,KAAK,CAAC;YACb,iBAAiB,EAAE,eAAe;YAClC,kBAAkB,EAAE,aAAa;YACjC,WAAW,EAAE;gBACX,sCAAsC;gBACtC,mCAAmC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE;gBACrD,8CAA8C,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE;aACjE;SACF,EACD,IAAI,EACJ,CAAC,CACF;QACD,KAAK;KACN,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,OAAO;QACL,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,qBAAqB,EAAE,uBAAuB;QAC9C,MAAM;QACN,QAAQ,EAAE;YACR,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE;YAC3B,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI;YAC/B,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE;YACrB,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK;SAC5B;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,11 +1,25 @@
|
|
|
1
|
-
import type { ButlerInboxItem, ButlerInboxItemPriority, ButlerInboxItemStatus, ButlerInboxItemType, ButlerProject } from "../../types/domain.js";
|
|
2
1
|
import type { ButlerInboxItemRepository } from "../../storage/repositories/butler-inbox-item-repository.js";
|
|
3
2
|
import type { ButlerProjectRepository } from "../../storage/repositories/butler-project-repository.js";
|
|
3
|
+
import { type TaskManager } from "../tasks/task-manager.js";
|
|
4
|
+
import type { ButlerInboxItem, ButlerInboxItemPriority, ButlerInboxItemStatus, ButlerInboxItemType, ButlerProject } from "../../types/domain.js";
|
|
5
|
+
import type { ButlerInboxAnalysisService } from "./butler-inbox-analysis-service.js";
|
|
6
|
+
import type { ButlerControlSessionService, ButlerControlSessionView } from "./butler-control-session-service.js";
|
|
7
|
+
import type { ButlerFollowUpService, ButlerFollowUpTaskView } from "./butler-follow-up-service.js";
|
|
8
|
+
import type { ButlerProjectSessionView, ButlerSessionService } from "./butler-session-service.js";
|
|
4
9
|
export interface ButlerInboxItemView extends ButlerInboxItem {
|
|
5
10
|
projectName: string;
|
|
6
11
|
workspaceId: string;
|
|
7
12
|
projectLifecycleStatus: ButlerProject["lifecycleStatus"];
|
|
8
13
|
}
|
|
14
|
+
export interface ButlerInboxExecutionResult {
|
|
15
|
+
item: ButlerInboxItemView;
|
|
16
|
+
session: ButlerProjectSessionView;
|
|
17
|
+
followUpTask: ButlerFollowUpTaskView | null;
|
|
18
|
+
}
|
|
19
|
+
export interface ButlerInboxAnalyzeResult {
|
|
20
|
+
item: ButlerInboxItemView;
|
|
21
|
+
controlSession: ButlerControlSessionView;
|
|
22
|
+
}
|
|
9
23
|
interface ButlerInboxItemInput {
|
|
10
24
|
projectId?: string;
|
|
11
25
|
itemType?: ButlerInboxItemType;
|
|
@@ -17,19 +31,42 @@ interface ButlerInboxItemInput {
|
|
|
17
31
|
export declare class ButlerInboxService {
|
|
18
32
|
private readonly butlerProjectRepository;
|
|
19
33
|
private readonly butlerInboxItemRepository;
|
|
20
|
-
|
|
34
|
+
private readonly taskManager;
|
|
35
|
+
private butlerInboxAnalysisService?;
|
|
36
|
+
private butlerControlSessionService?;
|
|
37
|
+
private butlerSessionService?;
|
|
38
|
+
private butlerFollowUpService?;
|
|
39
|
+
constructor(butlerProjectRepository: Pick<ButlerProjectRepository, "findById" | "list">, butlerInboxItemRepository: Pick<ButlerInboxItemRepository, "create" | "list" | "findById" | "update" | "delete">, taskManager?: TaskManager);
|
|
40
|
+
configureLifecycleServices(input: {
|
|
41
|
+
butlerInboxAnalysisService: Pick<ButlerInboxAnalysisService, "prepareTodoAnalysisSession" | "readTodoAnalysisResult">;
|
|
42
|
+
butlerControlSessionService: Pick<ButlerControlSessionService, "getSession" | "startSession" | "updateSessionStatusBySessionId">;
|
|
43
|
+
butlerSessionService: Pick<ButlerSessionService, "startSession">;
|
|
44
|
+
butlerFollowUpService: Pick<ButlerFollowUpService, "createTask">;
|
|
45
|
+
}): void;
|
|
21
46
|
listItems(filters?: {
|
|
22
47
|
workspaceId?: string;
|
|
23
48
|
projectId?: string;
|
|
24
49
|
status?: ButlerInboxItemStatus;
|
|
25
50
|
itemType?: ButlerInboxItemType;
|
|
51
|
+
userId?: string;
|
|
26
52
|
}): ButlerInboxItemView[];
|
|
27
53
|
createItem(input: ButlerInboxItemInput): ButlerInboxItemView;
|
|
28
54
|
updateItem(itemId: string, input: ButlerInboxItemInput): ButlerInboxItemView;
|
|
55
|
+
analyzeItem(itemId: string, userId: string): Promise<ButlerInboxAnalyzeResult>;
|
|
56
|
+
startExecution(itemId: string, userId: string): Promise<ButlerInboxExecutionResult>;
|
|
29
57
|
deleteItem(itemId: string): void;
|
|
58
|
+
private registerBackgroundTasks;
|
|
59
|
+
private runAnalyzeTask;
|
|
60
|
+
private ensureAnalysisDependencies;
|
|
61
|
+
private ensureExecutionDependencies;
|
|
62
|
+
private ensureItemIsActionable;
|
|
63
|
+
private markActionFailed;
|
|
30
64
|
private requireProject;
|
|
31
65
|
private requireItem;
|
|
32
66
|
private requireText;
|
|
33
67
|
private toView;
|
|
68
|
+
private recoverStaleAnalysisState;
|
|
69
|
+
private persistRecoveredAssistantState;
|
|
70
|
+
private tryRecoverExistingExecutionSession;
|
|
34
71
|
}
|
|
35
72
|
export {};
|
|
@@ -1,12 +1,27 @@
|
|
|
1
1
|
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
|
+
import { createTaskManager } from "../tasks/task-manager.js";
|
|
5
|
+
import { HOST_TASK_TYPES } from "../tasks/task-types.js";
|
|
4
6
|
export class ButlerInboxService {
|
|
5
7
|
butlerProjectRepository;
|
|
6
8
|
butlerInboxItemRepository;
|
|
7
|
-
|
|
9
|
+
taskManager;
|
|
10
|
+
butlerInboxAnalysisService;
|
|
11
|
+
butlerControlSessionService;
|
|
12
|
+
butlerSessionService;
|
|
13
|
+
butlerFollowUpService;
|
|
14
|
+
constructor(butlerProjectRepository, butlerInboxItemRepository, taskManager = createTaskManager()) {
|
|
8
15
|
this.butlerProjectRepository = butlerProjectRepository;
|
|
9
16
|
this.butlerInboxItemRepository = butlerInboxItemRepository;
|
|
17
|
+
this.taskManager = taskManager;
|
|
18
|
+
this.registerBackgroundTasks();
|
|
19
|
+
}
|
|
20
|
+
configureLifecycleServices(input) {
|
|
21
|
+
this.butlerInboxAnalysisService = input.butlerInboxAnalysisService;
|
|
22
|
+
this.butlerControlSessionService = input.butlerControlSessionService;
|
|
23
|
+
this.butlerSessionService = input.butlerSessionService;
|
|
24
|
+
this.butlerFollowUpService = input.butlerFollowUpService;
|
|
10
25
|
}
|
|
11
26
|
listItems(filters) {
|
|
12
27
|
const projects = this.butlerProjectRepository.list();
|
|
@@ -18,8 +33,9 @@ export class ButlerInboxService {
|
|
|
18
33
|
itemType: filters?.itemType
|
|
19
34
|
})
|
|
20
35
|
.map((item) => {
|
|
36
|
+
const normalizedItem = this.recoverStaleAnalysisState(item, filters?.userId);
|
|
21
37
|
const project = projectMap.get(item.projectId);
|
|
22
|
-
return project ? this.toView(
|
|
38
|
+
return project ? this.toView(normalizedItem, project) : null;
|
|
23
39
|
})
|
|
24
40
|
.filter((item) => item !== null)
|
|
25
41
|
.filter((item) => {
|
|
@@ -41,6 +57,7 @@ export class ButlerInboxService {
|
|
|
41
57
|
content: this.requireText(input.content, "content", "代办内容不能为空"),
|
|
42
58
|
priority: input.priority ?? "medium",
|
|
43
59
|
status,
|
|
60
|
+
assistantState: createAssistantState(status),
|
|
44
61
|
createdAt: timestamp,
|
|
45
62
|
updatedAt: timestamp,
|
|
46
63
|
closedAt: status === "closed" ? timestamp : null
|
|
@@ -63,15 +80,248 @@ export class ButlerInboxService {
|
|
|
63
80
|
: this.requireText(input.content, "content", "代办内容不能为空"),
|
|
64
81
|
priority: input.priority ?? current.priority,
|
|
65
82
|
status: nextStatus,
|
|
83
|
+
assistantState: resolveAssistantStateForManualUpdate(current.assistantState, nextStatus),
|
|
66
84
|
updatedAt: nowIso(),
|
|
67
85
|
closedAt: nextStatus === "closed" ? current.closedAt ?? nowIso() : null
|
|
68
86
|
};
|
|
69
87
|
return this.toView(this.butlerInboxItemRepository.update(updated), project);
|
|
70
88
|
}
|
|
89
|
+
async analyzeItem(itemId, userId) {
|
|
90
|
+
this.ensureAnalysisDependencies();
|
|
91
|
+
const current = this.requireItem(itemId);
|
|
92
|
+
const project = this.requireProject(current.projectId);
|
|
93
|
+
this.ensureItemIsActionable(current);
|
|
94
|
+
const prepared = await this.butlerInboxAnalysisService.prepareTodoAnalysisSession(current, project, userId);
|
|
95
|
+
const controlSession = await this.butlerControlSessionService.startSession(userId, {
|
|
96
|
+
content: prepared.prompt,
|
|
97
|
+
model: prepared.model,
|
|
98
|
+
reasoningLevel: prepared.reasoningLevel,
|
|
99
|
+
permissionMode: prepared.permissionMode,
|
|
100
|
+
purpose: "todo_analysis",
|
|
101
|
+
title: prepared.title,
|
|
102
|
+
sourceItemId: current.id
|
|
103
|
+
});
|
|
104
|
+
const timestamp = nowIso();
|
|
105
|
+
const updated = this.butlerInboxItemRepository.update({
|
|
106
|
+
...current,
|
|
107
|
+
assistantState: {
|
|
108
|
+
...current.assistantState,
|
|
109
|
+
lifecycleStage: "analyzing",
|
|
110
|
+
analysisControlSessionId: controlSession.id,
|
|
111
|
+
analysisSessionId: controlSession.sessionId,
|
|
112
|
+
lastError: null
|
|
113
|
+
},
|
|
114
|
+
updatedAt: timestamp
|
|
115
|
+
});
|
|
116
|
+
const task = this.taskManager.enqueue(HOST_TASK_TYPES.butlerInboxAnalyze, {
|
|
117
|
+
key: itemId.trim(),
|
|
118
|
+
source: "butler_inbox.request_analysis",
|
|
119
|
+
input: {
|
|
120
|
+
itemId: itemId.trim(),
|
|
121
|
+
userId,
|
|
122
|
+
sessionId: controlSession.sessionId,
|
|
123
|
+
providerId: controlSession.providerId
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
if (!task.deduped) {
|
|
127
|
+
void task.promise.catch(() => undefined);
|
|
128
|
+
}
|
|
129
|
+
return {
|
|
130
|
+
item: this.toView(updated, project),
|
|
131
|
+
controlSession
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
async startExecution(itemId, userId) {
|
|
135
|
+
this.ensureExecutionDependencies();
|
|
136
|
+
const current = this.recoverStaleAnalysisState(this.requireItem(itemId), userId);
|
|
137
|
+
const project = this.requireProject(current.projectId);
|
|
138
|
+
this.ensureItemIsActionable(current);
|
|
139
|
+
let latestItem = current;
|
|
140
|
+
if (current.assistantState.linkedButlerSessionId && current.assistantState.linkedSessionId) {
|
|
141
|
+
throw new AppError({
|
|
142
|
+
statusCode: 409,
|
|
143
|
+
errorCode: "BUTLER_INBOX_SESSION_EXISTS",
|
|
144
|
+
detail: "这条代办已经绑定了执行会话"
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
try {
|
|
148
|
+
if (current.assistantState.lifecycleStage === "analyzing") {
|
|
149
|
+
throw new AppError({
|
|
150
|
+
statusCode: 409,
|
|
151
|
+
errorCode: "BUTLER_INBOX_ANALYSIS_RUNNING",
|
|
152
|
+
detail: "这条代办正在后台分析,请等待提示词生成完成"
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
const prompt = current.assistantState.generatedPrompt?.trim();
|
|
156
|
+
if (!prompt) {
|
|
157
|
+
throw new AppError({
|
|
158
|
+
statusCode: 409,
|
|
159
|
+
errorCode: "BUTLER_INBOX_PROMPT_NOT_READY",
|
|
160
|
+
detail: "这条代办还没有生成开发提示词,请先执行后台分析"
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
const session = this.tryRecoverExistingExecutionSession(current, project, prompt, userId)
|
|
164
|
+
?? await this.butlerSessionService.startSession(project.id, {
|
|
165
|
+
role: "execution",
|
|
166
|
+
ownershipMode: "managed",
|
|
167
|
+
content: prompt,
|
|
168
|
+
permissionMode: project.approvalMode === "readonly" ? "default" : "acceptEdits"
|
|
169
|
+
}, userId);
|
|
170
|
+
const sessionCreatedAt = nowIso();
|
|
171
|
+
const sessionLinkedItem = this.butlerInboxItemRepository.update({
|
|
172
|
+
...current,
|
|
173
|
+
assistantState: {
|
|
174
|
+
...current.assistantState,
|
|
175
|
+
lifecycleStage: "session_created",
|
|
176
|
+
linkedButlerSessionId: session.id,
|
|
177
|
+
linkedSessionId: session.sessionId,
|
|
178
|
+
lastError: null,
|
|
179
|
+
lastSessionCreatedAt: sessionCreatedAt
|
|
180
|
+
},
|
|
181
|
+
updatedAt: sessionCreatedAt
|
|
182
|
+
});
|
|
183
|
+
latestItem = sessionLinkedItem;
|
|
184
|
+
const followUpTask = await this.butlerFollowUpService.createTask({
|
|
185
|
+
projectId: project.id,
|
|
186
|
+
butlerSessionId: session.id,
|
|
187
|
+
objective: current.assistantState.analysisSummary?.trim()
|
|
188
|
+
? [
|
|
189
|
+
`围绕代办「${current.title}」推进实现。`,
|
|
190
|
+
current.content,
|
|
191
|
+
current.assistantState.analysisSummary
|
|
192
|
+
].join("\n")
|
|
193
|
+
: [
|
|
194
|
+
`围绕代办「${current.title}」推进实现。`,
|
|
195
|
+
current.content
|
|
196
|
+
].join("\n"),
|
|
197
|
+
completionCriteria: `代办「${current.title}」需要完成实现并补齐必要验证,结果必须在会话里说明清楚。`
|
|
198
|
+
}, userId);
|
|
199
|
+
const timestamp = nowIso();
|
|
200
|
+
const nextStatus = latestItem.status === "pending" ? "in_progress" : latestItem.status;
|
|
201
|
+
const updated = this.butlerInboxItemRepository.update({
|
|
202
|
+
...latestItem,
|
|
203
|
+
status: nextStatus,
|
|
204
|
+
assistantState: {
|
|
205
|
+
...latestItem.assistantState,
|
|
206
|
+
lifecycleStage: "follow_up_active",
|
|
207
|
+
linkedFollowUpTaskId: followUpTask.id,
|
|
208
|
+
lastError: null,
|
|
209
|
+
lastFollowUpAt: timestamp
|
|
210
|
+
},
|
|
211
|
+
updatedAt: timestamp,
|
|
212
|
+
closedAt: nextStatus === "closed" ? latestItem.closedAt ?? timestamp : null
|
|
213
|
+
});
|
|
214
|
+
return {
|
|
215
|
+
item: this.toView(updated, project),
|
|
216
|
+
session,
|
|
217
|
+
followUpTask
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
catch (error) {
|
|
221
|
+
throw this.markActionFailed(latestItem, error);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
71
224
|
deleteItem(itemId) {
|
|
72
225
|
this.requireItem(itemId);
|
|
73
226
|
this.butlerInboxItemRepository.delete(itemId);
|
|
74
227
|
}
|
|
228
|
+
registerBackgroundTasks() {
|
|
229
|
+
if (!this.taskManager.has(HOST_TASK_TYPES.butlerInboxAnalyze)) {
|
|
230
|
+
this.taskManager.register({
|
|
231
|
+
taskType: HOST_TASK_TYPES.butlerInboxAnalyze,
|
|
232
|
+
executionLane: "external_process",
|
|
233
|
+
concurrency: 1,
|
|
234
|
+
timeoutMs: 120_000,
|
|
235
|
+
run: async (input) => {
|
|
236
|
+
await this.runAnalyzeTask(input.itemId, input.userId, input.sessionId, input.providerId);
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
async runAnalyzeTask(itemId, userId, sessionId, providerId) {
|
|
242
|
+
const current = this.butlerInboxItemRepository.findById(itemId);
|
|
243
|
+
if (!current || current.status === "closed") {
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
try {
|
|
247
|
+
const analysis = await this.butlerInboxAnalysisService.readTodoAnalysisResult(sessionId, providerId, userId);
|
|
248
|
+
const latest = this.butlerInboxItemRepository.findById(itemId);
|
|
249
|
+
if (!latest || latest.status === "closed") {
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
this.butlerControlSessionService?.updateSessionStatusBySessionId({
|
|
253
|
+
sessionId,
|
|
254
|
+
status: "idle",
|
|
255
|
+
lastSummary: analysis.analysisSummary
|
|
256
|
+
});
|
|
257
|
+
const timestamp = nowIso();
|
|
258
|
+
this.butlerInboxItemRepository.update({
|
|
259
|
+
...latest,
|
|
260
|
+
assistantState: {
|
|
261
|
+
...latest.assistantState,
|
|
262
|
+
lifecycleStage: "analyzed",
|
|
263
|
+
analysisSummary: analysis.analysisSummary,
|
|
264
|
+
generatedPrompt: analysis.prompt,
|
|
265
|
+
lastError: null,
|
|
266
|
+
lastAnalyzedAt: timestamp
|
|
267
|
+
},
|
|
268
|
+
updatedAt: timestamp
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
catch (error) {
|
|
272
|
+
const latest = this.butlerInboxItemRepository.findById(itemId);
|
|
273
|
+
if (!latest || latest.status === "closed") {
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
this.butlerControlSessionService?.updateSessionStatusBySessionId({
|
|
277
|
+
sessionId,
|
|
278
|
+
status: "failed",
|
|
279
|
+
lastSummary: error instanceof Error ? error.message : String(error)
|
|
280
|
+
});
|
|
281
|
+
this.markActionFailed(latest, error);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
ensureAnalysisDependencies() {
|
|
285
|
+
if (!this.butlerInboxAnalysisService || !this.butlerControlSessionService) {
|
|
286
|
+
throw new AppError({
|
|
287
|
+
statusCode: 500,
|
|
288
|
+
errorCode: "BUTLER_INBOX_ANALYSIS_UNAVAILABLE",
|
|
289
|
+
detail: "当前环境未启用代办仓库分析能力"
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
ensureExecutionDependencies() {
|
|
294
|
+
this.ensureAnalysisDependencies();
|
|
295
|
+
if (!this.butlerSessionService || !this.butlerFollowUpService) {
|
|
296
|
+
throw new AppError({
|
|
297
|
+
statusCode: 500,
|
|
298
|
+
errorCode: "BUTLER_INBOX_EXECUTION_UNAVAILABLE",
|
|
299
|
+
detail: "当前环境未启用代办执行会话能力"
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
ensureItemIsActionable(item) {
|
|
304
|
+
if (item.status === "closed") {
|
|
305
|
+
throw new AppError({
|
|
306
|
+
statusCode: 409,
|
|
307
|
+
errorCode: "BUTLER_INBOX_ALREADY_CLOSED",
|
|
308
|
+
detail: "已关闭的代办不能再触发助手执行"
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
markActionFailed(current, error) {
|
|
313
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
314
|
+
this.butlerInboxItemRepository.update({
|
|
315
|
+
...current,
|
|
316
|
+
assistantState: {
|
|
317
|
+
...current.assistantState,
|
|
318
|
+
lifecycleStage: current.status === "closed" ? "completed" : "failed",
|
|
319
|
+
lastError: detail
|
|
320
|
+
},
|
|
321
|
+
updatedAt: nowIso()
|
|
322
|
+
});
|
|
323
|
+
return error instanceof Error ? error : new Error(detail);
|
|
324
|
+
}
|
|
75
325
|
requireProject(projectId) {
|
|
76
326
|
const normalizedProjectId = projectId?.trim();
|
|
77
327
|
if (!normalizedProjectId) {
|
|
@@ -132,5 +382,145 @@ export class ButlerInboxService {
|
|
|
132
382
|
projectLifecycleStatus: project.lifecycleStatus
|
|
133
383
|
};
|
|
134
384
|
}
|
|
385
|
+
recoverStaleAnalysisState(item, userId) {
|
|
386
|
+
if (item.assistantState.lifecycleStage !== "analyzing" || !userId || !this.butlerControlSessionService?.getSession) {
|
|
387
|
+
return item;
|
|
388
|
+
}
|
|
389
|
+
const controlSessionId = item.assistantState.analysisControlSessionId?.trim();
|
|
390
|
+
const hasPrompt = Boolean(item.assistantState.generatedPrompt?.trim());
|
|
391
|
+
if (!controlSessionId) {
|
|
392
|
+
return hasPrompt
|
|
393
|
+
? this.persistRecoveredAssistantState(item, {
|
|
394
|
+
...item.assistantState,
|
|
395
|
+
lifecycleStage: "analyzed",
|
|
396
|
+
lastError: null
|
|
397
|
+
})
|
|
398
|
+
: this.persistRecoveredAssistantState(item, {
|
|
399
|
+
...item.assistantState,
|
|
400
|
+
lifecycleStage: "failed",
|
|
401
|
+
lastError: "代办分析任务已经结束,但没有生成新的开发提示词,请重新分析。"
|
|
402
|
+
});
|
|
403
|
+
}
|
|
404
|
+
const controlSession = this.butlerControlSessionService.getSession(controlSessionId, userId);
|
|
405
|
+
if (!controlSession) {
|
|
406
|
+
return hasPrompt
|
|
407
|
+
? this.persistRecoveredAssistantState(item, {
|
|
408
|
+
...item.assistantState,
|
|
409
|
+
lifecycleStage: "analyzed",
|
|
410
|
+
lastError: null
|
|
411
|
+
})
|
|
412
|
+
: this.persistRecoveredAssistantState(item, {
|
|
413
|
+
...item.assistantState,
|
|
414
|
+
lifecycleStage: "failed",
|
|
415
|
+
lastError: "代办分析会话不存在,无法确认结果,请重新分析。"
|
|
416
|
+
});
|
|
417
|
+
}
|
|
418
|
+
const runningState = controlSession.session.runningState;
|
|
419
|
+
if (runningState === "starting" || runningState === "running") {
|
|
420
|
+
return item;
|
|
421
|
+
}
|
|
422
|
+
if (runningState === "failed" || controlSession.status === "failed") {
|
|
423
|
+
this.butlerControlSessionService.updateSessionStatusBySessionId({
|
|
424
|
+
sessionId: controlSession.sessionId,
|
|
425
|
+
status: "failed",
|
|
426
|
+
lastSummary: controlSession.lastSummary
|
|
427
|
+
});
|
|
428
|
+
return this.persistRecoveredAssistantState(item, {
|
|
429
|
+
...item.assistantState,
|
|
430
|
+
lifecycleStage: "failed",
|
|
431
|
+
lastError: controlSession.lastSummary ?? "代办分析会话执行失败,请重新分析。"
|
|
432
|
+
});
|
|
433
|
+
}
|
|
434
|
+
if (!hasPrompt) {
|
|
435
|
+
this.butlerControlSessionService.updateSessionStatusBySessionId({
|
|
436
|
+
sessionId: controlSession.sessionId,
|
|
437
|
+
status: "failed",
|
|
438
|
+
lastSummary: controlSession.lastSummary
|
|
439
|
+
});
|
|
440
|
+
return this.persistRecoveredAssistantState(item, {
|
|
441
|
+
...item.assistantState,
|
|
442
|
+
lifecycleStage: "failed",
|
|
443
|
+
lastError: "代办分析任务已经结束,但没有生成新的开发提示词,请重新分析。"
|
|
444
|
+
});
|
|
445
|
+
}
|
|
446
|
+
this.butlerControlSessionService.updateSessionStatusBySessionId({
|
|
447
|
+
sessionId: controlSession.sessionId,
|
|
448
|
+
status: "idle",
|
|
449
|
+
lastSummary: controlSession.lastSummary
|
|
450
|
+
});
|
|
451
|
+
return this.persistRecoveredAssistantState(item, {
|
|
452
|
+
...item.assistantState,
|
|
453
|
+
lifecycleStage: "analyzed",
|
|
454
|
+
lastError: null
|
|
455
|
+
});
|
|
456
|
+
}
|
|
457
|
+
persistRecoveredAssistantState(item, assistantState) {
|
|
458
|
+
if (item.assistantState.lifecycleStage === assistantState.lifecycleStage
|
|
459
|
+
&& item.assistantState.lastError === assistantState.lastError) {
|
|
460
|
+
return item;
|
|
461
|
+
}
|
|
462
|
+
return this.butlerInboxItemRepository.update({
|
|
463
|
+
...item,
|
|
464
|
+
assistantState,
|
|
465
|
+
updatedAt: nowIso()
|
|
466
|
+
});
|
|
467
|
+
}
|
|
468
|
+
tryRecoverExistingExecutionSession(item, project, prompt, userId) {
|
|
469
|
+
if (!this.butlerSessionService?.recoverManagedSession) {
|
|
470
|
+
return null;
|
|
471
|
+
}
|
|
472
|
+
if (item.assistantState.lifecycleStage !== "failed"
|
|
473
|
+
|| item.assistantState.linkedButlerSessionId?.trim()
|
|
474
|
+
|| item.assistantState.linkedSessionId?.trim()) {
|
|
475
|
+
return null;
|
|
476
|
+
}
|
|
477
|
+
return this.butlerSessionService.recoverManagedSession(project.id, {
|
|
478
|
+
role: "execution",
|
|
479
|
+
ownershipMode: "managed",
|
|
480
|
+
content: prompt,
|
|
481
|
+
permissionMode: project.approvalMode === "readonly" ? "default" : "acceptEdits"
|
|
482
|
+
}, userId, {
|
|
483
|
+
recoveryReferenceAt: item.assistantState.lastSessionCreatedAt?.trim() || item.updatedAt
|
|
484
|
+
});
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
function createAssistantState(status) {
|
|
488
|
+
return {
|
|
489
|
+
lifecycleStage: status === "closed" ? "completed" : "pending",
|
|
490
|
+
analysisSummary: null,
|
|
491
|
+
generatedPrompt: null,
|
|
492
|
+
analysisControlSessionId: null,
|
|
493
|
+
analysisSessionId: null,
|
|
494
|
+
linkedButlerSessionId: null,
|
|
495
|
+
linkedSessionId: null,
|
|
496
|
+
linkedFollowUpTaskId: null,
|
|
497
|
+
lastError: null,
|
|
498
|
+
lastAnalyzedAt: null,
|
|
499
|
+
lastSessionCreatedAt: null,
|
|
500
|
+
lastFollowUpAt: null
|
|
501
|
+
};
|
|
502
|
+
}
|
|
503
|
+
function resolveAssistantStateForManualUpdate(state, nextStatus) {
|
|
504
|
+
if (nextStatus === "closed") {
|
|
505
|
+
return {
|
|
506
|
+
...state,
|
|
507
|
+
lifecycleStage: "completed",
|
|
508
|
+
lastError: null
|
|
509
|
+
};
|
|
510
|
+
}
|
|
511
|
+
const nextLifecycleStage = state.lifecycleStage === "analyzing"
|
|
512
|
+
? "analyzing"
|
|
513
|
+
: state.linkedFollowUpTaskId?.trim()
|
|
514
|
+
? "follow_up_active"
|
|
515
|
+
: state.linkedButlerSessionId?.trim()
|
|
516
|
+
? "session_created"
|
|
517
|
+
: state.generatedPrompt?.trim()
|
|
518
|
+
? "analyzed"
|
|
519
|
+
: "pending";
|
|
520
|
+
return {
|
|
521
|
+
...state,
|
|
522
|
+
lifecycleStage: nextLifecycleStage,
|
|
523
|
+
lastError: null
|
|
524
|
+
};
|
|
135
525
|
}
|
|
136
526
|
//# sourceMappingURL=butler-inbox-service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"butler-inbox-service.js","sourceRoot":"","sources":["../../../../src/modules/butler/butler-inbox-service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"butler-inbox-service.js","sourceRoot":"","sources":["../../../../src/modules/butler/butler-inbox-service.ts"],"names":[],"mappings":"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"}
|