@wandoupeas/coding-forge 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (262) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +347 -0
  3. package/dist/agent/adapters/base.d.ts +9 -0
  4. package/dist/agent/adapters/base.d.ts.map +1 -0
  5. package/dist/agent/adapters/base.js +2 -0
  6. package/dist/agent/adapters/base.js.map +1 -0
  7. package/dist/agent/adapters/claude-code.d.ts +4 -0
  8. package/dist/agent/adapters/claude-code.d.ts.map +1 -0
  9. package/dist/agent/adapters/claude-code.js +25 -0
  10. package/dist/agent/adapters/claude-code.js.map +1 -0
  11. package/dist/agent/adapters/codex.d.ts +4 -0
  12. package/dist/agent/adapters/codex.d.ts.map +1 -0
  13. package/dist/agent/adapters/codex.js +27 -0
  14. package/dist/agent/adapters/codex.js.map +1 -0
  15. package/dist/agent/adapters/command-bridge.d.ts +67 -0
  16. package/dist/agent/adapters/command-bridge.d.ts.map +1 -0
  17. package/dist/agent/adapters/command-bridge.js +266 -0
  18. package/dist/agent/adapters/command-bridge.js.map +1 -0
  19. package/dist/agent/adapters/index.d.ts +7 -0
  20. package/dist/agent/adapters/index.d.ts.map +1 -0
  21. package/dist/agent/adapters/index.js +25 -0
  22. package/dist/agent/adapters/index.js.map +1 -0
  23. package/dist/agent/adapters/stub.d.ts +3 -0
  24. package/dist/agent/adapters/stub.d.ts.map +1 -0
  25. package/dist/agent/adapters/stub.js +66 -0
  26. package/dist/agent/adapters/stub.js.map +1 -0
  27. package/dist/agent/context.d.ts +36 -0
  28. package/dist/agent/context.d.ts.map +1 -0
  29. package/dist/agent/context.js +16 -0
  30. package/dist/agent/context.js.map +1 -0
  31. package/dist/agent/handlers/index.d.ts +6 -0
  32. package/dist/agent/handlers/index.d.ts.map +1 -0
  33. package/dist/agent/handlers/index.js +61 -0
  34. package/dist/agent/handlers/index.js.map +1 -0
  35. package/dist/agent/index.d.ts +18 -0
  36. package/dist/agent/index.d.ts.map +1 -0
  37. package/dist/agent/index.js +37 -0
  38. package/dist/agent/index.js.map +1 -0
  39. package/dist/agent/types.d.ts +21 -0
  40. package/dist/agent/types.d.ts.map +1 -0
  41. package/dist/agent/types.js +5 -0
  42. package/dist/agent/types.js.map +1 -0
  43. package/dist/cli/agent-briefing.d.ts +24 -0
  44. package/dist/cli/agent-briefing.d.ts.map +1 -0
  45. package/dist/cli/agent-briefing.js +133 -0
  46. package/dist/cli/agent-briefing.js.map +1 -0
  47. package/dist/cli/commands/checkpoint.d.ts +12 -0
  48. package/dist/cli/commands/checkpoint.d.ts.map +1 -0
  49. package/dist/cli/commands/checkpoint.js +86 -0
  50. package/dist/cli/commands/checkpoint.js.map +1 -0
  51. package/dist/cli/commands/dashboard.d.ts +14 -0
  52. package/dist/cli/commands/dashboard.d.ts.map +1 -0
  53. package/dist/cli/commands/dashboard.js +192 -0
  54. package/dist/cli/commands/dashboard.js.map +1 -0
  55. package/dist/cli/commands/doctor.d.ts +27 -0
  56. package/dist/cli/commands/doctor.d.ts.map +1 -0
  57. package/dist/cli/commands/doctor.js +425 -0
  58. package/dist/cli/commands/doctor.js.map +1 -0
  59. package/dist/cli/commands/init.d.ts +19 -0
  60. package/dist/cli/commands/init.d.ts.map +1 -0
  61. package/dist/cli/commands/init.js +303 -0
  62. package/dist/cli/commands/init.js.map +1 -0
  63. package/dist/cli/commands/knowledge.d.ts +6 -0
  64. package/dist/cli/commands/knowledge.d.ts.map +1 -0
  65. package/dist/cli/commands/knowledge.js +408 -0
  66. package/dist/cli/commands/knowledge.js.map +1 -0
  67. package/dist/cli/commands/logs.d.ts +50 -0
  68. package/dist/cli/commands/logs.d.ts.map +1 -0
  69. package/dist/cli/commands/logs.js +248 -0
  70. package/dist/cli/commands/logs.js.map +1 -0
  71. package/dist/cli/commands/mailbox.d.ts +12 -0
  72. package/dist/cli/commands/mailbox.d.ts.map +1 -0
  73. package/dist/cli/commands/mailbox.js +131 -0
  74. package/dist/cli/commands/mailbox.js.map +1 -0
  75. package/dist/cli/commands/onboard.d.ts +43 -0
  76. package/dist/cli/commands/onboard.d.ts.map +1 -0
  77. package/dist/cli/commands/onboard.js +313 -0
  78. package/dist/cli/commands/onboard.js.map +1 -0
  79. package/dist/cli/commands/plan.d.ts +16 -0
  80. package/dist/cli/commands/plan.d.ts.map +1 -0
  81. package/dist/cli/commands/plan.js +211 -0
  82. package/dist/cli/commands/plan.js.map +1 -0
  83. package/dist/cli/commands/resume.d.ts +102 -0
  84. package/dist/cli/commands/resume.d.ts.map +1 -0
  85. package/dist/cli/commands/resume.js +256 -0
  86. package/dist/cli/commands/resume.js.map +1 -0
  87. package/dist/cli/commands/review.d.ts +13 -0
  88. package/dist/cli/commands/review.d.ts.map +1 -0
  89. package/dist/cli/commands/review.js +91 -0
  90. package/dist/cli/commands/review.js.map +1 -0
  91. package/dist/cli/commands/run.d.ts +19 -0
  92. package/dist/cli/commands/run.d.ts.map +1 -0
  93. package/dist/cli/commands/run.js +161 -0
  94. package/dist/cli/commands/run.js.map +1 -0
  95. package/dist/cli/commands/superpowers.d.ts +21 -0
  96. package/dist/cli/commands/superpowers.d.ts.map +1 -0
  97. package/dist/cli/commands/superpowers.js +135 -0
  98. package/dist/cli/commands/superpowers.js.map +1 -0
  99. package/dist/cli/commands/ui.d.ts +14 -0
  100. package/dist/cli/commands/ui.d.ts.map +1 -0
  101. package/dist/cli/commands/ui.js +41 -0
  102. package/dist/cli/commands/ui.js.map +1 -0
  103. package/dist/cli/commands/verify.d.ts +11 -0
  104. package/dist/cli/commands/verify.d.ts.map +1 -0
  105. package/dist/cli/commands/verify.js +46 -0
  106. package/dist/cli/commands/verify.js.map +1 -0
  107. package/dist/cli/index.d.ts +9 -0
  108. package/dist/cli/index.d.ts.map +1 -0
  109. package/dist/cli/index.js +69 -0
  110. package/dist/cli/index.js.map +1 -0
  111. package/dist/cli/utils/logger.d.ts +18 -0
  112. package/dist/cli/utils/logger.d.ts.map +1 -0
  113. package/dist/cli/utils/logger.js +57 -0
  114. package/dist/cli/utils/logger.js.map +1 -0
  115. package/dist/core/checkpoint.d.ts +54 -0
  116. package/dist/core/checkpoint.d.ts.map +1 -0
  117. package/dist/core/checkpoint.js +227 -0
  118. package/dist/core/checkpoint.js.map +1 -0
  119. package/dist/core/context.d.ts +36 -0
  120. package/dist/core/context.d.ts.map +1 -0
  121. package/dist/core/context.js +71 -0
  122. package/dist/core/context.js.map +1 -0
  123. package/dist/core/deliverable.d.ts +34 -0
  124. package/dist/core/deliverable.d.ts.map +1 -0
  125. package/dist/core/deliverable.js +125 -0
  126. package/dist/core/deliverable.js.map +1 -0
  127. package/dist/core/harness-hints.d.ts +43 -0
  128. package/dist/core/harness-hints.d.ts.map +1 -0
  129. package/dist/core/harness-hints.js +162 -0
  130. package/dist/core/harness-hints.js.map +1 -0
  131. package/dist/core/logger.d.ts +104 -0
  132. package/dist/core/logger.d.ts.map +1 -0
  133. package/dist/core/logger.js +199 -0
  134. package/dist/core/logger.js.map +1 -0
  135. package/dist/core/mailbox.d.ts +69 -0
  136. package/dist/core/mailbox.d.ts.map +1 -0
  137. package/dist/core/mailbox.js +225 -0
  138. package/dist/core/mailbox.js.map +1 -0
  139. package/dist/core/planning.d.ts +110 -0
  140. package/dist/core/planning.d.ts.map +1 -0
  141. package/dist/core/planning.js +832 -0
  142. package/dist/core/planning.js.map +1 -0
  143. package/dist/core/runtime.d.ts +22 -0
  144. package/dist/core/runtime.d.ts.map +1 -0
  145. package/dist/core/runtime.js +364 -0
  146. package/dist/core/runtime.js.map +1 -0
  147. package/dist/core/session.d.ts +62 -0
  148. package/dist/core/session.d.ts.map +1 -0
  149. package/dist/core/session.js +266 -0
  150. package/dist/core/session.js.map +1 -0
  151. package/dist/core/superpowers-registry.d.ts +20 -0
  152. package/dist/core/superpowers-registry.d.ts.map +1 -0
  153. package/dist/core/superpowers-registry.js +180 -0
  154. package/dist/core/superpowers-registry.js.map +1 -0
  155. package/dist/core/superpowers-runs.d.ts +19 -0
  156. package/dist/core/superpowers-runs.d.ts.map +1 -0
  157. package/dist/core/superpowers-runs.js +231 -0
  158. package/dist/core/superpowers-runs.js.map +1 -0
  159. package/dist/core/task.d.ts +43 -0
  160. package/dist/core/task.d.ts.map +1 -0
  161. package/dist/core/task.js +232 -0
  162. package/dist/core/task.js.map +1 -0
  163. package/dist/core/threads.d.ts +23 -0
  164. package/dist/core/threads.d.ts.map +1 -0
  165. package/dist/core/threads.js +92 -0
  166. package/dist/core/threads.js.map +1 -0
  167. package/dist/core/worker.d.ts +48 -0
  168. package/dist/core/worker.d.ts.map +1 -0
  169. package/dist/core/worker.js +181 -0
  170. package/dist/core/worker.js.map +1 -0
  171. package/dist/core/workflow-context.d.ts +16 -0
  172. package/dist/core/workflow-context.d.ts.map +1 -0
  173. package/dist/core/workflow-context.js +102 -0
  174. package/dist/core/workflow-context.js.map +1 -0
  175. package/dist/core/workspace.d.ts +13 -0
  176. package/dist/core/workspace.d.ts.map +1 -0
  177. package/dist/core/workspace.js +208 -0
  178. package/dist/core/workspace.js.map +1 -0
  179. package/dist/testing/index.d.ts +21 -0
  180. package/dist/testing/index.d.ts.map +1 -0
  181. package/dist/testing/index.js +55 -0
  182. package/dist/testing/index.js.map +1 -0
  183. package/dist/types/index.d.ts +298 -0
  184. package/dist/types/index.d.ts.map +1 -0
  185. package/dist/types/index.js +5 -0
  186. package/dist/types/index.js.map +1 -0
  187. package/dist/ui/assets/index-DLwnhrrc.css +1 -0
  188. package/dist/ui/assets/index-cDUGEuwi.js +234 -0
  189. package/dist/ui/http/handlers/project-artifacts.d.ts +3 -0
  190. package/dist/ui/http/handlers/project-artifacts.d.ts.map +1 -0
  191. package/dist/ui/http/handlers/project-artifacts.js +20 -0
  192. package/dist/ui/http/handlers/project-artifacts.js.map +1 -0
  193. package/dist/ui/http/handlers/project-overview.d.ts +3 -0
  194. package/dist/ui/http/handlers/project-overview.d.ts.map +1 -0
  195. package/dist/ui/http/handlers/project-overview.js +20 -0
  196. package/dist/ui/http/handlers/project-overview.js.map +1 -0
  197. package/dist/ui/http/handlers/project-recovery.d.ts +3 -0
  198. package/dist/ui/http/handlers/project-recovery.d.ts.map +1 -0
  199. package/dist/ui/http/handlers/project-recovery.js +20 -0
  200. package/dist/ui/http/handlers/project-recovery.js.map +1 -0
  201. package/dist/ui/http/handlers/project-runtime.d.ts +3 -0
  202. package/dist/ui/http/handlers/project-runtime.d.ts.map +1 -0
  203. package/dist/ui/http/handlers/project-runtime.js +20 -0
  204. package/dist/ui/http/handlers/project-runtime.js.map +1 -0
  205. package/dist/ui/http/handlers/project-tasks.d.ts +3 -0
  206. package/dist/ui/http/handlers/project-tasks.d.ts.map +1 -0
  207. package/dist/ui/http/handlers/project-tasks.js +20 -0
  208. package/dist/ui/http/handlers/project-tasks.js.map +1 -0
  209. package/dist/ui/http/handlers/projects.d.ts +23 -0
  210. package/dist/ui/http/handlers/projects.d.ts.map +1 -0
  211. package/dist/ui/http/handlers/projects.js +29 -0
  212. package/dist/ui/http/handlers/projects.js.map +1 -0
  213. package/dist/ui/http/router.d.ts +5 -0
  214. package/dist/ui/http/router.d.ts.map +1 -0
  215. package/dist/ui/http/router.js +81 -0
  216. package/dist/ui/http/router.js.map +1 -0
  217. package/dist/ui/http/server.d.ts +29 -0
  218. package/dist/ui/http/server.d.ts.map +1 -0
  219. package/dist/ui/http/server.js +143 -0
  220. package/dist/ui/http/server.js.map +1 -0
  221. package/dist/ui/index.html +13 -0
  222. package/dist/ui/project-registry.d.ts +9 -0
  223. package/dist/ui/project-registry.d.ts.map +1 -0
  224. package/dist/ui/project-registry.js +19 -0
  225. package/dist/ui/project-registry.js.map +1 -0
  226. package/dist/ui/project-scanner.d.ts +10 -0
  227. package/dist/ui/project-scanner.d.ts.map +1 -0
  228. package/dist/ui/project-scanner.js +135 -0
  229. package/dist/ui/project-scanner.js.map +1 -0
  230. package/dist/ui/read-models/artifacts.d.ts +58 -0
  231. package/dist/ui/read-models/artifacts.d.ts.map +1 -0
  232. package/dist/ui/read-models/artifacts.js +97 -0
  233. package/dist/ui/read-models/artifacts.js.map +1 -0
  234. package/dist/ui/read-models/overview.d.ts +38 -0
  235. package/dist/ui/read-models/overview.d.ts.map +1 -0
  236. package/dist/ui/read-models/overview.js +55 -0
  237. package/dist/ui/read-models/overview.js.map +1 -0
  238. package/dist/ui/read-models/recovery.d.ts +18 -0
  239. package/dist/ui/read-models/recovery.d.ts.map +1 -0
  240. package/dist/ui/read-models/recovery.js +26 -0
  241. package/dist/ui/read-models/recovery.js.map +1 -0
  242. package/dist/ui/read-models/runtime.d.ts +53 -0
  243. package/dist/ui/read-models/runtime.d.ts.map +1 -0
  244. package/dist/ui/read-models/runtime.js +86 -0
  245. package/dist/ui/read-models/runtime.js.map +1 -0
  246. package/dist/ui/read-models/tasks.d.ts +34 -0
  247. package/dist/ui/read-models/tasks.d.ts.map +1 -0
  248. package/dist/ui/read-models/tasks.js +46 -0
  249. package/dist/ui/read-models/tasks.js.map +1 -0
  250. package/dist/utils/config.d.ts +30 -0
  251. package/dist/utils/config.d.ts.map +1 -0
  252. package/dist/utils/config.js +152 -0
  253. package/dist/utils/config.js.map +1 -0
  254. package/dist/utils/file.d.ts +24 -0
  255. package/dist/utils/file.d.ts.map +1 -0
  256. package/dist/utils/file.js +42 -0
  257. package/dist/utils/file.js.map +1 -0
  258. package/dist/utils/lock.d.ts +7 -0
  259. package/dist/utils/lock.d.ts.map +1 -0
  260. package/dist/utils/lock.js +36 -0
  261. package/dist/utils/lock.js.map +1 -0
  262. package/package.json +78 -0
@@ -0,0 +1,425 @@
1
+ /**
2
+ * doctor 命令 - 校验 repo-side harness 契约是否完整
3
+ */
4
+ import { existsSync } from 'fs';
5
+ import { readdir } from 'fs/promises';
6
+ import { join } from 'path';
7
+ import { Command } from 'commander';
8
+ import { listCheckpoints } from '../../core/checkpoint.js';
9
+ import { getLatestRuntimeObservation } from '../../core/logger.js';
10
+ import { Mailbox } from '../../core/mailbox.js';
11
+ import { inspectSuperpowersRun } from '../../core/superpowers-runs.js';
12
+ import { inspectThreadLink } from '../../core/threads.js';
13
+ import { buildRuntimeLogsSummary } from './logs.js';
14
+ import { getRuntimeWorkflowContext, getSessionWorkflowContext, inspectWorkflowContext, pickWorkflowContext } from '../../core/workflow-context.js';
15
+ import logger from '../utils/logger.js';
16
+ import { loadConfig } from '../../utils/config.js';
17
+ import { loadWorkspaceState } from '../../core/workspace.js';
18
+ export function createDoctorCommand() {
19
+ return new Command('doctor')
20
+ .description('校验 WebForge 仓库契约、workspace 状态和 superpowers 集成入口')
21
+ .option('--json', '输出结构化仓库契约报告,供 agent 或脚本消费')
22
+ .action(async (options) => {
23
+ try {
24
+ await doctorCommand(options);
25
+ }
26
+ catch (error) {
27
+ logger.error(`校验失败: ${error}`);
28
+ process.exit(1);
29
+ }
30
+ });
31
+ }
32
+ export async function doctorCommand(optionsOrBasePath = {}, maybeBasePath) {
33
+ const options = typeof optionsOrBasePath === 'string'
34
+ ? {}
35
+ : optionsOrBasePath;
36
+ const basePath = typeof optionsOrBasePath === 'string'
37
+ ? optionsOrBasePath
38
+ : (maybeBasePath ?? process.cwd());
39
+ const report = await buildDoctorReport(basePath);
40
+ if (options.json) {
41
+ console.log(JSON.stringify(report, null, 2));
42
+ return report;
43
+ }
44
+ logger.h1('🩺 WebForge Doctor');
45
+ logger.info(`通过: ${report.summary.ok} | 警告: ${report.summary.warn} | 失败: ${report.summary.fail}`);
46
+ console.log();
47
+ for (const check of report.checks) {
48
+ const icon = statusIcon(check.status);
49
+ console.log(` ${icon} ${check.label}`);
50
+ console.log(` ${check.detail}`);
51
+ }
52
+ console.log();
53
+ logger.info('下一步:');
54
+ logger.list(report.guidance);
55
+ return report;
56
+ }
57
+ export async function buildDoctorReport(basePath = process.cwd()) {
58
+ const checks = [];
59
+ const agentsPath = join(basePath, 'AGENTS.md');
60
+ const workspaceRoot = join(basePath, '.webforge');
61
+ const runtimePath = join(workspaceRoot, 'runtime.json');
62
+ const tasksPath = join(workspaceRoot, 'tasks.json');
63
+ const phasesPath = join(workspaceRoot, 'phases.json');
64
+ const sessionsIndexPath = join(workspaceRoot, 'sessions', 'index.json');
65
+ const knowledgeIndexPath = join(workspaceRoot, 'knowledge', 'index.json');
66
+ const deliverablesIndexPath = join(workspaceRoot, 'deliverables', 'index.json');
67
+ const mailboxesPath = join(workspaceRoot, 'mailboxes');
68
+ const superpowersRunsPath = join(workspaceRoot, 'superpowers-runs.json');
69
+ const threadsIndexPath = join(workspaceRoot, 'threads.json');
70
+ const superpowersDocPath = join(basePath, 'docs', 'methodology', 'superpowers-integration.md');
71
+ const agentGuidePath = join(basePath, 'docs', 'agent-guide.md');
72
+ checks.push(createPresenceCheck('agents', 'AGENTS.md', agentsPath, true, '仓库规则入口已存在'));
73
+ checks.push(createPresenceCheck('workspace', '.webforge workspace', workspaceRoot, true, 'workspace 状态目录已存在'));
74
+ checks.push(createPresenceCheck('runtime', 'runtime.json', runtimePath, true, 'runtime 主循环状态可恢复'));
75
+ checks.push(createPresenceCheck('tasks', 'tasks.json', tasksPath, true, '任务图状态文件已存在'));
76
+ checks.push(createPresenceCheck('phases', 'phases.json', phasesPath, true, '阶段图状态文件已存在'));
77
+ checks.push(createPresenceCheck('sessions', 'sessions/index.json', sessionsIndexPath, false, '会话索引存在,可恢复跨会话上下文'));
78
+ checks.push(createPresenceCheck('knowledge', 'knowledge/index.json', knowledgeIndexPath, false, '知识索引存在,可为 agent 提供按需上下文'));
79
+ checks.push(createPresenceCheck('deliverables', 'deliverables/index.json', deliverablesIndexPath, false, '交付物索引存在,可追踪产出'));
80
+ checks.push(createPresenceCheck('mailboxes', '.webforge/mailboxes', mailboxesPath, false, 'mailbox 观察入口已存在'));
81
+ checks.push(createPresenceCheck('superpowers-runs', '.webforge/superpowers-runs.json', superpowersRunsPath, false, 'superpowers workflow run 索引已存在'));
82
+ checks.push(createPresenceCheck('threads', '.webforge/threads.json', threadsIndexPath, false, 'thread linkage 索引已存在'));
83
+ checks.push(createPresenceCheck('agent-guide', 'docs/agent-guide.md', agentGuidePath, false, '仓库内 agent 工作顺序文档已存在'));
84
+ checks.push(createPresenceCheck('superpowers-doc', 'docs/methodology/superpowers-integration.md', superpowersDocPath, false, 'superpowers 与 WebForge 的边界文档已存在'));
85
+ if (existsSync(workspaceRoot)) {
86
+ try {
87
+ const config = await loadConfig(basePath);
88
+ const provider = config.agent?.provider ?? 'stub';
89
+ const permission = config.agent?.permission_profile ?? 'workspace-write';
90
+ checks.push({
91
+ id: 'agent-profile',
92
+ label: 'agent profile',
93
+ status: 'ok',
94
+ detail: `provider=${provider}, permission_profile=${permission}`
95
+ });
96
+ }
97
+ catch (error) {
98
+ checks.push({
99
+ id: 'agent-profile',
100
+ label: 'agent profile',
101
+ status: 'warn',
102
+ detail: `config.yaml 无法读取 agent profile: ${String(error)}`
103
+ });
104
+ }
105
+ try {
106
+ const workspace = await loadWorkspaceState(basePath);
107
+ const readyCount = workspace.tasks.tasks.filter((task) => task.status === 'ready').length;
108
+ const pendingReviewCount = workspace.indexes.deliverables.filter((item) => item.status === 'pending_review').length;
109
+ checks.push({
110
+ id: 'workspace-state',
111
+ label: 'workspace state',
112
+ status: 'ok',
113
+ detail: `runtime=${workspace.runtime.status}, ready=${readyCount}, pending_review=${pendingReviewCount}`
114
+ });
115
+ const runtimeObservation = await getLatestRuntimeObservation(basePath);
116
+ checks.push({
117
+ id: 'runtime-observability',
118
+ label: 'runtime observability',
119
+ status: 'ok',
120
+ detail: runtimeObservation
121
+ ? `latest_session=${runtimeObservation.sessionId}, last_event=${runtimeObservation.lastEvent ?? 'none'}, permission=${runtimeObservation.permissionProfile ?? 'unknown'}`
122
+ : 'runtime 日志入口已就绪,当前尚无执行日志'
123
+ });
124
+ const runtimeLogsSummary = await buildRuntimeLogsSummary(undefined, basePath).catch(() => null);
125
+ checks.push({
126
+ id: 'runtime-context-drift',
127
+ label: 'runtime context drift',
128
+ status: runtimeLogsSummary?.contextDrift.status === 'drifted'
129
+ ? 'warn'
130
+ : 'ok',
131
+ detail: !runtimeLogsSummary
132
+ ? '当前没有 runtime 日志,尚无法判断历史上下文是否漂移'
133
+ : runtimeLogsSummary.contextDrift.status === 'none'
134
+ ? '最近 runtime 缺少足够的 workflow/thread 上下文,暂无漂移信号'
135
+ : runtimeLogsSummary.contextDrift.status === 'aligned'
136
+ ? '最近 runtime 与当前 workspace 上下文对齐'
137
+ : `drifted: ${runtimeLogsSummary.contextDrift.reasons.join(', ')}`
138
+ });
139
+ const mailboxSignals = await collectMailboxSignals(basePath);
140
+ checks.push({
141
+ id: 'mailbox-observability',
142
+ label: 'mailbox observability',
143
+ status: mailboxSignals.unread > 0 ? 'warn' : 'ok',
144
+ detail: mailboxSignals.unread > 0
145
+ ? `workers=${mailboxSignals.workers}, unread=${mailboxSignals.unread}`
146
+ : `workers=${mailboxSignals.workers}, unread=0`
147
+ });
148
+ checks.push({
149
+ id: 'review-observability',
150
+ label: 'review observability',
151
+ status: pendingReviewCount > 0 ? 'warn' : 'ok',
152
+ detail: pendingReviewCount > 0
153
+ ? `pending_review=${pendingReviewCount}`
154
+ : 'pending_review=0'
155
+ });
156
+ const checkpoints = await listCheckpoints(basePath);
157
+ checks.push({
158
+ id: 'checkpoint-observability',
159
+ label: 'checkpoint observability',
160
+ status: 'ok',
161
+ detail: checkpoints.length > 0
162
+ ? `checkpoints=${checkpoints.length}, latest=${checkpoints[0]?.id ?? 'none'}`
163
+ : 'checkpoint 入口已就绪,当前尚无快照'
164
+ });
165
+ const currentWorkflowContext = pickWorkflowContext(getRuntimeWorkflowContext(workspace.runtime), workspace.indexes.sessions.length > 0
166
+ ? getSessionWorkflowContext(workspace.indexes.sessions[0])
167
+ : null);
168
+ if (!currentWorkflowContext) {
169
+ checks.push({
170
+ id: 'workflow-context-readiness',
171
+ label: 'workflow context readiness',
172
+ status: 'ok',
173
+ detail: '当前没有挂载中的 workflow context'
174
+ });
175
+ }
176
+ else {
177
+ const readiness = inspectWorkflowContext(basePath, currentWorkflowContext);
178
+ checks.push({
179
+ id: 'workflow-context-readiness',
180
+ label: 'workflow context readiness',
181
+ status: readiness.missingArtifacts.length > 0 ||
182
+ readiness.missingWorktreePath ||
183
+ readiness.missingCompactSessionId
184
+ ? 'fail'
185
+ : 'ok',
186
+ detail: readiness.missingArtifacts.length > 0 ||
187
+ readiness.missingWorktreePath ||
188
+ readiness.missingCompactSessionId
189
+ ? [
190
+ `workflow=${currentWorkflowContext.workflow}`,
191
+ currentWorkflowContext.branch
192
+ ? `branch=${currentWorkflowContext.branch}`
193
+ : null,
194
+ readiness.missingArtifacts.length > 0
195
+ ? `missing_artifacts=${readiness.missingArtifacts.join(', ')}`
196
+ : null,
197
+ readiness.missingWorktreePath
198
+ ? `missing_worktree=${readiness.missingWorktreePath}`
199
+ : null,
200
+ readiness.missingCompactSessionId
201
+ ? `missing_compact_session=${readiness.missingCompactSessionId}`
202
+ : null
203
+ ]
204
+ .filter((item) => item !== null)
205
+ .join(', ')
206
+ : [
207
+ `workflow=${currentWorkflowContext.workflow}`,
208
+ currentWorkflowContext.branch
209
+ ? `branch=${currentWorkflowContext.branch}`
210
+ : null,
211
+ currentWorkflowContext.worktreePath
212
+ ? `worktree=${currentWorkflowContext.worktreePath}`
213
+ : null,
214
+ currentWorkflowContext.waveId
215
+ ? `wave=${currentWorkflowContext.waveId}`
216
+ : null,
217
+ currentWorkflowContext.threadId
218
+ ? `thread=${currentWorkflowContext.threadId}`
219
+ : null,
220
+ currentWorkflowContext.compactFromSession
221
+ ? `compact_from=${currentWorkflowContext.compactFromSession}`
222
+ : null
223
+ ]
224
+ .filter((item) => item !== null)
225
+ .join(', ')
226
+ });
227
+ }
228
+ if (!currentWorkflowContext?.threadId) {
229
+ checks.push({
230
+ id: 'thread-linkage-readiness',
231
+ label: 'thread linkage readiness',
232
+ status: 'ok',
233
+ detail: '当前没有挂载中的 thread linkage'
234
+ });
235
+ }
236
+ else {
237
+ const threadLink = workspace.indexes.threads.find((link) => link.id === currentWorkflowContext.threadId) ?? null;
238
+ if (!threadLink) {
239
+ checks.push({
240
+ id: 'thread-linkage-readiness',
241
+ label: 'thread linkage readiness',
242
+ status: 'fail',
243
+ detail: `missing_thread=${currentWorkflowContext.threadId}`
244
+ });
245
+ }
246
+ else {
247
+ const readiness = inspectThreadLink(basePath, threadLink);
248
+ checks.push({
249
+ id: 'thread-linkage-readiness',
250
+ label: 'thread linkage readiness',
251
+ status: readiness.missingArtifacts.length > 0 || readiness.missingWorktreePath
252
+ ? 'fail'
253
+ : 'ok',
254
+ detail: readiness.missingArtifacts.length > 0 || readiness.missingWorktreePath
255
+ ? [
256
+ `thread=${threadLink.id}`,
257
+ readiness.missingArtifacts.length > 0
258
+ ? `missing_artifacts=${readiness.missingArtifacts.join(', ')}`
259
+ : null,
260
+ readiness.missingWorktreePath
261
+ ? `missing_worktree=${readiness.missingWorktreePath}`
262
+ : null
263
+ ]
264
+ .filter((item) => item !== null)
265
+ .join(', ')
266
+ : `thread=${threadLink.id}, workflow=${threadLink.workflow}, artifacts=${threadLink.artifacts.length}`
267
+ });
268
+ }
269
+ }
270
+ const latestSuperpowersRun = workspace.indexes.superpowersRuns[0];
271
+ if (!latestSuperpowersRun) {
272
+ checks.push({
273
+ id: 'superpowers-readiness',
274
+ label: 'superpowers readiness',
275
+ status: 'ok',
276
+ detail: 'superpowers run 索引已就绪,当前尚无持久化 workflow 结果'
277
+ });
278
+ }
279
+ else {
280
+ const readiness = inspectSuperpowersRun(basePath, latestSuperpowersRun);
281
+ const hasMissingArtifacts = readiness.missingArtifacts.length > 0;
282
+ const hasMissingWorktree = readiness.missingWorktreePath !== null;
283
+ const hasMissingCompactSession = readiness.missingCompactSessionId !== null;
284
+ checks.push({
285
+ id: 'superpowers-readiness',
286
+ label: 'superpowers readiness',
287
+ status: hasMissingArtifacts || hasMissingWorktree || hasMissingCompactSession ? 'fail' : 'ok',
288
+ detail: hasMissingArtifacts || hasMissingWorktree || hasMissingCompactSession
289
+ ? [
290
+ `latest_workflow=${latestSuperpowersRun.workflow}`,
291
+ readiness.missingArtifacts.length > 0
292
+ ? `missing_artifacts=${readiness.missingArtifacts.join(', ')}`
293
+ : null,
294
+ readiness.missingWorktreePath
295
+ ? `missing_worktree=${readiness.missingWorktreePath}`
296
+ : null,
297
+ readiness.missingCompactSessionId
298
+ ? `missing_compact_session=${readiness.missingCompactSessionId}`
299
+ : null
300
+ ]
301
+ .filter((item) => item !== null)
302
+ .join(', ')
303
+ : `latest_workflow=${latestSuperpowersRun.workflow}, artifacts=${latestSuperpowersRun.artifacts.length}`
304
+ });
305
+ }
306
+ }
307
+ catch (error) {
308
+ checks.push({
309
+ id: 'workspace-state',
310
+ label: 'workspace state',
311
+ status: 'fail',
312
+ detail: `workspace 状态读取失败: ${String(error)}`
313
+ });
314
+ }
315
+ }
316
+ const report = {
317
+ checks,
318
+ summary: {
319
+ ok: checks.filter((check) => check.status === 'ok').length,
320
+ warn: checks.filter((check) => check.status === 'warn').length,
321
+ fail: checks.filter((check) => check.status === 'fail').length
322
+ },
323
+ guidance: []
324
+ };
325
+ report.guidance = buildDoctorGuidance(report);
326
+ return report;
327
+ }
328
+ function createPresenceCheck(id, label, path, required, successDetail) {
329
+ if (existsSync(path)) {
330
+ return {
331
+ id,
332
+ label,
333
+ status: 'ok',
334
+ detail: successDetail
335
+ };
336
+ }
337
+ return {
338
+ id,
339
+ label,
340
+ status: required ? 'fail' : 'warn',
341
+ detail: required ? `缺失: ${path}` : `建议补齐: ${path}`
342
+ };
343
+ }
344
+ function statusIcon(status) {
345
+ switch (status) {
346
+ case 'ok':
347
+ return '✅';
348
+ case 'warn':
349
+ return '⚠';
350
+ case 'fail':
351
+ default:
352
+ return '❌';
353
+ }
354
+ }
355
+ function buildDoctorGuidance(report) {
356
+ const guidance = [];
357
+ if (report.checks.some((check) => check.id === 'workspace' && check.status === 'fail')) {
358
+ guidance.push('先初始化或恢复 .webforge/,确保仓库内有 workspace contract。');
359
+ }
360
+ if (report.checks.some((check) => check.id === 'agents' && check.status === 'fail')) {
361
+ guidance.push('补齐 AGENTS.md,把仓库规则和读取顺序写成硬约束。');
362
+ }
363
+ if (report.checks.some((check) => check.id === 'superpowers-doc' && check.status !== 'ok')) {
364
+ guidance.push('补齐 superpowers 集成文档,明确状态与方法的边界。');
365
+ }
366
+ if (report.checks.some((check) => check.id === 'mailbox-observability' && check.status === 'warn')) {
367
+ guidance.push('先检查 mailbox 未读消息,避免错过协作信号。');
368
+ }
369
+ if (report.checks.some((check) => check.id === 'review-observability' && check.status === 'warn')) {
370
+ guidance.push('先处理 pending_review 交付物,再继续推进新的实现。');
371
+ }
372
+ if (report.checks.some((check) => check.id === 'runtime-context-drift' && check.status === 'warn')) {
373
+ guidance.push('最近 runtime 上下文与当前 workspace 已漂移,先运行 webforge logs runtime 并核对 drift,再决定是否沿当前上下文继续。');
374
+ }
375
+ if (report.checks.some((check) => check.id === 'superpowers-readiness' && check.status === 'fail')) {
376
+ guidance.push('修复最近一次 superpowers workflow 记录指向的缺失产物、worktree 或 compact session,再依赖其恢复上下文。');
377
+ }
378
+ if (report.checks.some((check) => check.id === 'workflow-context-readiness' && check.status === 'fail')) {
379
+ guidance.push('修复当前 workflow context 指向的缺失 worktree、artifact 或 compact session,再继续沿该上下文恢复。');
380
+ }
381
+ if (report.checks.some((check) => check.id === 'thread-linkage-readiness' && check.status === 'fail')) {
382
+ guidance.push('修复当前 thread linkage 缺失的索引、artifact 或 worktree,再沿该 thread 恢复。');
383
+ }
384
+ if (guidance.length === 0) {
385
+ guidance.push('仓库契约基本完整,可以直接让 Codex / Claude Code 按 AGENTS.md + .webforge/ 继续工作。');
386
+ guidance.push('开始工作前先读 AGENTS.md、runtime.json、tasks.json 和 sessions/index.json。');
387
+ }
388
+ return guidance;
389
+ }
390
+ async function collectMailboxSignals(basePath) {
391
+ const workerIds = await discoverMailboxWorkers(basePath);
392
+ let unread = 0;
393
+ for (const workerId of workerIds) {
394
+ const mailbox = new Mailbox(workerId, basePath);
395
+ await mailbox.init();
396
+ unread += await mailbox.getUnreadCount();
397
+ }
398
+ return {
399
+ workers: workerIds.length,
400
+ unread
401
+ };
402
+ }
403
+ async function discoverMailboxWorkers(basePath) {
404
+ const workerIds = new Set();
405
+ try {
406
+ const config = await loadConfig(basePath);
407
+ for (const workerId of config.workers) {
408
+ workerIds.add(workerId);
409
+ }
410
+ }
411
+ catch {
412
+ // config 不是 mailbox 观察面的强依赖
413
+ }
414
+ const mailboxRoot = join(basePath, '.webforge', 'mailboxes');
415
+ if (existsSync(mailboxRoot)) {
416
+ const entries = await readdir(mailboxRoot, { withFileTypes: true });
417
+ for (const entry of entries) {
418
+ if (entry.isFile() && entry.name.endsWith('.jsonl')) {
419
+ workerIds.add(entry.name.slice(0, -'.jsonl'.length));
420
+ }
421
+ }
422
+ }
423
+ return Array.from(workerIds).sort();
424
+ }
425
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EACzB,sBAAsB,EACtB,mBAAmB,EACpB,MAAM,gCAAgC,CAAC;AACxC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAyB7D,MAAM,UAAU,mBAAmB;IACjC,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC;SACzB,WAAW,CAAC,iDAAiD,CAAC;SAC9D,MAAM,CAAC,QAAQ,EAAE,2BAA2B,CAAC;SAC7C,MAAM,CAAC,KAAK,EAAE,OAA6B,EAAE,EAAE;QAC9C,IAAI,CAAC;YACH,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,oBAAmD,EAAE,EACrD,aAAsB;IAEtB,MAAM,OAAO,GACX,OAAO,iBAAiB,KAAK,QAAQ;QACnC,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,iBAAiB,CAAC;IACxB,MAAM,QAAQ,GACZ,OAAO,iBAAiB,KAAK,QAAQ;QACnC,CAAC,CAAC,iBAAiB;QACnB,CAAC,CAAC,CAAC,aAAa,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAEjD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC;IAChC,MAAM,CAAC,IAAI,CACT,OAAO,MAAM,CAAC,OAAO,CAAC,EAAE,UAAU,MAAM,CAAC,OAAO,CAAC,IAAI,UAAU,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CACrF,CAAC;IAEF,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAE7B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,WAAmB,OAAO,CAAC,GAAG,EAAE;IAEhC,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC/C,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAClD,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;IACxD,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IACpD,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;IACtD,MAAM,iBAAiB,GAAG,IAAI,CAAC,aAAa,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;IACxE,MAAM,kBAAkB,GAAG,IAAI,CAAC,aAAa,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;IAC1E,MAAM,qBAAqB,GAAG,IAAI,CAAC,aAAa,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;IAChF,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;IACvD,MAAM,mBAAmB,GAAG,IAAI,CAAC,aAAa,EAAE,uBAAuB,CAAC,CAAC;IACzE,MAAM,gBAAgB,GAAG,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;IAC7D,MAAM,kBAAkB,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,4BAA4B,CAAC,CAAC;IAC/F,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAEhE,MAAM,CAAC,IAAI,CACT,mBAAmB,CAAC,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,CAAC,CAC1E,CAAC;IACF,MAAM,CAAC,IAAI,CACT,mBAAmB,CACjB,WAAW,EACX,qBAAqB,EACrB,aAAa,EACb,IAAI,EACJ,mBAAmB,CACpB,CACF,CAAC;IACF,MAAM,CAAC,IAAI,CACT,mBAAmB,CACjB,SAAS,EACT,cAAc,EACd,WAAW,EACX,IAAI,EACJ,kBAAkB,CACnB,CACF,CAAC;IACF,MAAM,CAAC,IAAI,CACT,mBAAmB,CAAC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,CAAC,CAC1E,CAAC;IACF,MAAM,CAAC,IAAI,CACT,mBAAmB,CAAC,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,CAAC,CAC7E,CAAC;IACF,MAAM,CAAC,IAAI,CACT,mBAAmB,CACjB,UAAU,EACV,qBAAqB,EACrB,iBAAiB,EACjB,KAAK,EACL,kBAAkB,CACnB,CACF,CAAC;IACF,MAAM,CAAC,IAAI,CACT,mBAAmB,CACjB,WAAW,EACX,sBAAsB,EACtB,kBAAkB,EAClB,KAAK,EACL,yBAAyB,CAC1B,CACF,CAAC;IACF,MAAM,CAAC,IAAI,CACT,mBAAmB,CACjB,cAAc,EACd,yBAAyB,EACzB,qBAAqB,EACrB,KAAK,EACL,eAAe,CAChB,CACF,CAAC;IACF,MAAM,CAAC,IAAI,CACT,mBAAmB,CACjB,WAAW,EACX,qBAAqB,EACrB,aAAa,EACb,KAAK,EACL,iBAAiB,CAClB,CACF,CAAC;IACF,MAAM,CAAC,IAAI,CACT,mBAAmB,CACjB,kBAAkB,EAClB,iCAAiC,EACjC,mBAAmB,EACnB,KAAK,EACL,gCAAgC,CACjC,CACF,CAAC;IACF,MAAM,CAAC,IAAI,CACT,mBAAmB,CACjB,SAAS,EACT,wBAAwB,EACxB,gBAAgB,EAChB,KAAK,EACL,sBAAsB,CACvB,CACF,CAAC;IACF,MAAM,CAAC,IAAI,CACT,mBAAmB,CACjB,aAAa,EACb,qBAAqB,EACrB,cAAc,EACd,KAAK,EACL,qBAAqB,CACtB,CACF,CAAC;IACF,MAAM,CAAC,IAAI,CACT,mBAAmB,CACjB,iBAAiB,EACjB,6CAA6C,EAC7C,kBAAkB,EAClB,KAAK,EACL,iCAAiC,CAClC,CACF,CAAC;IAEF,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC1C,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,EAAE,QAAQ,IAAI,MAAM,CAAC;YAClD,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,EAAE,kBAAkB,IAAI,iBAAiB,CAAC;YACzE,MAAM,CAAC,IAAI,CAAC;gBACV,EAAE,EAAE,eAAe;gBACnB,KAAK,EAAE,eAAe;gBACtB,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,YAAY,QAAQ,wBAAwB,UAAU,EAAE;aACjE,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC;gBACV,EAAE,EAAE,eAAe;gBACnB,KAAK,EAAE,eAAe;gBACtB,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE,mCAAmC,MAAM,CAAC,KAAK,CAAC,EAAE;aAC3D,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,QAAQ,CAAC,CAAC;YACrD,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,MAAM,CAAC;YAC1F,MAAM,kBAAkB,GAAG,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAC9D,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,gBAAgB,CAC3C,CAAC,MAAM,CAAC;YACT,MAAM,CAAC,IAAI,CAAC;gBACV,EAAE,EAAE,iBAAiB;gBACrB,KAAK,EAAE,iBAAiB;gBACxB,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,WAAW,SAAS,CAAC,OAAO,CAAC,MAAM,WAAW,UAAU,oBAAoB,kBAAkB,EAAE;aACzG,CAAC,CAAC;YAEH,MAAM,kBAAkB,GAAG,MAAM,2BAA2B,CAAC,QAAQ,CAAC,CAAC;YACvE,MAAM,CAAC,IAAI,CAAC;gBACV,EAAE,EAAE,uBAAuB;gBAC3B,KAAK,EAAE,uBAAuB;gBAC9B,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,kBAAkB;oBACxB,CAAC,CAAC,kBAAkB,kBAAkB,CAAC,SAAS,gBAAgB,kBAAkB,CAAC,SAAS,IAAI,MAAM,gBAAgB,kBAAkB,CAAC,iBAAiB,IAAI,SAAS,EAAE;oBACzK,CAAC,CAAC,0BAA0B;aAC/B,CAAC,CAAC;YACH,MAAM,kBAAkB,GAAG,MAAM,uBAAuB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YAChG,MAAM,CAAC,IAAI,CAAC;gBACV,EAAE,EAAE,uBAAuB;gBAC3B,KAAK,EAAE,uBAAuB;gBAC9B,MAAM,EACJ,kBAAkB,EAAE,YAAY,CAAC,MAAM,KAAK,SAAS;oBACnD,CAAC,CAAC,MAAM;oBACR,CAAC,CAAC,IAAI;gBACV,MAAM,EAAE,CAAC,kBAAkB;oBACzB,CAAC,CAAC,gCAAgC;oBAClC,CAAC,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,KAAK,MAAM;wBACjD,CAAC,CAAC,6CAA6C;wBAC/C,CAAC,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,KAAK,SAAS;4BACpD,CAAC,CAAC,gCAAgC;4BAClC,CAAC,CAAC,YAAY,kBAAkB,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aACzE,CAAC,CAAC;YAEH,MAAM,cAAc,GAAG,MAAM,qBAAqB,CAAC,QAAQ,CAAC,CAAC;YAC7D,MAAM,CAAC,IAAI,CAAC;gBACV,EAAE,EAAE,uBAAuB;gBAC3B,KAAK,EAAE,uBAAuB;gBAC9B,MAAM,EAAE,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;gBACjD,MAAM,EACJ,cAAc,CAAC,MAAM,GAAG,CAAC;oBACvB,CAAC,CAAC,WAAW,cAAc,CAAC,OAAO,YAAY,cAAc,CAAC,MAAM,EAAE;oBACtE,CAAC,CAAC,WAAW,cAAc,CAAC,OAAO,YAAY;aACpD,CAAC,CAAC;YACH,MAAM,CAAC,IAAI,CAAC;gBACV,EAAE,EAAE,sBAAsB;gBAC1B,KAAK,EAAE,sBAAsB;gBAC7B,MAAM,EAAE,kBAAkB,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;gBAC9C,MAAM,EACJ,kBAAkB,GAAG,CAAC;oBACpB,CAAC,CAAC,kBAAkB,kBAAkB,EAAE;oBACxC,CAAC,CAAC,kBAAkB;aACzB,CAAC,CAAC;YAEH,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,QAAQ,CAAC,CAAC;YACpD,MAAM,CAAC,IAAI,CAAC;gBACV,EAAE,EAAE,0BAA0B;gBAC9B,KAAK,EAAE,0BAA0B;gBACjC,MAAM,EAAE,IAAI;gBACZ,MAAM,EACJ,WAAW,CAAC,MAAM,GAAG,CAAC;oBACpB,CAAC,CAAC,eAAe,WAAW,CAAC,MAAM,YAAY,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,MAAM,EAAE;oBAC7E,CAAC,CAAC,yBAAyB;aAChC,CAAC,CAAC;YAEH,MAAM,sBAAsB,GAAG,mBAAmB,CAChD,yBAAyB,CAAC,SAAS,CAAC,OAAO,CAAC,EAC5C,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;gBACnC,CAAC,CAAC,yBAAyB,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC1D,CAAC,CAAC,IAAI,CACT,CAAC;YACF,IAAI,CAAC,sBAAsB,EAAE,CAAC;gBAC5B,MAAM,CAAC,IAAI,CAAC;oBACV,EAAE,EAAE,4BAA4B;oBAChC,KAAK,EAAE,4BAA4B;oBACnC,MAAM,EAAE,IAAI;oBACZ,MAAM,EAAE,2BAA2B;iBACpC,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,MAAM,SAAS,GAAG,sBAAsB,CAAC,QAAQ,EAAE,sBAAsB,CAAC,CAAC;gBAC3E,MAAM,CAAC,IAAI,CAAC;oBACV,EAAE,EAAE,4BAA4B;oBAChC,KAAK,EAAE,4BAA4B;oBACnC,MAAM,EACJ,SAAS,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC;wBACrC,SAAS,CAAC,mBAAmB;wBAC7B,SAAS,CAAC,uBAAuB;wBAC/B,CAAC,CAAC,MAAM;wBACR,CAAC,CAAC,IAAI;oBACV,MAAM,EACJ,SAAS,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC;wBACrC,SAAS,CAAC,mBAAmB;wBAC7B,SAAS,CAAC,uBAAuB;wBAC/B,CAAC,CAAC;4BACE,YAAY,sBAAsB,CAAC,QAAQ,EAAE;4BAC7C,sBAAsB,CAAC,MAAM;gCAC3B,CAAC,CAAC,UAAU,sBAAsB,CAAC,MAAM,EAAE;gCAC3C,CAAC,CAAC,IAAI;4BACR,SAAS,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC;gCACnC,CAAC,CAAC,qBAAqB,SAAS,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gCAC9D,CAAC,CAAC,IAAI;4BACR,SAAS,CAAC,mBAAmB;gCAC3B,CAAC,CAAC,oBAAoB,SAAS,CAAC,mBAAmB,EAAE;gCACrD,CAAC,CAAC,IAAI;4BACR,SAAS,CAAC,uBAAuB;gCAC/B,CAAC,CAAC,2BAA2B,SAAS,CAAC,uBAAuB,EAAE;gCAChE,CAAC,CAAC,IAAI;yBACT;6BACE,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC;6BAC/C,IAAI,CAAC,IAAI,CAAC;wBACf,CAAC,CAAC;4BACE,YAAY,sBAAsB,CAAC,QAAQ,EAAE;4BAC7C,sBAAsB,CAAC,MAAM;gCAC3B,CAAC,CAAC,UAAU,sBAAsB,CAAC,MAAM,EAAE;gCAC3C,CAAC,CAAC,IAAI;4BACR,sBAAsB,CAAC,YAAY;gCACjC,CAAC,CAAC,YAAY,sBAAsB,CAAC,YAAY,EAAE;gCACnD,CAAC,CAAC,IAAI;4BACR,sBAAsB,CAAC,MAAM;gCAC3B,CAAC,CAAC,QAAQ,sBAAsB,CAAC,MAAM,EAAE;gCACzC,CAAC,CAAC,IAAI;4BACR,sBAAsB,CAAC,QAAQ;gCAC7B,CAAC,CAAC,UAAU,sBAAsB,CAAC,QAAQ,EAAE;gCAC7C,CAAC,CAAC,IAAI;4BACR,sBAAsB,CAAC,kBAAkB;gCACvC,CAAC,CAAC,gBAAgB,sBAAsB,CAAC,kBAAkB,EAAE;gCAC7D,CAAC,CAAC,IAAI;yBACT;6BACE,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC;6BAC/C,IAAI,CAAC,IAAI,CAAC;iBACpB,CAAC,CAAC;YACL,CAAC;YAED,IAAI,CAAC,sBAAsB,EAAE,QAAQ,EAAE,CAAC;gBACtC,MAAM,CAAC,IAAI,CAAC;oBACV,EAAE,EAAE,0BAA0B;oBAC9B,KAAK,EAAE,0BAA0B;oBACjC,MAAM,EAAE,IAAI;oBACZ,MAAM,EAAE,yBAAyB;iBAClC,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,MAAM,UAAU,GACd,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,sBAAsB,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC;gBAChG,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChB,MAAM,CAAC,IAAI,CAAC;wBACV,EAAE,EAAE,0BAA0B;wBAC9B,KAAK,EAAE,0BAA0B;wBACjC,MAAM,EAAE,MAAM;wBACd,MAAM,EAAE,kBAAkB,sBAAsB,CAAC,QAAQ,EAAE;qBAC5D,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,MAAM,SAAS,GAAG,iBAAiB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;oBAC1D,MAAM,CAAC,IAAI,CAAC;wBACV,EAAE,EAAE,0BAA0B;wBAC9B,KAAK,EAAE,0BAA0B;wBACjC,MAAM,EACJ,SAAS,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,mBAAmB;4BACpE,CAAC,CAAC,MAAM;4BACR,CAAC,CAAC,IAAI;wBACV,MAAM,EACJ,SAAS,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,mBAAmB;4BACpE,CAAC,CAAC;gCACE,UAAU,UAAU,CAAC,EAAE,EAAE;gCACzB,SAAS,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC;oCACnC,CAAC,CAAC,qBAAqB,SAAS,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oCAC9D,CAAC,CAAC,IAAI;gCACR,SAAS,CAAC,mBAAmB;oCAC3B,CAAC,CAAC,oBAAoB,SAAS,CAAC,mBAAmB,EAAE;oCACrD,CAAC,CAAC,IAAI;6BACT;iCACE,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC;iCAC/C,IAAI,CAAC,IAAI,CAAC;4BACf,CAAC,CAAC,UAAU,UAAU,CAAC,EAAE,cAAc,UAAU,CAAC,QAAQ,eAAe,UAAU,CAAC,SAAS,CAAC,MAAM,EAAE;qBAC3G,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,MAAM,oBAAoB,GAAG,SAAS,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAClE,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAC1B,MAAM,CAAC,IAAI,CAAC;oBACV,EAAE,EAAE,uBAAuB;oBAC3B,KAAK,EAAE,uBAAuB;oBAC9B,MAAM,EAAE,IAAI;oBACZ,MAAM,EAAE,2CAA2C;iBACpD,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,MAAM,SAAS,GAAG,qBAAqB,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC;gBACxE,MAAM,mBAAmB,GAAG,SAAS,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;gBAClE,MAAM,kBAAkB,GAAG,SAAS,CAAC,mBAAmB,KAAK,IAAI,CAAC;gBAClE,MAAM,wBAAwB,GAAG,SAAS,CAAC,uBAAuB,KAAK,IAAI,CAAC;gBAC5E,MAAM,CAAC,IAAI,CAAC;oBACV,EAAE,EAAE,uBAAuB;oBAC3B,KAAK,EAAE,uBAAuB;oBAC9B,MAAM,EAAE,mBAAmB,IAAI,kBAAkB,IAAI,wBAAwB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;oBAC7F,MAAM,EACJ,mBAAmB,IAAI,kBAAkB,IAAI,wBAAwB;wBACnE,CAAC,CAAC;4BACE,mBAAmB,oBAAoB,CAAC,QAAQ,EAAE;4BAClD,SAAS,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC;gCACnC,CAAC,CAAC,qBAAqB,SAAS,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gCAC9D,CAAC,CAAC,IAAI;4BACR,SAAS,CAAC,mBAAmB;gCAC3B,CAAC,CAAC,oBAAoB,SAAS,CAAC,mBAAmB,EAAE;gCACrD,CAAC,CAAC,IAAI;4BACR,SAAS,CAAC,uBAAuB;gCAC/B,CAAC,CAAC,2BAA2B,SAAS,CAAC,uBAAuB,EAAE;gCAChE,CAAC,CAAC,IAAI;yBACT;6BACE,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC;6BAC/C,IAAI,CAAC,IAAI,CAAC;wBACf,CAAC,CAAC,mBAAmB,oBAAoB,CAAC,QAAQ,eAAe,oBAAoB,CAAC,SAAS,CAAC,MAAM,EAAE;iBAC7G,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC;gBACV,EAAE,EAAE,iBAAiB;gBACrB,KAAK,EAAE,iBAAiB;gBACxB,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE,qBAAqB,MAAM,CAAC,KAAK,CAAC,EAAE;aAC7C,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG;QACb,MAAM;QACN,OAAO,EAAE;YACP,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,MAAM;YAC1D,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM;YAC9D,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM;SAC/D;QACD,QAAQ,EAAE,EAAc;KACzB,CAAC;IACF,MAAM,CAAC,QAAQ,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC9C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,mBAAmB,CAC1B,EAAU,EACV,KAAa,EACb,IAAY,EACZ,QAAiB,EACjB,aAAqB;IAErB,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,OAAO;YACL,EAAE;YACF,KAAK;YACL,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,aAAa;SACtB,CAAC;IACJ,CAAC;IAED,OAAO;QACL,EAAE;QACF,KAAK;QACL,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;QAClC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE;KACnD,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,MAAyB;IAC3C,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,IAAI;YACP,OAAO,GAAG,CAAC;QACb,KAAK,MAAM;YACT,OAAO,GAAG,CAAC;QACb,KAAK,MAAM,CAAC;QACZ;YACE,OAAO,GAAG,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAoB;IAC/C,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,WAAW,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,CAAC;QACvF,QAAQ,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;IACjE,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,CAAC;QACpF,QAAQ,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,iBAAiB,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,EAAE,CAAC;QAC3F,QAAQ,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,uBAAuB,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,CAAC;QACnG,QAAQ,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,sBAAsB,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,CAAC;QAClG,QAAQ,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,uBAAuB,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,CAAC;QACnG,QAAQ,CAAC,IAAI,CAAC,oFAAoF,CAAC,CAAC;IACtG,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,uBAAuB,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,CAAC;QACnG,QAAQ,CAAC,IAAI,CAAC,6EAA6E,CAAC,CAAC;IAC/F,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,4BAA4B,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,CAAC;QACxG,QAAQ,CAAC,IAAI,CAAC,6EAA6E,CAAC,CAAC;IAC/F,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,0BAA0B,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,CAAC;QACtG,QAAQ,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;IAChF,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,QAAQ,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;QACnF,QAAQ,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC;IACpF,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,qBAAqB,CAClC,QAAgB;IAEhB,MAAM,SAAS,GAAG,MAAM,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IACzD,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAChD,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QACrB,MAAM,IAAI,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;IAC3C,CAAC;IAED,OAAO;QACL,OAAO,EAAE,SAAS,CAAC,MAAM;QACzB,MAAM;KACP,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,sBAAsB,CAAC,QAAgB;IACpD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IAEpC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC1C,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACtC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,4BAA4B;IAC9B,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IAC7D,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACpD,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;AACtC,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * init 命令 - 初始化项目
3
+ */
4
+ import { Command } from 'commander';
5
+ export interface InitVerificationSummary {
6
+ protocolDocPath: string;
7
+ protocolDocExists: boolean;
8
+ doctorFailCount: number;
9
+ doctorWarnCount: number;
10
+ onboardCanProceed: boolean;
11
+ shouldReadHasAgents: boolean;
12
+ ok: boolean;
13
+ }
14
+ export declare function createInitCommand(): Command;
15
+ export declare function initProject(projectName: string, options: {
16
+ template?: string;
17
+ }, basePath?: string): Promise<void>;
18
+ export declare function buildInitVerificationSummary(projectRoot: string): Promise<InitVerificationSummary>;
19
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,MAAM,WAAW,uBAAuB;IACtC,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,EAAE,EAAE,OAAO,CAAC;CACb;AAED,wBAAgB,iBAAiB,IAAI,OAAO,CAe3C;AAED,wBAAsB,WAAW,CAC/B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,EAC9B,QAAQ,GAAE,MAAsB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAmCf;AAuBD,wBAAsB,4BAA4B,CAChD,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,uBAAuB,CAAC,CAwBlC"}