difit 5.0.6 → 5.0.7

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 (89) hide show
  1. package/dist/cli/comment.js +56 -14
  2. package/dist/cli/comment.test.js +93 -1
  3. package/dist/cli/utils.js +1 -1
  4. package/dist/client/assets/{arc-jpxKSIAg.js → arc-DREI5TWD.js} +1 -1
  5. package/dist/client/assets/architecture-7EHR7CIX-DGxkQlnD.js +1 -0
  6. package/dist/client/assets/{architectureDiagram-3BPJPVTR-B92ZxjNC.js → architectureDiagram-3BPJPVTR-DFkR4rlM.js} +1 -1
  7. package/dist/client/assets/{blockDiagram-GPEHLZMM-D3ySUhR3.js → blockDiagram-GPEHLZMM-ZxUtccGH.js} +1 -1
  8. package/dist/client/assets/{c4Diagram-AAUBKEIU-BUzdNEmx.js → c4Diagram-AAUBKEIU-EE04Xrty.js} +1 -1
  9. package/dist/client/assets/channel-CHYmQZZG.js +1 -0
  10. package/dist/client/assets/{chunk-2J33WTMH-1DQ-4Bz3.js → chunk-2J33WTMH-CuaIj_t6.js} +1 -1
  11. package/dist/client/assets/{chunk-3OPIFGDE-BQmtgKnq.js → chunk-3OPIFGDE-CH_P6j0v.js} +1 -1
  12. package/dist/client/assets/{chunk-4BX2VUAB-DFX6Qy74.js → chunk-4BX2VUAB-BhIIlsZ3.js} +1 -1
  13. package/dist/client/assets/{chunk-55IACEB6-DtWki8a-.js → chunk-55IACEB6-BHzcuGiT.js} +1 -1
  14. package/dist/client/assets/{chunk-5ZQYHXKU-uSJ_ZgCu.js → chunk-5ZQYHXKU-irirG3d7.js} +1 -1
  15. package/dist/client/assets/{chunk-727SXJPM-BB6xZgSD.js → chunk-727SXJPM-CxLWqspe.js} +1 -1
  16. package/dist/client/assets/{chunk-AQP2D5EJ-B1Cm665s.js → chunk-AQP2D5EJ-B_5FWHRn.js} +1 -1
  17. package/dist/client/assets/{chunk-BSJP7CBP-C15Vti01.js → chunk-BSJP7CBP-DpFoD8PT.js} +1 -1
  18. package/dist/client/assets/{chunk-CSCIHK7Q-CaTF_T3W.js → chunk-CSCIHK7Q-CN57H9UO.js} +1 -1
  19. package/dist/client/assets/{chunk-FMBD7UC4-D1irlAGU.js → chunk-FMBD7UC4-DS0PqbvC.js} +1 -1
  20. package/dist/client/assets/{chunk-KSCS5N6A-DGAjxObb.js → chunk-KSCS5N6A-DMeidheb.js} +1 -1
  21. package/dist/client/assets/{chunk-L5ZTLDWV-F5Tij0A9.js → chunk-L5ZTLDWV-C9K_60Xm.js} +1 -1
  22. package/dist/client/assets/{chunk-LZXEDZCA-BkUKm4Z2.js → chunk-LZXEDZCA-BGtpnXZ1.js} +2 -2
  23. package/dist/client/assets/{chunk-ND2GUHAM-C0rukZcz.js → chunk-ND2GUHAM-dPpYOuu1.js} +1 -1
  24. package/dist/client/assets/{chunk-NZK2D7GU-DRm_z6tq.js → chunk-NZK2D7GU-DuRhNiHO.js} +1 -1
  25. package/dist/client/assets/{chunk-O5CBEL6O-BAuwNGEL.js → chunk-O5CBEL6O-DBgK6fiG.js} +1 -1
  26. package/dist/client/assets/chunk-QZHKN3VN-AnmIw7mX.js +1 -0
  27. package/dist/client/assets/chunk-WU5MYG2G-BTiTfGJM.js +1 -0
  28. package/dist/client/assets/{chunk-XPW4576I-2r3neXxa.js → chunk-XPW4576I-RVDoolKv.js} +1 -1
  29. package/dist/client/assets/classDiagram-4FO5ZUOK-DMyzL29P.js +1 -0
  30. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-DMyzL29P.js +1 -0
  31. package/dist/client/assets/{cose-bilkent-S5V4N54A-BF8GqjYH.js → cose-bilkent-S5V4N54A-C_heAUQX.js} +1 -1
  32. package/dist/client/assets/{dagre-BM42HDAG-BcWO-l21.js → dagre-BM42HDAG-nAm5-YBv.js} +1 -1
  33. package/dist/client/assets/{diagram-2AECGRRQ-ChdDM46l.js → diagram-2AECGRRQ-DzkMI5-T.js} +1 -1
  34. package/dist/client/assets/{diagram-5GNKFQAL-DOPYGuMt.js → diagram-5GNKFQAL-CISSUOsD.js} +1 -1
  35. package/dist/client/assets/{diagram-KO2AKTUF-D6gmyyoA.js → diagram-KO2AKTUF-DVRaNRJB.js} +1 -1
  36. package/dist/client/assets/{diagram-LMA3HP47-C93nmtac.js → diagram-LMA3HP47-DJsfPM2-.js} +1 -1
  37. package/dist/client/assets/{diagram-OG6HWLK6-Cgm6DAM8.js → diagram-OG6HWLK6-CgfXkSn6.js} +1 -1
  38. package/dist/client/assets/{dist-C7Q1SrJ8.js → dist-DsFysxLW.js} +1 -1
  39. package/dist/client/assets/{erDiagram-TEJ5UH35-WzvVTKP0.js → erDiagram-TEJ5UH35-Duprm7mz.js} +1 -1
  40. package/dist/client/assets/eventmodeling-FCH6USID-DgO_2CL2.js +1 -0
  41. package/dist/client/assets/{flowDiagram-I6XJVG4X-BRAzB7RU.js → flowDiagram-I6XJVG4X-ChDsFg1k.js} +1 -1
  42. package/dist/client/assets/{ganttDiagram-6RSMTGT7-Bned6Md4.js → ganttDiagram-6RSMTGT7-BgT4bA2O.js} +1 -1
  43. package/dist/client/assets/{gitGraph-WXDBUCRP-BsCF41a6.js → gitGraph-WXDBUCRP-D2Tc-dnW.js} +1 -1
  44. package/dist/client/assets/{gitGraphDiagram-PVQCEYII-sjN-t2iw.js → gitGraphDiagram-PVQCEYII-CktpkEml.js} +1 -1
  45. package/dist/client/assets/index-BMRoOTU-.js +83 -0
  46. package/dist/client/assets/index-DJEQpFaQ.css +2 -0
  47. package/dist/client/assets/{info-J43DQDTF-BnH-OC8Z.js → info-J43DQDTF-bJtQyd_Y.js} +1 -1
  48. package/dist/client/assets/{infoDiagram-5YYISTIA-s8VJEWX-.js → infoDiagram-5YYISTIA-2Pd6AfIZ.js} +1 -1
  49. package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-Cr3iGWKj.js → ishikawaDiagram-YF4QCWOH-BNKWCuEa.js} +1 -1
  50. package/dist/client/assets/{journeyDiagram-JHISSGLW-DsSeOYHM.js → journeyDiagram-JHISSGLW-DW7F45JQ.js} +1 -1
  51. package/dist/client/assets/{kanban-definition-UN3LZRKU--hgCxMq5.js → kanban-definition-UN3LZRKU-BP9z6Fz_.js} +1 -1
  52. package/dist/client/assets/{line-BgzUTU3B.js → line-D5Ou3Ysz.js} +1 -1
  53. package/dist/client/assets/{linear-Cj1FBal1.js → linear-j-04apkE.js} +1 -1
  54. package/dist/client/assets/{mermaid-parser.core-oUly7wXy.js → mermaid-parser.core-mbc8J2Wv.js} +2 -2
  55. package/dist/client/assets/{mermaid.core-QvJGj5O5.js → mermaid.core-BqQLoEhf.js} +3 -3
  56. package/dist/client/assets/{mindmap-definition-RKZ34NQL-Cwyk4Byp.js → mindmap-definition-RKZ34NQL-D6V6zOcp.js} +1 -1
  57. package/dist/client/assets/{packet-YPE3B663-C559rspA.js → packet-YPE3B663-DEYhteSK.js} +1 -1
  58. package/dist/client/assets/{pie-LRSECV5Y-DZyJ170B.js → pie-LRSECV5Y-B5pcI4cb.js} +1 -1
  59. package/dist/client/assets/{pieDiagram-4H26LBE5-lGuBsE2s.js → pieDiagram-4H26LBE5-Cbhj1myT.js} +1 -1
  60. package/dist/client/assets/{quadrantDiagram-W4KKPZXB-BCczJuw5.js → quadrantDiagram-W4KKPZXB-BLRF1wH0.js} +1 -1
  61. package/dist/client/assets/{radar-GUYGQ44K-Ckz6UanW.js → radar-GUYGQ44K-3u8RaujE.js} +1 -1
  62. package/dist/client/assets/{requirementDiagram-4Y6WPE33-C4-ojYg3.js → requirementDiagram-4Y6WPE33-CvuvVoeD.js} +1 -1
  63. package/dist/client/assets/{sankeyDiagram-5OEKKPKP-CFpy-I_l.js → sankeyDiagram-5OEKKPKP-DK6Ak875.js} +1 -1
  64. package/dist/client/assets/{sequenceDiagram-3UESZ5HK-DmD28UaM.js → sequenceDiagram-3UESZ5HK-BUrpkbLl.js} +1 -1
  65. package/dist/client/assets/{src-BWoEPgyG.js → src-3oJtdAc0.js} +1 -1
  66. package/dist/client/assets/{stateDiagram-AJRCARHV-BNaiNMdT.js → stateDiagram-AJRCARHV-rMdhh-BM.js} +1 -1
  67. package/dist/client/assets/stateDiagram-v2-BHNVJYJU-D57jPzmZ.js +1 -0
  68. package/dist/client/assets/{timeline-definition-PNZ67QCA-DQyT9Hys.js → timeline-definition-PNZ67QCA-HJrE8OfG.js} +1 -1
  69. package/dist/client/assets/{treeView-BLDUP644-BDNxHT3u.js → treeView-BLDUP644-DhCldToR.js} +1 -1
  70. package/dist/client/assets/{treemap-LRROVOQU-mnVB3buf.js → treemap-LRROVOQU-C3ctDtd2.js} +1 -1
  71. package/dist/client/assets/{vennDiagram-CIIHVFJN-BaDh5wWt.js → vennDiagram-CIIHVFJN-BU_h1DHf.js} +1 -1
  72. package/dist/client/assets/{wardley-L42UT6IY-CZ9sEBPa.js → wardley-L42UT6IY-DzaGiv5e.js} +1 -1
  73. package/dist/client/assets/{wardleyDiagram-YWT4CUSO-B_afE6fY.js → wardleyDiagram-YWT4CUSO-Dk9C0jMk.js} +1 -1
  74. package/dist/client/assets/{xychartDiagram-2RQKCTM6-6Na9BohO.js → xychartDiagram-2RQKCTM6-CD9r_u2H.js} +1 -1
  75. package/dist/client/index.html +2 -2
  76. package/dist/server/file-watcher.js +4 -1
  77. package/dist/server/server.js +16 -0
  78. package/dist/server/server.test.js +56 -4
  79. package/package.json +2 -1
  80. package/dist/client/assets/architecture-7EHR7CIX-CGrQkVgf.js +0 -1
  81. package/dist/client/assets/channel-DG8kr4eK.js +0 -1
  82. package/dist/client/assets/chunk-QZHKN3VN-M1-XSu5b.js +0 -1
  83. package/dist/client/assets/chunk-WU5MYG2G-BvFjxMiG.js +0 -1
  84. package/dist/client/assets/classDiagram-4FO5ZUOK-BtF02SOc.js +0 -1
  85. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-BtF02SOc.js +0 -1
  86. package/dist/client/assets/eventmodeling-FCH6USID-D2pfiIpz.js +0 -1
  87. package/dist/client/assets/index-BC8r72Kq.js +0 -82
  88. package/dist/client/assets/index-DxvaSOa7.css +0 -2
  89. package/dist/client/assets/stateDiagram-v2-BHNVJYJU-CkEmqrGj.js +0 -1
@@ -567,6 +567,22 @@ export async function startServer(options) {
567
567
  res.status(400).json({ error: 'Invalid comment import data' });
568
568
  }
569
569
  });
570
+ app.delete('/api/comments/:threadId', (req, res) => {
571
+ const selection = getCommentSelectionFromQuery(req.query);
572
+ const session = getOrCreateCommentSession(selection);
573
+ const threadId = req.params.threadId;
574
+ const nextThreads = session.threads.filter((thread) => thread.id !== threadId);
575
+ if (nextThreads.length === session.threads.length) {
576
+ res.status(404).json({ error: `Thread not found: ${threadId}` });
577
+ return;
578
+ }
579
+ updateCommentSession(selection, nextThreads);
580
+ res.json({
581
+ success: true,
582
+ threadId,
583
+ version: session.version,
584
+ });
585
+ });
570
586
  app.get('/api/comments-json', (req, res) => {
571
587
  const selection = getCommentSelectionFromQuery(req.query);
572
588
  const session = getOrCreateCommentSession(selection);
@@ -191,7 +191,10 @@ describe('Server Integration Tests', () => {
191
191
  };
192
192
  it('merges concurrent agent additions instead of clobbering on a stale push', async () => {
193
193
  const port = await getAvailablePort(4966);
194
- const result = await startServer({ preferredPort: port, openBrowser: false });
194
+ const result = await startServer({
195
+ preferredPort: port,
196
+ openBrowser: false,
197
+ });
195
198
  try {
196
199
  // Browser establishes a thread; it now knows version 1.
197
200
  await postThreads(result.port, [makeThread('t1', 'src/a.ts', 10, 'human thread')]);
@@ -234,7 +237,10 @@ describe('Server Integration Tests', () => {
234
237
  });
235
238
  it('replaces (honoring deletions) when the push version matches', async () => {
236
239
  const port = await getAvailablePort(4966);
237
- const result = await startServer({ preferredPort: port, openBrowser: false });
240
+ const result = await startServer({
241
+ preferredPort: port,
242
+ openBrowser: false,
243
+ });
238
244
  try {
239
245
  await postThreads(result.port, [makeThread('t1', 'src/a.ts', 10, 'human thread')]);
240
246
  const afterFirst = await getSession(result.port);
@@ -258,7 +264,10 @@ describe('Server Integration Tests', () => {
258
264
  });
259
265
  it('bumps the version when a reply is imported (so the change is broadcast)', async () => {
260
266
  const port = await getAvailablePort(4966);
261
- const result = await startServer({ preferredPort: port, openBrowser: false });
267
+ const result = await startServer({
268
+ preferredPort: port,
269
+ openBrowser: false,
270
+ });
262
271
  try {
263
272
  await postThreads(result.port, [makeThread('t1', 'src/a.ts', 10, 'human thread')]);
264
273
  const before = await getSession(result.port);
@@ -792,6 +801,46 @@ describe('Server Integration Tests', () => {
792
801
  const threads = data.threads.filter((t) => t.filePath === 'src/dedup.ts');
793
802
  expect(threads).toHaveLength(1);
794
803
  });
804
+ it('DELETE /api/comments/:threadId removes the thread and bumps the version', async () => {
805
+ await fetch(`http://localhost:${port}/api/comment-imports`, {
806
+ method: 'POST',
807
+ headers: { 'Content-Type': 'application/json' },
808
+ body: JSON.stringify([
809
+ {
810
+ type: 'thread',
811
+ id: 'delete-me',
812
+ filePath: 'src/delete-test.ts',
813
+ position: { side: 'new', line: 3 },
814
+ body: 'Thread to delete',
815
+ },
816
+ ]),
817
+ });
818
+ const beforeResponse = await fetch(`http://localhost:${port}/api/comments-json`);
819
+ const before = (await beforeResponse.json());
820
+ expect(before.threads.some((t) => t.id === 'delete-me')).toBe(true);
821
+ const deleteResponse = await fetch(`http://localhost:${port}/api/comments/delete-me`, {
822
+ method: 'DELETE',
823
+ });
824
+ const deleteData = (await deleteResponse.json());
825
+ expect(deleteResponse.ok).toBe(true);
826
+ expect(deleteData).toMatchObject({
827
+ success: true,
828
+ threadId: 'delete-me',
829
+ });
830
+ expect(deleteData.version).toBe(before.version + 1);
831
+ const afterResponse = await fetch(`http://localhost:${port}/api/comments-json`);
832
+ const after = (await afterResponse.json());
833
+ expect(after.threads.some((t) => t.id === 'delete-me')).toBe(false);
834
+ });
835
+ it('DELETE /api/comments/:threadId returns 404 for unknown thread', async () => {
836
+ const response = await fetch(`http://localhost:${port}/api/comments/does-not-exist`, {
837
+ method: 'DELETE',
838
+ });
839
+ expect(response.status).toBe(404);
840
+ const data = (await response.json());
841
+ expect(data).toHaveProperty('error');
842
+ expect(data.error).toContain('does-not-exist');
843
+ });
795
844
  it('isolates comment sessions between different diff selections', async () => {
796
845
  const importServer = await startServer({
797
846
  selection: { targetCommitish: 'HEAD', baseCommitish: 'HEAD^' },
@@ -961,7 +1010,10 @@ describe('Server Integration Tests', () => {
961
1010
  const data = (await response.json());
962
1011
  expect(response.ok).toBe(true);
963
1012
  expect(data.specialOptions).toHaveLength(3);
964
- expect(data.specialOptions).not.toContainEqual({ value: 'merge-base', label: 'Merge Base' });
1013
+ expect(data.specialOptions).not.toContainEqual({
1014
+ value: 'merge-base',
1015
+ label: 'Merge Base',
1016
+ });
965
1017
  expect(data.branches).toEqual([{ name: 'main', current: true }]);
966
1018
  expect(data.commits).toEqual([
967
1019
  { hash: 'abc1234', shortHash: 'abc1234', message: 'Test commit' },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "difit",
3
- "version": "5.0.6",
3
+ "version": "5.0.7",
4
4
  "description": "A lightweight command-line tool that spins up a local web server to display Git commit diffs in a GitHub-like Files changed view",
5
5
  "keywords": [
6
6
  "cli",
@@ -79,6 +79,7 @@
79
79
  "react-dom": "^19.1.0",
80
80
  "react-hotkeys-hook": "^5.2.4",
81
81
  "react-markdown": "^10.1.0",
82
+ "remark-breaks": "^4.0.0",
82
83
  "remark-gfm": "^4.0.1",
83
84
  "simple-git": "^3.28.0"
84
85
  },
@@ -1 +0,0 @@
1
- import"./chunk-NNHCCRGN-DlpIbxXb.js";import{x as e}from"./mermaid-parser.core-oUly7wXy.js";export{e as createArchitectureServices};
@@ -1 +0,0 @@
1
- import{at as e,ot as t}from"./chunk-CSCIHK7Q-CaTF_T3W.js";var n=(n,r)=>t.lang.round(e.parse(n)[r]);export{n as t};
@@ -1 +0,0 @@
1
- import{h as e}from"./src-BWoEPgyG.js";var t=class{constructor(e){this.init=e,this.records=this.init()}static{e(this,`ImperativeState`)}reset(){this.records=this.init()}};export{t};
@@ -1 +0,0 @@
1
- import{h as e,p as t}from"./src-BWoEPgyG.js";import{x as n}from"./chunk-CSCIHK7Q-CaTF_T3W.js";var r=e(e=>{let{securityLevel:r}=n(),i=t(`body`);return r===`sandbox`&&(i=t((t(`#i${e}`).node()?.contentDocument??document).body)),i.select(`#${e}`)},`selectSvgElement`);export{r as t};
@@ -1 +0,0 @@
1
- import{h as e}from"./src-BWoEPgyG.js";import"./chunk-CSCIHK7Q-CaTF_T3W.js";import"./chunk-5ZQYHXKU-uSJ_ZgCu.js";import"./chunk-O5CBEL6O-BAuwNGEL.js";import"./chunk-FMBD7UC4-D1irlAGU.js";import"./chunk-BSJP7CBP-C15Vti01.js";import"./chunk-L5ZTLDWV-F5Tij0A9.js";import"./chunk-ND2GUHAM-C0rukZcz.js";import"./chunk-55IACEB6-DtWki8a-.js";import"./chunk-2J33WTMH-1DQ-4Bz3.js";import"./chunk-NZK2D7GU-DRm_z6tq.js";import"./chunk-3OPIFGDE-BQmtgKnq.js";import"./chunk-KSCS5N6A-DGAjxObb.js";import"./chunk-LZXEDZCA-BkUKm4Z2.js";import{i as t,n,r,t as i}from"./chunk-727SXJPM-BB6xZgSD.js";var a={parser:n,get db(){return new i},renderer:r,styles:t,init:e(e=>{e.class||={},e.class.arrowMarkerAbsolute=e.arrowMarkerAbsolute},`init`)};export{a as diagram};
@@ -1 +0,0 @@
1
- import{h as e}from"./src-BWoEPgyG.js";import"./chunk-CSCIHK7Q-CaTF_T3W.js";import"./chunk-5ZQYHXKU-uSJ_ZgCu.js";import"./chunk-O5CBEL6O-BAuwNGEL.js";import"./chunk-FMBD7UC4-D1irlAGU.js";import"./chunk-BSJP7CBP-C15Vti01.js";import"./chunk-L5ZTLDWV-F5Tij0A9.js";import"./chunk-ND2GUHAM-C0rukZcz.js";import"./chunk-55IACEB6-DtWki8a-.js";import"./chunk-2J33WTMH-1DQ-4Bz3.js";import"./chunk-NZK2D7GU-DRm_z6tq.js";import"./chunk-3OPIFGDE-BQmtgKnq.js";import"./chunk-KSCS5N6A-DGAjxObb.js";import"./chunk-LZXEDZCA-BkUKm4Z2.js";import{i as t,n,r,t as i}from"./chunk-727SXJPM-BB6xZgSD.js";var a={parser:n,get db(){return new i},renderer:r,styles:t,init:e(e=>{e.class||={},e.class.arrowMarkerAbsolute=e.arrowMarkerAbsolute},`init`)};export{a as diagram};
@@ -1 +0,0 @@
1
- import"./chunk-NNHCCRGN-DlpIbxXb.js";import{y as e}from"./mermaid-parser.core-oUly7wXy.js";export{e as createEventModelingServices};