@diffohq/diffo 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/README.md +22 -4
  2. package/dist/cli.mjs +524 -13
  3. package/dist/client/assets/{abnfDiagram-O67JEVCF-DdDBSVZ4.js → abnfDiagram-O67JEVCF-b6l_FGHi.js} +1 -1
  4. package/dist/client/assets/{arc-BgNb6rn9.js → arc-Cz0jZwLH.js} +1 -1
  5. package/dist/client/assets/architecture-7GRP2DOG-BXYREMFQ.js +1 -0
  6. package/dist/client/assets/{architectureDiagram-NJMV4G6O-HNLU6Z_V.js → architectureDiagram-NJMV4G6O-CJdtqKce.js} +1 -1
  7. package/dist/client/assets/{blockDiagram-BEXU5L5S-DO434Dqm.js → blockDiagram-BEXU5L5S-Ci-lnLGN.js} +1 -1
  8. package/dist/client/assets/{c4Diagram-YGBWAQC7-CkhXDWcc.js → c4Diagram-YGBWAQC7-DDO2mTMB.js} +1 -1
  9. package/dist/client/assets/channel-CtvNwuQX.js +1 -0
  10. package/dist/client/assets/{chunk-3FUC2YCW-DTfKImVL.js → chunk-3FUC2YCW-VyswqFt3.js} +1 -1
  11. package/dist/client/assets/{chunk-5DYCD2WN-9Pj_Xuzv.js → chunk-5DYCD2WN-B4MBZW5P.js} +1 -1
  12. package/dist/client/assets/{chunk-742MDFTN-DRQNNbBo.js → chunk-742MDFTN-Cxvmvrid.js} +1 -1
  13. package/dist/client/assets/{chunk-7INBJB4K-BqnHF3P0.js → chunk-7INBJB4K-DkBnRFbH.js} +1 -1
  14. package/dist/client/assets/{chunk-7M6MHVWA-NTwtPxj_.js → chunk-7M6MHVWA-BvJgBwEi.js} +1 -1
  15. package/dist/client/assets/{chunk-7PRAP22T-reFtaiUY.js → chunk-7PRAP22T-OfiMNi_y.js} +1 -1
  16. package/dist/client/assets/{chunk-GTNCS2PH-BbSQqqTd.js → chunk-GTNCS2PH-BodN5cRQ.js} +1 -1
  17. package/dist/client/assets/{chunk-GWA4HPMP-B3OAiKhC.js → chunk-GWA4HPMP-KifxxZcy.js} +1 -1
  18. package/dist/client/assets/{chunk-MBY4JIJT-CNIWhzdY.js → chunk-MBY4JIJT-rw02bHlj.js} +1 -1
  19. package/dist/client/assets/{chunk-NETBCI7D-Cu2GMg5A.js → chunk-NETBCI7D-CWjhZoou.js} +1 -1
  20. package/dist/client/assets/{chunk-O7XYJQB3-C616frX3.js → chunk-O7XYJQB3-CyxnSfZ3.js} +1 -1
  21. package/dist/client/assets/{chunk-UA2S7LBM-_7jUrSu1.js → chunk-UA2S7LBM-BReIFgsu.js} +1 -1
  22. package/dist/client/assets/{chunk-WEXAMYUT--WmuTjt8.js → chunk-WEXAMYUT-DHwMy8v7.js} +1 -1
  23. package/dist/client/assets/{chunk-XXDRQBXY-CH68Fn6G.js → chunk-XXDRQBXY-C398QZbS.js} +1 -1
  24. package/dist/client/assets/{chunk-Z7XXMR3K-CMGWkbdd.js → chunk-Z7XXMR3K-hEV1GU64.js} +1 -1
  25. package/dist/client/assets/{chunk-ZIGJFQKS-Bupo8UEA.js → chunk-ZIGJFQKS-DJJL7llO.js} +1 -1
  26. package/dist/client/assets/{classDiagram-v2-NBCMYWYE-BlYlsN2U.js → classDiagram-v2-NBCMYWYE-pSGZI880.js} +1 -1
  27. package/dist/client/assets/{core-BuHBGQx-.js → core-C05I4wHV.js} +1 -1
  28. package/dist/client/assets/{cose-bilkent-JH36ORCC-BtFdPq63.js → cose-bilkent-JH36ORCC-DNV8Dqd8.js} +1 -1
  29. package/dist/client/assets/{cynefin-OW5HDTMX-DQ0j2-fq.js → cynefin-OW5HDTMX-DF-6FOgS.js} +1 -1
  30. package/dist/client/assets/{cynefinDiagram-VND7K2PF-DnctQE5u.js → cynefinDiagram-VND7K2PF-D3-iJq2J.js} +1 -1
  31. package/dist/client/assets/{dagre-6A5THRUB-u940AeXp.js → dagre-6A5THRUB-C9FDZkaa.js} +1 -1
  32. package/dist/client/assets/{diagram-22UHCM2B-B1jzZKtP.js → diagram-22UHCM2B-CfSJBDyN.js} +1 -1
  33. package/dist/client/assets/{diagram-3UASUU5V-BY_6wxmf.js → diagram-3UASUU5V-D946baYo.js} +1 -1
  34. package/dist/client/assets/{diagram-ATOU4E4O-CTsYtnJJ.js → diagram-ATOU4E4O-CGrjukoA.js} +1 -1
  35. package/dist/client/assets/{diagram-CDSNMT55-DuEJO9EQ.js → diagram-CDSNMT55-B47UPtWq.js} +1 -1
  36. package/dist/client/assets/{diagram-MLGK6HIB-CZ10U2Mk.js → diagram-MLGK6HIB-D06yEd5R.js} +1 -1
  37. package/dist/client/assets/{diagram-MPIPVDR6-CkO6cJlF.js → diagram-MPIPVDR6-BRUBT2B9.js} +1 -1
  38. package/dist/client/assets/{dist-DkqXbsqN.js → dist-BfTRyLGm.js} +1 -1
  39. package/dist/client/assets/{dist-DFkgQY1o.js → dist-DVw88SBM.js} +1 -1
  40. package/dist/client/assets/{ebnfDiagram-ZINNZB2B-BJtnMhOp.js → ebnfDiagram-ZINNZB2B-BnuExfrd.js} +1 -1
  41. package/dist/client/assets/{elk-276RUBZZ-CShSerV4.js → elk-276RUBZZ-BmdcLjR9.js} +1 -1
  42. package/dist/client/assets/{engine-oniguruma-DDtqknzG.js → engine-oniguruma-Bw1dOuOO.js} +1 -1
  43. package/dist/client/assets/{erDiagram-OPXOYQCR-2VvQxgaY.js → erDiagram-OPXOYQCR-CKCR3jQT.js} +1 -1
  44. package/dist/client/assets/eventmodeling-NTZA5JFV-C7ouopD6.js +1 -0
  45. package/dist/client/assets/flowDiagram-KWPJA3E3-C2o4wCpi.js +1 -0
  46. package/dist/client/assets/{ganttDiagram-FUAMR5RP-hQJ3ga2L.js → ganttDiagram-FUAMR5RP-BwkoweG7.js} +1 -1
  47. package/dist/client/assets/{gitGraph-4MIJSDKK-CVt38-tW.js → gitGraph-4MIJSDKK-M7_hHVyH.js} +1 -1
  48. package/dist/client/assets/{gitGraphDiagram-X574FWY7-X6_FAtp_.js → gitGraphDiagram-X574FWY7-BVm_sLT_.js} +1 -1
  49. package/dist/client/assets/index-BEG1ZxrX.css +1 -0
  50. package/dist/client/assets/index-BwDjlzOZ.js +91 -0
  51. package/dist/client/assets/{info-A6RAGUB7-CsIS2T8y.js → info-A6RAGUB7-DPBs3m_X.js} +1 -1
  52. package/dist/client/assets/{infoDiagram-VRGFBTTK-CNesth4F.js → infoDiagram-VRGFBTTK-DDb3KyOP.js} +1 -1
  53. package/dist/client/assets/{ishikawaDiagram-OU5B5YK6-C3uowhy1.js → ishikawaDiagram-OU5B5YK6-CPt4RDlr.js} +1 -1
  54. package/dist/client/assets/{journeyDiagram-ZHPQQLJL-Bti7zdNB.js → journeyDiagram-ZHPQQLJL-ECQSHJ0N.js} +1 -1
  55. package/dist/client/assets/{kanban-definition-PNTS6WVX-Co13mJCW.js → kanban-definition-PNTS6WVX-tAmonxA8.js} +1 -1
  56. package/dist/client/assets/{line-CodMwzVg.js → line-x6vAh41a.js} +1 -1
  57. package/dist/client/assets/{linear-D9CKVpWI.js → linear-BqczUNss.js} +1 -1
  58. package/dist/client/assets/{mermaid-parser.core-OY76TKUN.js → mermaid-parser.core-siQPZsry.js} +3 -3
  59. package/dist/client/assets/{mermaid.core-DWE2Tn2R.js → mermaid.core-CLHTQVF-.js} +4 -4
  60. package/dist/client/assets/{mindmap-definition-NLK3R4M7-DJ3MEvZg.js → mindmap-definition-NLK3R4M7-C9fnEdyl.js} +1 -1
  61. package/dist/client/assets/{packet-AYTQ26CC-CW1j_hFQ.js → packet-AYTQ26CC-DAeK0Q4n.js} +1 -1
  62. package/dist/client/assets/{pegDiagram-GJSIUBJH-hOvLvBiF.js → pegDiagram-GJSIUBJH-BrWBFYPO.js} +1 -1
  63. package/dist/client/assets/{pie-WAS4IAKB-D1KPtuKA.js → pie-WAS4IAKB-CnieihkO.js} +1 -1
  64. package/dist/client/assets/{pieDiagram-5QR66LMP-CJN1M2lG.js → pieDiagram-5QR66LMP-Bp5f6Eal.js} +1 -1
  65. package/dist/client/assets/{quadrantDiagram-O4NWA36T-DOysLQ6R.js → quadrantDiagram-O4NWA36T-ECuLA3RS.js} +1 -1
  66. package/dist/client/assets/{radar-RG4KPBEZ-B7XCBnIS.js → radar-RG4KPBEZ-BJXkERy0.js} +1 -1
  67. package/dist/client/assets/{railroad-74A4TZTK-0nmMIDEw.js → railroad-74A4TZTK-Di61fiV5.js} +1 -1
  68. package/dist/client/assets/railroad-abnf-HS5TGJTU-DCBYLLLl.js +1 -0
  69. package/dist/client/assets/railroad-ebnf-LZEXJU2U-VWOalqH1.js +1 -0
  70. package/dist/client/assets/railroad-peg-WCYAUIDC-BTTWaHra.js +1 -0
  71. package/dist/client/assets/{railroadDiagram-XR7U4H2S-BXbeU-WV.js → railroadDiagram-XR7U4H2S-Dn2WPOQe.js} +1 -1
  72. package/dist/client/assets/{requirementDiagram-PLB6GJNP-D3G2HYv-.js → requirementDiagram-PLB6GJNP-uuvtvHmq.js} +1 -1
  73. package/dist/client/assets/{sankeyDiagram-IPEJSGJF-CFSa-Gk4.js → sankeyDiagram-IPEJSGJF-BXk6X0af.js} +1 -1
  74. package/dist/client/assets/{sequenceDiagram-PO4LG4MO-BvmuQTlz.js → sequenceDiagram-PO4LG4MO-BsPoSXhg.js} +1 -1
  75. package/dist/client/assets/{src-CplSIRuf.js → src-B4djUhOi.js} +1 -1
  76. package/dist/client/assets/{stateDiagram-v2-GCMORJYK-C_ceCfHy.js → stateDiagram-v2-GCMORJYK-cCml5k6n.js} +1 -1
  77. package/dist/client/assets/{swimlanes-2SLR337P-D-n44lEC.js → swimlanes-2SLR337P-Dh7v55ZA.js} +1 -1
  78. package/dist/client/assets/swimlanesDiagram-TC7HE7FX-q8VF72XO.js +8 -0
  79. package/dist/client/assets/{timeline-definition-EJHVYXUP-DKYNs1Uj.js → timeline-definition-EJHVYXUP-LFjkFV14.js} +1 -1
  80. package/dist/client/assets/{treeView-Q6P3EWNA-COW2UiIS.js → treeView-Q6P3EWNA-RYZHSXeB.js} +1 -1
  81. package/dist/client/assets/{treemap-WGGIJYW6-DJOuJZmF.js → treemap-WGGIJYW6-UVw_-EPz.js} +1 -1
  82. package/dist/client/assets/{usecaseDiagram-POWQR4AR-BTmpbeJZ.js → usecaseDiagram-POWQR4AR-DZfPogyb.js} +1 -1
  83. package/dist/client/assets/{vennDiagram-UO4OBE2U-C37AKEaJ.js → vennDiagram-UO4OBE2U-CN7Ldg-2.js} +1 -1
  84. package/dist/client/assets/{wardley-WFR3VGLG-CpVTtNOC.js → wardley-WFR3VGLG-CXPbbIy_.js} +1 -1
  85. package/dist/client/assets/{wardleyDiagram-VNRHLVJA-ja-hiiVC.js → wardleyDiagram-VNRHLVJA-5p0A7_g6.js} +1 -1
  86. package/dist/client/assets/{xychartDiagram-PMCCYNJV-BsDoacSf.js → xychartDiagram-PMCCYNJV-gJ7xwZXO.js} +1 -1
  87. package/dist/client/index.html +2 -2
  88. package/package.json +1 -1
  89. package/plugin.json +1 -1
  90. package/skills/diffo/SKILL.md +3 -2
  91. package/dist/client/assets/architecture-7GRP2DOG-CYv-P09J.js +0 -1
  92. package/dist/client/assets/channel-eN698CVO.js +0 -1
  93. package/dist/client/assets/eventmodeling-NTZA5JFV-Ur4Uzv5y.js +0 -1
  94. package/dist/client/assets/flowDiagram-KWPJA3E3-BQS1w4s1.js +0 -1
  95. package/dist/client/assets/index-BpeDzG-X.css +0 -1
  96. package/dist/client/assets/index-t7j89PJp.js +0 -91
  97. package/dist/client/assets/railroad-abnf-HS5TGJTU-DJU_abQP.js +0 -1
  98. package/dist/client/assets/railroad-ebnf-LZEXJU2U-_TwNbNw6.js +0 -1
  99. package/dist/client/assets/railroad-peg-WCYAUIDC-CAYsrf-p.js +0 -1
  100. package/dist/client/assets/swimlanesDiagram-TC7HE7FX-DrlgJMk7.js +0 -8
package/README.md CHANGED
@@ -21,7 +21,7 @@ come back as fixes.
21
21
  [![License](https://img.shields.io/badge/license-Apache--2.0-blue)](LICENSE)
22
22
  [![Node](https://img.shields.io/badge/node-%E2%89%A5%2024-brightgreen)](#quick-start)
23
23
  [![Docs](https://img.shields.io/badge/docs-diffo-8b5cf6)](https://diffohq.github.io/diffo/)
24
- [![Tests](https://img.shields.io/badge/tests-1000-brightgreen)](#contributing)
24
+ [![Tests](https://img.shields.io/badge/tests-1143-brightgreen)](#contributing)
25
25
 
26
26
  </div>
27
27
 
@@ -143,7 +143,7 @@ nothing to configure.
143
143
  </td>
144
144
  </tr>
145
145
  <tr>
146
- <td colspan="2">
146
+ <td width="50%">
147
147
 
148
148
  **It explains itself**
149
149
 
@@ -153,10 +153,27 @@ one orienting comment: a sentence on what the change does, plus a small
153
153
  orients, and it never pre-reviews: no verdicts, nothing is "fine". That judgement is the
154
154
  part it doesn't get to make.
155
155
 
156
+ </td>
157
+ <td width="50%">
158
+
159
+ **Read it in the right order**
160
+
161
+ A diff arrives alphabetically, which is almost never the order to read it in. Ask, and the
162
+ agent posts **layers**: the change as ordered steps, each with a title, a summary, and its
163
+ files. You read one layer at a time; `]` steps to the next. Anything the agent touches after
164
+ posting gathers in a *Since your review* layer, so nothing hides outside the plan.
165
+
156
166
  </td>
157
167
  </tr>
158
168
  </table>
159
169
 
170
+ <picture>
171
+ <source media="(prefers-color-scheme: dark)" srcset="docs/assets/layers-dark.gif">
172
+ <img alt="A 23-file change, every file folded. The header chip reads agent · suggests layers; the reviewer clicks it, eight layers land, and picking the first shows its summary card. ] steps to layers 2 and 3, where the reviewer asks on a line and the agent answers in the thread." src="docs/assets/layers.gif" width="100%">
173
+ </picture>
174
+
175
+ <p align="center"><sub>Layers, in one take: the agent offers an outline, the reviewer asks, and a 23-file change arrives as eight steps to read in order. Three layers in, a question on a line comes back answered in the thread. A real server and a real <code>diffo poll</code> on the other end; only the agent's thinking time is cut.</sub></p>
176
+
160
177
  ## Where it fits
161
178
 
162
179
  Diffo doesn't replace pull request review, and it isn't trying to. A pull request is how you
@@ -202,7 +219,7 @@ cheapest to change.
202
219
  | --- | --- |
203
220
  | [**Your first review**](https://diffohq.github.io/diffo/tutorial) | The whole loop end to end, about five minutes |
204
221
  | [**Getting started**](https://diffohq.github.io/diffo/guide/getting-started) | Install, and where each agent gets wired |
205
- | [**The review loop**](https://diffohq.github.io/diffo/guide/the-loop) | Reading, commenting, and what the agent receives |
222
+ | [**The review loop**](https://diffohq.github.io/diffo/guide/the-loop) | Reading, layers, commenting, and what the agent receives |
206
223
  | [**How it works**](https://diffohq.github.io/diffo/guide/how-it-works) | The components and the server lifecycle |
207
224
  | [**The agent side**](https://diffohq.github.io/diffo/agents) | The agent protocol: every command, every payload |
208
225
  | [**Architecture**](https://diffohq.github.io/diffo/architecture) | Diff pipeline, delivery queue, SQLite state |
@@ -214,7 +231,7 @@ cheapest to change.
214
231
  TypeScript on Node >= 24: a [Hono](https://hono.dev) server over loopback serving a React 19
215
232
  UI, live updates over server-sent events from one recursive filesystem watch, and state in a
216
233
  single SQLite file at `~/.diffo/diffo.db` through the runtime's built-in `node:sqlite`, so
217
- there is no database to install. **Zero network calls.** 1,000 tests across 57 files.
234
+ there is no database to install. **Zero network calls.** 1,143 tests across 63 files.
218
235
 
219
236
  Reviews are scoped per repo **and branch**, and the server is loopback-only, rejecting
220
237
  non-loopback `Host` and `Origin` headers so a web page can't reach into your repo through
@@ -254,6 +271,7 @@ daily — and the edges are still moving. What works today:
254
271
 
255
272
  - [x] [Live review of any changeset](https://diffohq.github.io/diffo/guide/how-it-works): the working tree, or anything since `--base`.
256
273
  - [x] [The comment loop](https://diffohq.github.io/diffo/guide/the-loop): threads that reach the session that wrote the code.
274
+ - [x] [Layers](https://diffohq.github.io/diffo/guide/the-loop#read-it-in-layers): the agent's reading plan, one ordered step at a time.
257
275
  - [x] [One setup, every agent](https://diffohq.github.io/diffo/guide/getting-started): Claude Code, Codex, Cursor, VS Code, Copilot CLI, Gemini CLI, Amp, Goose, OpenCode.
258
276
  - [x] [Reading tools](https://diffohq.github.io/diffo/reference/keyboard-shortcuts): unified and split diffs, word-level marks, coverage tracking.
259
277