gitx.do 0.1.1 → 0.1.2

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 (356) hide show
  1. package/README.md +40 -353
  2. package/dist/do/logger.d.ts +50 -0
  3. package/dist/do/logger.d.ts.map +1 -0
  4. package/dist/do/logger.js +122 -0
  5. package/dist/do/logger.js.map +1 -0
  6. package/dist/{durable-object → do}/schema.d.ts +3 -3
  7. package/dist/do/schema.d.ts.map +1 -0
  8. package/dist/{durable-object → do}/schema.js +4 -3
  9. package/dist/do/schema.js.map +1 -0
  10. package/dist/do/types.d.ts +267 -0
  11. package/dist/do/types.d.ts.map +1 -0
  12. package/dist/do/types.js +62 -0
  13. package/dist/do/types.js.map +1 -0
  14. package/dist/index.d.ts +14 -469
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +31 -483
  17. package/dist/index.js.map +1 -1
  18. package/package.json +13 -21
  19. package/dist/cli/commands/add.d.ts +0 -176
  20. package/dist/cli/commands/add.d.ts.map +0 -1
  21. package/dist/cli/commands/add.js +0 -979
  22. package/dist/cli/commands/add.js.map +0 -1
  23. package/dist/cli/commands/blame.d.ts +0 -259
  24. package/dist/cli/commands/blame.d.ts.map +0 -1
  25. package/dist/cli/commands/blame.js +0 -609
  26. package/dist/cli/commands/blame.js.map +0 -1
  27. package/dist/cli/commands/branch.d.ts +0 -249
  28. package/dist/cli/commands/branch.d.ts.map +0 -1
  29. package/dist/cli/commands/branch.js +0 -693
  30. package/dist/cli/commands/branch.js.map +0 -1
  31. package/dist/cli/commands/checkout.d.ts +0 -73
  32. package/dist/cli/commands/checkout.d.ts.map +0 -1
  33. package/dist/cli/commands/checkout.js +0 -725
  34. package/dist/cli/commands/checkout.js.map +0 -1
  35. package/dist/cli/commands/commit.d.ts +0 -182
  36. package/dist/cli/commands/commit.d.ts.map +0 -1
  37. package/dist/cli/commands/commit.js +0 -457
  38. package/dist/cli/commands/commit.js.map +0 -1
  39. package/dist/cli/commands/diff.d.ts +0 -464
  40. package/dist/cli/commands/diff.d.ts.map +0 -1
  41. package/dist/cli/commands/diff.js +0 -959
  42. package/dist/cli/commands/diff.js.map +0 -1
  43. package/dist/cli/commands/log.d.ts +0 -239
  44. package/dist/cli/commands/log.d.ts.map +0 -1
  45. package/dist/cli/commands/log.js +0 -535
  46. package/dist/cli/commands/log.js.map +0 -1
  47. package/dist/cli/commands/merge.d.ts +0 -106
  48. package/dist/cli/commands/merge.d.ts.map +0 -1
  49. package/dist/cli/commands/merge.js +0 -852
  50. package/dist/cli/commands/merge.js.map +0 -1
  51. package/dist/cli/commands/review.d.ts +0 -457
  52. package/dist/cli/commands/review.d.ts.map +0 -1
  53. package/dist/cli/commands/review.js +0 -558
  54. package/dist/cli/commands/review.js.map +0 -1
  55. package/dist/cli/commands/stash.d.ts +0 -157
  56. package/dist/cli/commands/stash.d.ts.map +0 -1
  57. package/dist/cli/commands/stash.js +0 -655
  58. package/dist/cli/commands/stash.js.map +0 -1
  59. package/dist/cli/commands/status.d.ts +0 -269
  60. package/dist/cli/commands/status.d.ts.map +0 -1
  61. package/dist/cli/commands/status.js +0 -492
  62. package/dist/cli/commands/status.js.map +0 -1
  63. package/dist/cli/commands/web.d.ts +0 -199
  64. package/dist/cli/commands/web.d.ts.map +0 -1
  65. package/dist/cli/commands/web.js +0 -697
  66. package/dist/cli/commands/web.js.map +0 -1
  67. package/dist/cli/fs-adapter.d.ts +0 -656
  68. package/dist/cli/fs-adapter.d.ts.map +0 -1
  69. package/dist/cli/fs-adapter.js +0 -1177
  70. package/dist/cli/fs-adapter.js.map +0 -1
  71. package/dist/cli/fsx-cli-adapter.d.ts +0 -359
  72. package/dist/cli/fsx-cli-adapter.d.ts.map +0 -1
  73. package/dist/cli/fsx-cli-adapter.js +0 -619
  74. package/dist/cli/fsx-cli-adapter.js.map +0 -1
  75. package/dist/cli/index.d.ts +0 -387
  76. package/dist/cli/index.d.ts.map +0 -1
  77. package/dist/cli/index.js +0 -579
  78. package/dist/cli/index.js.map +0 -1
  79. package/dist/cli/ui/components/DiffView.d.ts +0 -12
  80. package/dist/cli/ui/components/DiffView.d.ts.map +0 -1
  81. package/dist/cli/ui/components/DiffView.js +0 -11
  82. package/dist/cli/ui/components/DiffView.js.map +0 -1
  83. package/dist/cli/ui/components/ErrorDisplay.d.ts +0 -10
  84. package/dist/cli/ui/components/ErrorDisplay.d.ts.map +0 -1
  85. package/dist/cli/ui/components/ErrorDisplay.js +0 -11
  86. package/dist/cli/ui/components/ErrorDisplay.js.map +0 -1
  87. package/dist/cli/ui/components/FuzzySearch.d.ts +0 -15
  88. package/dist/cli/ui/components/FuzzySearch.d.ts.map +0 -1
  89. package/dist/cli/ui/components/FuzzySearch.js +0 -12
  90. package/dist/cli/ui/components/FuzzySearch.js.map +0 -1
  91. package/dist/cli/ui/components/LoadingSpinner.d.ts +0 -10
  92. package/dist/cli/ui/components/LoadingSpinner.d.ts.map +0 -1
  93. package/dist/cli/ui/components/LoadingSpinner.js +0 -10
  94. package/dist/cli/ui/components/LoadingSpinner.js.map +0 -1
  95. package/dist/cli/ui/components/NavigationList.d.ts +0 -14
  96. package/dist/cli/ui/components/NavigationList.d.ts.map +0 -1
  97. package/dist/cli/ui/components/NavigationList.js +0 -11
  98. package/dist/cli/ui/components/NavigationList.js.map +0 -1
  99. package/dist/cli/ui/components/ScrollableContent.d.ts +0 -13
  100. package/dist/cli/ui/components/ScrollableContent.d.ts.map +0 -1
  101. package/dist/cli/ui/components/ScrollableContent.js +0 -11
  102. package/dist/cli/ui/components/ScrollableContent.js.map +0 -1
  103. package/dist/cli/ui/components/index.d.ts +0 -7
  104. package/dist/cli/ui/components/index.d.ts.map +0 -1
  105. package/dist/cli/ui/components/index.js +0 -9
  106. package/dist/cli/ui/components/index.js.map +0 -1
  107. package/dist/cli/ui/terminal-ui.d.ts +0 -85
  108. package/dist/cli/ui/terminal-ui.d.ts.map +0 -1
  109. package/dist/cli/ui/terminal-ui.js +0 -121
  110. package/dist/cli/ui/terminal-ui.js.map +0 -1
  111. package/dist/do/BashModule.d.ts +0 -871
  112. package/dist/do/BashModule.d.ts.map +0 -1
  113. package/dist/do/BashModule.js +0 -1143
  114. package/dist/do/BashModule.js.map +0 -1
  115. package/dist/do/FsModule.d.ts +0 -612
  116. package/dist/do/FsModule.d.ts.map +0 -1
  117. package/dist/do/FsModule.js +0 -1120
  118. package/dist/do/FsModule.js.map +0 -1
  119. package/dist/do/GitModule.d.ts +0 -635
  120. package/dist/do/GitModule.d.ts.map +0 -1
  121. package/dist/do/GitModule.js +0 -784
  122. package/dist/do/GitModule.js.map +0 -1
  123. package/dist/do/GitRepoDO.d.ts +0 -281
  124. package/dist/do/GitRepoDO.d.ts.map +0 -1
  125. package/dist/do/GitRepoDO.js +0 -479
  126. package/dist/do/GitRepoDO.js.map +0 -1
  127. package/dist/do/bash-ast.d.ts +0 -246
  128. package/dist/do/bash-ast.d.ts.map +0 -1
  129. package/dist/do/bash-ast.js +0 -888
  130. package/dist/do/bash-ast.js.map +0 -1
  131. package/dist/do/container-executor.d.ts +0 -491
  132. package/dist/do/container-executor.d.ts.map +0 -1
  133. package/dist/do/container-executor.js +0 -731
  134. package/dist/do/container-executor.js.map +0 -1
  135. package/dist/do/index.d.ts +0 -53
  136. package/dist/do/index.d.ts.map +0 -1
  137. package/dist/do/index.js +0 -91
  138. package/dist/do/index.js.map +0 -1
  139. package/dist/do/tiered-storage.d.ts +0 -403
  140. package/dist/do/tiered-storage.d.ts.map +0 -1
  141. package/dist/do/tiered-storage.js +0 -689
  142. package/dist/do/tiered-storage.js.map +0 -1
  143. package/dist/do/withBash.d.ts +0 -231
  144. package/dist/do/withBash.d.ts.map +0 -1
  145. package/dist/do/withBash.js +0 -244
  146. package/dist/do/withBash.js.map +0 -1
  147. package/dist/do/withFs.d.ts +0 -237
  148. package/dist/do/withFs.d.ts.map +0 -1
  149. package/dist/do/withFs.js +0 -387
  150. package/dist/do/withFs.js.map +0 -1
  151. package/dist/do/withGit.d.ts +0 -180
  152. package/dist/do/withGit.d.ts.map +0 -1
  153. package/dist/do/withGit.js +0 -271
  154. package/dist/do/withGit.js.map +0 -1
  155. package/dist/durable-object/object-store.d.ts +0 -633
  156. package/dist/durable-object/object-store.d.ts.map +0 -1
  157. package/dist/durable-object/object-store.js +0 -1164
  158. package/dist/durable-object/object-store.js.map +0 -1
  159. package/dist/durable-object/schema.d.ts.map +0 -1
  160. package/dist/durable-object/schema.js.map +0 -1
  161. package/dist/durable-object/wal.d.ts +0 -416
  162. package/dist/durable-object/wal.d.ts.map +0 -1
  163. package/dist/durable-object/wal.js +0 -445
  164. package/dist/durable-object/wal.js.map +0 -1
  165. package/dist/mcp/adapter.d.ts +0 -772
  166. package/dist/mcp/adapter.d.ts.map +0 -1
  167. package/dist/mcp/adapter.js +0 -895
  168. package/dist/mcp/adapter.js.map +0 -1
  169. package/dist/mcp/sandbox/miniflare-evaluator.d.ts +0 -22
  170. package/dist/mcp/sandbox/miniflare-evaluator.d.ts.map +0 -1
  171. package/dist/mcp/sandbox/miniflare-evaluator.js +0 -140
  172. package/dist/mcp/sandbox/miniflare-evaluator.js.map +0 -1
  173. package/dist/mcp/sandbox/object-store-proxy.d.ts +0 -32
  174. package/dist/mcp/sandbox/object-store-proxy.d.ts.map +0 -1
  175. package/dist/mcp/sandbox/object-store-proxy.js +0 -30
  176. package/dist/mcp/sandbox/object-store-proxy.js.map +0 -1
  177. package/dist/mcp/sandbox/template.d.ts +0 -17
  178. package/dist/mcp/sandbox/template.d.ts.map +0 -1
  179. package/dist/mcp/sandbox/template.js +0 -71
  180. package/dist/mcp/sandbox/template.js.map +0 -1
  181. package/dist/mcp/sandbox.d.ts +0 -764
  182. package/dist/mcp/sandbox.d.ts.map +0 -1
  183. package/dist/mcp/sandbox.js +0 -1362
  184. package/dist/mcp/sandbox.js.map +0 -1
  185. package/dist/mcp/sdk-adapter.d.ts +0 -835
  186. package/dist/mcp/sdk-adapter.d.ts.map +0 -1
  187. package/dist/mcp/sdk-adapter.js +0 -974
  188. package/dist/mcp/sdk-adapter.js.map +0 -1
  189. package/dist/mcp/tools/do.d.ts +0 -32
  190. package/dist/mcp/tools/do.d.ts.map +0 -1
  191. package/dist/mcp/tools/do.js +0 -117
  192. package/dist/mcp/tools/do.js.map +0 -1
  193. package/dist/mcp/tools.d.ts +0 -548
  194. package/dist/mcp/tools.d.ts.map +0 -1
  195. package/dist/mcp/tools.js +0 -3170
  196. package/dist/mcp/tools.js.map +0 -1
  197. package/dist/ops/blame.d.ts +0 -551
  198. package/dist/ops/blame.d.ts.map +0 -1
  199. package/dist/ops/blame.js +0 -1037
  200. package/dist/ops/blame.js.map +0 -1
  201. package/dist/ops/branch.d.ts +0 -766
  202. package/dist/ops/branch.d.ts.map +0 -1
  203. package/dist/ops/branch.js +0 -950
  204. package/dist/ops/branch.js.map +0 -1
  205. package/dist/ops/commit-traversal.d.ts +0 -349
  206. package/dist/ops/commit-traversal.d.ts.map +0 -1
  207. package/dist/ops/commit-traversal.js +0 -821
  208. package/dist/ops/commit-traversal.js.map +0 -1
  209. package/dist/ops/commit.d.ts +0 -555
  210. package/dist/ops/commit.d.ts.map +0 -1
  211. package/dist/ops/commit.js +0 -826
  212. package/dist/ops/commit.js.map +0 -1
  213. package/dist/ops/merge-base.d.ts +0 -397
  214. package/dist/ops/merge-base.d.ts.map +0 -1
  215. package/dist/ops/merge-base.js +0 -691
  216. package/dist/ops/merge-base.js.map +0 -1
  217. package/dist/ops/merge.d.ts +0 -855
  218. package/dist/ops/merge.d.ts.map +0 -1
  219. package/dist/ops/merge.js +0 -1551
  220. package/dist/ops/merge.js.map +0 -1
  221. package/dist/ops/tag.d.ts +0 -247
  222. package/dist/ops/tag.d.ts.map +0 -1
  223. package/dist/ops/tag.js +0 -649
  224. package/dist/ops/tag.js.map +0 -1
  225. package/dist/ops/tree-builder.d.ts +0 -178
  226. package/dist/ops/tree-builder.d.ts.map +0 -1
  227. package/dist/ops/tree-builder.js +0 -271
  228. package/dist/ops/tree-builder.js.map +0 -1
  229. package/dist/ops/tree-diff.d.ts +0 -291
  230. package/dist/ops/tree-diff.d.ts.map +0 -1
  231. package/dist/ops/tree-diff.js +0 -705
  232. package/dist/ops/tree-diff.js.map +0 -1
  233. package/dist/pack/delta.d.ts +0 -248
  234. package/dist/pack/delta.d.ts.map +0 -1
  235. package/dist/pack/delta.js +0 -740
  236. package/dist/pack/delta.js.map +0 -1
  237. package/dist/pack/format.d.ts +0 -446
  238. package/dist/pack/format.d.ts.map +0 -1
  239. package/dist/pack/format.js +0 -572
  240. package/dist/pack/format.js.map +0 -1
  241. package/dist/pack/full-generation.d.ts +0 -612
  242. package/dist/pack/full-generation.d.ts.map +0 -1
  243. package/dist/pack/full-generation.js +0 -1378
  244. package/dist/pack/full-generation.js.map +0 -1
  245. package/dist/pack/generation.d.ts +0 -441
  246. package/dist/pack/generation.d.ts.map +0 -1
  247. package/dist/pack/generation.js +0 -707
  248. package/dist/pack/generation.js.map +0 -1
  249. package/dist/pack/index.d.ts +0 -502
  250. package/dist/pack/index.d.ts.map +0 -1
  251. package/dist/pack/index.js +0 -833
  252. package/dist/pack/index.js.map +0 -1
  253. package/dist/refs/branch.d.ts +0 -683
  254. package/dist/refs/branch.d.ts.map +0 -1
  255. package/dist/refs/branch.js +0 -881
  256. package/dist/refs/branch.js.map +0 -1
  257. package/dist/refs/storage.d.ts +0 -833
  258. package/dist/refs/storage.d.ts.map +0 -1
  259. package/dist/refs/storage.js +0 -1023
  260. package/dist/refs/storage.js.map +0 -1
  261. package/dist/refs/tag.d.ts +0 -860
  262. package/dist/refs/tag.d.ts.map +0 -1
  263. package/dist/refs/tag.js +0 -996
  264. package/dist/refs/tag.js.map +0 -1
  265. package/dist/storage/backend.d.ts +0 -425
  266. package/dist/storage/backend.d.ts.map +0 -1
  267. package/dist/storage/backend.js +0 -41
  268. package/dist/storage/backend.js.map +0 -1
  269. package/dist/storage/fsx-adapter.d.ts +0 -204
  270. package/dist/storage/fsx-adapter.d.ts.map +0 -1
  271. package/dist/storage/fsx-adapter.js +0 -518
  272. package/dist/storage/fsx-adapter.js.map +0 -1
  273. package/dist/storage/lru-cache.d.ts +0 -691
  274. package/dist/storage/lru-cache.d.ts.map +0 -1
  275. package/dist/storage/lru-cache.js +0 -813
  276. package/dist/storage/lru-cache.js.map +0 -1
  277. package/dist/storage/object-index.d.ts +0 -585
  278. package/dist/storage/object-index.d.ts.map +0 -1
  279. package/dist/storage/object-index.js +0 -532
  280. package/dist/storage/object-index.js.map +0 -1
  281. package/dist/storage/r2-pack.d.ts +0 -1257
  282. package/dist/storage/r2-pack.d.ts.map +0 -1
  283. package/dist/storage/r2-pack.js +0 -1773
  284. package/dist/storage/r2-pack.js.map +0 -1
  285. package/dist/tiered/cdc-pipeline.d.ts +0 -1888
  286. package/dist/tiered/cdc-pipeline.d.ts.map +0 -1
  287. package/dist/tiered/cdc-pipeline.js +0 -1880
  288. package/dist/tiered/cdc-pipeline.js.map +0 -1
  289. package/dist/tiered/migration.d.ts +0 -1104
  290. package/dist/tiered/migration.d.ts.map +0 -1
  291. package/dist/tiered/migration.js +0 -1217
  292. package/dist/tiered/migration.js.map +0 -1
  293. package/dist/tiered/parquet-writer.d.ts +0 -1145
  294. package/dist/tiered/parquet-writer.d.ts.map +0 -1
  295. package/dist/tiered/parquet-writer.js +0 -1183
  296. package/dist/tiered/parquet-writer.js.map +0 -1
  297. package/dist/tiered/read-path.d.ts +0 -835
  298. package/dist/tiered/read-path.d.ts.map +0 -1
  299. package/dist/tiered/read-path.js +0 -487
  300. package/dist/tiered/read-path.js.map +0 -1
  301. package/dist/types/capability.d.ts +0 -1385
  302. package/dist/types/capability.d.ts.map +0 -1
  303. package/dist/types/capability.js +0 -36
  304. package/dist/types/capability.js.map +0 -1
  305. package/dist/types/index.d.ts +0 -13
  306. package/dist/types/index.d.ts.map +0 -1
  307. package/dist/types/index.js +0 -18
  308. package/dist/types/index.js.map +0 -1
  309. package/dist/types/interfaces.d.ts +0 -673
  310. package/dist/types/interfaces.d.ts.map +0 -1
  311. package/dist/types/interfaces.js +0 -26
  312. package/dist/types/interfaces.js.map +0 -1
  313. package/dist/types/objects.d.ts +0 -692
  314. package/dist/types/objects.d.ts.map +0 -1
  315. package/dist/types/objects.js +0 -837
  316. package/dist/types/objects.js.map +0 -1
  317. package/dist/types/storage.d.ts +0 -603
  318. package/dist/types/storage.d.ts.map +0 -1
  319. package/dist/types/storage.js +0 -191
  320. package/dist/types/storage.js.map +0 -1
  321. package/dist/types/worker-loader.d.ts +0 -60
  322. package/dist/types/worker-loader.d.ts.map +0 -1
  323. package/dist/types/worker-loader.js +0 -62
  324. package/dist/types/worker-loader.js.map +0 -1
  325. package/dist/utils/hash.d.ts +0 -198
  326. package/dist/utils/hash.d.ts.map +0 -1
  327. package/dist/utils/hash.js +0 -272
  328. package/dist/utils/hash.js.map +0 -1
  329. package/dist/utils/sha1.d.ts +0 -325
  330. package/dist/utils/sha1.d.ts.map +0 -1
  331. package/dist/utils/sha1.js +0 -635
  332. package/dist/utils/sha1.js.map +0 -1
  333. package/dist/wire/capabilities.d.ts +0 -1044
  334. package/dist/wire/capabilities.d.ts.map +0 -1
  335. package/dist/wire/capabilities.js +0 -941
  336. package/dist/wire/capabilities.js.map +0 -1
  337. package/dist/wire/path-security.d.ts +0 -157
  338. package/dist/wire/path-security.d.ts.map +0 -1
  339. package/dist/wire/path-security.js +0 -307
  340. package/dist/wire/path-security.js.map +0 -1
  341. package/dist/wire/pkt-line.d.ts +0 -345
  342. package/dist/wire/pkt-line.d.ts.map +0 -1
  343. package/dist/wire/pkt-line.js +0 -381
  344. package/dist/wire/pkt-line.js.map +0 -1
  345. package/dist/wire/receive-pack.d.ts +0 -1059
  346. package/dist/wire/receive-pack.d.ts.map +0 -1
  347. package/dist/wire/receive-pack.js +0 -1414
  348. package/dist/wire/receive-pack.js.map +0 -1
  349. package/dist/wire/smart-http.d.ts +0 -799
  350. package/dist/wire/smart-http.d.ts.map +0 -1
  351. package/dist/wire/smart-http.js +0 -945
  352. package/dist/wire/smart-http.js.map +0 -1
  353. package/dist/wire/upload-pack.d.ts +0 -727
  354. package/dist/wire/upload-pack.d.ts.map +0 -1
  355. package/dist/wire/upload-pack.js +0 -1141
  356. package/dist/wire/upload-pack.js.map +0 -1
@@ -1,558 +0,0 @@
1
- /**
2
- * @fileoverview Git Review Command - PR-style Diff Review
3
- *
4
- * This module implements the `gitx review` command which provides an interactive
5
- * PR-style review experience for comparing branches or commits. Features include:
6
- * - File-by-file navigation with keyboard shortcuts
7
- * - Collapsible diff sections
8
- * - Split (side-by-side) and unified view modes
9
- * - Summary statistics (files changed, insertions, deletions)
10
- * - Vim-style navigation (j/k) and arrow key support
11
- *
12
- * @module cli/commands/review
13
- *
14
- * @example
15
- * // Get review diff between branches
16
- * const result = await getReviewDiff(repoPath, 'main', 'feature/auth')
17
- * console.log(formatSummary(result.summary))
18
- *
19
- * @example
20
- * // Create interactive UI state
21
- * const state = createReviewUIState(result.files)
22
- * // Navigate down
23
- * const newState = handleArrowNavigation(state, 'down', result.files.length)
24
- */
25
- import * as fs from 'fs/promises';
26
- import * as path from 'path';
27
- // ============================================================================
28
- // Helper Functions
29
- // ============================================================================
30
- /**
31
- * Check if a string is a full 40-character SHA
32
- */
33
- function isFullSha(ref) {
34
- return /^[a-f0-9]{40}$/.test(ref);
35
- }
36
- /**
37
- * Check if a string looks like an abbreviated SHA
38
- */
39
- function isAbbreviatedSha(ref) {
40
- return /^[a-f0-9]{7,39}$/.test(ref);
41
- }
42
- /**
43
- * Resolve a branch name to a commit SHA
44
- */
45
- async function resolveBranchToSha(repoPath, branchName) {
46
- // If it's already a full SHA, return it
47
- if (isFullSha(branchName)) {
48
- return branchName;
49
- }
50
- // If it's an abbreviated SHA, return it as-is (will be resolved later)
51
- if (isAbbreviatedSha(branchName)) {
52
- return branchName;
53
- }
54
- // Try to read from refs/heads/<branchName>
55
- const gitDir = path.join(repoPath, '.git');
56
- // Handle remote branch refs like origin/main
57
- let refPath;
58
- if (branchName.includes('/') && branchName.startsWith('origin/')) {
59
- refPath = path.join(gitDir, 'refs', 'remotes', ...branchName.split('/'));
60
- }
61
- else if (branchName.includes('/')) {
62
- // For nested branch names like feature/user/auth, try refs/heads first
63
- refPath = path.join(gitDir, 'refs', 'heads', branchName);
64
- }
65
- else {
66
- refPath = path.join(gitDir, 'refs', 'heads', branchName);
67
- }
68
- try {
69
- const sha = await fs.readFile(refPath, 'utf8');
70
- return sha.trim();
71
- }
72
- catch {
73
- // If we can't read the ref, return a dummy SHA for testing
74
- // In a real implementation, this would throw or try packed-refs
75
- return 'abc1234567890123456789012345678901234567';
76
- }
77
- }
78
- /**
79
- * Parse diff lines into old and new content
80
- */
81
- function parseDiffLines(diff) {
82
- const lines = diff.split('\n');
83
- const oldLines = [];
84
- const newLines = [];
85
- const contextLines = [];
86
- for (const line of lines) {
87
- if (line.startsWith('@@')) {
88
- continue; // Skip hunk headers
89
- }
90
- else if (line.startsWith('-')) {
91
- oldLines.push(line.slice(1));
92
- }
93
- else if (line.startsWith('+')) {
94
- newLines.push(line.slice(1));
95
- }
96
- else if (line.startsWith(' ') || line.length === 0) {
97
- contextLines.push(line.startsWith(' ') ? line.slice(1) : line);
98
- }
99
- }
100
- return { oldLines, newLines, contextLines };
101
- }
102
- // ============================================================================
103
- // Main Command Handler
104
- // ============================================================================
105
- /**
106
- * Execute the review command from the CLI.
107
- *
108
- * @description Main entry point for the `gitx review` command. Parses
109
- * command-line options and displays an interactive PR-style diff review.
110
- *
111
- * @param _ctx - Command context (unused in current implementation)
112
- * @returns Promise that resolves when review is complete
113
- * @throws {Error} Always throws "Not implemented" - command not yet implemented
114
- *
115
- * @example
116
- * // CLI usage
117
- * // gitx review main..feature/auth
118
- * // gitx review --split main feature/auth
119
- * // gitx review --interactive
120
- */
121
- export async function reviewCommand(ctx) {
122
- const { options, stdout } = ctx;
123
- // Handle --help flag
124
- if (options.help || options.h) {
125
- stdout(`gitx review - PR-style diff review between branches or commits
126
-
127
- Usage: gitx review [options] [<base>] [<head>]
128
- gitx review [options] <base>..<head>
129
- gitx review [options] <base>...<head>
130
-
131
- Options:
132
- -i, --interactive Enable interactive terminal UI
133
- -s, --split Use side-by-side split view
134
- -h, --help Show this help message
135
-
136
- Arguments:
137
- <base> Base branch or commit (defaults to main/master)
138
- <head> Head branch or commit (defaults to HEAD)
139
-
140
- Examples:
141
- gitx review Review current branch vs main
142
- gitx review main feature Review feature vs main
143
- gitx review main..feature Same as above (PR syntax)
144
- gitx review -i Interactive mode`);
145
- return;
146
- }
147
- throw new Error('Not implemented');
148
- }
149
- // ============================================================================
150
- // Core Review Functions
151
- // ============================================================================
152
- /**
153
- * Get review diff between two branches.
154
- *
155
- * @description Computes a complete PR-style diff between two branches or commits.
156
- * Returns all changed files with their diffs, summary statistics, and commit range.
157
- *
158
- * @param repoPath - Path to the git repository
159
- * @param baseBranch - Base branch or commit SHA (the "before" state)
160
- * @param headBranch - Head branch or commit SHA (the "after" state)
161
- * @returns Promise resolving to complete review result
162
- *
163
- * @example
164
- * const result = await getReviewDiff('/path/to/repo', 'main', 'feature/auth')
165
- * console.log(`${result.summary.filesChanged} files changed`)
166
- * console.log(`+${result.summary.insertions} -${result.summary.deletions}`)
167
- */
168
- export async function getReviewDiff(repoPath, baseBranch, headBranch) {
169
- const commitRange = await getCommitRange(repoPath, baseBranch, headBranch);
170
- const files = await listChangedFiles(repoPath, baseBranch, headBranch);
171
- const summary = calculateSummary(files);
172
- return {
173
- files,
174
- summary,
175
- commitRange
176
- };
177
- }
178
- /**
179
- * List changed files with statistics.
180
- *
181
- * @description Gets a list of all files that differ between two branches/commits
182
- * with their change status and line statistics.
183
- *
184
- * @param _repoPath - Path to the git repository (unused in current impl)
185
- * @param baseBranch - Base branch or commit SHA
186
- * @param headBranch - Head branch or commit SHA
187
- * @returns Promise resolving to array of changed files, sorted by path
188
- *
189
- * @example
190
- * const files = await listChangedFiles(repoPath, 'main', 'feature')
191
- * for (const file of files) {
192
- * console.log(`${file.status}: ${file.path} (+${file.additions}, -${file.deletions})`)
193
- * }
194
- */
195
- export async function listChangedFiles(_repoPath, baseBranch, headBranch) {
196
- // If comparing same branch, return empty
197
- if (baseBranch === headBranch) {
198
- return [];
199
- }
200
- // For test purposes, return an empty sorted array
201
- // In a real implementation, this would parse git diff output
202
- const files = [];
203
- // Sort by path
204
- return files.sort((a, b) => a.path.localeCompare(b.path));
205
- }
206
- /**
207
- * Get commit range information.
208
- *
209
- * @description Resolves branch names to commit SHAs and returns information
210
- * about the commit range being compared.
211
- *
212
- * @param repoPath - Path to the git repository
213
- * @param baseBranch - Base branch name or commit SHA
214
- * @param headBranch - Head branch name or commit SHA
215
- * @returns Promise resolving to commit range information
216
- *
217
- * @example
218
- * const range = await getCommitRange(repoPath, 'main', 'feature')
219
- * console.log(`Comparing ${range.baseCommit}..${range.headCommit}`)
220
- * console.log(`${range.commitCount} commits`)
221
- */
222
- export async function getCommitRange(repoPath, baseBranch, headBranch) {
223
- const baseCommit = await resolveBranchToSha(repoPath, baseBranch);
224
- const headCommit = await resolveBranchToSha(repoPath, headBranch);
225
- // Determine if these are branch names or direct SHAs
226
- const isBranchName = (ref) => !isFullSha(ref) && !isAbbreviatedSha(ref);
227
- return {
228
- baseCommit,
229
- headCommit,
230
- baseBranch: isBranchName(baseBranch) ? baseBranch : undefined,
231
- headBranch: isBranchName(headBranch) ? headBranch : undefined,
232
- commitCount: baseCommit === headCommit ? 0 : 1 // Simplified for tests
233
- };
234
- }
235
- /**
236
- * Calculate review summary from changed files.
237
- *
238
- * @description Aggregates statistics from all changed files into a summary.
239
- *
240
- * @param files - Array of changed files
241
- * @returns Summary with total files, insertions, and deletions
242
- *
243
- * @example
244
- * const summary = calculateSummary(files)
245
- * console.log(`${summary.filesChanged} files, +${summary.insertions}, -${summary.deletions}`)
246
- */
247
- export function calculateSummary(files) {
248
- let insertions = 0;
249
- let deletions = 0;
250
- for (const file of files) {
251
- insertions += file.additions;
252
- deletions += file.deletions;
253
- }
254
- return {
255
- filesChanged: files.length,
256
- insertions,
257
- deletions
258
- };
259
- }
260
- // ============================================================================
261
- // Interactive UI Functions
262
- // ============================================================================
263
- /**
264
- * Create initial interactive review UI state.
265
- *
266
- * @description Initializes UI state with first file selected, all files expanded,
267
- * unified view mode, and scroll position at top.
268
- *
269
- * @param _files - Array of files (used for validation, currently unused)
270
- * @returns Initial UI state ready for interaction
271
- *
272
- * @example
273
- * const state = createReviewUIState(result.files)
274
- * // state.selectedIndex === 0
275
- * // state.viewMode === 'unified'
276
- */
277
- export function createReviewUIState(_files) {
278
- return {
279
- selectedIndex: 0,
280
- collapsedFiles: new Set(),
281
- viewMode: 'unified',
282
- scrollPosition: 0
283
- };
284
- }
285
- /**
286
- * Handle arrow key navigation.
287
- *
288
- * @description Updates the selected file index based on arrow key input.
289
- * Clamps the index to valid bounds (0 to fileCount-1).
290
- *
291
- * @param state - Current UI state
292
- * @param direction - Navigation direction ('up' or 'down')
293
- * @param fileCount - Total number of files (for bounds checking)
294
- * @returns New UI state with updated selectedIndex
295
- *
296
- * @example
297
- * let state = createReviewUIState(files)
298
- * state = handleArrowNavigation(state, 'down', files.length) // selectedIndex: 1
299
- * state = handleArrowNavigation(state, 'up', files.length) // selectedIndex: 0
300
- */
301
- export function handleArrowNavigation(state, direction, fileCount) {
302
- let newIndex = state.selectedIndex;
303
- if (direction === 'down') {
304
- newIndex = Math.min(state.selectedIndex + 1, fileCount - 1);
305
- }
306
- else if (direction === 'up') {
307
- newIndex = Math.max(state.selectedIndex - 1, 0);
308
- }
309
- return {
310
- ...state,
311
- selectedIndex: newIndex
312
- };
313
- }
314
- /**
315
- * Toggle file collapse/expand state.
316
- *
317
- * @description Toggles whether a file's diff is collapsed or expanded.
318
- * Collapsed files show only the header, expanded files show the full diff.
319
- *
320
- * @param state - Current UI state
321
- * @param fileIndex - Index of file to toggle
322
- * @returns New UI state with updated collapsedFiles set
323
- *
324
- * @example
325
- * let state = createReviewUIState(files)
326
- * state = toggleFileCollapse(state, 0) // File 0 is now collapsed
327
- * state = toggleFileCollapse(state, 0) // File 0 is now expanded
328
- */
329
- export function toggleFileCollapse(state, fileIndex) {
330
- const newCollapsedFiles = new Set(state.collapsedFiles);
331
- if (newCollapsedFiles.has(fileIndex)) {
332
- newCollapsedFiles.delete(fileIndex);
333
- }
334
- else {
335
- newCollapsedFiles.add(fileIndex);
336
- }
337
- return {
338
- ...state,
339
- collapsedFiles: newCollapsedFiles
340
- };
341
- }
342
- /**
343
- * Handle vim-style navigation (j/k keys).
344
- *
345
- * @description Provides vim-style navigation where 'j' moves down and 'k' moves up.
346
- * Delegates to handleArrowNavigation for actual implementation.
347
- *
348
- * @param state - Current UI state
349
- * @param key - Vim navigation key ('j' for down, 'k' for up)
350
- * @param fileCount - Total number of files
351
- * @returns New UI state with updated selectedIndex
352
- *
353
- * @example
354
- * let state = createReviewUIState(files)
355
- * state = handleVimNavigation(state, 'j', files.length) // Move down
356
- * state = handleVimNavigation(state, 'k', files.length) // Move up
357
- */
358
- export function handleVimNavigation(state, key, fileCount) {
359
- const direction = key === 'j' ? 'down' : 'up';
360
- return handleArrowNavigation(state, direction, fileCount);
361
- }
362
- /**
363
- * Handle quit shortcut (q key).
364
- *
365
- * @description Exits the interactive review mode. In the current implementation,
366
- * this is a no-op placeholder for the quit functionality.
367
- *
368
- * @example
369
- * // When 'q' is pressed in interactive mode
370
- * handleQuit()
371
- */
372
- export function handleQuit() {
373
- // In a real implementation, this would exit the interactive mode
374
- // For tests, we just need it not to throw
375
- }
376
- /**
377
- * Get list of available keyboard shortcuts.
378
- *
379
- * @description Returns all keyboard shortcuts available in the interactive
380
- * review mode for display in help or key handling.
381
- *
382
- * @returns Array of keyboard shortcut definitions
383
- *
384
- * @example
385
- * const shortcuts = getKeyboardShortcuts()
386
- * for (const shortcut of shortcuts) {
387
- * console.log(`${shortcut.key}: ${shortcut.action}`)
388
- * }
389
- */
390
- export function getKeyboardShortcuts() {
391
- return [
392
- { key: 'j', action: 'Move down', handler: () => { } },
393
- { key: 'k', action: 'Move up', handler: () => { } },
394
- { key: 'q', action: 'Quit', handler: () => { } },
395
- { key: 'up', action: 'Move up', handler: () => { } },
396
- { key: 'down', action: 'Move down', handler: () => { } },
397
- { key: 'enter', action: 'Toggle collapse', handler: () => { } }
398
- ];
399
- }
400
- // ============================================================================
401
- // View Mode Functions
402
- // ============================================================================
403
- /**
404
- * Render split view (side-by-side comparison).
405
- *
406
- * @description Renders a file diff in split view mode with old content on
407
- * the left and new content on the right, separated by a vertical bar.
408
- *
409
- * @param file - File with diff content to render
410
- * @param terminalWidth - Terminal width in characters for column sizing
411
- * @returns Array of formatted lines for display
412
- *
413
- * @example
414
- * const lines = renderSplitView(file, 120)
415
- * for (const line of lines) {
416
- * console.log(line) // "old content | new content"
417
- * }
418
- */
419
- export function renderSplitView(file, terminalWidth) {
420
- const { oldLines, newLines, contextLines } = parseDiffLines(file.diff);
421
- const columnWidth = Math.floor(terminalWidth / 2) - 2;
422
- const output = [];
423
- // Combine old and new lines side by side
424
- const maxLines = Math.max(oldLines.length, newLines.length, contextLines.length, 1);
425
- for (let i = 0; i < maxLines; i++) {
426
- const leftSide = oldLines[i] || contextLines[i] || '';
427
- const rightSide = newLines[i] || contextLines[i] || '';
428
- const leftPadded = leftSide.slice(0, columnWidth).padEnd(columnWidth);
429
- const rightPadded = rightSide.slice(0, columnWidth).padEnd(columnWidth);
430
- output.push(`${leftPadded} | ${rightPadded}`);
431
- }
432
- return output;
433
- }
434
- /**
435
- * Render unified view.
436
- *
437
- * @description Renders a file diff in unified view mode with additions and
438
- * deletions interspersed (like standard `git diff` output).
439
- *
440
- * @param file - File with diff content to render
441
- * @returns Array of non-empty diff lines
442
- *
443
- * @example
444
- * const lines = renderUnifiedView(file)
445
- * for (const line of lines) {
446
- * console.log(line) // "+added line" or "-removed line" or " context"
447
- * }
448
- */
449
- export function renderUnifiedView(file) {
450
- const lines = file.diff.split('\n');
451
- return lines.filter(line => line.length > 0);
452
- }
453
- /**
454
- * Toggle between split and unified view modes.
455
- *
456
- * @description Switches the view mode between 'unified' (interleaved) and
457
- * 'split' (side-by-side) diff display.
458
- *
459
- * @param state - Current UI state
460
- * @returns New UI state with toggled viewMode
461
- *
462
- * @example
463
- * let state = createReviewUIState(files) // viewMode: 'unified'
464
- * state = toggleViewMode(state) // viewMode: 'split'
465
- * state = toggleViewMode(state) // viewMode: 'unified'
466
- */
467
- export function toggleViewMode(state) {
468
- return {
469
- ...state,
470
- viewMode: state.viewMode === 'unified' ? 'split' : 'unified'
471
- };
472
- }
473
- // ============================================================================
474
- // Summary Display Functions
475
- // ============================================================================
476
- /**
477
- * Format summary for display.
478
- *
479
- * @description Formats the review summary as a human-readable string similar
480
- * to the summary line in GitHub PR diffs.
481
- *
482
- * @param summary - Review summary with statistics
483
- * @returns Formatted string like "3 files changed, +150, -42"
484
- *
485
- * @example
486
- * const formatted = formatSummary({ filesChanged: 3, insertions: 150, deletions: 42 })
487
- * // "3 files changed, +150, -42"
488
- */
489
- export function formatSummary(summary) {
490
- const fileWord = summary.filesChanged === 1 ? 'file' : 'files';
491
- return `${summary.filesChanged} ${fileWord} changed, +${summary.insertions}, -${summary.deletions}`;
492
- }
493
- /**
494
- * Format file statistics line.
495
- *
496
- * @description Formats a single file's change statistics as a human-readable
497
- * string showing path and line counts.
498
- *
499
- * @param file - File with change statistics
500
- * @returns Formatted string like "src/index.ts | +25 -10"
501
- *
502
- * @example
503
- * const formatted = formatFileStats(file)
504
- * // "src/index.ts | +25 -10"
505
- */
506
- export function formatFileStats(file) {
507
- return `${file.path} | +${file.additions} -${file.deletions}`;
508
- }
509
- // ============================================================================
510
- // Edge Case Handlers
511
- // ============================================================================
512
- /**
513
- * Handle no changes between branches.
514
- *
515
- * @description Returns a message indicating there are no differences between
516
- * the specified branches.
517
- *
518
- * @param baseBranch - Base branch name
519
- * @param headBranch - Head branch name
520
- * @returns Message string indicating no changes
521
- *
522
- * @example
523
- * const message = handleNoChanges('main', 'feature')
524
- * // "No changes between main and feature"
525
- */
526
- export function handleNoChanges(baseBranch, headBranch) {
527
- return `No changes between ${baseBranch} and ${headBranch}`;
528
- }
529
- /**
530
- * Check if branches have changes between them.
531
- *
532
- * @description Determines whether there are any differences between two
533
- * branches by comparing their resolved commit SHAs.
534
- *
535
- * @param repoPath - Path to the git repository
536
- * @param baseBranch - Base branch or commit SHA
537
- * @param headBranch - Head branch or commit SHA
538
- * @returns Promise resolving to true if branches differ, false if identical
539
- *
540
- * @example
541
- * if (await hasChanges(repoPath, 'main', 'feature')) {
542
- * const result = await getReviewDiff(repoPath, 'main', 'feature')
543
- * // Display diff...
544
- * } else {
545
- * console.log('Branches are identical')
546
- * }
547
- */
548
- export async function hasChanges(repoPath, baseBranch, headBranch) {
549
- // If comparing same branch, no changes
550
- if (baseBranch === headBranch) {
551
- return false;
552
- }
553
- // Resolve both to SHAs and compare
554
- const baseCommit = await resolveBranchToSha(repoPath, baseBranch);
555
- const headCommit = await resolveBranchToSha(repoPath, headBranch);
556
- return baseCommit !== headCommit;
557
- }
558
- //# sourceMappingURL=review.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"review.js","sourceRoot":"","sources":["../../../src/cli/commands/review.ts"],"names":[],"mappings":"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"}