helixlife-expert-cli 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 (523) hide show
  1. package/README.md +159 -0
  2. package/cli/bin/helixlife-expert.js +3 -0
  3. package/cli/dist/core/api/client.d.ts +31 -0
  4. package/cli/dist/core/api/client.d.ts.map +1 -0
  5. package/cli/dist/core/api/client.js +183 -0
  6. package/cli/dist/core/api/client.js.map +1 -0
  7. package/cli/dist/core/api/http.d.ts +3 -0
  8. package/cli/dist/core/api/http.d.ts.map +1 -0
  9. package/cli/dist/core/api/http.js +22 -0
  10. package/cli/dist/core/api/http.js.map +1 -0
  11. package/cli/dist/core/api/response.d.ts +48 -0
  12. package/cli/dist/core/api/response.d.ts.map +1 -0
  13. package/cli/dist/core/api/response.js +84 -0
  14. package/cli/dist/core/api/response.js.map +1 -0
  15. package/cli/dist/core/api/sse.d.ts +6 -0
  16. package/cli/dist/core/api/sse.d.ts.map +1 -0
  17. package/cli/dist/core/api/sse.js +60 -0
  18. package/cli/dist/core/api/sse.js.map +1 -0
  19. package/cli/dist/core/auth/index.d.ts +35 -0
  20. package/cli/dist/core/auth/index.d.ts.map +1 -0
  21. package/cli/dist/core/auth/index.js +150 -0
  22. package/cli/dist/core/auth/index.js.map +1 -0
  23. package/cli/dist/core/env-config.d.ts +16 -0
  24. package/cli/dist/core/env-config.d.ts.map +1 -0
  25. package/cli/dist/core/env-config.js +80 -0
  26. package/cli/dist/core/env-config.js.map +1 -0
  27. package/cli/dist/core/errors.d.ts +20 -0
  28. package/cli/dist/core/errors.d.ts.map +1 -0
  29. package/cli/dist/core/errors.js +28 -0
  30. package/cli/dist/core/errors.js.map +1 -0
  31. package/cli/dist/core/index.d.ts +16 -0
  32. package/cli/dist/core/index.d.ts.map +1 -0
  33. package/cli/dist/core/index.js +16 -0
  34. package/cli/dist/core/index.js.map +1 -0
  35. package/cli/dist/core/interactive.d.ts +18 -0
  36. package/cli/dist/core/interactive.d.ts.map +1 -0
  37. package/cli/dist/core/interactive.js +74 -0
  38. package/cli/dist/core/interactive.js.map +1 -0
  39. package/cli/dist/core/output/index.d.ts +29 -0
  40. package/cli/dist/core/output/index.d.ts.map +1 -0
  41. package/cli/dist/core/output/index.js +153 -0
  42. package/cli/dist/core/output/index.js.map +1 -0
  43. package/cli/dist/core/parse.d.ts +9 -0
  44. package/cli/dist/core/parse.d.ts.map +1 -0
  45. package/cli/dist/core/parse.js +31 -0
  46. package/cli/dist/core/parse.js.map +1 -0
  47. package/cli/dist/core/paths.d.ts +21 -0
  48. package/cli/dist/core/paths.d.ts.map +1 -0
  49. package/cli/dist/core/paths.js +65 -0
  50. package/cli/dist/core/paths.js.map +1 -0
  51. package/cli/dist/core/sse-utils.d.ts +49 -0
  52. package/cli/dist/core/sse-utils.d.ts.map +1 -0
  53. package/cli/dist/core/sse-utils.js +181 -0
  54. package/cli/dist/core/sse-utils.js.map +1 -0
  55. package/cli/dist/core/terminal.d.ts +2 -0
  56. package/cli/dist/core/terminal.d.ts.map +1 -0
  57. package/cli/dist/core/terminal.js +6 -0
  58. package/cli/dist/core/terminal.js.map +1 -0
  59. package/cli/dist/core/token/index.d.ts +5 -0
  60. package/cli/dist/core/token/index.d.ts.map +1 -0
  61. package/cli/dist/core/token/index.js +26 -0
  62. package/cli/dist/core/token/index.js.map +1 -0
  63. package/cli/dist/core/types/config.d.ts +8 -0
  64. package/cli/dist/core/types/config.d.ts.map +1 -0
  65. package/cli/dist/core/types/config.js +30 -0
  66. package/cli/dist/core/types/config.js.map +1 -0
  67. package/cli/dist/core/version.d.ts +2 -0
  68. package/cli/dist/core/version.d.ts.map +1 -0
  69. package/cli/dist/core/version.js +10 -0
  70. package/cli/dist/core/version.js.map +1 -0
  71. package/cli/dist/index.d.ts +2 -0
  72. package/cli/dist/index.d.ts.map +1 -0
  73. package/cli/dist/index.js +23 -0
  74. package/cli/dist/index.js.map +1 -0
  75. package/cli/dist/modules/analysis/constants.d.ts +3 -0
  76. package/cli/dist/modules/analysis/constants.d.ts.map +1 -0
  77. package/cli/dist/modules/analysis/constants.js +3 -0
  78. package/cli/dist/modules/analysis/constants.js.map +1 -0
  79. package/cli/dist/modules/analysis/index.d.ts +3 -0
  80. package/cli/dist/modules/analysis/index.d.ts.map +1 -0
  81. package/cli/dist/modules/analysis/index.js +23 -0
  82. package/cli/dist/modules/analysis/index.js.map +1 -0
  83. package/cli/dist/modules/auth/index.d.ts +3 -0
  84. package/cli/dist/modules/auth/index.d.ts.map +1 -0
  85. package/cli/dist/modules/auth/index.js +76 -0
  86. package/cli/dist/modules/auth/index.js.map +1 -0
  87. package/cli/dist/modules/expert-scaffold.d.ts +27 -0
  88. package/cli/dist/modules/expert-scaffold.d.ts.map +1 -0
  89. package/cli/dist/modules/expert-scaffold.js +25 -0
  90. package/cli/dist/modules/expert-scaffold.js.map +1 -0
  91. package/cli/dist/modules/fund/clinical/apps.d.ts +19 -0
  92. package/cli/dist/modules/fund/clinical/apps.d.ts.map +1 -0
  93. package/cli/dist/modules/fund/clinical/apps.js +14 -0
  94. package/cli/dist/modules/fund/clinical/apps.js.map +1 -0
  95. package/cli/dist/modules/fund/clinical/command-utils.d.ts +4 -0
  96. package/cli/dist/modules/fund/clinical/command-utils.d.ts.map +1 -0
  97. package/cli/dist/modules/fund/clinical/command-utils.js +40 -0
  98. package/cli/dist/modules/fund/clinical/command-utils.js.map +1 -0
  99. package/cli/dist/modules/fund/clinical/commands/article-create.d.ts +9 -0
  100. package/cli/dist/modules/fund/clinical/commands/article-create.d.ts.map +1 -0
  101. package/cli/dist/modules/fund/clinical/commands/article-create.js +99 -0
  102. package/cli/dist/modules/fund/clinical/commands/article-create.js.map +1 -0
  103. package/cli/dist/modules/fund/clinical/commands/article-download.d.ts +30 -0
  104. package/cli/dist/modules/fund/clinical/commands/article-download.d.ts.map +1 -0
  105. package/cli/dist/modules/fund/clinical/commands/article-download.js +153 -0
  106. package/cli/dist/modules/fund/clinical/commands/article-download.js.map +1 -0
  107. package/cli/dist/modules/fund/clinical/commands/four-elements-create.d.ts +7 -0
  108. package/cli/dist/modules/fund/clinical/commands/four-elements-create.d.ts.map +1 -0
  109. package/cli/dist/modules/fund/clinical/commands/four-elements-create.js +81 -0
  110. package/cli/dist/modules/fund/clinical/commands/four-elements-create.js.map +1 -0
  111. package/cli/dist/modules/fund/clinical/commands/four-elements-precheck.d.ts +7 -0
  112. package/cli/dist/modules/fund/clinical/commands/four-elements-precheck.d.ts.map +1 -0
  113. package/cli/dist/modules/fund/clinical/commands/four-elements-precheck.js +76 -0
  114. package/cli/dist/modules/fund/clinical/commands/four-elements-precheck.js.map +1 -0
  115. package/cli/dist/modules/fund/clinical/commands/four-elements-update.d.ts +16 -0
  116. package/cli/dist/modules/fund/clinical/commands/four-elements-update.d.ts.map +1 -0
  117. package/cli/dist/modules/fund/clinical/commands/four-elements-update.js +108 -0
  118. package/cli/dist/modules/fund/clinical/commands/four-elements-update.js.map +1 -0
  119. package/cli/dist/modules/fund/clinical/commands/sample-size.d.ts +14 -0
  120. package/cli/dist/modules/fund/clinical/commands/sample-size.d.ts.map +1 -0
  121. package/cli/dist/modules/fund/clinical/commands/sample-size.js +164 -0
  122. package/cli/dist/modules/fund/clinical/commands/sample-size.js.map +1 -0
  123. package/cli/dist/modules/fund/clinical/commands/topic-evaluation-create.d.ts +25 -0
  124. package/cli/dist/modules/fund/clinical/commands/topic-evaluation-create.d.ts.map +1 -0
  125. package/cli/dist/modules/fund/clinical/commands/topic-evaluation-create.js +228 -0
  126. package/cli/dist/modules/fund/clinical/commands/topic-evaluation-create.js.map +1 -0
  127. package/cli/dist/modules/fund/clinical/commands/topic-evaluation-parameters.d.ts +45 -0
  128. package/cli/dist/modules/fund/clinical/commands/topic-evaluation-parameters.d.ts.map +1 -0
  129. package/cli/dist/modules/fund/clinical/commands/topic-evaluation-parameters.js +211 -0
  130. package/cli/dist/modules/fund/clinical/commands/topic-evaluation-parameters.js.map +1 -0
  131. package/cli/dist/modules/fund/clinical/constants.d.ts +85 -0
  132. package/cli/dist/modules/fund/clinical/constants.d.ts.map +1 -0
  133. package/cli/dist/modules/fund/clinical/constants.js +161 -0
  134. package/cli/dist/modules/fund/clinical/constants.js.map +1 -0
  135. package/cli/dist/modules/fund/clinical/form-rules.d.ts +56 -0
  136. package/cli/dist/modules/fund/clinical/form-rules.d.ts.map +1 -0
  137. package/cli/dist/modules/fund/clinical/form-rules.js +542 -0
  138. package/cli/dist/modules/fund/clinical/form-rules.js.map +1 -0
  139. package/cli/dist/modules/fund/clinical/four-elements.d.ts +46 -0
  140. package/cli/dist/modules/fund/clinical/four-elements.d.ts.map +1 -0
  141. package/cli/dist/modules/fund/clinical/four-elements.js +190 -0
  142. package/cli/dist/modules/fund/clinical/four-elements.js.map +1 -0
  143. package/cli/dist/modules/fund/clinical/index.d.ts +3 -0
  144. package/cli/dist/modules/fund/clinical/index.d.ts.map +1 -0
  145. package/cli/dist/modules/fund/clinical/index.js +176 -0
  146. package/cli/dist/modules/fund/clinical/index.js.map +1 -0
  147. package/cli/dist/modules/fund/clinical/parameters.d.ts +51 -0
  148. package/cli/dist/modules/fund/clinical/parameters.d.ts.map +1 -0
  149. package/cli/dist/modules/fund/clinical/parameters.js +145 -0
  150. package/cli/dist/modules/fund/clinical/parameters.js.map +1 -0
  151. package/cli/dist/modules/fund/clinical/sample-size.d.ts +130 -0
  152. package/cli/dist/modules/fund/clinical/sample-size.d.ts.map +1 -0
  153. package/cli/dist/modules/fund/clinical/sample-size.js +356 -0
  154. package/cli/dist/modules/fund/clinical/sample-size.js.map +1 -0
  155. package/cli/dist/modules/fund/clinical/session-cache.d.ts +25 -0
  156. package/cli/dist/modules/fund/clinical/session-cache.d.ts.map +1 -0
  157. package/cli/dist/modules/fund/clinical/session-cache.js +100 -0
  158. package/cli/dist/modules/fund/clinical/session-cache.js.map +1 -0
  159. package/cli/dist/modules/fund/clinical/sse-utils.d.ts +22 -0
  160. package/cli/dist/modules/fund/clinical/sse-utils.d.ts.map +1 -0
  161. package/cli/dist/modules/fund/clinical/sse-utils.js +80 -0
  162. package/cli/dist/modules/fund/clinical/sse-utils.js.map +1 -0
  163. package/cli/dist/modules/fund/constants.d.ts +3 -0
  164. package/cli/dist/modules/fund/constants.d.ts.map +1 -0
  165. package/cli/dist/modules/fund/constants.js +3 -0
  166. package/cli/dist/modules/fund/constants.js.map +1 -0
  167. package/cli/dist/modules/fund/index.d.ts +3 -0
  168. package/cli/dist/modules/fund/index.d.ts.map +1 -0
  169. package/cli/dist/modules/fund/index.js +28 -0
  170. package/cli/dist/modules/fund/index.js.map +1 -0
  171. package/cli/dist/modules/fund/nsfc/apps.d.ts +54 -0
  172. package/cli/dist/modules/fund/nsfc/apps.d.ts.map +1 -0
  173. package/cli/dist/modules/fund/nsfc/apps.js +76 -0
  174. package/cli/dist/modules/fund/nsfc/apps.js.map +1 -0
  175. package/cli/dist/modules/fund/nsfc/article-cache.d.ts +14 -0
  176. package/cli/dist/modules/fund/nsfc/article-cache.d.ts.map +1 -0
  177. package/cli/dist/modules/fund/nsfc/article-cache.js +79 -0
  178. package/cli/dist/modules/fund/nsfc/article-cache.js.map +1 -0
  179. package/cli/dist/modules/fund/nsfc/commands/article-create.d.ts +8 -0
  180. package/cli/dist/modules/fund/nsfc/commands/article-create.d.ts.map +1 -0
  181. package/cli/dist/modules/fund/nsfc/commands/article-create.js +108 -0
  182. package/cli/dist/modules/fund/nsfc/commands/article-create.js.map +1 -0
  183. package/cli/dist/modules/fund/nsfc/commands/article-download.d.ts +42 -0
  184. package/cli/dist/modules/fund/nsfc/commands/article-download.d.ts.map +1 -0
  185. package/cli/dist/modules/fund/nsfc/commands/article-download.js +189 -0
  186. package/cli/dist/modules/fund/nsfc/commands/article-download.js.map +1 -0
  187. package/cli/dist/modules/fund/nsfc/commands/format-convert.d.ts +9 -0
  188. package/cli/dist/modules/fund/nsfc/commands/format-convert.d.ts.map +1 -0
  189. package/cli/dist/modules/fund/nsfc/commands/format-convert.js +98 -0
  190. package/cli/dist/modules/fund/nsfc/commands/format-convert.js.map +1 -0
  191. package/cli/dist/modules/fund/nsfc/commands/hypothesis-analyze.d.ts +12 -0
  192. package/cli/dist/modules/fund/nsfc/commands/hypothesis-analyze.d.ts.map +1 -0
  193. package/cli/dist/modules/fund/nsfc/commands/hypothesis-analyze.js +351 -0
  194. package/cli/dist/modules/fund/nsfc/commands/hypothesis-analyze.js.map +1 -0
  195. package/cli/dist/modules/fund/nsfc/commands/hypothesis-create.d.ts +21 -0
  196. package/cli/dist/modules/fund/nsfc/commands/hypothesis-create.d.ts.map +1 -0
  197. package/cli/dist/modules/fund/nsfc/commands/hypothesis-create.js +197 -0
  198. package/cli/dist/modules/fund/nsfc/commands/hypothesis-create.js.map +1 -0
  199. package/cli/dist/modules/fund/nsfc/commands/hypothesis-figure.d.ts +9 -0
  200. package/cli/dist/modules/fund/nsfc/commands/hypothesis-figure.d.ts.map +1 -0
  201. package/cli/dist/modules/fund/nsfc/commands/hypothesis-figure.js +120 -0
  202. package/cli/dist/modules/fund/nsfc/commands/hypothesis-figure.js.map +1 -0
  203. package/cli/dist/modules/fund/nsfc/commands/hypothesis-genes-select.d.ts +11 -0
  204. package/cli/dist/modules/fund/nsfc/commands/hypothesis-genes-select.d.ts.map +1 -0
  205. package/cli/dist/modules/fund/nsfc/commands/hypothesis-genes-select.js +125 -0
  206. package/cli/dist/modules/fund/nsfc/commands/hypothesis-genes-select.js.map +1 -0
  207. package/cli/dist/modules/fund/nsfc/commands/hypothesis-pick.d.ts +11 -0
  208. package/cli/dist/modules/fund/nsfc/commands/hypothesis-pick.d.ts.map +1 -0
  209. package/cli/dist/modules/fund/nsfc/commands/hypothesis-pick.js +109 -0
  210. package/cli/dist/modules/fund/nsfc/commands/hypothesis-pick.js.map +1 -0
  211. package/cli/dist/modules/fund/nsfc/commands/outline-confirm.d.ts +9 -0
  212. package/cli/dist/modules/fund/nsfc/commands/outline-confirm.d.ts.map +1 -0
  213. package/cli/dist/modules/fund/nsfc/commands/outline-confirm.js +64 -0
  214. package/cli/dist/modules/fund/nsfc/commands/outline-confirm.js.map +1 -0
  215. package/cli/dist/modules/fund/nsfc/commands/outline-create.d.ts +8 -0
  216. package/cli/dist/modules/fund/nsfc/commands/outline-create.d.ts.map +1 -0
  217. package/cli/dist/modules/fund/nsfc/commands/outline-create.js +103 -0
  218. package/cli/dist/modules/fund/nsfc/commands/outline-create.js.map +1 -0
  219. package/cli/dist/modules/fund/nsfc/commands/research-path-confirm.d.ts +9 -0
  220. package/cli/dist/modules/fund/nsfc/commands/research-path-confirm.d.ts.map +1 -0
  221. package/cli/dist/modules/fund/nsfc/commands/research-path-confirm.js +176 -0
  222. package/cli/dist/modules/fund/nsfc/commands/research-path-confirm.js.map +1 -0
  223. package/cli/dist/modules/fund/nsfc/commands/tech-roadmap.d.ts +9 -0
  224. package/cli/dist/modules/fund/nsfc/commands/tech-roadmap.d.ts.map +1 -0
  225. package/cli/dist/modules/fund/nsfc/commands/tech-roadmap.js +190 -0
  226. package/cli/dist/modules/fund/nsfc/commands/tech-roadmap.js.map +1 -0
  227. package/cli/dist/modules/fund/nsfc/constants.d.ts +96 -0
  228. package/cli/dist/modules/fund/nsfc/constants.d.ts.map +1 -0
  229. package/cli/dist/modules/fund/nsfc/constants.js +156 -0
  230. package/cli/dist/modules/fund/nsfc/constants.js.map +1 -0
  231. package/cli/dist/modules/fund/nsfc/graph-render.d.ts +25 -0
  232. package/cli/dist/modules/fund/nsfc/graph-render.d.ts.map +1 -0
  233. package/cli/dist/modules/fund/nsfc/graph-render.js +212 -0
  234. package/cli/dist/modules/fund/nsfc/graph-render.js.map +1 -0
  235. package/cli/dist/modules/fund/nsfc/index.d.ts +4 -0
  236. package/cli/dist/modules/fund/nsfc/index.d.ts.map +1 -0
  237. package/cli/dist/modules/fund/nsfc/index.js +238 -0
  238. package/cli/dist/modules/fund/nsfc/index.js.map +1 -0
  239. package/cli/dist/modules/fund/nsfc/mermaid-render.d.ts +18 -0
  240. package/cli/dist/modules/fund/nsfc/mermaid-render.d.ts.map +1 -0
  241. package/cli/dist/modules/fund/nsfc/mermaid-render.js +47 -0
  242. package/cli/dist/modules/fund/nsfc/mermaid-render.js.map +1 -0
  243. package/cli/dist/modules/fund/nsfc/parse-hypothesis.d.ts +76 -0
  244. package/cli/dist/modules/fund/nsfc/parse-hypothesis.d.ts.map +1 -0
  245. package/cli/dist/modules/fund/nsfc/parse-hypothesis.js +278 -0
  246. package/cli/dist/modules/fund/nsfc/parse-hypothesis.js.map +1 -0
  247. package/cli/dist/modules/fund/nsfc/parse-outline.d.ts +23 -0
  248. package/cli/dist/modules/fund/nsfc/parse-outline.d.ts.map +1 -0
  249. package/cli/dist/modules/fund/nsfc/parse-outline.js +91 -0
  250. package/cli/dist/modules/fund/nsfc/parse-outline.js.map +1 -0
  251. package/cli/dist/modules/fund/nsfc/png-watermark.d.ts +24 -0
  252. package/cli/dist/modules/fund/nsfc/png-watermark.d.ts.map +1 -0
  253. package/cli/dist/modules/fund/nsfc/png-watermark.js +78 -0
  254. package/cli/dist/modules/fund/nsfc/png-watermark.js.map +1 -0
  255. package/cli/dist/modules/fund/nsfc/prompt-hypothesis.d.ts +20 -0
  256. package/cli/dist/modules/fund/nsfc/prompt-hypothesis.d.ts.map +1 -0
  257. package/cli/dist/modules/fund/nsfc/prompt-hypothesis.js +107 -0
  258. package/cli/dist/modules/fund/nsfc/prompt-hypothesis.js.map +1 -0
  259. package/cli/dist/modules/fund/nsfc/prompt-step2.d.ts +18 -0
  260. package/cli/dist/modules/fund/nsfc/prompt-step2.d.ts.map +1 -0
  261. package/cli/dist/modules/fund/nsfc/prompt-step2.js +107 -0
  262. package/cli/dist/modules/fund/nsfc/prompt-step2.js.map +1 -0
  263. package/cli/dist/modules/fund/nsfc/request-body.d.ts +47 -0
  264. package/cli/dist/modules/fund/nsfc/request-body.d.ts.map +1 -0
  265. package/cli/dist/modules/fund/nsfc/request-body.js +38 -0
  266. package/cli/dist/modules/fund/nsfc/request-body.js.map +1 -0
  267. package/cli/dist/modules/fund/nsfc/session-cache.d.ts +48 -0
  268. package/cli/dist/modules/fund/nsfc/session-cache.d.ts.map +1 -0
  269. package/cli/dist/modules/fund/nsfc/session-cache.js +90 -0
  270. package/cli/dist/modules/fund/nsfc/session-cache.js.map +1 -0
  271. package/cli/dist/modules/fund/nsfc/sse-utils.d.ts +22 -0
  272. package/cli/dist/modules/fund/nsfc/sse-utils.d.ts.map +1 -0
  273. package/cli/dist/modules/fund/nsfc/sse-utils.js +81 -0
  274. package/cli/dist/modules/fund/nsfc/sse-utils.js.map +1 -0
  275. package/cli/dist/modules/fund/nsfc/upload.d.ts +3 -0
  276. package/cli/dist/modules/fund/nsfc/upload.d.ts.map +1 -0
  277. package/cli/dist/modules/fund/nsfc/upload.js +59 -0
  278. package/cli/dist/modules/fund/nsfc/upload.js.map +1 -0
  279. package/cli/dist/modules/fund/nsfc/validate.d.ts +30 -0
  280. package/cli/dist/modules/fund/nsfc/validate.d.ts.map +1 -0
  281. package/cli/dist/modules/fund/nsfc/validate.js +91 -0
  282. package/cli/dist/modules/fund/nsfc/validate.js.map +1 -0
  283. package/cli/dist/modules/literature/commands/workflow-list.d.ts +5 -0
  284. package/cli/dist/modules/literature/commands/workflow-list.d.ts.map +1 -0
  285. package/cli/dist/modules/literature/commands/workflow-list.js +9 -0
  286. package/cli/dist/modules/literature/commands/workflow-list.js.map +1 -0
  287. package/cli/dist/modules/literature/commands/workflow-params.d.ts +6 -0
  288. package/cli/dist/modules/literature/commands/workflow-params.d.ts.map +1 -0
  289. package/cli/dist/modules/literature/commands/workflow-params.js +9 -0
  290. package/cli/dist/modules/literature/commands/workflow-params.js.map +1 -0
  291. package/cli/dist/modules/literature/commands/workflow-run.d.ts +7 -0
  292. package/cli/dist/modules/literature/commands/workflow-run.d.ts.map +1 -0
  293. package/cli/dist/modules/literature/commands/workflow-run.js +10 -0
  294. package/cli/dist/modules/literature/commands/workflow-run.js.map +1 -0
  295. package/cli/dist/modules/literature/constants.d.ts +20 -0
  296. package/cli/dist/modules/literature/constants.d.ts.map +1 -0
  297. package/cli/dist/modules/literature/constants.js +56 -0
  298. package/cli/dist/modules/literature/constants.js.map +1 -0
  299. package/cli/dist/modules/literature/index.d.ts +3 -0
  300. package/cli/dist/modules/literature/index.d.ts.map +1 -0
  301. package/cli/dist/modules/literature/index.js +63 -0
  302. package/cli/dist/modules/literature/index.js.map +1 -0
  303. package/cli/dist/modules/meta/analysis.d.ts +127 -0
  304. package/cli/dist/modules/meta/analysis.d.ts.map +1 -0
  305. package/cli/dist/modules/meta/analysis.js +1165 -0
  306. package/cli/dist/modules/meta/analysis.js.map +1 -0
  307. package/cli/dist/modules/meta/api.d.ts +11 -0
  308. package/cli/dist/modules/meta/api.d.ts.map +1 -0
  309. package/cli/dist/modules/meta/api.js +40 -0
  310. package/cli/dist/modules/meta/api.js.map +1 -0
  311. package/cli/dist/modules/meta/commands.d.ts +3 -0
  312. package/cli/dist/modules/meta/commands.d.ts.map +1 -0
  313. package/cli/dist/modules/meta/commands.js +1185 -0
  314. package/cli/dist/modules/meta/commands.js.map +1 -0
  315. package/cli/dist/modules/meta/constants.d.ts +8 -0
  316. package/cli/dist/modules/meta/constants.d.ts.map +1 -0
  317. package/cli/dist/modules/meta/constants.js +9 -0
  318. package/cli/dist/modules/meta/constants.js.map +1 -0
  319. package/cli/dist/modules/meta/extraction.d.ts +206 -0
  320. package/cli/dist/modules/meta/extraction.d.ts.map +1 -0
  321. package/cli/dist/modules/meta/extraction.js +1248 -0
  322. package/cli/dist/modules/meta/extraction.js.map +1 -0
  323. package/cli/dist/modules/meta/index.d.ts +3 -0
  324. package/cli/dist/modules/meta/index.d.ts.map +1 -0
  325. package/cli/dist/modules/meta/index.js +19 -0
  326. package/cli/dist/modules/meta/index.js.map +1 -0
  327. package/cli/dist/modules/meta/node.d.ts +70 -0
  328. package/cli/dist/modules/meta/node.d.ts.map +1 -0
  329. package/cli/dist/modules/meta/node.js +167 -0
  330. package/cli/dist/modules/meta/node.js.map +1 -0
  331. package/cli/dist/modules/meta/plot-params.d.ts +82 -0
  332. package/cli/dist/modules/meta/plot-params.d.ts.map +1 -0
  333. package/cli/dist/modules/meta/plot-params.js +1179 -0
  334. package/cli/dist/modules/meta/plot-params.js.map +1 -0
  335. package/cli/dist/modules/meta/prisma-flow-docx.d.ts +23 -0
  336. package/cli/dist/modules/meta/prisma-flow-docx.d.ts.map +1 -0
  337. package/cli/dist/modules/meta/prisma-flow-docx.js +302 -0
  338. package/cli/dist/modules/meta/prisma-flow-docx.js.map +1 -0
  339. package/cli/dist/modules/meta/retrieve.d.ts +113 -0
  340. package/cli/dist/modules/meta/retrieve.d.ts.map +1 -0
  341. package/cli/dist/modules/meta/retrieve.js +913 -0
  342. package/cli/dist/modules/meta/retrieve.js.map +1 -0
  343. package/cli/dist/modules/meta/screening.d.ts +179 -0
  344. package/cli/dist/modules/meta/screening.d.ts.map +1 -0
  345. package/cli/dist/modules/meta/screening.js +1255 -0
  346. package/cli/dist/modules/meta/screening.js.map +1 -0
  347. package/cli/dist/modules/meta/topic.d.ts +110 -0
  348. package/cli/dist/modules/meta/topic.d.ts.map +1 -0
  349. package/cli/dist/modules/meta/topic.js +865 -0
  350. package/cli/dist/modules/meta/topic.js.map +1 -0
  351. package/cli/dist/modules/meta/types.d.ts +49 -0
  352. package/cli/dist/modules/meta/types.d.ts.map +1 -0
  353. package/cli/dist/modules/meta/types.js +2 -0
  354. package/cli/dist/modules/meta/types.js.map +1 -0
  355. package/cli/dist/modules/meta/workflow.d.ts +154 -0
  356. package/cli/dist/modules/meta/workflow.d.ts.map +1 -0
  357. package/cli/dist/modules/meta/workflow.js +956 -0
  358. package/cli/dist/modules/meta/workflow.js.map +1 -0
  359. package/cli/dist/modules/meta/writing.d.ts +83 -0
  360. package/cli/dist/modules/meta/writing.d.ts.map +1 -0
  361. package/cli/dist/modules/meta/writing.js +1077 -0
  362. package/cli/dist/modules/meta/writing.js.map +1 -0
  363. package/cli/dist/modules/proposal/artifacts.d.ts +18 -0
  364. package/cli/dist/modules/proposal/artifacts.d.ts.map +1 -0
  365. package/cli/dist/modules/proposal/artifacts.js +43 -0
  366. package/cli/dist/modules/proposal/artifacts.js.map +1 -0
  367. package/cli/dist/modules/proposal/commands/basic-create.d.ts +22 -0
  368. package/cli/dist/modules/proposal/commands/basic-create.d.ts.map +1 -0
  369. package/cli/dist/modules/proposal/commands/basic-create.js +81 -0
  370. package/cli/dist/modules/proposal/commands/basic-create.js.map +1 -0
  371. package/cli/dist/modules/proposal/commands/basic-result.d.ts +24 -0
  372. package/cli/dist/modules/proposal/commands/basic-result.d.ts.map +1 -0
  373. package/cli/dist/modules/proposal/commands/basic-result.js +96 -0
  374. package/cli/dist/modules/proposal/commands/basic-result.js.map +1 -0
  375. package/cli/dist/modules/proposal/commands/bioinfo-params.d.ts +5 -0
  376. package/cli/dist/modules/proposal/commands/bioinfo-params.d.ts.map +1 -0
  377. package/cli/dist/modules/proposal/commands/bioinfo-params.js +9 -0
  378. package/cli/dist/modules/proposal/commands/bioinfo-params.js.map +1 -0
  379. package/cli/dist/modules/proposal/commands/bioinfo-run.d.ts +6 -0
  380. package/cli/dist/modules/proposal/commands/bioinfo-run.d.ts.map +1 -0
  381. package/cli/dist/modules/proposal/commands/bioinfo-run.js +10 -0
  382. package/cli/dist/modules/proposal/commands/bioinfo-run.js.map +1 -0
  383. package/cli/dist/modules/proposal/commands/clinical-list.d.ts +5 -0
  384. package/cli/dist/modules/proposal/commands/clinical-list.d.ts.map +1 -0
  385. package/cli/dist/modules/proposal/commands/clinical-list.js +9 -0
  386. package/cli/dist/modules/proposal/commands/clinical-list.js.map +1 -0
  387. package/cli/dist/modules/proposal/commands/clinical-params.d.ts +6 -0
  388. package/cli/dist/modules/proposal/commands/clinical-params.d.ts.map +1 -0
  389. package/cli/dist/modules/proposal/commands/clinical-params.js +9 -0
  390. package/cli/dist/modules/proposal/commands/clinical-params.js.map +1 -0
  391. package/cli/dist/modules/proposal/commands/clinical-run.d.ts +7 -0
  392. package/cli/dist/modules/proposal/commands/clinical-run.d.ts.map +1 -0
  393. package/cli/dist/modules/proposal/commands/clinical-run.js +10 -0
  394. package/cli/dist/modules/proposal/commands/clinical-run.js.map +1 -0
  395. package/cli/dist/modules/proposal/constants.d.ts +34 -0
  396. package/cli/dist/modules/proposal/constants.d.ts.map +1 -0
  397. package/cli/dist/modules/proposal/constants.js +75 -0
  398. package/cli/dist/modules/proposal/constants.js.map +1 -0
  399. package/cli/dist/modules/proposal/index.d.ts +3 -0
  400. package/cli/dist/modules/proposal/index.d.ts.map +1 -0
  401. package/cli/dist/modules/proposal/index.js +95 -0
  402. package/cli/dist/modules/proposal/index.js.map +1 -0
  403. package/cli/dist/modules/proposal/newidea-env.d.ts +28 -0
  404. package/cli/dist/modules/proposal/newidea-env.d.ts.map +1 -0
  405. package/cli/dist/modules/proposal/newidea-env.js +69 -0
  406. package/cli/dist/modules/proposal/newidea-env.js.map +1 -0
  407. package/cli/dist/modules/proposal/newidea-runner.d.ts +25 -0
  408. package/cli/dist/modules/proposal/newidea-runner.d.ts.map +1 -0
  409. package/cli/dist/modules/proposal/newidea-runner.js +158 -0
  410. package/cli/dist/modules/proposal/newidea-runner.js.map +1 -0
  411. package/cli/dist/modules/proposal/parse.d.ts +25 -0
  412. package/cli/dist/modules/proposal/parse.d.ts.map +1 -0
  413. package/cli/dist/modules/proposal/parse.js +173 -0
  414. package/cli/dist/modules/proposal/parse.js.map +1 -0
  415. package/cli/dist/modules/sci/apps.d.ts +48 -0
  416. package/cli/dist/modules/sci/apps.d.ts.map +1 -0
  417. package/cli/dist/modules/sci/apps.js +43 -0
  418. package/cli/dist/modules/sci/apps.js.map +1 -0
  419. package/cli/dist/modules/sci/article-cache.d.ts +32 -0
  420. package/cli/dist/modules/sci/article-cache.d.ts.map +1 -0
  421. package/cli/dist/modules/sci/article-cache.js +163 -0
  422. package/cli/dist/modules/sci/article-cache.js.map +1 -0
  423. package/cli/dist/modules/sci/article-validate.d.ts +11 -0
  424. package/cli/dist/modules/sci/article-validate.d.ts.map +1 -0
  425. package/cli/dist/modules/sci/article-validate.js +43 -0
  426. package/cli/dist/modules/sci/article-validate.js.map +1 -0
  427. package/cli/dist/modules/sci/commands/article-create.d.ts +46 -0
  428. package/cli/dist/modules/sci/commands/article-create.d.ts.map +1 -0
  429. package/cli/dist/modules/sci/commands/article-create.js +315 -0
  430. package/cli/dist/modules/sci/commands/article-create.js.map +1 -0
  431. package/cli/dist/modules/sci/commands/article-download.d.ts +50 -0
  432. package/cli/dist/modules/sci/commands/article-download.d.ts.map +1 -0
  433. package/cli/dist/modules/sci/commands/article-download.js +281 -0
  434. package/cli/dist/modules/sci/commands/article-download.js.map +1 -0
  435. package/cli/dist/modules/sci/commands/outline.d.ts +36 -0
  436. package/cli/dist/modules/sci/commands/outline.d.ts.map +1 -0
  437. package/cli/dist/modules/sci/commands/outline.js +491 -0
  438. package/cli/dist/modules/sci/commands/outline.js.map +1 -0
  439. package/cli/dist/modules/sci/commands/template.d.ts +9 -0
  440. package/cli/dist/modules/sci/commands/template.d.ts.map +1 -0
  441. package/cli/dist/modules/sci/commands/template.js +12 -0
  442. package/cli/dist/modules/sci/commands/template.js.map +1 -0
  443. package/cli/dist/modules/sci/commands.d.ts +3 -0
  444. package/cli/dist/modules/sci/commands.d.ts.map +1 -0
  445. package/cli/dist/modules/sci/commands.js +108 -0
  446. package/cli/dist/modules/sci/commands.js.map +1 -0
  447. package/cli/dist/modules/sci/constants.d.ts +117 -0
  448. package/cli/dist/modules/sci/constants.d.ts.map +1 -0
  449. package/cli/dist/modules/sci/constants.js +152 -0
  450. package/cli/dist/modules/sci/constants.js.map +1 -0
  451. package/cli/dist/modules/sci/content-source.d.ts +18 -0
  452. package/cli/dist/modules/sci/content-source.d.ts.map +1 -0
  453. package/cli/dist/modules/sci/content-source.js +54 -0
  454. package/cli/dist/modules/sci/content-source.js.map +1 -0
  455. package/cli/dist/modules/sci/index.d.ts +3 -0
  456. package/cli/dist/modules/sci/index.d.ts.map +1 -0
  457. package/cli/dist/modules/sci/index.js +19 -0
  458. package/cli/dist/modules/sci/index.js.map +1 -0
  459. package/cli/dist/modules/sci/outline-transform.d.ts +16 -0
  460. package/cli/dist/modules/sci/outline-transform.d.ts.map +1 -0
  461. package/cli/dist/modules/sci/outline-transform.js +67 -0
  462. package/cli/dist/modules/sci/outline-transform.js.map +1 -0
  463. package/cli/dist/modules/sci/precheck-cache.d.ts +23 -0
  464. package/cli/dist/modules/sci/precheck-cache.d.ts.map +1 -0
  465. package/cli/dist/modules/sci/precheck-cache.js +141 -0
  466. package/cli/dist/modules/sci/precheck-cache.js.map +1 -0
  467. package/cli/dist/modules/sci/prompt-article.d.ts +12 -0
  468. package/cli/dist/modules/sci/prompt-article.d.ts.map +1 -0
  469. package/cli/dist/modules/sci/prompt-article.js +37 -0
  470. package/cli/dist/modules/sci/prompt-article.js.map +1 -0
  471. package/cli/dist/modules/sci/prompt-precheck.d.ts +16 -0
  472. package/cli/dist/modules/sci/prompt-precheck.d.ts.map +1 -0
  473. package/cli/dist/modules/sci/prompt-precheck.js +61 -0
  474. package/cli/dist/modules/sci/prompt-precheck.js.map +1 -0
  475. package/cli/dist/modules/sci/sse-utils.d.ts +50 -0
  476. package/cli/dist/modules/sci/sse-utils.d.ts.map +1 -0
  477. package/cli/dist/modules/sci/sse-utils.js +207 -0
  478. package/cli/dist/modules/sci/sse-utils.js.map +1 -0
  479. package/cli/dist/modules/shared/result-wrapper.d.ts +71 -0
  480. package/cli/dist/modules/shared/result-wrapper.d.ts.map +1 -0
  481. package/cli/dist/modules/shared/result-wrapper.js +95 -0
  482. package/cli/dist/modules/shared/result-wrapper.js.map +1 -0
  483. package/cli/dist/modules/shared/workflow-app/api.d.ts +6 -0
  484. package/cli/dist/modules/shared/workflow-app/api.d.ts.map +1 -0
  485. package/cli/dist/modules/shared/workflow-app/api.js +31 -0
  486. package/cli/dist/modules/shared/workflow-app/api.js.map +1 -0
  487. package/cli/dist/modules/shared/workflow-app/command.d.ts +30 -0
  488. package/cli/dist/modules/shared/workflow-app/command.d.ts.map +1 -0
  489. package/cli/dist/modules/shared/workflow-app/command.js +183 -0
  490. package/cli/dist/modules/shared/workflow-app/command.js.map +1 -0
  491. package/cli/dist/modules/shared/workflow-app/constants.d.ts +12 -0
  492. package/cli/dist/modules/shared/workflow-app/constants.d.ts.map +1 -0
  493. package/cli/dist/modules/shared/workflow-app/constants.js +21 -0
  494. package/cli/dist/modules/shared/workflow-app/constants.js.map +1 -0
  495. package/cli/dist/modules/shared/workflow-app/form.d.ts +21 -0
  496. package/cli/dist/modules/shared/workflow-app/form.d.ts.map +1 -0
  497. package/cli/dist/modules/shared/workflow-app/form.js +123 -0
  498. package/cli/dist/modules/shared/workflow-app/form.js.map +1 -0
  499. package/cli/dist/modules/shared/workflow-app/index.d.ts +8 -0
  500. package/cli/dist/modules/shared/workflow-app/index.d.ts.map +1 -0
  501. package/cli/dist/modules/shared/workflow-app/index.js +7 -0
  502. package/cli/dist/modules/shared/workflow-app/index.js.map +1 -0
  503. package/cli/dist/modules/shared/workflow-app/run.d.ts +15 -0
  504. package/cli/dist/modules/shared/workflow-app/run.d.ts.map +1 -0
  505. package/cli/dist/modules/shared/workflow-app/run.js +71 -0
  506. package/cli/dist/modules/shared/workflow-app/run.js.map +1 -0
  507. package/cli/dist/modules/shared/workflow-app/types.d.ts +74 -0
  508. package/cli/dist/modules/shared/workflow-app/types.d.ts.map +1 -0
  509. package/cli/dist/modules/shared/workflow-app/types.js +3 -0
  510. package/cli/dist/modules/shared/workflow-app/types.js.map +1 -0
  511. package/cli/dist/modules/site-configs.d.ts +4 -0
  512. package/cli/dist/modules/site-configs.d.ts.map +1 -0
  513. package/cli/dist/modules/site-configs.js +21 -0
  514. package/cli/dist/modules/site-configs.js.map +1 -0
  515. package/cli/dist/modules/upgrade/index.d.ts +6 -0
  516. package/cli/dist/modules/upgrade/index.d.ts.map +1 -0
  517. package/cli/dist/modules/upgrade/index.js +105 -0
  518. package/cli/dist/modules/upgrade/index.js.map +1 -0
  519. package/cli/dist/program.d.ts +3 -0
  520. package/cli/dist/program.d.ts.map +1 -0
  521. package/cli/dist/program.js +69 -0
  522. package/cli/dist/program.js.map +1 -0
  523. package/package.json +37 -0
@@ -0,0 +1,1185 @@
1
+ import { runCreateMetaCriteria, runCreateMetaPicos, runRerunMetaTopic, runRerunMetaCriteria, runRerunMetaPicos, runCreateMetaTopic, runSaveMetaCriteria, runSaveMetaPicos, runSelectMetaTopic, runVerifyMetaTopic, } from "./topic.js";
2
+ import { runCreateMetaWorkflow, runGetMetaWorkflow, runListMetaWorkflows, runListMetaWorkflowSteps, runSwitchMetaWorkflow, } from "./workflow.js";
3
+ import { runBackoffMetaNode } from "./node.js";
4
+ import { runAddRetrieveLiterature, runCheckRetrieveExpression, runCreateRetrieveExpression, runCreateRetrieveLiterature, runGetRetrieveExpression, runListRetrieveLiterature, runRerunRetrieveExpression, runSaveRetrieveExpression, } from "./retrieve.js";
5
+ import { runCheckFulltextScreening, runCountAbstractPdf, runCreateAbstractScreening, runCreateFulltextScreening, runListAbstractScreening, runListFulltextScreening, runRerunAbstractScreening, runRerunFulltextScreening, runUpdateAbstractScreening, runUpdateFulltextScreening, runUploadAbstractPdf, } from "./screening.js";
6
+ import { runCreateBaseline, runCreateOutcome, runCreateQuality, runDeleteOutcome, runListBaseline, runListOutcome, runListQuality, runRerunBaseline, runRerunQuality, runUpdateBaseline, runUpdateOutcome, runUpdateQuality, runVerifyOutcome, runVerifyQuality, } from "./extraction.js";
7
+ import { runCreateAssessmentPlot, runCreateBiasPlot, runCreateEffectPlot, runCreatePrismaFlow, runGetAssessmentPlot, runGetBiasPlot, runGetEffectPlot, runExportPrismaFlow, runGetPrismaImage, runRerunAssessmentPlot, runRerunBiasPlot, runRerunEffectPlot, runUpdatePrismaFlowData, runUploadPrismaImage, } from "./analysis.js";
8
+ import { runCreateWritingFullText, runCreateWritingMethod, runCreateWritingResult, runExportWritingFullText, runGetWritingFullText, runGetWritingMethod, runGetWritingResult, runRerunWritingFullText, runRerunWritingMethod, runRerunWritingResult, runUpdateWritingMethod, runUpdateWritingResult, } from "./writing.js";
9
+ // 注册 Meta 工作台子模块下的全部子命令
10
+ export function registerMetaWorkbenchCommands(meta) {
11
+ const workflow = meta.command("workflow").description("Meta 工作流");
12
+ workflow
13
+ .command("create")
14
+ .description("创建 Meta 工作流")
15
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
16
+ .action(async (opts) => {
17
+ await runCreateMetaWorkflow({
18
+ format: opts.format === "json" ? "json" : "markdown",
19
+ });
20
+ });
21
+ workflow
22
+ .command("get")
23
+ .description("查询 Meta 工作流详情")
24
+ .requiredOption("--workflow-id <id>", "工作流 runner_id")
25
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
26
+ .action(async (opts) => {
27
+ await runGetMetaWorkflow({
28
+ workflowId: opts.workflowId,
29
+ format: opts.format === "json" ? "json" : "markdown",
30
+ });
31
+ });
32
+ workflow
33
+ .command("list")
34
+ .description("查询 Meta 历史记录")
35
+ .option("--page <page>", "页码", "1")
36
+ .option("--limit <limit>", "每页数量", "10")
37
+ .option("--name <keyword>", "按名称搜索")
38
+ .option("--switch-options", "仅返回当前页切换记录用 selectionOptions(点选「切换指定历史记录」后使用)")
39
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
40
+ .action(async (opts) => {
41
+ await runListMetaWorkflows({
42
+ page: Number(opts.page),
43
+ limit: Number(opts.limit),
44
+ name: opts.name,
45
+ switchOptions: Boolean(opts.switchOptions),
46
+ format: opts.format === "json" ? "json" : "markdown",
47
+ });
48
+ });
49
+ workflow
50
+ .command("steps")
51
+ .description("查询历史记录中可切换的工作流步骤")
52
+ .requiredOption("--workflow-id <id>", "工作流 runner_id")
53
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
54
+ .action(async (opts) => {
55
+ await runListMetaWorkflowSteps({
56
+ workflowId: opts.workflowId,
57
+ format: opts.format === "json" ? "json" : "markdown",
58
+ });
59
+ });
60
+ workflow
61
+ .command("switch")
62
+ .description("切换到历史记录;默认定位到 head(与网站历史当前步骤一致)")
63
+ .requiredOption("--workflow-id <id>", "历史工作流 runner_id")
64
+ .option("--node-type <type>", "要定位到的历史步骤 node_type(可含 head)")
65
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
66
+ .action(async (opts) => {
67
+ await runSwitchMetaWorkflow({
68
+ workflowId: opts.workflowId,
69
+ nodeType: opts.nodeType,
70
+ format: opts.format === "json" ? "json" : "markdown",
71
+ });
72
+ });
73
+ workflow
74
+ .command("backoff")
75
+ .description("从当前工作流头回退一步(--node-id 必须是当前 head,不是目标节点)")
76
+ .requiredOption("--workflow-id <id>", "工作流 runner_id")
77
+ .requiredOption("--node-id <id>", "当前工作流头(head)节点 ID;禁止传想回到的目标节点 ID")
78
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
79
+ .action(async (opts) => {
80
+ await runBackoffMetaNode({
81
+ workflowId: opts.workflowId,
82
+ nodeId: opts.nodeId,
83
+ format: opts.format === "json" ? "json" : "markdown",
84
+ });
85
+ });
86
+ const topic = meta.command("topic").description("Meta 选题");
87
+ topic
88
+ .command("create")
89
+ .description("根据主题描述生成 Meta 选题")
90
+ .requiredOption("-i, --input <text>", "主题描述")
91
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
92
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
93
+ .action(async (opts) => {
94
+ await runCreateMetaTopic({
95
+ input: opts.input,
96
+ workflowId: opts.workflowId,
97
+ format: opts.format === "json" ? "json" : "markdown",
98
+ });
99
+ });
100
+ topic
101
+ .command("rerun")
102
+ .description("重新生成当前候选选题")
103
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
104
+ .option("--node-id <id>", "候选选题节点 ID;不传则自动从工作流推断")
105
+ .option("--source <source>", "候选题来源:generate | verify", "generate")
106
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
107
+ .action(async (opts) => {
108
+ await runRerunMetaTopic({
109
+ workflowId: opts.workflowId,
110
+ nodeId: opts.nodeId,
111
+ source: opts.source === "verify" ? "verify" : "generate",
112
+ format: opts.format === "json" ? "json" : "markdown",
113
+ });
114
+ });
115
+ topic
116
+ .command("verify")
117
+ .description("校验已有 Meta 选题")
118
+ .requiredOption("--title <text>", "已有 Meta 选题")
119
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
120
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
121
+ .action(async (opts) => {
122
+ await runVerifyMetaTopic({
123
+ title: opts.title,
124
+ workflowId: opts.workflowId,
125
+ format: opts.format === "json" ? "json" : "markdown",
126
+ });
127
+ });
128
+ topic
129
+ .command("select")
130
+ .description("记录用户选定的 Meta 题目")
131
+ .requiredOption("--title <text>", "选定的 Meta 题目")
132
+ .option("--titles-json <json>", "候选题目上下文 JSON 对象")
133
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
134
+ .option("--node-id <id>", "选题节点 ID;不传则自动从工作流推断")
135
+ .option("--source <source>", "选题来源:generate | verify;不传则按工作流中的选题节点自动识别")
136
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
137
+ .action(async (opts) => {
138
+ const source = opts.source === "verify"
139
+ ? "verify"
140
+ : opts.source === "generate"
141
+ ? "generate"
142
+ : undefined;
143
+ await runSelectMetaTopic({
144
+ title: opts.title,
145
+ titlesJson: opts.titlesJson,
146
+ workflowId: opts.workflowId,
147
+ nodeId: opts.nodeId,
148
+ source,
149
+ format: opts.format === "json" ? "json" : "markdown",
150
+ });
151
+ });
152
+ const picos = meta.command("picos").description("PICOS");
153
+ picos
154
+ .command("create")
155
+ .description("根据选定题目生成 PICOS")
156
+ .requiredOption("--title <text>", "选定的 Meta 题目")
157
+ .option("--titles-json <json>", "候选题目上下文 JSON 对象")
158
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
159
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
160
+ .action(async (opts) => {
161
+ await runCreateMetaPicos({
162
+ title: opts.title,
163
+ titlesJson: opts.titlesJson,
164
+ workflowId: opts.workflowId,
165
+ format: opts.format === "json" ? "json" : "markdown",
166
+ });
167
+ });
168
+ picos
169
+ .command("rerun")
170
+ .description("重新生成当前 PICOS 节点")
171
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
172
+ .option("--node-id <id>", "PICOS 节点 ID;不传则自动从工作流推断")
173
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
174
+ .action(async (opts) => {
175
+ await runRerunMetaPicos({
176
+ workflowId: opts.workflowId,
177
+ nodeId: opts.nodeId,
178
+ format: opts.format === "json" ? "json" : "markdown",
179
+ });
180
+ });
181
+ picos
182
+ .command("save")
183
+ .description("保存用户编辑后的 PICOS")
184
+ .option("--picos-json <json>", "PICOS JSON:P/I/C/O/S/Other 均为可选字段")
185
+ .option("--picos-file <path>", "PICOS JSON 文件路径")
186
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
187
+ .option("--node-id <id>", "PICOS 节点 ID;不传则自动从工作流推断")
188
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
189
+ .action(async (opts) => {
190
+ await runSaveMetaPicos({
191
+ picosJson: opts.picosJson,
192
+ picosFile: opts.picosFile,
193
+ workflowId: opts.workflowId,
194
+ nodeId: opts.nodeId,
195
+ format: opts.format === "json" ? "json" : "markdown",
196
+ });
197
+ });
198
+ const criteria = meta.command("criteria").description("纳排标准");
199
+ criteria
200
+ .command("create")
201
+ .description("根据 PICOS 生成纳入排除标准")
202
+ .option("--picos-json <json>", "用户编辑后的 PICOS JSON;不传则读取当前工作流 PICOS")
203
+ .option("--picos-file <path>", "用户编辑后的 PICOS JSON 文件;不传则读取当前工作流 PICOS")
204
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
205
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
206
+ .action(async (opts) => {
207
+ await runCreateMetaCriteria({
208
+ picosJson: opts.picosJson,
209
+ picosFile: opts.picosFile,
210
+ workflowId: opts.workflowId,
211
+ format: opts.format === "json" ? "json" : "markdown",
212
+ });
213
+ });
214
+ criteria
215
+ .command("rerun")
216
+ .description("重新生成当前纳排标准节点")
217
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
218
+ .option("--node-id <id>", "纳排标准节点 ID;不传则自动从工作流推断")
219
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
220
+ .action(async (opts) => {
221
+ await runRerunMetaCriteria({
222
+ workflowId: opts.workflowId,
223
+ nodeId: opts.nodeId,
224
+ format: opts.format === "json" ? "json" : "markdown",
225
+ });
226
+ });
227
+ criteria
228
+ .command("save")
229
+ .description("保存用户编辑后的纳排标准")
230
+ .option("--criteria-json <json>", "纳排标准 JSON:inclusion_criteria/exclusion_criteria,至少一项非空")
231
+ .option("--criteria-file <path>", "纳排标准 JSON 文件路径")
232
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
233
+ .option("--node-id <id>", "纳排标准节点 ID;不传则自动从工作流推断")
234
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
235
+ .action(async (opts) => {
236
+ await runSaveMetaCriteria({
237
+ criteriaJson: opts.criteriaJson,
238
+ criteriaFile: opts.criteriaFile,
239
+ workflowId: opts.workflowId,
240
+ nodeId: opts.nodeId,
241
+ format: opts.format === "json" ? "json" : "markdown",
242
+ });
243
+ });
244
+ const retrieve = meta.command("retrieve").description("文献检索");
245
+ const expression = retrieve.command("expression").description("检索式");
246
+ expression
247
+ .command("create")
248
+ .description("根据 PICOS 生成检索式")
249
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
250
+ .option("--picos-node-id <id>", "PICOS 节点 ID;不传则自动从工作流推断")
251
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
252
+ .action(async (opts) => {
253
+ await runCreateRetrieveExpression({
254
+ workflowId: opts.workflowId,
255
+ picosNodeId: opts.picosNodeId,
256
+ format: opts.format === "json" ? "json" : "markdown",
257
+ });
258
+ });
259
+ expression
260
+ .command("save")
261
+ .description("保存用户编辑后的检索式")
262
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
263
+ .option("--expression-json <json>", "检索式 JSON:四库均可改;须含 select 与所改库字段,其余由 CLI 合并后四库一起提交")
264
+ .option("--expression-file <path>", "用户编辑检索式后使用的 JSON 文件路径")
265
+ .option("--node-id <id>", "检索式节点 ID;不传则自动从工作流推断")
266
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
267
+ .action(async (opts) => {
268
+ await runSaveRetrieveExpression({
269
+ workflowId: opts.workflowId,
270
+ expressionJson: opts.expressionJson,
271
+ expressionFile: opts.expressionFile,
272
+ nodeId: opts.nodeId,
273
+ format: opts.format === "json" ? "json" : "markdown",
274
+ });
275
+ });
276
+ expression
277
+ .command("check")
278
+ .description("校验检索式是否可进入文献检索")
279
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
280
+ .option("--node-id <id>", "检索式节点 ID;不传则自动从工作流推断")
281
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
282
+ .action(async (opts) => {
283
+ await runCheckRetrieveExpression({
284
+ workflowId: opts.workflowId,
285
+ nodeId: opts.nodeId,
286
+ format: opts.format === "json" ? "json" : "markdown",
287
+ });
288
+ });
289
+ expression
290
+ .command("get")
291
+ .description("读取当前已生成的检索式(不重新执行;用于历史切换后展示)")
292
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
293
+ .option("--node-id <id>", "检索式节点 ID;不传则自动从工作流推断")
294
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
295
+ .action(async (opts) => {
296
+ await runGetRetrieveExpression({
297
+ workflowId: opts.workflowId,
298
+ nodeId: opts.nodeId,
299
+ format: opts.format === "json" ? "json" : "markdown",
300
+ });
301
+ });
302
+ expression
303
+ .command("rerun")
304
+ .description("重新生成当前检索式")
305
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
306
+ .option("--node-id <id>", "检索式节点 ID;不传则自动从工作流推断")
307
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
308
+ .action(async (opts) => {
309
+ await runRerunRetrieveExpression({
310
+ workflowId: opts.workflowId,
311
+ nodeId: opts.nodeId,
312
+ format: opts.format === "json" ? "json" : "markdown",
313
+ });
314
+ });
315
+ const literature = retrieve.command("literature").description("检索结果文献");
316
+ literature
317
+ .command("create")
318
+ .description("根据已确认检索式检索文献")
319
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
320
+ .option("--expression-json <json>", "用户编辑后的检索式 JSON(四库均可改;长文本请改用 --expression-file)")
321
+ .option("--expression-file <path>", "用户编辑检索式后使用的 JSON 文件路径(CLI 合并未改库后四库一起提交)")
322
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
323
+ .action(async (opts) => {
324
+ await runCreateRetrieveLiterature({
325
+ workflowId: opts.workflowId,
326
+ expressionJson: opts.expressionJson,
327
+ expressionFile: opts.expressionFile,
328
+ format: opts.format === "json" ? "json" : "markdown",
329
+ });
330
+ });
331
+ literature
332
+ .command("list")
333
+ .description("查询文献检索结果")
334
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
335
+ .option("--node-id <id>", "文献检索节点 ID;不传则自动从工作流推断")
336
+ .option("--page <page>", "页码", (value) => Number(value), 1)
337
+ .option("--limit <limit>", "每页数量", (value) => Number(value), 10)
338
+ .option("--sort <field>", "排序字段,如 publication_date 或 pmid")
339
+ .option("--order <order>", "排序方向:asc | desc")
340
+ .option("--publication-type <type...>", "发表类型过滤,可传多个")
341
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
342
+ .action(async (opts) => {
343
+ await runListRetrieveLiterature({
344
+ workflowId: opts.workflowId,
345
+ nodeId: opts.nodeId,
346
+ page: opts.page,
347
+ limit: opts.limit,
348
+ sort: opts.sort,
349
+ order: opts.order === "desc" ? "desc" : opts.order === "asc" ? "asc" : undefined,
350
+ publicationType: opts.publicationType,
351
+ format: opts.format === "json" ? "json" : "markdown",
352
+ });
353
+ });
354
+ literature
355
+ .command("add")
356
+ .description("补充一篇文献")
357
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
358
+ .option("--literature-json <json>", "文献 JSON:author/title/abstract/publication_date 必填;doi/publication_type/pmid/pmc 可选")
359
+ .option("--literature-file <path>", "文献 JSON 文件路径")
360
+ .option("--node-id <id>", "文献检索节点 ID;不传则自动从工作流推断")
361
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
362
+ .action(async (opts) => {
363
+ await runAddRetrieveLiterature({
364
+ workflowId: opts.workflowId,
365
+ literatureJson: opts.literatureJson,
366
+ literatureFile: opts.literatureFile,
367
+ nodeId: opts.nodeId,
368
+ format: opts.format === "json" ? "json" : "markdown",
369
+ });
370
+ });
371
+ const screening = meta.command("screening").description("论文筛选");
372
+ const abstract = screening.command("abstract").description("摘要初筛");
373
+ abstract
374
+ .command("create")
375
+ .description("根据纳排标准执行摘要初筛")
376
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
377
+ .option("--criteria-json <json>", "纳排标准 JSON 对象")
378
+ .option("--criteria-file <path>", "纳排标准 JSON 文件路径")
379
+ .option("--literature-node-id <id>", "文献检索节点 ID;不传则自动从工作流推断")
380
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
381
+ .action(async (opts) => {
382
+ await runCreateAbstractScreening({
383
+ workflowId: opts.workflowId,
384
+ criteriaJson: opts.criteriaJson,
385
+ criteriaFile: opts.criteriaFile,
386
+ literatureNodeId: opts.literatureNodeId,
387
+ format: opts.format === "json" ? "json" : "markdown",
388
+ });
389
+ });
390
+ abstract
391
+ .command("list")
392
+ .description("查询摘要初筛结果")
393
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
394
+ .option("--node-id <id>", "摘要初筛节点 ID;不传则自动从工作流推断")
395
+ .option("--page <page>", "页码", (value) => Number(value), 1)
396
+ .option("--limit <limit>", "每页数量", (value) => Number(value), 10)
397
+ .option("--sort <field>", "排序字段,如 publication_date 或 pmid")
398
+ .option("--order <order>", "排序方向:asc | desc")
399
+ .option("--publication-type <type...>", "发表类型过滤,可传多个")
400
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
401
+ .action(async (opts) => {
402
+ await runListAbstractScreening({
403
+ workflowId: opts.workflowId,
404
+ nodeId: opts.nodeId,
405
+ page: opts.page,
406
+ limit: opts.limit,
407
+ sort: opts.sort,
408
+ order: opts.order === "desc" ? "desc" : opts.order === "asc" ? "asc" : undefined,
409
+ publicationType: opts.publicationType,
410
+ format: opts.format === "json" ? "json" : "markdown",
411
+ });
412
+ });
413
+ abstract
414
+ .command("update")
415
+ .description("编辑摘要初筛文献")
416
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
417
+ .requiredOption("--id <id>", "摘要初筛结果 ID")
418
+ .option("--data-json <json>", "修改 JSON:仅传用户明确要求修改的字段;记录 id 使用 --id,title/abstract 等未修改字段由 CLI 自动回填,禁止重写")
419
+ .option("--data-file <path>", "文献 JSON 文件路径")
420
+ .option("--node-id <id>", "摘要初筛节点 ID;不传则自动从工作流推断")
421
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
422
+ .action(async (opts) => {
423
+ await runUpdateAbstractScreening({
424
+ workflowId: opts.workflowId,
425
+ id: opts.id,
426
+ dataJson: opts.dataJson,
427
+ dataFile: opts.dataFile,
428
+ nodeId: opts.nodeId,
429
+ format: opts.format === "json" ? "json" : "markdown",
430
+ });
431
+ });
432
+ abstract
433
+ .command("rerun")
434
+ .description("对选中文献重新摘要初筛")
435
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
436
+ .option("--ids-json <json>", "摘要初筛结果 ID 数组")
437
+ .option("--ids-file <path>", "摘要初筛结果 ID 数组文件")
438
+ .option("--inclusion-criteria <text>", "纳入标准;不传则从纳排标准节点读取")
439
+ .option("--criteria-json <json>", "纳排标准 JSON 对象")
440
+ .option("--criteria-file <path>", "纳排标准 JSON 文件路径")
441
+ .option("--node-id <id>", "摘要初筛节点 ID;不传则自动从工作流推断")
442
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
443
+ .action(async (opts) => {
444
+ await runRerunAbstractScreening({
445
+ workflowId: opts.workflowId,
446
+ idsJson: opts.idsJson,
447
+ idsFile: opts.idsFile,
448
+ inclusionCriteria: opts.inclusionCriteria,
449
+ criteriaJson: opts.criteriaJson,
450
+ criteriaFile: opts.criteriaFile,
451
+ nodeId: opts.nodeId,
452
+ format: opts.format === "json" ? "json" : "markdown",
453
+ });
454
+ });
455
+ abstract
456
+ .command("count-pdf")
457
+ .description("查询摘要初筛已上传 PDF 数量")
458
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
459
+ .option("--node-id <id>", "摘要初筛节点 ID;不传则自动从工作流推断")
460
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
461
+ .action(async (opts) => {
462
+ await runCountAbstractPdf({
463
+ workflowId: opts.workflowId,
464
+ nodeId: opts.nodeId,
465
+ format: opts.format === "json" ? "json" : "markdown",
466
+ });
467
+ });
468
+ abstract
469
+ .command("upload-pdf")
470
+ .description("为摘要初筛文献上传全文 PDF")
471
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
472
+ .requiredOption("--id <id>", "摘要初筛结果 ID")
473
+ .requiredOption("--file <path>", "PDF 文件路径")
474
+ .option("--node-id <id>", "摘要初筛节点 ID;不传则自动从工作流推断")
475
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
476
+ .action(async (opts) => {
477
+ await runUploadAbstractPdf({
478
+ workflowId: opts.workflowId,
479
+ id: opts.id,
480
+ file: opts.file,
481
+ nodeId: opts.nodeId,
482
+ format: opts.format === "json" ? "json" : "markdown",
483
+ });
484
+ });
485
+ const fulltext = screening.command("fulltext").description("全文复筛");
486
+ fulltext
487
+ .command("create")
488
+ .description("根据纳排标准执行全文复筛")
489
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
490
+ .option("--criteria-json <json>", "纳排标准 JSON 对象")
491
+ .option("--criteria-file <path>", "纳排标准 JSON 文件路径")
492
+ .option("--abstract-node-id <id>", "摘要初筛节点 ID;不传则自动从工作流推断")
493
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
494
+ .action(async (opts) => {
495
+ await runCreateFulltextScreening({
496
+ workflowId: opts.workflowId,
497
+ criteriaJson: opts.criteriaJson,
498
+ criteriaFile: opts.criteriaFile,
499
+ abstractNodeId: opts.abstractNodeId,
500
+ format: opts.format === "json" ? "json" : "markdown",
501
+ });
502
+ });
503
+ fulltext
504
+ .command("list")
505
+ .description("查询全文复筛结果")
506
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
507
+ .option("--node-id <id>", "全文复筛节点 ID;不传则自动从工作流推断")
508
+ .option("--page <page>", "页码", (value) => Number(value), 1)
509
+ .option("--limit <limit>", "每页数量", (value) => Number(value), 10)
510
+ .option("--sort <field>", "排序字段,如 publication_date 或 pmid")
511
+ .option("--order <order>", "排序方向:asc | desc")
512
+ .option("--publication-type <type...>", "发表类型过滤,可传多个")
513
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
514
+ .action(async (opts) => {
515
+ await runListFulltextScreening({
516
+ workflowId: opts.workflowId,
517
+ nodeId: opts.nodeId,
518
+ page: opts.page,
519
+ limit: opts.limit,
520
+ sort: opts.sort,
521
+ order: opts.order === "desc" ? "desc" : opts.order === "asc" ? "asc" : undefined,
522
+ publicationType: opts.publicationType,
523
+ format: opts.format === "json" ? "json" : "markdown",
524
+ });
525
+ });
526
+ fulltext
527
+ .command("update")
528
+ .description("编辑全文复筛文献")
529
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
530
+ .option("--data-json <json>", "修改 JSON:仅传 id 及用户明确要求修改的字段;title/abstract/reason 等未修改字段由 CLI 自动回填,禁止重写或传空值")
531
+ .option("--data-file <path>", "文献 JSON 文件路径")
532
+ .option("--node-id <id>", "全文复筛节点 ID;不传则自动从工作流推断")
533
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
534
+ .action(async (opts) => {
535
+ await runUpdateFulltextScreening({
536
+ workflowId: opts.workflowId,
537
+ dataJson: opts.dataJson,
538
+ dataFile: opts.dataFile,
539
+ nodeId: opts.nodeId,
540
+ format: opts.format === "json" ? "json" : "markdown",
541
+ });
542
+ });
543
+ fulltext
544
+ .command("rerun")
545
+ .description("对选中文献重新全文复筛")
546
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
547
+ .option("--ids-json <json>", "全文复筛结果 ID 数组")
548
+ .option("--ids-file <path>", "全文复筛结果 ID 数组文件")
549
+ .option("--node-id <id>", "全文复筛节点 ID;不传则自动从工作流推断")
550
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
551
+ .action(async (opts) => {
552
+ await runRerunFulltextScreening({
553
+ workflowId: opts.workflowId,
554
+ idsJson: opts.idsJson,
555
+ idsFile: opts.idsFile,
556
+ nodeId: opts.nodeId,
557
+ format: opts.format === "json" ? "json" : "markdown",
558
+ });
559
+ });
560
+ fulltext
561
+ .command("check")
562
+ .description("校验全文复筛是否可进入数据抽提")
563
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
564
+ .option("--node-id <id>", "全文复筛节点 ID;不传则自动从工作流推断")
565
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
566
+ .action(async (opts) => {
567
+ await runCheckFulltextScreening({
568
+ workflowId: opts.workflowId,
569
+ nodeId: opts.nodeId,
570
+ format: opts.format === "json" ? "json" : "markdown",
571
+ });
572
+ });
573
+ const extraction = meta.command("extraction").description("数据抽提");
574
+ const quality = extraction.command("quality").description("质量评估");
575
+ quality
576
+ .command("create")
577
+ .description("生成质量评估")
578
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
579
+ .option("--scale-type <type>", "量表类型,默认 rob2", "rob2")
580
+ .option("--fulltext-node-id <id>", "全文复筛节点 ID;不传则自动从工作流推断")
581
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
582
+ .action(async (opts) => {
583
+ await runCreateQuality({
584
+ workflowId: opts.workflowId,
585
+ scaleType: opts.scaleType,
586
+ fulltextNodeId: opts.fulltextNodeId,
587
+ format: opts.format === "json" ? "json" : "markdown",
588
+ });
589
+ });
590
+ quality
591
+ .command("list")
592
+ .description("查询质量评估列表")
593
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
594
+ .option("--scale-type <type>", "量表类型,默认 rob2", "rob2")
595
+ .option("--node-id <id>", "质量评估节点 ID;不传则自动从工作流推断")
596
+ .option("--page <page>", "页码", (value) => Number(value), 1)
597
+ .option("--limit <limit>", "每页数量", (value) => Number(value), 10)
598
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
599
+ .action(async (opts) => {
600
+ await runListQuality({
601
+ workflowId: opts.workflowId,
602
+ scaleType: opts.scaleType,
603
+ nodeId: opts.nodeId,
604
+ page: opts.page,
605
+ limit: opts.limit,
606
+ format: opts.format === "json" ? "json" : "markdown",
607
+ });
608
+ });
609
+ quality
610
+ .command("update")
611
+ .description("编辑质量评估")
612
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
613
+ .option("--scale-type <type>", "量表类型,默认 rob2", "rob2")
614
+ .option("--data-json <json>", "修改 JSON:仅传 id 及用户明确要求修改的质量评估字段;其他字段由 CLI 自动回填")
615
+ .option("--data-file <path>", "质量评估 JSON 文件路径")
616
+ .option("--node-id <id>", "质量评估节点 ID;不传则自动从工作流推断")
617
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
618
+ .action(async (opts) => {
619
+ await runUpdateQuality({
620
+ workflowId: opts.workflowId,
621
+ scaleType: opts.scaleType,
622
+ dataJson: opts.dataJson,
623
+ dataFile: opts.dataFile,
624
+ nodeId: opts.nodeId,
625
+ format: opts.format === "json" ? "json" : "markdown",
626
+ });
627
+ });
628
+ quality
629
+ .command("rerun")
630
+ .description("对选中项重新质量评估")
631
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
632
+ .option("--scale-type <type>", "量表类型,默认 rob2", "rob2")
633
+ .option("--ids-json <json>", "质量评估输出 ID 数组")
634
+ .option("--ids-file <path>", "质量评估输出 ID 数组文件")
635
+ .option("--node-id <id>", "质量评估节点 ID;不传则自动从工作流推断")
636
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
637
+ .action(async (opts) => {
638
+ await runRerunQuality({
639
+ workflowId: opts.workflowId,
640
+ scaleType: opts.scaleType,
641
+ idsJson: opts.idsJson,
642
+ idsFile: opts.idsFile,
643
+ nodeId: opts.nodeId,
644
+ format: opts.format === "json" ? "json" : "markdown",
645
+ });
646
+ });
647
+ quality
648
+ .command("verify")
649
+ .description("校验质量评估是否可绘图")
650
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
651
+ .option("--node-id <id>", "质量评估节点 ID;不传则自动从工作流推断")
652
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
653
+ .action(async (opts) => {
654
+ await runVerifyQuality({
655
+ workflowId: opts.workflowId,
656
+ nodeId: opts.nodeId,
657
+ format: opts.format === "json" ? "json" : "markdown",
658
+ });
659
+ });
660
+ const baseline = extraction.command("baseline").description("基线资料");
661
+ baseline
662
+ .command("create")
663
+ .description("生成基线资料")
664
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
665
+ .option("--fulltext-node-id <id>", "全文复筛节点 ID;不传则自动从工作流推断")
666
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
667
+ .action(async (opts) => {
668
+ await runCreateBaseline({
669
+ workflowId: opts.workflowId,
670
+ fulltextNodeId: opts.fulltextNodeId,
671
+ format: opts.format === "json" ? "json" : "markdown",
672
+ });
673
+ });
674
+ baseline
675
+ .command("list")
676
+ .description("查询基线资料列表")
677
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
678
+ .option("--node-id <id>", "基线资料节点 ID;不传则自动从工作流推断")
679
+ .option("--page <page>", "页码", (value) => Number(value), 1)
680
+ .option("--limit <limit>", "每页数量", (value) => Number(value), 10)
681
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
682
+ .action(async (opts) => {
683
+ await runListBaseline({
684
+ workflowId: opts.workflowId,
685
+ nodeId: opts.nodeId,
686
+ page: opts.page,
687
+ limit: opts.limit,
688
+ format: opts.format === "json" ? "json" : "markdown",
689
+ });
690
+ });
691
+ baseline
692
+ .command("update")
693
+ .description("编辑基线资料")
694
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
695
+ .option("--data-json <json>", "修改 JSON:仅传 id 及用户明确要求修改的基线字段;其他字段由 CLI 自动回填")
696
+ .option("--data-file <path>", "基线资料 JSON 文件路径")
697
+ .option("--node-id <id>", "基线资料节点 ID;不传则自动从工作流推断")
698
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
699
+ .action(async (opts) => {
700
+ await runUpdateBaseline({
701
+ workflowId: opts.workflowId,
702
+ dataJson: opts.dataJson,
703
+ dataFile: opts.dataFile,
704
+ nodeId: opts.nodeId,
705
+ format: opts.format === "json" ? "json" : "markdown",
706
+ });
707
+ });
708
+ baseline
709
+ .command("rerun")
710
+ .description("对选中项重新抽提基线资料")
711
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
712
+ .option("--ids-json <json>", "基线资料输出 ID 数组")
713
+ .option("--ids-file <path>", "基线资料输出 ID 数组文件")
714
+ .option("--node-id <id>", "基线资料节点 ID;不传则自动从工作流推断")
715
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
716
+ .action(async (opts) => {
717
+ await runRerunBaseline({
718
+ workflowId: opts.workflowId,
719
+ idsJson: opts.idsJson,
720
+ idsFile: opts.idsFile,
721
+ nodeId: opts.nodeId,
722
+ format: opts.format === "json" ? "json" : "markdown",
723
+ });
724
+ });
725
+ const outcome = extraction.command("outcome").description("结局指标");
726
+ outcome
727
+ .command("create")
728
+ .description("生成结局指标")
729
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
730
+ .option("--fulltext-node-id <id>", "全文复筛节点 ID;不传则自动从工作流推断")
731
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
732
+ .action(async (opts) => {
733
+ await runCreateOutcome({
734
+ workflowId: opts.workflowId,
735
+ fulltextNodeId: opts.fulltextNodeId,
736
+ format: opts.format === "json" ? "json" : "markdown",
737
+ });
738
+ });
739
+ outcome
740
+ .command("list")
741
+ .description("查询结局指标列表")
742
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
743
+ .option("--node-id <id>", "结局指标节点 ID;不传则自动从工作流推断")
744
+ .option("--page <page>", "页码", (value) => Number(value), 1)
745
+ .option("--limit <limit>", "每页数量", (value) => Number(value), 10)
746
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
747
+ .action(async (opts) => {
748
+ await runListOutcome({
749
+ workflowId: opts.workflowId,
750
+ nodeId: opts.nodeId,
751
+ page: opts.page,
752
+ limit: opts.limit,
753
+ format: opts.format === "json" ? "json" : "markdown",
754
+ });
755
+ });
756
+ outcome
757
+ .command("update")
758
+ .description("编辑结局指标")
759
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
760
+ .option("--data-json <json>", "修改 JSON:仅传 id 及用户明确要求修改的结局字段;其他字段由 CLI 自动回填")
761
+ .option("--data-file <path>", "结局指标 JSON 文件路径")
762
+ .option("--node-id <id>", "结局指标节点 ID;不传则自动从工作流推断")
763
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
764
+ .action(async (opts) => {
765
+ await runUpdateOutcome({
766
+ workflowId: opts.workflowId,
767
+ dataJson: opts.dataJson,
768
+ dataFile: opts.dataFile,
769
+ nodeId: opts.nodeId,
770
+ format: opts.format === "json" ? "json" : "markdown",
771
+ });
772
+ });
773
+ outcome
774
+ .command("delete")
775
+ .description("删除结局指标")
776
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
777
+ .requiredOption("--outcome-id <id>", "结局指标 ID")
778
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
779
+ .action(async (opts) => {
780
+ await runDeleteOutcome({
781
+ workflowId: opts.workflowId,
782
+ outcomeId: opts.outcomeId,
783
+ format: opts.format === "json" ? "json" : "markdown",
784
+ });
785
+ });
786
+ outcome
787
+ .command("verify")
788
+ .description("校验结局指标是否可绘图")
789
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
790
+ .option("--node-id <id>", "结局指标节点 ID;不传则自动从工作流推断")
791
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
792
+ .action(async (opts) => {
793
+ await runVerifyOutcome({
794
+ workflowId: opts.workflowId,
795
+ nodeId: opts.nodeId,
796
+ format: opts.format === "json" ? "json" : "markdown",
797
+ });
798
+ });
799
+ const analysis = meta.command("analysis").description("统计分析");
800
+ function registerPlotCommands(commandName, description, handlers, sourceOptionLabel) {
801
+ const plot = analysis.command(commandName).description(description);
802
+ plot
803
+ .command("create")
804
+ .description(`生成${description}`)
805
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
806
+ .option("--config-json <json>", "图表配置 JSON 对象;不传则使用网站默认配置")
807
+ .option("--config-file <path>", "图表配置 JSON 文件路径;不传则使用网站默认配置")
808
+ .option("--source-node-id <id>", `${sourceOptionLabel}节点 ID;不传则自动从工作流推断`)
809
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
810
+ .action(async (opts) => {
811
+ await handlers.create({
812
+ workflowId: opts.workflowId,
813
+ configJson: opts.configJson,
814
+ configFile: opts.configFile,
815
+ sourceNodeId: opts.sourceNodeId,
816
+ format: opts.format === "json" ? "json" : "markdown",
817
+ });
818
+ });
819
+ plot
820
+ .command("get")
821
+ .description(`获取${description}`)
822
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
823
+ .option("--node-id <id>", `${description}节点 ID;不传则自动从工作流推断`)
824
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
825
+ .action(async (opts) => {
826
+ await handlers.get({
827
+ workflowId: opts.workflowId,
828
+ nodeId: opts.nodeId,
829
+ format: opts.format === "json" ? "json" : "markdown",
830
+ });
831
+ });
832
+ plot
833
+ .command("rerun")
834
+ .description(`重新生成${description}`)
835
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
836
+ .option("--node-id <id>", `${description}节点 ID;不传则自动从工作流推断`)
837
+ .option("--config-json <json>", "图表配置 JSON 对象;不传则使用网站默认配置")
838
+ .option("--config-file <path>", "图表配置 JSON 文件路径;不传则使用网站默认配置")
839
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
840
+ .action(async (opts) => {
841
+ await handlers.rerun({
842
+ workflowId: opts.workflowId,
843
+ nodeId: opts.nodeId,
844
+ configJson: opts.configJson,
845
+ configFile: opts.configFile,
846
+ format: opts.format === "json" ? "json" : "markdown",
847
+ });
848
+ });
849
+ }
850
+ const writing = meta.command("writing").description("辅助写作");
851
+ const method = writing.command("method").description("方法内容");
852
+ method
853
+ .command("create")
854
+ .description("生成方法内容")
855
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
856
+ .option("--language <language>", "写作语言", "English")
857
+ .option("--title <text>", "题目;不传则从工作流中推断")
858
+ .option("--input-json <json>", "覆盖生成方法的 JSON 参数")
859
+ .option("--input-file <path>", "覆盖生成方法的 JSON 参数文件")
860
+ .option("--output <path>", "方法 Markdown 导出目录或 .md 文件路径;默认 ./方法.md")
861
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
862
+ .action(async (opts) => {
863
+ await runCreateWritingMethod({
864
+ workflowId: opts.workflowId,
865
+ language: opts.language,
866
+ title: opts.title,
867
+ inputJson: opts.inputJson,
868
+ inputFile: opts.inputFile,
869
+ output: opts.output,
870
+ format: opts.format === "json" ? "json" : "markdown",
871
+ });
872
+ });
873
+ method
874
+ .command("get")
875
+ .description("获取方法内容")
876
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
877
+ .option("--node-id <id>", "方法内容节点 ID;不传则自动从工作流推断")
878
+ .option("--output <path>", "方法 Markdown 导出目录或 .md 文件路径;默认 ./方法.md")
879
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
880
+ .action(async (opts) => {
881
+ await runGetWritingMethod({ workflowId: opts.workflowId, nodeId: opts.nodeId, output: opts.output, format: opts.format === "json" ? "json" : "markdown" });
882
+ });
883
+ method
884
+ .command("rerun")
885
+ .description("重新生成方法内容")
886
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
887
+ .option("--node-id <id>", "方法内容节点 ID;不传则自动从工作流推断")
888
+ .option("--output <path>", "方法 Markdown 导出目录或 .md 文件路径;默认 ./方法.md")
889
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
890
+ .action(async (opts) => {
891
+ await runRerunWritingMethod({ workflowId: opts.workflowId, nodeId: opts.nodeId, output: opts.output, format: opts.format === "json" ? "json" : "markdown" });
892
+ });
893
+ method
894
+ .command("update")
895
+ .description("更新方法正文(用户编辑后立即保存,不等下一步)")
896
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
897
+ .option("--node-id <id>", "方法内容节点 ID;不传则自动从工作流推断")
898
+ .option("--text <text>", "编辑后的方法正文")
899
+ .option("--text-file <path>", "编辑后的方法正文文件")
900
+ .option("--output <path>", "方法 Markdown 导出目录或 .md 文件路径;默认 ./方法.md")
901
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
902
+ .action(async (opts) => {
903
+ await runUpdateWritingMethod({
904
+ workflowId: opts.workflowId,
905
+ nodeId: opts.nodeId,
906
+ text: opts.text,
907
+ textFile: opts.textFile,
908
+ output: opts.output,
909
+ format: opts.format === "json" ? "json" : "markdown",
910
+ });
911
+ });
912
+ const result = writing.command("result").description("结果内容");
913
+ result
914
+ .command("create")
915
+ .description("生成结果内容")
916
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
917
+ .option("--title <text>", "题目;不传则从工作流中推断")
918
+ .option("--input-json <json>", "覆盖生成结果的 JSON 参数")
919
+ .option("--input-file <path>", "覆盖生成结果的 JSON 参数文件")
920
+ .option("--method-text <text>", "当前方法正文;传入时先同步方法节点再生成结果")
921
+ .option("--method-text-file <path>", "当前方法正文文件;传入时先同步方法节点再生成结果")
922
+ .option("--method-node-id <id>", "方法节点 ID;不传则自动从工作流推断")
923
+ .option("--output <path>", "结果 Markdown 导出目录或 .md 文件路径;默认 ./结果.md")
924
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
925
+ .action(async (opts) => {
926
+ await runCreateWritingResult({
927
+ workflowId: opts.workflowId,
928
+ title: opts.title,
929
+ inputJson: opts.inputJson,
930
+ inputFile: opts.inputFile,
931
+ methodText: opts.methodText,
932
+ methodTextFile: opts.methodTextFile,
933
+ methodNodeId: opts.methodNodeId,
934
+ output: opts.output,
935
+ format: opts.format === "json" ? "json" : "markdown",
936
+ });
937
+ });
938
+ result
939
+ .command("get")
940
+ .description("获取结果内容")
941
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
942
+ .option("--node-id <id>", "结果内容节点 ID;不传则自动从工作流推断")
943
+ .option("--output <path>", "结果 Markdown 导出目录或 .md 文件路径;默认 ./结果.md")
944
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
945
+ .action(async (opts) => {
946
+ await runGetWritingResult({ workflowId: opts.workflowId, nodeId: opts.nodeId, output: opts.output, format: opts.format === "json" ? "json" : "markdown" });
947
+ });
948
+ result
949
+ .command("rerun")
950
+ .description("重新生成结果内容")
951
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
952
+ .option("--node-id <id>", "结果内容节点 ID;不传则自动从工作流推断")
953
+ .option("--output <path>", "结果 Markdown 导出目录或 .md 文件路径;默认 ./结果.md")
954
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
955
+ .action(async (opts) => {
956
+ await runRerunWritingResult({ workflowId: opts.workflowId, nodeId: opts.nodeId, output: opts.output, format: opts.format === "json" ? "json" : "markdown" });
957
+ });
958
+ result
959
+ .command("update")
960
+ .description("更新结果正文(用户编辑后立即保存,不等下一步)")
961
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
962
+ .option("--node-id <id>", "结果内容节点 ID;不传则自动从工作流推断")
963
+ .option("--text <text>", "编辑后的结果正文")
964
+ .option("--text-file <path>", "编辑后的结果正文文件")
965
+ .option("--output <path>", "结果 Markdown 导出目录或 .md 文件路径;默认 ./结果.md")
966
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
967
+ .action(async (opts) => {
968
+ await runUpdateWritingResult({
969
+ workflowId: opts.workflowId,
970
+ nodeId: opts.nodeId,
971
+ text: opts.text,
972
+ textFile: opts.textFile,
973
+ output: opts.output,
974
+ format: opts.format === "json" ? "json" : "markdown",
975
+ });
976
+ });
977
+ const writingFulltext = writing.command("fulltext").description("全文内容");
978
+ writingFulltext
979
+ .command("create")
980
+ .description("生成初稿,并下载初筛/复筛/质量评估/结局指标 xlsx、PRISMA 与全文 Word")
981
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
982
+ .option("--result-text <text>", "当前结果正文;传入时先同步结果节点再生成全文")
983
+ .option("--result-text-file <path>", "当前结果正文文件;传入时先同步结果节点再生成全文")
984
+ .option("--result-node-id <id>", "结果节点 ID;不传则自动从工作流推断")
985
+ .option("--output <path>", "最终产物导出目录;不传则使用当前目录")
986
+ .option("--filename <name>", "传给后端的文件名;最终以响应头 filename 为准")
987
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
988
+ .action(async (opts) => {
989
+ await runCreateWritingFullText({
990
+ workflowId: opts.workflowId,
991
+ resultText: opts.resultText,
992
+ resultTextFile: opts.resultTextFile,
993
+ resultNodeId: opts.resultNodeId,
994
+ output: opts.output,
995
+ filename: opts.filename,
996
+ exportFormat: "docx",
997
+ format: opts.format === "json" ? "json" : "markdown",
998
+ });
999
+ });
1000
+ writingFulltext
1001
+ .command("get")
1002
+ .description("获取全文内容,并下载初筛/复筛/质量评估/结局指标 xlsx、PRISMA 与全文 Word")
1003
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
1004
+ .option("--node-id <id>", "全文内容节点 ID;不传则自动从工作流推断")
1005
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
1006
+ .action(async (opts) => {
1007
+ await runGetWritingFullText({ workflowId: opts.workflowId, nodeId: opts.nodeId, format: opts.format === "json" ? "json" : "markdown" });
1008
+ });
1009
+ writingFulltext
1010
+ .command("rerun")
1011
+ .description("重新生成全文内容")
1012
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
1013
+ .option("--node-id <id>", "全文内容节点 ID;不传则自动从工作流推断")
1014
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
1015
+ .action(async (opts) => {
1016
+ await runRerunWritingFullText({ workflowId: opts.workflowId, nodeId: opts.nodeId, format: opts.format === "json" ? "json" : "markdown" });
1017
+ });
1018
+ writingFulltext
1019
+ .command("export")
1020
+ .description("导出全文 docx")
1021
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
1022
+ .option("--node-id <id>", "全文内容节点 ID;不传则自动从工作流推断")
1023
+ .option("--text <text>", "显式指定导出正文;不传则读取当前全文节点正文")
1024
+ .option("--text-file <path>", "显式指定导出正文文件;不传则读取当前全文节点正文")
1025
+ .option("--output <path>", "导出目录或文件路径;最终文件名始终使用响应头 filename")
1026
+ .option("--filename <name>", "传给后端的文件名;不传则使用题目")
1027
+ .option("--export-format <format>", "导出格式", "docx")
1028
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
1029
+ .action(async (opts) => {
1030
+ await runExportWritingFullText({
1031
+ workflowId: opts.workflowId,
1032
+ nodeId: opts.nodeId,
1033
+ text: opts.text,
1034
+ textFile: opts.textFile,
1035
+ output: opts.output,
1036
+ filename: opts.filename,
1037
+ exportFormat: opts.exportFormat,
1038
+ format: opts.format === "json" ? "json" : "markdown",
1039
+ });
1040
+ });
1041
+ registerPlotCommands("forest", "森林图", {
1042
+ create: runCreateEffectPlot,
1043
+ get: runGetEffectPlot,
1044
+ rerun: runRerunEffectPlot,
1045
+ }, "结局指标");
1046
+ registerPlotCommands("funnel", "漏斗图", {
1047
+ create: runCreateBiasPlot,
1048
+ get: runGetBiasPlot,
1049
+ rerun: runRerunBiasPlot,
1050
+ }, "结局指标");
1051
+ // 质量评估图单独注册:rerun 须 --plot-type
1052
+ {
1053
+ const plot = analysis.command("quality-plot").description("质量评估图");
1054
+ plot
1055
+ .command("create")
1056
+ .description("生成质量评估图")
1057
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
1058
+ .option("--config-json <json>", "图表配置 JSON 对象;不传则使用网站默认配置")
1059
+ .option("--config-file <path>", "图表配置 JSON 文件路径;不传则使用网站默认配置")
1060
+ .option("--source-node-id <id>", "质量评估节点 ID;不传则自动从工作流推断")
1061
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
1062
+ .action(async (opts) => {
1063
+ await runCreateAssessmentPlot({
1064
+ workflowId: opts.workflowId,
1065
+ configJson: opts.configJson,
1066
+ configFile: opts.configFile,
1067
+ sourceNodeId: opts.sourceNodeId,
1068
+ format: opts.format === "json" ? "json" : "markdown",
1069
+ });
1070
+ });
1071
+ plot
1072
+ .command("get")
1073
+ .description("获取质量评估图")
1074
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
1075
+ .option("--node-id <id>", "质量评估图节点 ID;不传则自动从工作流推断")
1076
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
1077
+ .action(async (opts) => {
1078
+ await runGetAssessmentPlot({
1079
+ workflowId: opts.workflowId,
1080
+ nodeId: opts.nodeId,
1081
+ format: opts.format === "json" ? "json" : "markdown",
1082
+ });
1083
+ });
1084
+ plot
1085
+ .command("rerun")
1086
+ .description("重新生成质量评估图(须 --plot-type 限定红绿灯或总结图)")
1087
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
1088
+ .option("--node-id <id>", "质量评估图节点 ID;不传则自动从工作流推断")
1089
+ .option("--plot-type <type>", "有改参时必填:traffic_light | summary")
1090
+ .option("--config-json <json>", "仅含选定图的补丁(扁平或嵌套)")
1091
+ .option("--config-file <path>", "图表配置 JSON 文件路径")
1092
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
1093
+ .action(async (opts) => {
1094
+ await runRerunAssessmentPlot({
1095
+ workflowId: opts.workflowId,
1096
+ nodeId: opts.nodeId,
1097
+ plotType: opts.plotType,
1098
+ configJson: opts.configJson,
1099
+ configFile: opts.configFile,
1100
+ format: opts.format === "json" ? "json" : "markdown",
1101
+ });
1102
+ });
1103
+ }
1104
+ const prisma = analysis.command("prisma").description("PRISMA 流程图");
1105
+ prisma
1106
+ .command("create")
1107
+ .description("生成 PRISMA 流程图产物")
1108
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
1109
+ .option("--source-node-id <id>", "全文复筛节点 ID;不传则自动从工作流推断")
1110
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
1111
+ .option("--export-format <format>", "导出格式:png | pdf | docx", "png")
1112
+ .option("--output <path>", "导出目录或文件路径;不传则使用当前目录")
1113
+ .option("--title <text>", "文件名题目;不传则从工作流中推断")
1114
+ .action(async (opts) => {
1115
+ await runCreatePrismaFlow({
1116
+ workflowId: opts.workflowId,
1117
+ sourceNodeId: opts.sourceNodeId,
1118
+ exportFormat: opts.exportFormat,
1119
+ output: opts.output,
1120
+ title: opts.title,
1121
+ format: opts.format === "json" ? "json" : "markdown",
1122
+ });
1123
+ });
1124
+ prisma
1125
+ .command("update")
1126
+ .description("更新 PRISMA 流程图数据")
1127
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
1128
+ .option("--source-node-id <id>", "全文复筛节点 ID;不传则自动从工作流推断")
1129
+ .option("--data-json <json>", "PRISMA 流程图数据 JSON 对象")
1130
+ .option("--data-file <path>", "PRISMA 流程图数据 JSON 文件")
1131
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
1132
+ .action(async (opts) => {
1133
+ await runUpdatePrismaFlowData({
1134
+ workflowId: opts.workflowId,
1135
+ sourceNodeId: opts.sourceNodeId,
1136
+ dataJson: opts.dataJson,
1137
+ dataFile: opts.dataFile,
1138
+ format: opts.format === "json" ? "json" : "markdown",
1139
+ });
1140
+ });
1141
+ prisma
1142
+ .command("get-image")
1143
+ .description("获取已上传的 PRISMA 图片")
1144
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
1145
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
1146
+ .action(async (opts) => {
1147
+ await runGetPrismaImage({
1148
+ workflowId: opts.workflowId,
1149
+ format: opts.format === "json" ? "json" : "markdown",
1150
+ });
1151
+ });
1152
+ prisma
1153
+ .command("upload-image")
1154
+ .description("上传 PRISMA 图片")
1155
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
1156
+ .requiredOption("--file <path>", "PRISMA 图片文件路径")
1157
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
1158
+ .action(async (opts) => {
1159
+ await runUploadPrismaImage({
1160
+ workflowId: opts.workflowId,
1161
+ file: opts.file,
1162
+ format: opts.format === "json" ? "json" : "markdown",
1163
+ });
1164
+ });
1165
+ prisma
1166
+ .command("export")
1167
+ .description("导出 PRISMA 流程图产物")
1168
+ .requiredOption("--workflow-id <id>", "已有工作流 runner_id")
1169
+ .option("--source-node-id <id>", "全文复筛节点 ID;导出 pdf/docx 时不传则自动从工作流推断")
1170
+ .option("--export-format <format>", "导出格式:png | pdf | docx", "png")
1171
+ .option("--output <path>", "导出目录或文件路径;不传则使用当前目录")
1172
+ .option("--title <text>", "文件名题目;不传则从工作流中推断")
1173
+ .option("--format <format>", "输出格式:markdown | json", "markdown")
1174
+ .action(async (opts) => {
1175
+ await runExportPrismaFlow({
1176
+ workflowId: opts.workflowId,
1177
+ sourceNodeId: opts.sourceNodeId,
1178
+ exportFormat: opts.exportFormat,
1179
+ output: opts.output,
1180
+ title: opts.title,
1181
+ format: opts.format === "json" ? "json" : "markdown",
1182
+ });
1183
+ });
1184
+ }
1185
+ //# sourceMappingURL=commands.js.map