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,609 +0,0 @@
1
- /**
2
- * @fileoverview Git Blame Command
3
- *
4
- * This module implements the `gitx blame` command which shows what revision
5
- * and author last modified each line of a file. Features include:
6
- * - Line-by-line attribution to commits and authors
7
- * - Line range filtering
8
- * - Rename tracking (-C flag)
9
- * - Syntax highlighting support via Shiki
10
- * - Binary file detection
11
- *
12
- * @module cli/commands/blame
13
- *
14
- * @example
15
- * // Blame entire file
16
- * const result = await getBlame(adapter, 'src/index.ts')
17
- * for (const line of result.lines) {
18
- * console.log(formatBlameLine(line))
19
- * }
20
- *
21
- * @example
22
- * // Blame specific line range
23
- * const result = await getBlame(adapter, 'src/index.ts', { lineRange: '10,20' })
24
- */
25
- import { parseCommit, parseTree } from '../../types/objects';
26
- // ============================================================================
27
- // Helper Functions
28
- // ============================================================================
29
- const decoder = new TextDecoder();
30
- /**
31
- * Check if content is likely binary (contains null bytes)
32
- */
33
- function isBinaryContent(data) {
34
- const checkLength = Math.min(data.length, 8000);
35
- for (let i = 0; i < checkLength; i++) {
36
- if (data[i] === 0)
37
- return true;
38
- }
39
- return false;
40
- }
41
- /**
42
- * Split content into lines
43
- */
44
- function splitLines(content) {
45
- if (content === '')
46
- return [];
47
- const lines = content.split('\n');
48
- if (lines.length > 0 && lines[lines.length - 1] === '') {
49
- lines.pop();
50
- }
51
- return lines.map(line => line.replace(/\r$/, ''));
52
- }
53
- /**
54
- * Get file extension from path
55
- */
56
- function getExtension(filePath) {
57
- const lastDot = filePath.lastIndexOf('.');
58
- if (lastDot === -1)
59
- return '';
60
- return filePath.slice(lastDot + 1).toLowerCase();
61
- }
62
- /**
63
- * Map file extension to language name
64
- */
65
- function extensionToLanguage(ext) {
66
- const mapping = {
67
- 'js': 'javascript',
68
- 'ts': 'typescript',
69
- 'tsx': 'typescript',
70
- 'jsx': 'javascript',
71
- 'py': 'python',
72
- 'rb': 'ruby',
73
- 'go': 'go',
74
- 'rs': 'rust',
75
- 'java': 'java',
76
- 'c': 'c',
77
- 'cpp': 'cpp',
78
- 'h': 'c',
79
- 'hpp': 'cpp',
80
- 'cs': 'csharp',
81
- 'php': 'php',
82
- 'sh': 'bash',
83
- 'bash': 'bash',
84
- 'zsh': 'bash',
85
- 'json': 'json',
86
- 'yaml': 'yaml',
87
- 'yml': 'yaml',
88
- 'md': 'markdown',
89
- 'html': 'html',
90
- 'css': 'css',
91
- 'scss': 'scss',
92
- 'sql': 'sql',
93
- 'xml': 'xml'
94
- };
95
- return mapping[ext] || 'text';
96
- }
97
- /**
98
- * Parse a commit object from raw data
99
- */
100
- function parseCommitObject(obj) {
101
- // Build the full git object format: "commit <size>\0<data>"
102
- const header = new TextEncoder().encode(`commit ${obj.data.length}\0`);
103
- const fullData = new Uint8Array(header.length + obj.data.length);
104
- fullData.set(header);
105
- fullData.set(obj.data, header.length);
106
- return parseCommit(fullData);
107
- }
108
- /**
109
- * Parse a tree object from raw data
110
- */
111
- function parseTreeObject(obj) {
112
- const header = new TextEncoder().encode(`tree ${obj.data.length}\0`);
113
- const fullData = new Uint8Array(header.length + obj.data.length);
114
- fullData.set(header);
115
- fullData.set(obj.data, header.length);
116
- return parseTree(fullData);
117
- }
118
- /**
119
- * Get file content at a specific commit
120
- */
121
- async function getFileAtCommit(adapter, commitSha, filePath) {
122
- const commitObj = await adapter.getObject(commitSha);
123
- if (!commitObj || commitObj.type !== 'commit')
124
- return null;
125
- const commit = parseCommitObject(commitObj);
126
- // Navigate through tree to find file
127
- const pathParts = filePath.split('/');
128
- let currentTreeSha = commit.tree;
129
- for (let i = 0; i < pathParts.length; i++) {
130
- const treeObj = await adapter.getObject(currentTreeSha);
131
- if (!treeObj || treeObj.type !== 'tree')
132
- return null;
133
- const tree = parseTreeObject(treeObj);
134
- const entry = tree.entries.find(e => e.name === pathParts[i]);
135
- if (!entry)
136
- return null;
137
- if (i === pathParts.length - 1) {
138
- // Final part - should be a blob
139
- const blobObj = await adapter.getObject(entry.sha);
140
- if (!blobObj || blobObj.type !== 'blob')
141
- return null;
142
- return blobObj.data;
143
- }
144
- else {
145
- // Intermediate part - should be a tree
146
- if (entry.mode !== '040000')
147
- return null;
148
- currentTreeSha = entry.sha;
149
- }
150
- }
151
- return null;
152
- }
153
- /**
154
- * Get the blob SHA for a file at a specific commit
155
- */
156
- async function getFileBlobSha(adapter, commitSha, filePath) {
157
- const commitObj = await adapter.getObject(commitSha);
158
- if (!commitObj || commitObj.type !== 'commit')
159
- return null;
160
- const commit = parseCommitObject(commitObj);
161
- // Navigate through tree to find file
162
- const pathParts = filePath.split('/');
163
- let currentTreeSha = commit.tree;
164
- for (let i = 0; i < pathParts.length; i++) {
165
- const treeObj = await adapter.getObject(currentTreeSha);
166
- if (!treeObj || treeObj.type !== 'tree')
167
- return null;
168
- const tree = parseTreeObject(treeObj);
169
- const entry = tree.entries.find(e => e.name === pathParts[i]);
170
- if (!entry)
171
- return null;
172
- if (i === pathParts.length - 1) {
173
- return entry.sha;
174
- }
175
- else {
176
- if (entry.mode !== '040000')
177
- return null;
178
- currentTreeSha = entry.sha;
179
- }
180
- }
181
- return null;
182
- }
183
- /**
184
- * Find a file in a commit tree by its blob SHA (for rename detection)
185
- */
186
- async function findFileByBlobSha(adapter, commitSha, targetBlobSha) {
187
- const commitObj = await adapter.getObject(commitSha);
188
- if (!commitObj || commitObj.type !== 'commit')
189
- return null;
190
- const commit = parseCommitObject(commitObj);
191
- // Search tree for a file with the matching blob SHA
192
- async function searchTree(treeSha, prefix) {
193
- const treeObj = await adapter.getObject(treeSha);
194
- if (!treeObj || treeObj.type !== 'tree')
195
- return null;
196
- const tree = parseTreeObject(treeObj);
197
- for (const entry of tree.entries) {
198
- const entryPath = prefix ? `${prefix}/${entry.name}` : entry.name;
199
- if (entry.mode === '040000') {
200
- // It's a directory - recurse
201
- const found = await searchTree(entry.sha, entryPath);
202
- if (found)
203
- return found;
204
- }
205
- else {
206
- // It's a file - check SHA
207
- if (entry.sha === targetBlobSha) {
208
- return entryPath;
209
- }
210
- }
211
- }
212
- return null;
213
- }
214
- return searchTree(commit.tree, '');
215
- }
216
- /**
217
- * Compute line mapping between parent and child versions using LCS
218
- */
219
- function computeLineMapping(oldLines, newLines) {
220
- const mapping = new Map();
221
- const m = oldLines.length;
222
- const n = newLines.length;
223
- if (m === 0 || n === 0)
224
- return mapping;
225
- // Create LCS table
226
- const dp = Array(m + 1).fill(null).map(() => Array(n + 1).fill(0));
227
- for (let i = 1; i <= m; i++) {
228
- for (let j = 1; j <= n; j++) {
229
- if (oldLines[i - 1] === newLines[j - 1]) {
230
- dp[i][j] = dp[i - 1][j - 1] + 1;
231
- }
232
- else {
233
- dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
234
- }
235
- }
236
- }
237
- // Backtrack to find matching lines
238
- let i = m, j = n;
239
- while (i > 0 && j > 0) {
240
- if (oldLines[i - 1] === newLines[j - 1]) {
241
- mapping.set(i - 1, j - 1);
242
- i--;
243
- j--;
244
- }
245
- else if (dp[i - 1][j] > dp[i][j - 1]) {
246
- i--;
247
- }
248
- else {
249
- j--;
250
- }
251
- }
252
- return mapping;
253
- }
254
- // ============================================================================
255
- // Blame Command Implementation
256
- // ============================================================================
257
- /**
258
- * Execute the blame command from the CLI.
259
- *
260
- * @description Parses command-line arguments and displays blame annotations
261
- * for the specified file. This is the entry point for the `gitx blame` command.
262
- *
263
- * @param ctx - Command context containing cwd, args, options, and output functions
264
- * @returns Promise that resolves when output is complete
265
- * @throws {Error} Always throws "Not implemented" - command not yet implemented
266
- *
267
- * @example
268
- * // CLI usage
269
- * // gitx blame src/index.ts
270
- * // gitx blame -L 10,20 src/index.ts
271
- * // gitx blame -C src/renamed-file.ts
272
- */
273
- export async function blameCommand(_ctx) {
274
- throw new Error('Not implemented');
275
- }
276
- /**
277
- * Get blame annotations for a file.
278
- *
279
- * @description Computes blame annotations for each line of a file by walking
280
- * the commit history. For each line, identifies the commit and author that
281
- * last modified it. Supports line range filtering and rename tracking.
282
- *
283
- * The algorithm:
284
- * 1. Gets the current file content at HEAD
285
- * 2. Initializes all lines as attributed to HEAD
286
- * 3. Walks backward through commit history
287
- * 4. Uses LCS (Longest Common Subsequence) to map lines between commits
288
- * 5. Updates line attribution when a line exists in a parent commit
289
- *
290
- * @param adapter - Filesystem adapter for reading git objects
291
- * @param filePath - Path to the file to blame (relative to repo root)
292
- * @param options - Blame options for filtering and behavior
293
- * @returns Promise resolving to blame result with line annotations
294
- * @throws {Error} If file path contains null character
295
- * @throws {Error} If HEAD cannot be resolved (empty repository)
296
- * @throws {Error} If HEAD commit cannot be read
297
- * @throws {Error} If file does not exist in repository
298
- * @throws {Error} If line range is invalid (end before start, exceeds file length)
299
- *
300
- * @example
301
- * // Blame entire file
302
- * const result = await getBlame(adapter, 'src/index.ts')
303
- * console.log(`File has ${result.lines.length} lines`)
304
- *
305
- * @example
306
- * // Blame specific line range
307
- * const result = await getBlame(adapter, 'src/index.ts', { lineRange: '10,20' })
308
- *
309
- * @example
310
- * // Blame with rename tracking
311
- * const result = await getBlame(adapter, 'src/new-name.ts', { followRenames: true })
312
- * if (result.originalPath) {
313
- * console.log(`File was renamed from ${result.originalPath}`)
314
- * }
315
- *
316
- * @example
317
- * // Handle binary files
318
- * const result = await getBlame(adapter, 'assets/image.png')
319
- * if (result.isBinary) {
320
- * console.log(result.message) // "binary file - cannot show line-by-line blame"
321
- * console.log(`Last modified by: ${result.fileCommit?.author}`)
322
- * }
323
- */
324
- export async function getBlame(adapter, filePath, options = {}) {
325
- // Validate file path
326
- if (filePath.includes('\0')) {
327
- throw new Error('Invalid file path: contains null character');
328
- }
329
- // Resolve HEAD to get current commit
330
- const headResolved = await adapter.resolveRef('HEAD');
331
- if (!headResolved) {
332
- throw new Error('Cannot resolve HEAD: repository may be empty');
333
- }
334
- const headCommitSha = headResolved.sha;
335
- // Get the commit object
336
- const commitObj = await adapter.getObject(headCommitSha);
337
- if (!commitObj || commitObj.type !== 'commit') {
338
- throw new Error(`Cannot read HEAD commit: ${headCommitSha}`);
339
- }
340
- const headCommit = parseCommitObject(commitObj);
341
- // Get file content at HEAD
342
- const fileContent = await getFileAtCommit(adapter, headCommitSha, filePath);
343
- if (fileContent === null) {
344
- throw new Error(`File not found: ${filePath} does not exist in repository`);
345
- }
346
- // Check for binary file
347
- if (isBinaryContent(fileContent)) {
348
- return {
349
- path: filePath,
350
- lines: [],
351
- isBinary: true,
352
- message: 'binary file - cannot show line-by-line blame',
353
- fileCommit: {
354
- sha: headCommitSha,
355
- author: headCommit.author.name,
356
- date: new Date(headCommit.author.timestamp * 1000)
357
- }
358
- };
359
- }
360
- // Parse file content
361
- const contentStr = decoder.decode(fileContent);
362
- const lines = splitLines(contentStr);
363
- // Handle empty file
364
- if (lines.length === 0) {
365
- return {
366
- path: filePath,
367
- lines: [],
368
- isBinary: false
369
- };
370
- }
371
- // Parse and validate line range
372
- let startLine = 1;
373
- let endLine = lines.length;
374
- if (options.lineRange) {
375
- const range = parseLineRange(options.lineRange);
376
- if (range.end < range.start) {
377
- throw new Error(`Invalid line range: end (${range.end}) is before start (${range.start})`);
378
- }
379
- if (range.end > lines.length) {
380
- throw new Error(`Invalid line range: end (${range.end}) exceeds file length (${lines.length})`);
381
- }
382
- startLine = range.start;
383
- endLine = range.end;
384
- }
385
- // Initialize blame info for each line
386
- const blameInfo = lines.map((content, idx) => ({
387
- commitSha: headCommitSha,
388
- shortSha: headCommitSha.substring(0, 8),
389
- author: headCommit.author.name,
390
- authorEmail: headCommit.author.email,
391
- date: new Date(headCommit.author.timestamp * 1000),
392
- lineNumber: idx + 1,
393
- originalLineNumber: idx + 1,
394
- content
395
- }));
396
- // Track rename history
397
- let currentPath = filePath;
398
- let originalPathFound;
399
- // Walk through commit history to attribute lines
400
- const commitQueue = [];
401
- // Initialize with HEAD's parents
402
- if (headCommit.parents.length > 0) {
403
- const identityMapping = new Map();
404
- for (let i = 0; i < lines.length; i++) {
405
- identityMapping.set(i, i);
406
- }
407
- for (const parentSha of headCommit.parents) {
408
- commitQueue.push({
409
- sha: parentSha,
410
- lines: lines,
411
- path: currentPath,
412
- lineMapping: identityMapping,
413
- childSha: headCommitSha
414
- });
415
- }
416
- }
417
- const visitedCommits = new Set();
418
- visitedCommits.add(headCommitSha);
419
- while (commitQueue.length > 0) {
420
- const item = commitQueue.shift();
421
- const { sha: parentSha, lines: childLines, path: childPath, lineMapping: childToOriginal, childSha } = item;
422
- if (visitedCommits.has(parentSha))
423
- continue;
424
- visitedCommits.add(parentSha);
425
- // Get parent commit
426
- const parentCommitObj = await adapter.getObject(parentSha);
427
- if (!parentCommitObj || parentCommitObj.type !== 'commit')
428
- continue;
429
- const parentCommit = parseCommitObject(parentCommitObj);
430
- // Check for renames if followRenames is enabled
431
- let pathInParent = childPath;
432
- if (options.followRenames) {
433
- // Check if file exists at current path in parent
434
- const contentAtPath = await getFileAtCommit(adapter, parentSha, childPath);
435
- if (contentAtPath === null) {
436
- // File doesn't exist at this path - try to find it by blob SHA (rename detection)
437
- const childBlobSha = await getFileBlobSha(adapter, childSha, childPath);
438
- if (childBlobSha) {
439
- const renamedPath = await findFileByBlobSha(adapter, parentSha, childBlobSha);
440
- if (renamedPath) {
441
- pathInParent = renamedPath;
442
- if (!originalPathFound)
443
- originalPathFound = renamedPath;
444
- }
445
- }
446
- }
447
- }
448
- // Get parent file content
449
- const parentContent = await getFileAtCommit(adapter, parentSha, pathInParent);
450
- if (!parentContent) {
451
- // File doesn't exist in parent - all remaining lines are from child commit
452
- continue;
453
- }
454
- if (isBinaryContent(parentContent))
455
- continue;
456
- const parentContentStr = decoder.decode(parentContent);
457
- const parentLines = splitLines(parentContentStr);
458
- // Compute line mapping between parent and child
459
- const mapping = computeLineMapping(parentLines, childLines);
460
- // Update blame for lines that came from parent
461
- for (const [parentIdx, childIdx] of mapping) {
462
- for (const [origIdx, mappedChildIdx] of childToOriginal) {
463
- if (mappedChildIdx === childIdx) {
464
- // This line exists in parent - attribute to parent
465
- blameInfo[origIdx].commitSha = parentSha;
466
- blameInfo[origIdx].shortSha = parentSha.substring(0, 8);
467
- blameInfo[origIdx].author = parentCommit.author.name;
468
- blameInfo[origIdx].authorEmail = parentCommit.author.email;
469
- blameInfo[origIdx].date = new Date(parentCommit.author.timestamp * 1000);
470
- blameInfo[origIdx].originalLineNumber = parentIdx + 1;
471
- // Track original path when following renames
472
- if (pathInParent !== childPath) {
473
- blameInfo[origIdx].originalPath = pathInParent;
474
- }
475
- }
476
- }
477
- }
478
- // Build new mapping from original indices to parent indices
479
- const newMapping = new Map();
480
- for (const [origIdx, childIdx] of childToOriginal) {
481
- for (const [parentIdx, mappedChildIdx] of mapping) {
482
- if (mappedChildIdx === childIdx) {
483
- newMapping.set(origIdx, parentIdx);
484
- break;
485
- }
486
- }
487
- }
488
- // Add parent's parents to queue
489
- if (parentCommit.parents.length > 0 && newMapping.size > 0) {
490
- for (const grandparentSha of parentCommit.parents) {
491
- commitQueue.push({
492
- sha: grandparentSha,
493
- lines: parentLines,
494
- path: pathInParent,
495
- lineMapping: newMapping,
496
- childSha: parentSha
497
- });
498
- }
499
- }
500
- }
501
- // Filter to requested line range
502
- let resultLines = blameInfo;
503
- if (options.lineRange) {
504
- resultLines = blameInfo.filter(l => l.lineNumber >= startLine && l.lineNumber <= endLine);
505
- }
506
- // Build result
507
- const result = {
508
- path: filePath,
509
- lines: resultLines,
510
- isBinary: false
511
- };
512
- // Add original path if found through rename tracking
513
- if (originalPathFound) {
514
- result.originalPath = originalPathFound;
515
- }
516
- // Handle syntax highlighting
517
- if (options.highlight) {
518
- const ext = getExtension(filePath);
519
- const language = extensionToLanguage(ext);
520
- result.language = language;
521
- result.theme = options.theme || 'github-dark';
522
- result.highlighted = resultLines.map(l => l.content); // Placeholder - actual highlighting would use Shiki
523
- }
524
- return result;
525
- }
526
- /**
527
- * Format a blame line annotation for display.
528
- *
529
- * @description Formats a single blame line in a human-readable format similar
530
- * to git blame output: `<sha> (<author> <date>) <content>`
531
- *
532
- * @param annotation - The blame line annotation to format
533
- * @param options - Formatting options
534
- * @param options.showOriginalLineNumber - If true, shows both original and current line numbers
535
- * @returns Formatted string for display
536
- *
537
- * @example
538
- * const formatted = formatBlameLine(annotation)
539
- * // Output: "abc12345 (John Doe 2024-01-15) const x = 1"
540
- *
541
- * @example
542
- * // With original line numbers (for renamed files)
543
- * const formatted = formatBlameLine(annotation, { showOriginalLineNumber: true })
544
- * // Output: "abc12345 (John Doe 2024-01-15 10 12) const x = 1"
545
- */
546
- export function formatBlameLine(annotation, options = {}) {
547
- const { shortSha, author, date, lineNumber, originalLineNumber, content } = annotation;
548
- // Format date as YYYY-MM-DD or similar
549
- const dateStr = date.toISOString().substring(0, 10);
550
- // Pad author to fixed width
551
- const authorStr = author.padEnd(15).substring(0, 15);
552
- let result = `${shortSha} (${authorStr} ${dateStr}`;
553
- if (options.showOriginalLineNumber) {
554
- result += ` ${originalLineNumber.toString().padStart(4)} ${lineNumber.toString().padStart(4)}`;
555
- }
556
- result += `) ${content}`;
557
- return result;
558
- }
559
- /**
560
- * Parse a line range string into start and end values.
561
- *
562
- * @description Parses line range specifications used with the -L flag.
563
- * Supports two formats:
564
- * - Absolute: "start,end" (e.g., "10,20" for lines 10-20)
565
- * - Relative: "start,+count" (e.g., "10,+5" for lines 10-15)
566
- *
567
- * @param rangeStr - Line range string in "start,end" or "start,+count" format
568
- * @returns Parsed line range with start and end (1-indexed, inclusive)
569
- * @throws {Error} If format is invalid (not two comma-separated values)
570
- * @throws {Error} If start line is not a valid number
571
- * @throws {Error} If end line or offset is not a valid number
572
- *
573
- * @example
574
- * // Absolute range
575
- * const range = parseLineRange('10,20')
576
- * console.log(range) // { start: 10, end: 20 }
577
- *
578
- * @example
579
- * // Relative range
580
- * const range = parseLineRange('10,+5')
581
- * console.log(range) // { start: 10, end: 15 }
582
- */
583
- export function parseLineRange(rangeStr) {
584
- const parts = rangeStr.split(',');
585
- if (parts.length !== 2) {
586
- throw new Error(`Invalid line range format: ${rangeStr}`);
587
- }
588
- const start = parseInt(parts[0], 10);
589
- if (isNaN(start)) {
590
- throw new Error(`Invalid start line: ${parts[0]}`);
591
- }
592
- let end;
593
- if (parts[1].startsWith('+')) {
594
- // Relative offset: start + offset
595
- const offset = parseInt(parts[1].slice(1), 10);
596
- if (isNaN(offset)) {
597
- throw new Error(`Invalid line offset: ${parts[1]}`);
598
- }
599
- end = start + offset;
600
- }
601
- else {
602
- end = parseInt(parts[1], 10);
603
- if (isNaN(end)) {
604
- throw new Error(`Invalid end line: ${parts[1]}`);
605
- }
606
- }
607
- return { start, end };
608
- }
609
- //# sourceMappingURL=blame.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"blame.js","sourceRoot":"","sources":["../../../src/cli/commands/blame.ts"],"names":[],"mappings":"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"}