docrev 0.8.1 → 0.8.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (306) hide show
  1. package/.claude/settings.local.json +9 -0
  2. package/PLAN-tables-and-postprocess.md +850 -0
  3. package/README.md +33 -0
  4. package/bin/rev.js +12 -131
  5. package/bin/rev.ts +145 -0
  6. package/dist/bin/rev.d.ts +9 -0
  7. package/dist/bin/rev.d.ts.map +1 -0
  8. package/dist/bin/rev.js +118 -0
  9. package/dist/bin/rev.js.map +1 -0
  10. package/dist/lib/annotations.d.ts +91 -0
  11. package/dist/lib/annotations.d.ts.map +1 -0
  12. package/dist/lib/annotations.js +554 -0
  13. package/dist/lib/annotations.js.map +1 -0
  14. package/dist/lib/build.d.ts +171 -0
  15. package/dist/lib/build.d.ts.map +1 -0
  16. package/dist/lib/build.js +755 -0
  17. package/dist/lib/build.js.map +1 -0
  18. package/dist/lib/citations.d.ts +34 -0
  19. package/dist/lib/citations.d.ts.map +1 -0
  20. package/dist/lib/citations.js +140 -0
  21. package/dist/lib/citations.js.map +1 -0
  22. package/dist/lib/commands/build.d.ts +13 -0
  23. package/dist/lib/commands/build.d.ts.map +1 -0
  24. package/dist/lib/commands/build.js +678 -0
  25. package/dist/lib/commands/build.js.map +1 -0
  26. package/dist/lib/commands/citations.d.ts +11 -0
  27. package/dist/lib/commands/citations.d.ts.map +1 -0
  28. package/dist/lib/commands/citations.js +428 -0
  29. package/dist/lib/commands/citations.js.map +1 -0
  30. package/dist/lib/commands/comments.d.ts +11 -0
  31. package/dist/lib/commands/comments.d.ts.map +1 -0
  32. package/dist/lib/commands/comments.js +883 -0
  33. package/dist/lib/commands/comments.js.map +1 -0
  34. package/dist/lib/commands/context.d.ts +35 -0
  35. package/dist/lib/commands/context.d.ts.map +1 -0
  36. package/dist/lib/commands/context.js +59 -0
  37. package/dist/lib/commands/context.js.map +1 -0
  38. package/dist/lib/commands/core.d.ts +11 -0
  39. package/dist/lib/commands/core.d.ts.map +1 -0
  40. package/dist/lib/commands/core.js +246 -0
  41. package/dist/lib/commands/core.js.map +1 -0
  42. package/dist/lib/commands/doi.d.ts +11 -0
  43. package/dist/lib/commands/doi.d.ts.map +1 -0
  44. package/dist/lib/commands/doi.js +373 -0
  45. package/dist/lib/commands/doi.js.map +1 -0
  46. package/dist/lib/commands/history.d.ts +11 -0
  47. package/dist/lib/commands/history.d.ts.map +1 -0
  48. package/dist/lib/commands/history.js +245 -0
  49. package/dist/lib/commands/history.js.map +1 -0
  50. package/dist/lib/commands/index.d.ts +28 -0
  51. package/dist/lib/commands/index.d.ts.map +1 -0
  52. package/dist/lib/commands/index.js +35 -0
  53. package/dist/lib/commands/index.js.map +1 -0
  54. package/dist/lib/commands/init.d.ts +11 -0
  55. package/dist/lib/commands/init.d.ts.map +1 -0
  56. package/dist/lib/commands/init.js +209 -0
  57. package/dist/lib/commands/init.js.map +1 -0
  58. package/dist/lib/commands/response.d.ts +11 -0
  59. package/dist/lib/commands/response.d.ts.map +1 -0
  60. package/dist/lib/commands/response.js +317 -0
  61. package/dist/lib/commands/response.js.map +1 -0
  62. package/dist/lib/commands/sections.d.ts +11 -0
  63. package/dist/lib/commands/sections.d.ts.map +1 -0
  64. package/dist/lib/commands/sections.js +1071 -0
  65. package/dist/lib/commands/sections.js.map +1 -0
  66. package/dist/lib/commands/utilities.d.ts +19 -0
  67. package/dist/lib/commands/utilities.d.ts.map +1 -0
  68. package/dist/lib/commands/utilities.js +2009 -0
  69. package/dist/lib/commands/utilities.js.map +1 -0
  70. package/dist/lib/comment-realign.d.ts +50 -0
  71. package/dist/lib/comment-realign.d.ts.map +1 -0
  72. package/dist/lib/comment-realign.js +372 -0
  73. package/dist/lib/comment-realign.js.map +1 -0
  74. package/dist/lib/config.d.ts +41 -0
  75. package/dist/lib/config.d.ts.map +1 -0
  76. package/dist/lib/config.js +76 -0
  77. package/dist/lib/config.js.map +1 -0
  78. package/dist/lib/crossref.d.ts +108 -0
  79. package/dist/lib/crossref.d.ts.map +1 -0
  80. package/dist/lib/crossref.js +597 -0
  81. package/dist/lib/crossref.js.map +1 -0
  82. package/dist/lib/dependencies.d.ts +30 -0
  83. package/dist/lib/dependencies.d.ts.map +1 -0
  84. package/dist/lib/dependencies.js +95 -0
  85. package/dist/lib/dependencies.js.map +1 -0
  86. package/dist/lib/doi-cache.d.ts +29 -0
  87. package/dist/lib/doi-cache.d.ts.map +1 -0
  88. package/dist/lib/doi-cache.js +104 -0
  89. package/dist/lib/doi-cache.js.map +1 -0
  90. package/dist/lib/doi.d.ts +65 -0
  91. package/dist/lib/doi.d.ts.map +1 -0
  92. package/dist/lib/doi.js +710 -0
  93. package/dist/lib/doi.js.map +1 -0
  94. package/dist/lib/equations.d.ts +61 -0
  95. package/dist/lib/equations.d.ts.map +1 -0
  96. package/dist/lib/equations.js +445 -0
  97. package/dist/lib/equations.js.map +1 -0
  98. package/dist/lib/errors.d.ts +60 -0
  99. package/dist/lib/errors.d.ts.map +1 -0
  100. package/dist/lib/errors.js +303 -0
  101. package/dist/lib/errors.js.map +1 -0
  102. package/dist/lib/format.d.ts +104 -0
  103. package/dist/lib/format.d.ts.map +1 -0
  104. package/dist/lib/format.js +416 -0
  105. package/dist/lib/format.js.map +1 -0
  106. package/dist/lib/git.d.ts +88 -0
  107. package/dist/lib/git.d.ts.map +1 -0
  108. package/dist/lib/git.js +304 -0
  109. package/dist/lib/git.js.map +1 -0
  110. package/dist/lib/grammar.d.ts +62 -0
  111. package/dist/lib/grammar.d.ts.map +1 -0
  112. package/dist/lib/grammar.js +244 -0
  113. package/dist/lib/grammar.js.map +1 -0
  114. package/dist/lib/image-registry.d.ts +68 -0
  115. package/dist/lib/image-registry.d.ts.map +1 -0
  116. package/dist/lib/image-registry.js +112 -0
  117. package/dist/lib/image-registry.js.map +1 -0
  118. package/dist/lib/import.d.ts +184 -0
  119. package/dist/lib/import.d.ts.map +1 -0
  120. package/dist/lib/import.js +1581 -0
  121. package/dist/lib/import.js.map +1 -0
  122. package/dist/lib/journals.d.ts +55 -0
  123. package/dist/lib/journals.d.ts.map +1 -0
  124. package/dist/lib/journals.js +417 -0
  125. package/dist/lib/journals.js.map +1 -0
  126. package/dist/lib/merge.d.ts +138 -0
  127. package/dist/lib/merge.d.ts.map +1 -0
  128. package/dist/lib/merge.js +603 -0
  129. package/dist/lib/merge.js.map +1 -0
  130. package/dist/lib/orcid.d.ts +36 -0
  131. package/dist/lib/orcid.d.ts.map +1 -0
  132. package/dist/lib/orcid.js +117 -0
  133. package/dist/lib/orcid.js.map +1 -0
  134. package/dist/lib/pdf-comments.d.ts +95 -0
  135. package/dist/lib/pdf-comments.d.ts.map +1 -0
  136. package/dist/lib/pdf-comments.js +192 -0
  137. package/dist/lib/pdf-comments.js.map +1 -0
  138. package/dist/lib/pdf-import.d.ts +118 -0
  139. package/dist/lib/pdf-import.d.ts.map +1 -0
  140. package/dist/lib/pdf-import.js +397 -0
  141. package/dist/lib/pdf-import.js.map +1 -0
  142. package/dist/lib/plugins.d.ts +76 -0
  143. package/dist/lib/plugins.d.ts.map +1 -0
  144. package/dist/lib/plugins.js +235 -0
  145. package/dist/lib/plugins.js.map +1 -0
  146. package/dist/lib/postprocess.d.ts +42 -0
  147. package/dist/lib/postprocess.d.ts.map +1 -0
  148. package/dist/lib/postprocess.js +138 -0
  149. package/dist/lib/postprocess.js.map +1 -0
  150. package/dist/lib/pptx-template.d.ts +59 -0
  151. package/dist/lib/pptx-template.d.ts.map +1 -0
  152. package/dist/lib/pptx-template.js +613 -0
  153. package/dist/lib/pptx-template.js.map +1 -0
  154. package/dist/lib/pptx-themes.d.ts +80 -0
  155. package/dist/lib/pptx-themes.d.ts.map +1 -0
  156. package/dist/lib/pptx-themes.js +818 -0
  157. package/dist/lib/pptx-themes.js.map +1 -0
  158. package/dist/lib/protect-restore.d.ts +137 -0
  159. package/dist/lib/protect-restore.d.ts.map +1 -0
  160. package/dist/lib/protect-restore.js +394 -0
  161. package/dist/lib/protect-restore.js.map +1 -0
  162. package/dist/lib/rate-limiter.d.ts +27 -0
  163. package/dist/lib/rate-limiter.d.ts.map +1 -0
  164. package/dist/lib/rate-limiter.js +79 -0
  165. package/dist/lib/rate-limiter.js.map +1 -0
  166. package/dist/lib/response.d.ts +41 -0
  167. package/dist/lib/response.d.ts.map +1 -0
  168. package/dist/lib/response.js +150 -0
  169. package/dist/lib/response.js.map +1 -0
  170. package/dist/lib/review.d.ts +35 -0
  171. package/dist/lib/review.d.ts.map +1 -0
  172. package/dist/lib/review.js +263 -0
  173. package/dist/lib/review.js.map +1 -0
  174. package/dist/lib/schema.d.ts +66 -0
  175. package/dist/lib/schema.d.ts.map +1 -0
  176. package/dist/lib/schema.js +339 -0
  177. package/dist/lib/schema.js.map +1 -0
  178. package/dist/lib/scientific-words.d.ts +6 -0
  179. package/dist/lib/scientific-words.d.ts.map +1 -0
  180. package/dist/lib/scientific-words.js +66 -0
  181. package/dist/lib/scientific-words.js.map +1 -0
  182. package/dist/lib/sections.d.ts +40 -0
  183. package/dist/lib/sections.d.ts.map +1 -0
  184. package/dist/lib/sections.js +288 -0
  185. package/dist/lib/sections.js.map +1 -0
  186. package/dist/lib/slides.d.ts +86 -0
  187. package/dist/lib/slides.d.ts.map +1 -0
  188. package/dist/lib/slides.js +676 -0
  189. package/dist/lib/slides.js.map +1 -0
  190. package/dist/lib/spelling.d.ts +76 -0
  191. package/dist/lib/spelling.d.ts.map +1 -0
  192. package/dist/lib/spelling.js +272 -0
  193. package/dist/lib/spelling.js.map +1 -0
  194. package/dist/lib/templates.d.ts +30 -0
  195. package/dist/lib/templates.d.ts.map +1 -0
  196. package/dist/lib/templates.js +504 -0
  197. package/dist/lib/templates.js.map +1 -0
  198. package/dist/lib/themes.d.ts +85 -0
  199. package/dist/lib/themes.d.ts.map +1 -0
  200. package/dist/lib/themes.js +652 -0
  201. package/dist/lib/themes.js.map +1 -0
  202. package/dist/lib/trackchanges.d.ts +51 -0
  203. package/dist/lib/trackchanges.d.ts.map +1 -0
  204. package/dist/lib/trackchanges.js +202 -0
  205. package/dist/lib/trackchanges.js.map +1 -0
  206. package/dist/lib/tui.d.ts +76 -0
  207. package/dist/lib/tui.d.ts.map +1 -0
  208. package/dist/lib/tui.js +377 -0
  209. package/dist/lib/tui.js.map +1 -0
  210. package/dist/lib/types.d.ts +447 -0
  211. package/dist/lib/types.d.ts.map +1 -0
  212. package/dist/lib/types.js +6 -0
  213. package/dist/lib/types.js.map +1 -0
  214. package/dist/lib/undo.d.ts +57 -0
  215. package/dist/lib/undo.d.ts.map +1 -0
  216. package/dist/lib/undo.js +185 -0
  217. package/dist/lib/undo.js.map +1 -0
  218. package/dist/lib/utils.d.ts +16 -0
  219. package/dist/lib/utils.d.ts.map +1 -0
  220. package/dist/lib/utils.js +40 -0
  221. package/dist/lib/utils.js.map +1 -0
  222. package/dist/lib/variables.d.ts +42 -0
  223. package/dist/lib/variables.d.ts.map +1 -0
  224. package/dist/lib/variables.js +141 -0
  225. package/dist/lib/variables.js.map +1 -0
  226. package/dist/lib/word.d.ts +80 -0
  227. package/dist/lib/word.d.ts.map +1 -0
  228. package/dist/lib/word.js +360 -0
  229. package/dist/lib/word.js.map +1 -0
  230. package/dist/lib/wordcomments.d.ts +51 -0
  231. package/dist/lib/wordcomments.d.ts.map +1 -0
  232. package/dist/lib/wordcomments.js +587 -0
  233. package/dist/lib/wordcomments.js.map +1 -0
  234. package/eslint.config.js +27 -0
  235. package/lib/annotations.ts +622 -0
  236. package/lib/apply-buildup-colors.py +88 -0
  237. package/lib/build.ts +1013 -0
  238. package/lib/{citations.js → citations.ts} +38 -27
  239. package/lib/commands/{build.js → build.ts} +80 -27
  240. package/lib/commands/{citations.js → citations.ts} +36 -18
  241. package/lib/commands/{comments.js → comments.ts} +187 -54
  242. package/lib/commands/{context.js → context.ts} +18 -8
  243. package/lib/commands/{core.js → core.ts} +34 -20
  244. package/lib/commands/{doi.js → doi.ts} +32 -16
  245. package/lib/commands/{history.js → history.ts} +25 -12
  246. package/lib/commands/{index.js → index.ts} +9 -5
  247. package/lib/commands/{init.js → init.ts} +20 -8
  248. package/lib/commands/{response.js → response.ts} +47 -20
  249. package/lib/commands/{sections.js → sections.ts} +273 -68
  250. package/lib/commands/{utilities.js → utilities.ts} +338 -158
  251. package/lib/{comment-realign.js → comment-realign.ts} +117 -45
  252. package/lib/config.ts +84 -0
  253. package/lib/{crossref.js → crossref.ts} +213 -138
  254. package/lib/dependencies.ts +106 -0
  255. package/lib/doi-cache.ts +115 -0
  256. package/lib/{doi.js → doi.ts} +115 -281
  257. package/lib/{equations.js → equations.ts} +60 -64
  258. package/lib/{errors.js → errors.ts} +56 -48
  259. package/lib/{format.js → format.ts} +137 -63
  260. package/lib/{git.js → git.ts} +66 -63
  261. package/lib/{grammar.js → grammar.ts} +45 -32
  262. package/lib/image-registry.ts +180 -0
  263. package/lib/import.ts +2060 -0
  264. package/lib/journals.ts +505 -0
  265. package/lib/{merge.js → merge.ts} +185 -135
  266. package/lib/{orcid.js → orcid.ts} +17 -22
  267. package/lib/{pdf-comments.js → pdf-comments.ts} +76 -18
  268. package/lib/{pdf-import.js → pdf-import.ts} +148 -70
  269. package/lib/{plugins.js → plugins.ts} +82 -39
  270. package/lib/postprocess.ts +188 -0
  271. package/lib/pptx-color-filter.lua +37 -0
  272. package/lib/pptx-template.ts +625 -0
  273. package/lib/pptx-themes/academic.pptx +0 -0
  274. package/lib/pptx-themes/corporate.pptx +0 -0
  275. package/lib/pptx-themes/dark.pptx +0 -0
  276. package/lib/pptx-themes/default.pptx +0 -0
  277. package/lib/pptx-themes/minimal.pptx +0 -0
  278. package/lib/pptx-themes/plant.pptx +0 -0
  279. package/lib/pptx-themes.ts +896 -0
  280. package/lib/protect-restore.ts +516 -0
  281. package/lib/rate-limiter.ts +94 -0
  282. package/lib/{response.js → response.ts} +36 -21
  283. package/lib/{review.js → review.ts} +53 -43
  284. package/lib/{schema.js → schema.ts} +70 -25
  285. package/lib/{sections.js → sections.ts} +71 -76
  286. package/lib/slides.ts +793 -0
  287. package/lib/{spelling.js → spelling.ts} +43 -59
  288. package/lib/{templates.js → templates.ts} +20 -17
  289. package/lib/themes.ts +742 -0
  290. package/lib/{trackchanges.js → trackchanges.ts} +52 -23
  291. package/lib/types.ts +509 -0
  292. package/lib/{undo.js → undo.ts} +75 -52
  293. package/lib/utils.ts +41 -0
  294. package/lib/{variables.js → variables.ts} +60 -54
  295. package/lib/word.ts +428 -0
  296. package/lib/{wordcomments.js → wordcomments.ts} +94 -40
  297. package/package.json +15 -5
  298. package/skill/REFERENCE.md +67 -0
  299. package/tsconfig.json +26 -0
  300. package/lib/annotations.js +0 -414
  301. package/lib/build.js +0 -639
  302. package/lib/config.js +0 -79
  303. package/lib/import.js +0 -1145
  304. package/lib/journals.js +0 -629
  305. package/lib/word.js +0 -225
  306. /package/lib/{scientific-words.js → scientific-words.ts} +0 -0
@@ -0,0 +1,245 @@
1
+ /**
2
+ * History commands: diff, history, contributors
3
+ *
4
+ * Commands for git-based revision tracking and author statistics.
5
+ */
6
+ import { chalk, fs, fmt, loadBuildConfig, } from './context.js';
7
+ /**
8
+ * Register history commands with the program
9
+ */
10
+ export function register(program) {
11
+ // ==========================================================================
12
+ // DIFF command - Compare sections against git history
13
+ // ==========================================================================
14
+ program
15
+ .command('diff')
16
+ .description('Compare sections against git history')
17
+ .argument('[ref]', 'Git reference to compare against (default: main/master)')
18
+ .option('-f, --files <files>', 'Specific files to compare (comma-separated)')
19
+ .option('--stat', 'Show only statistics, not full diff')
20
+ .action(async (ref, options) => {
21
+ const { isGitRepo, getDefaultBranch, getCurrentBranch, getChangedFiles, getWordCountDiff, compareFileVersions, } = await import('../git.js');
22
+ if (!isGitRepo()) {
23
+ console.error(fmt.status('error', 'Not a git repository'));
24
+ process.exit(1);
25
+ }
26
+ const compareRef = ref || getDefaultBranch();
27
+ const currentBranch = getCurrentBranch();
28
+ console.log(fmt.header('Git Diff'));
29
+ console.log(chalk.dim(` Comparing: ${compareRef} → ${currentBranch || 'HEAD'}`));
30
+ console.log();
31
+ // Get files to compare
32
+ let filesToCompare;
33
+ if (options.files) {
34
+ filesToCompare = options.files.split(',').map(f => f.trim());
35
+ }
36
+ else {
37
+ // Default to markdown section files
38
+ filesToCompare = fs.readdirSync('.').filter(f => f.endsWith('.md') && !['README.md', 'CLAUDE.md'].includes(f));
39
+ }
40
+ if (filesToCompare.length === 0) {
41
+ console.log(fmt.status('info', 'No markdown files found'));
42
+ return;
43
+ }
44
+ // Get changed files from git
45
+ const changedFiles = getChangedFiles(compareRef);
46
+ const changedSet = new Set(changedFiles.map(f => f.file));
47
+ // Get word count differences
48
+ const { total, byFile } = getWordCountDiff(filesToCompare, compareRef);
49
+ // Show results
50
+ const rows = [];
51
+ for (const file of filesToCompare) {
52
+ const stats = byFile[file];
53
+ if (stats && (stats.added > 0 || stats.removed > 0)) {
54
+ const status = changedSet.has(file)
55
+ ? changedFiles.find(f => f.file === file)?.status || 'modified'
56
+ : 'unchanged';
57
+ rows.push([
58
+ file,
59
+ status,
60
+ chalk.green(`+${stats.added}`),
61
+ chalk.red(`-${stats.removed}`),
62
+ ]);
63
+ }
64
+ }
65
+ if (rows.length === 0) {
66
+ console.log(fmt.status('success', 'No changes detected'));
67
+ return;
68
+ }
69
+ console.log(fmt.table(['File', 'Status', 'Added', 'Removed'], rows));
70
+ console.log();
71
+ console.log(chalk.dim(`Total: ${chalk.green(`+${total.added}`)} words, ${chalk.red(`-${total.removed}`)} words`));
72
+ // Show detailed diff if not --stat
73
+ if (!options.stat && rows.length > 0) {
74
+ console.log();
75
+ console.log(chalk.cyan('Changed sections:'));
76
+ for (const file of filesToCompare) {
77
+ const stats = byFile[file];
78
+ if (stats && (stats.added > 0 || stats.removed > 0)) {
79
+ const { changes } = compareFileVersions(file, compareRef);
80
+ console.log(chalk.bold(`\n ${file}:`));
81
+ // Show first few significant changes
82
+ let shown = 0;
83
+ for (const change of changes) {
84
+ if (shown >= 3) {
85
+ console.log(chalk.dim(' ...'));
86
+ break;
87
+ }
88
+ const preview = change.value.slice(0, 60).replace(/\n/g, ' ');
89
+ if (change.added) {
90
+ console.log(chalk.green(` + "${preview}..."`));
91
+ }
92
+ else if (change.removed) {
93
+ console.log(chalk.red(` - "${preview}..."`));
94
+ }
95
+ shown++;
96
+ }
97
+ }
98
+ }
99
+ }
100
+ });
101
+ // ==========================================================================
102
+ // HISTORY command - Show revision history
103
+ // ==========================================================================
104
+ program
105
+ .command('history')
106
+ .description('Show revision history for section files')
107
+ .argument('[file]', 'Specific file (default: all sections)')
108
+ .option('-n, --limit <count>', 'Number of commits to show', '10')
109
+ .action(async (file, options) => {
110
+ const { isGitRepo, getFileHistory, getRecentCommits, hasUncommittedChanges, } = await import('../git.js');
111
+ if (!isGitRepo()) {
112
+ console.error(fmt.status('error', 'Not a git repository'));
113
+ process.exit(1);
114
+ }
115
+ const limit = parseInt(options.limit) || 10;
116
+ console.log(fmt.header('Revision History'));
117
+ console.log();
118
+ if (file) {
119
+ // Show history for specific file
120
+ if (!fs.existsSync(file)) {
121
+ console.error(fmt.status('error', `File not found: ${file}`));
122
+ process.exit(1);
123
+ }
124
+ const history = getFileHistory(file, limit);
125
+ if (history.length === 0) {
126
+ console.log(fmt.status('info', 'No history found (file may not be committed)'));
127
+ return;
128
+ }
129
+ console.log(chalk.cyan(`History for ${file}:`));
130
+ console.log();
131
+ for (const commit of history) {
132
+ const date = new Date(commit.date).toLocaleDateString();
133
+ console.log(` ${chalk.yellow(commit.hash)} ${chalk.dim(date)}`);
134
+ console.log(` ${commit.message}`);
135
+ }
136
+ }
137
+ else {
138
+ // Show recent commits affecting any file
139
+ const commits = getRecentCommits(limit);
140
+ if (commits.length === 0) {
141
+ console.log(fmt.status('info', 'No commits found'));
142
+ return;
143
+ }
144
+ if (hasUncommittedChanges()) {
145
+ console.log(chalk.yellow(' * Uncommitted changes'));
146
+ console.log();
147
+ }
148
+ for (const commit of commits) {
149
+ const date = new Date(commit.date).toLocaleDateString();
150
+ console.log(` ${chalk.yellow(commit.hash)} ${chalk.dim(date)} ${chalk.blue(commit.author)}`);
151
+ console.log(` ${commit.message}`);
152
+ }
153
+ }
154
+ });
155
+ // ==========================================================================
156
+ // CONTRIBUTORS command - Show who wrote what
157
+ // ==========================================================================
158
+ program
159
+ .command('contributors')
160
+ .alias('authors')
161
+ .description('Show author contributions across section files')
162
+ .argument('[file]', 'Specific file (default: all sections)')
163
+ .option('--blame', 'Show detailed line-by-line blame for a file')
164
+ .action(async (file, options) => {
165
+ const { isGitRepo, getAuthorStats, getContributors, getFileBlame } = await import('../git.js');
166
+ if (!isGitRepo()) {
167
+ console.error(fmt.status('error', 'Not a git repository'));
168
+ process.exit(1);
169
+ }
170
+ console.log(fmt.header('Contributors'));
171
+ console.log();
172
+ if (file) {
173
+ // Show stats for specific file
174
+ if (!fs.existsSync(file)) {
175
+ console.error(fmt.status('error', `File not found: ${file}`));
176
+ process.exit(1);
177
+ }
178
+ if (options.blame) {
179
+ // Detailed blame output
180
+ const blame = getFileBlame(file);
181
+ if (blame.length === 0) {
182
+ console.log(fmt.status('info', 'No git history (file may not be committed)'));
183
+ return;
184
+ }
185
+ console.log(chalk.cyan(`Blame for ${file}:`));
186
+ console.log();
187
+ for (const entry of blame) {
188
+ const authorShort = entry.author.slice(0, 15).padEnd(15);
189
+ const content = entry.content.length > 60 ? entry.content.slice(0, 60) + '...' : entry.content;
190
+ console.log(` ${chalk.dim(entry.hash)} ${chalk.blue(authorShort)} ${chalk.dim(`L${String(entry.line).padStart(3)}`)} ${content}`);
191
+ }
192
+ }
193
+ else {
194
+ // Summary stats
195
+ const stats = getAuthorStats(file);
196
+ if (Object.keys(stats).length === 0) {
197
+ console.log(fmt.status('info', 'No git history (file may not be committed)'));
198
+ return;
199
+ }
200
+ console.log(chalk.cyan(`Authors for ${file}:`));
201
+ console.log();
202
+ const sorted = Object.entries(stats).sort((a, b) => b[1].lines - a[1].lines);
203
+ for (const [author, data] of sorted) {
204
+ const bar = '█'.repeat(Math.ceil(data.percentage / 5));
205
+ console.log(` ${chalk.blue(author.padEnd(25))} ${chalk.dim(String(data.lines).padStart(4))} lines ${chalk.green(bar)} ${data.percentage}%`);
206
+ }
207
+ }
208
+ }
209
+ else {
210
+ // Show contributors across all sections
211
+ let config = {};
212
+ try {
213
+ config = loadBuildConfig(process.cwd()) || {};
214
+ }
215
+ catch {
216
+ // Not in a rev project
217
+ }
218
+ let sections = config.sections || [];
219
+ if (sections.length === 0) {
220
+ sections = fs.readdirSync('.').filter(f => f.endsWith('.md') && !['README.md', 'CLAUDE.md', 'paper.md'].includes(f));
221
+ }
222
+ if (sections.length === 0) {
223
+ console.error(fmt.status('error', 'No section files found'));
224
+ process.exit(1);
225
+ }
226
+ const contributors = getContributors(sections);
227
+ if (Object.keys(contributors).length === 0) {
228
+ console.log(fmt.status('info', 'No git history found'));
229
+ return;
230
+ }
231
+ const sorted = Object.entries(contributors).sort((a, b) => b[1].lines - a[1].lines);
232
+ const totalLines = sorted.reduce((sum, [, data]) => sum + data.lines, 0);
233
+ console.log(chalk.cyan('Project contributors:'));
234
+ console.log();
235
+ for (const [author, data] of sorted) {
236
+ const pct = Math.round((data.lines / totalLines) * 100);
237
+ const bar = '█'.repeat(Math.ceil(pct / 5));
238
+ console.log(` ${chalk.blue(author.padEnd(25))} ${chalk.dim(String(data.lines).padStart(5))} lines ${chalk.dim(String(data.files))} files ${chalk.green(bar)} ${pct}%`);
239
+ }
240
+ console.log();
241
+ console.log(chalk.dim(` Total: ${totalLines} lines across ${sections.length} files`));
242
+ }
243
+ });
244
+ }
245
+ //# sourceMappingURL=history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.js","sourceRoot":"","sources":["../../../lib/commands/history.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Command module index
3
+ *
4
+ * Exports registration functions for all command modules.
5
+ * Each module's register() function adds commands to the Commander program.
6
+ */
7
+ import type { Command } from 'commander';
8
+ import { register as registerCoreCommands } from './core.js';
9
+ import { register as registerCommentCommands } from './comments.js';
10
+ import { register as registerInitCommands } from './init.js';
11
+ import { register as registerSectionCommands } from './sections.js';
12
+ import { register as registerBuildCommands } from './build.js';
13
+ import { register as registerResponseCommands } from './response.js';
14
+ import { register as registerCitationCommands } from './citations.js';
15
+ import { register as registerDoiCommands } from './doi.js';
16
+ import { register as registerHistoryCommands } from './history.js';
17
+ import { register as registerUtilityCommands } from './utilities.js';
18
+ export { registerCoreCommands, registerCommentCommands, registerInitCommands, registerSectionCommands, registerBuildCommands, registerResponseCommands, registerCitationCommands, registerDoiCommands, registerHistoryCommands, registerUtilityCommands, };
19
+ export { setQuietMode, setJsonMode, quietMode, jsonMode, } from './context.js';
20
+ interface PackageJson {
21
+ version?: string;
22
+ [key: string]: unknown;
23
+ }
24
+ /**
25
+ * Register all command modules with the program.
26
+ */
27
+ export declare function registerAllCommands(program: Command, pkg?: PackageJson): void;
28
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/commands/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,QAAQ,IAAI,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,QAAQ,IAAI,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,EAAE,QAAQ,IAAI,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,QAAQ,IAAI,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,EAAE,QAAQ,IAAI,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,QAAQ,IAAI,wBAAwB,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,QAAQ,IAAI,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AACtE,OAAO,EAAE,QAAQ,IAAI,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC3D,OAAO,EAAE,QAAQ,IAAI,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,QAAQ,IAAI,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAErE,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,EACrB,wBAAwB,EACxB,wBAAwB,EACxB,mBAAmB,EACnB,uBAAuB,EACvB,uBAAuB,GACxB,CAAC;AAGF,OAAO,EACL,YAAY,EACZ,WAAW,EACX,SAAS,EACT,QAAQ,GACT,MAAM,cAAc,CAAC;AAEtB,UAAU,WAAW;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,WAAW,GAAG,IAAI,CAW7E"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Command module index
3
+ *
4
+ * Exports registration functions for all command modules.
5
+ * Each module's register() function adds commands to the Commander program.
6
+ */
7
+ import { register as registerCoreCommands } from './core.js';
8
+ import { register as registerCommentCommands } from './comments.js';
9
+ import { register as registerInitCommands } from './init.js';
10
+ import { register as registerSectionCommands } from './sections.js';
11
+ import { register as registerBuildCommands } from './build.js';
12
+ import { register as registerResponseCommands } from './response.js';
13
+ import { register as registerCitationCommands } from './citations.js';
14
+ import { register as registerDoiCommands } from './doi.js';
15
+ import { register as registerHistoryCommands } from './history.js';
16
+ import { register as registerUtilityCommands } from './utilities.js';
17
+ export { registerCoreCommands, registerCommentCommands, registerInitCommands, registerSectionCommands, registerBuildCommands, registerResponseCommands, registerCitationCommands, registerDoiCommands, registerHistoryCommands, registerUtilityCommands, };
18
+ // Re-export context utilities for use by the main CLI
19
+ export { setQuietMode, setJsonMode, quietMode, jsonMode, } from './context.js';
20
+ /**
21
+ * Register all command modules with the program.
22
+ */
23
+ export function registerAllCommands(program, pkg) {
24
+ registerCoreCommands(program);
25
+ registerCommentCommands(program);
26
+ registerInitCommands(program);
27
+ registerSectionCommands(program);
28
+ registerBuildCommands(program, pkg || {});
29
+ registerResponseCommands(program);
30
+ registerCitationCommands(program);
31
+ registerDoiCommands(program);
32
+ registerHistoryCommands(program);
33
+ registerUtilityCommands(program, pkg || {});
34
+ }
35
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/commands/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,QAAQ,IAAI,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,QAAQ,IAAI,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,EAAE,QAAQ,IAAI,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,QAAQ,IAAI,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,EAAE,QAAQ,IAAI,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,QAAQ,IAAI,wBAAwB,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,QAAQ,IAAI,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AACtE,OAAO,EAAE,QAAQ,IAAI,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC3D,OAAO,EAAE,QAAQ,IAAI,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,QAAQ,IAAI,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAErE,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,EACrB,wBAAwB,EACxB,wBAAwB,EACxB,mBAAmB,EACnB,uBAAuB,EACvB,uBAAuB,GACxB,CAAC;AAEF,sDAAsD;AACtD,OAAO,EACL,YAAY,EACZ,WAAW,EACX,SAAS,EACT,QAAQ,GACT,MAAM,cAAc,CAAC;AAOtB;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAgB,EAAE,GAAiB;IACrE,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC9B,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACjC,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC9B,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACjC,qBAAqB,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;IAC1C,wBAAwB,CAAC,OAAO,CAAC,CAAC;IAClC,wBAAwB,CAAC,OAAO,CAAC,CAAC;IAClC,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC7B,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACjC,uBAAuB,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Init commands: init, new, config
3
+ *
4
+ * Project initialization and configuration commands.
5
+ */
6
+ import type { Command } from 'commander';
7
+ /**
8
+ * Register init commands with the program
9
+ */
10
+ export declare function register(program: Command): void;
11
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../lib/commands/init.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+BzC;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0N/C"}
@@ -0,0 +1,209 @@
1
+ /**
2
+ * Init commands: init, new, config
3
+ *
4
+ * Project initialization and configuration commands.
5
+ */
6
+ import { chalk, fs, path, generateConfig, saveConfig, getTemplate, listTemplates, generateCustomTemplate, getUserName, setUserName, getConfigPath, getDefaultSections, setDefaultSections, } from './context.js';
7
+ /**
8
+ * Register init commands with the program
9
+ */
10
+ export function register(program) {
11
+ // ==========================================================================
12
+ // INIT command - Generate sections.yaml config
13
+ // ==========================================================================
14
+ program
15
+ .command('init')
16
+ .description('Generate sections.yaml from existing .md files')
17
+ .option('-d, --dir <directory>', 'Directory to scan', '.')
18
+ .option('-o, --output <file>', 'Output config file', 'sections.yaml')
19
+ .option('--force', 'Overwrite existing config')
20
+ .action((options) => {
21
+ const dir = path.resolve(options.dir);
22
+ if (!fs.existsSync(dir)) {
23
+ console.error(chalk.red(`Directory not found: ${dir}`));
24
+ process.exit(1);
25
+ }
26
+ const outputPath = path.resolve(options.dir, options.output);
27
+ if (fs.existsSync(outputPath) && !options.force) {
28
+ console.error(chalk.yellow(`Config already exists: ${outputPath}`));
29
+ console.error(chalk.dim('Use --force to overwrite'));
30
+ process.exit(1);
31
+ }
32
+ console.log(chalk.cyan(`Scanning ${dir} for .md files...`));
33
+ const config = generateConfig(dir);
34
+ const sectionCount = Object.keys(config.sections).length;
35
+ if (sectionCount === 0) {
36
+ console.error(chalk.yellow('No .md files found (excluding paper.md, README.md)'));
37
+ process.exit(1);
38
+ }
39
+ saveConfig(outputPath, config);
40
+ console.log(chalk.green(`\nCreated ${outputPath} with ${sectionCount} sections:\n`));
41
+ for (const [file, section] of Object.entries(config.sections)) {
42
+ console.log(` ${chalk.bold(file)}`);
43
+ console.log(chalk.dim(` header: "${section.header}"`));
44
+ if (section.aliases && section.aliases.length > 0) {
45
+ console.log(chalk.dim(` aliases: ${JSON.stringify(section.aliases)}`));
46
+ }
47
+ }
48
+ console.log(chalk.cyan('\nEdit this file to:'));
49
+ console.log(chalk.dim(' • Add aliases for header variations'));
50
+ console.log(chalk.dim(' • Adjust order if needed'));
51
+ console.log(chalk.dim(' • Update headers if they change'));
52
+ });
53
+ // ==========================================================================
54
+ // NEW command - Create new paper project
55
+ // ==========================================================================
56
+ program
57
+ .command('new')
58
+ .description('Create a new paper project from template')
59
+ .argument('[name]', 'Project directory name')
60
+ .option('-t, --template <name>', 'Template: paper, minimal, thesis, review', 'paper')
61
+ .option('-s, --sections <sections>', 'Comma-separated section names (e.g., intro,methods,results)')
62
+ .option('--list', 'List available templates')
63
+ .action(async (name, options) => {
64
+ if (options.list) {
65
+ console.log(chalk.cyan('Available templates:\n'));
66
+ for (const t of listTemplates()) {
67
+ console.log(` ${chalk.bold(t.id)} - ${t.description}`);
68
+ }
69
+ return;
70
+ }
71
+ if (!name) {
72
+ console.error(chalk.red('Error: project name is required'));
73
+ console.error(chalk.dim('Usage: rev new <name>'));
74
+ process.exit(1);
75
+ }
76
+ const projectDir = path.resolve(name);
77
+ if (fs.existsSync(projectDir)) {
78
+ console.error(chalk.red(`Directory already exists: ${name}`));
79
+ process.exit(1);
80
+ }
81
+ let template;
82
+ let sections = null;
83
+ // Determine sections: CLI option > user config > prompt
84
+ if (options.sections) {
85
+ // Parse CLI sections
86
+ sections = options.sections.split(',').map((s) => s.trim().toLowerCase().replace(/\.md$/, ''));
87
+ }
88
+ else {
89
+ // Check user config for default sections
90
+ const defaultSections = getDefaultSections();
91
+ if (defaultSections && defaultSections.length > 0) {
92
+ sections = defaultSections;
93
+ }
94
+ }
95
+ // If no sections from CLI or config, and not using a named template with --template, prompt
96
+ // Only prompt if stdin is a TTY (interactive terminal)
97
+ if (!sections && options.template === 'paper') {
98
+ if (process.stdin.isTTY) {
99
+ const rl = (await import('readline')).createInterface({
100
+ input: process.stdin,
101
+ output: process.stdout,
102
+ });
103
+ const ask = (prompt) => new Promise((resolve) => rl.question(prompt, resolve));
104
+ console.log(chalk.cyan('Enter your document sections (comma-separated):'));
105
+ console.log(chalk.dim(' Example: introduction,methods,results,discussion'));
106
+ console.log(chalk.dim(' Press Enter to use default: introduction,methods,results,discussion\n'));
107
+ const answer = await ask(chalk.cyan('Sections: '));
108
+ rl.close();
109
+ if (answer.trim()) {
110
+ sections = answer.split(',').map((s) => s.trim().toLowerCase().replace(/\.md$/, ''));
111
+ }
112
+ else {
113
+ // Use default paper template sections
114
+ sections = ['introduction', 'methods', 'results', 'discussion'];
115
+ }
116
+ }
117
+ else {
118
+ // Non-interactive: use default sections
119
+ sections = ['introduction', 'methods', 'results', 'discussion'];
120
+ }
121
+ }
122
+ // Generate template based on sections
123
+ if (sections) {
124
+ template = generateCustomTemplate(sections);
125
+ console.log(chalk.cyan(`Creating project with sections: ${sections.join(', ')}\n`));
126
+ }
127
+ else {
128
+ template = getTemplate(options.template);
129
+ if (!template) {
130
+ console.error(chalk.red(`Unknown template: ${options.template}`));
131
+ console.error(chalk.dim('Use --list to see available templates.'));
132
+ process.exit(1);
133
+ }
134
+ console.log(chalk.cyan(`Creating ${template.name} project in ${name}/...\n`));
135
+ }
136
+ // Create directory
137
+ fs.mkdirSync(projectDir, { recursive: true });
138
+ // Create subdirectories
139
+ for (const subdir of template.directories || []) {
140
+ fs.mkdirSync(path.join(projectDir, subdir), { recursive: true });
141
+ console.log(chalk.dim(` Created ${subdir}/`));
142
+ }
143
+ // Create files
144
+ for (const [filename, content] of Object.entries(template.files)) {
145
+ const filePath = path.join(projectDir, filename);
146
+ fs.writeFileSync(filePath, content, 'utf-8');
147
+ console.log(chalk.dim(` Created ${filename}`));
148
+ }
149
+ console.log(chalk.green(`\nProject created!`));
150
+ console.log(chalk.cyan('\nNext steps:'));
151
+ console.log(chalk.dim(` cd ${name}`));
152
+ console.log(chalk.dim(' # Edit rev.yaml with your paper details'));
153
+ console.log(chalk.dim(' # Write your sections'));
154
+ console.log(chalk.dim(' rev build # Build PDF and DOCX'));
155
+ console.log(chalk.dim(' rev build pdf # Build PDF only'));
156
+ });
157
+ // ==========================================================================
158
+ // CONFIG command - Set user preferences
159
+ // ==========================================================================
160
+ program
161
+ .command('config')
162
+ .description('Set user preferences')
163
+ .argument('<key>', 'Config key: user, sections')
164
+ .argument('[value]', 'Value to set')
165
+ .action((key, value) => {
166
+ if (key === 'user') {
167
+ if (value) {
168
+ setUserName(value);
169
+ console.log(chalk.green(`User name set to: ${value}`));
170
+ console.log(chalk.dim(`Saved to ${getConfigPath()}`));
171
+ }
172
+ else {
173
+ const name = getUserName();
174
+ if (name) {
175
+ console.log(`Current user: ${chalk.bold(name)}`);
176
+ }
177
+ else {
178
+ console.log(chalk.yellow('No user name set.'));
179
+ console.log(chalk.dim('Set with: rev config user "Your Name"'));
180
+ }
181
+ }
182
+ }
183
+ else if (key === 'sections') {
184
+ if (value) {
185
+ const sections = value.split(',').map((s) => s.trim().toLowerCase().replace(/\.md$/, ''));
186
+ setDefaultSections(sections);
187
+ console.log(chalk.green(`Default sections set to: ${sections.join(', ')}`));
188
+ console.log(chalk.dim(`Saved to ${getConfigPath()}`));
189
+ }
190
+ else {
191
+ const sections = getDefaultSections();
192
+ if (sections && sections.length > 0) {
193
+ console.log(`Default sections: ${chalk.bold(sections.join(', '))}`);
194
+ }
195
+ else {
196
+ console.log(chalk.yellow('No default sections set.'));
197
+ console.log(chalk.dim('Set with: rev config sections "intro,methods,results,discussion"'));
198
+ console.log(chalk.dim('When not set, rev new will prompt for sections.'));
199
+ }
200
+ }
201
+ }
202
+ else {
203
+ console.error(chalk.red(`Unknown config key: ${key}`));
204
+ console.error(chalk.dim('Available keys: user, sections'));
205
+ process.exit(1);
206
+ }
207
+ });
208
+ }
209
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../lib/commands/init.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,KAAK,EACL,EAAE,EACF,IAAI,EAEJ,cAAc,EAEd,UAAU,EACV,WAAW,EACX,aAAa,EACb,sBAAsB,EACtB,WAAW,EACX,WAAW,EACX,aAAa,EACb,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AActB;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,OAAgB;IACvC,6EAA6E;IAC7E,+CAA+C;IAC/C,6EAA6E;IAE7E,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,gDAAgD,CAAC;SAC7D,MAAM,CAAC,uBAAuB,EAAE,mBAAmB,EAAE,GAAG,CAAC;SACzD,MAAM,CAAC,qBAAqB,EAAE,oBAAoB,EAAE,eAAe,CAAC;SACpE,MAAM,CAAC,SAAS,EAAE,2BAA2B,CAAC;SAC9C,MAAM,CAAC,CAAC,OAAoB,EAAE,EAAE;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAEtC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAC,CAAC;YACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAE7D,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YAChD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,0BAA0B,UAAU,EAAE,CAAC,CAAC,CAAC;YACpE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,CAAC;YACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,GAAG,mBAAmB,CAAC,CAAC,CAAC;QAE5D,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;QAEzD,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,oDAAoD,CAAC,CAAC,CAAC;YAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,UAAU,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAE/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,UAAU,SAAS,YAAY,cAAc,CAAC,CAAC,CAAC;QAErF,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9D,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC1D,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC,CAAC;QAChE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEL,6EAA6E;IAC7E,yCAAyC;IACzC,6EAA6E;IAE7E,OAAO;SACJ,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,0CAA0C,CAAC;SACvD,QAAQ,CAAC,QAAQ,EAAE,wBAAwB,CAAC;SAC5C,MAAM,CAAC,uBAAuB,EAAE,0CAA0C,EAAE,OAAO,CAAC;SACpF,MAAM,CAAC,2BAA2B,EAAE,6DAA6D,CAAC;SAClG,MAAM,CAAC,QAAQ,EAAE,0BAA0B,CAAC;SAC5C,MAAM,CAAC,KAAK,EAAE,IAAwB,EAAE,OAAmB,EAAE,EAAE;QAC9D,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;YAClD,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,EAAE,CAAC;gBAChC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;YAC1D,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,CAAC;YAC5D,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC;YAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAEtC,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,6BAA6B,IAAI,EAAE,CAAC,CAAC,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,QAAQ,CAAC;QACb,IAAI,QAAQ,GAAoB,IAAI,CAAC;QAErC,wDAAwD;QACxD,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,qBAAqB;YACrB,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;QACjG,CAAC;aAAM,CAAC;YACN,yCAAyC;YACzC,MAAM,eAAe,GAAG,kBAAkB,EAAE,CAAC;YAC7C,IAAI,eAAe,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClD,QAAQ,GAAG,eAAe,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,4FAA4F;QAC5F,uDAAuD;QACvD,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAC9C,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBACxB,MAAM,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC;oBACpD,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,MAAM,EAAE,OAAO,CAAC,MAAM;iBACvB,CAAC,CAAC;gBAEH,MAAM,GAAG,GAAG,CAAC,MAAc,EAAmB,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;gBAExG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC,CAAC;gBAC3E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC,CAAC;gBAC7E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,yEAAyE,CAAC,CAAC,CAAC;gBAElG,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;gBACnD,EAAE,CAAC,KAAK,EAAE,CAAC;gBAEX,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;oBAClB,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;gBACvF,CAAC;qBAAM,CAAC;oBACN,sCAAsC;oBACtC,QAAQ,GAAG,CAAC,cAAc,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;gBAClE,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,wCAAwC;gBACxC,QAAQ,GAAG,CAAC,cAAc,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;YAClE,CAAC;QACH,CAAC;QAED,sCAAsC;QACtC,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mCAAmC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACtF,CAAC;aAAM,CAAC;YACN,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACzC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;gBAClE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC,CAAC;gBACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,QAAQ,CAAC,IAAI,eAAe,IAAI,QAAQ,CAAC,CAAC,CAAC;QAChF,CAAC;QAED,mBAAmB;QACnB,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE9C,wBAAwB;QACxB,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC;YAChD,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACjE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,MAAM,GAAG,CAAC,CAAC,CAAC;QACjD,CAAC;QAED,eAAe;QACf,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACjE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YACjD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,QAAQ,EAAE,CAAC,CAAC,CAAC;QAClD,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEL,6EAA6E;IAC7E,wCAAwC;IACxC,6EAA6E;IAE7E,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,sBAAsB,CAAC;SACnC,QAAQ,CAAC,OAAO,EAAE,4BAA4B,CAAC;SAC/C,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;SACnC,MAAM,CAAC,CAAC,GAAW,EAAE,KAAc,EAAE,EAAE;QACtC,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;YACnB,IAAI,KAAK,EAAE,CAAC;gBACV,WAAW,CAAC,KAAK,CAAC,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,qBAAqB,KAAK,EAAE,CAAC,CAAC,CAAC;gBACvD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;YACxD,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;gBAC3B,IAAI,IAAI,EAAE,CAAC;oBACT,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACnD,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC;oBAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC,CAAC;gBAClE,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;YAC9B,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC1F,kBAAkB,CAAC,QAAQ,CAAC,CAAC;gBAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,4BAA4B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC5E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;YACxD,CAAC;iBAAM,CAAC;gBACN,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAC;gBACtC,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACpC,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;gBACtE,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,CAAC;oBACtD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAC,CAAC;oBAC3F,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC,CAAC;gBAC5E,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,GAAG,EAAE,CAAC,CAAC,CAAC;YACvD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Response commands: response, validate, profiles, anonymize
3
+ *
4
+ * Commands for generating reviewer responses and validating manuscripts.
5
+ */
6
+ import type { Command } from 'commander';
7
+ /**
8
+ * Register response commands with the program
9
+ */
10
+ export declare function register(program: Command): void;
11
+ //# sourceMappingURL=response.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../../lib/commands/response.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqCzC;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkW/C"}