@diffohq/diffo 0.6.0 → 0.7.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.
- package/README.md +13 -6
- package/dist/cli.mjs +2678 -310
- package/dist/client/assets/{abnfDiagram-O67JEVCF-vILxBZcB.js → abnfDiagram-O67JEVCF-1LPV7Bta.js} +1 -1
- package/dist/client/assets/{arc-KM37zfEu.js → arc-B6fobjtY.js} +1 -1
- package/dist/client/assets/architecture-7GRP2DOG-WcOrmKkC.js +1 -0
- package/dist/client/assets/{architectureDiagram-NJMV4G6O-CCe24XcA.js → architectureDiagram-NJMV4G6O-CTN0gguk.js} +1 -1
- package/dist/client/assets/{blockDiagram-BEXU5L5S-GL2esJ0w.js → blockDiagram-BEXU5L5S-DTR5PHKV.js} +1 -1
- package/dist/client/assets/{c4Diagram-YGBWAQC7-BcRujrvs.js → c4Diagram-YGBWAQC7-NGxq4JmF.js} +1 -1
- package/dist/client/assets/channel-DhaDDyGS.js +1 -0
- package/dist/client/assets/{chunk-3FUC2YCW-Gj4X9KK9.js → chunk-3FUC2YCW-DA-Lgw5Q.js} +1 -1
- package/dist/client/assets/{chunk-5DYCD2WN-DZs-erj_.js → chunk-5DYCD2WN-DcE0aMs7.js} +1 -1
- package/dist/client/assets/{chunk-742MDFTN-Db1JJZ9G.js → chunk-742MDFTN-CyTGvDWd.js} +1 -1
- package/dist/client/assets/{chunk-7INBJB4K-B_wqJ7Xn.js → chunk-7INBJB4K-Dd4mQ9Jx.js} +1 -1
- package/dist/client/assets/{chunk-7M6MHVWA-DuALBizw.js → chunk-7M6MHVWA-CTU7JU3x.js} +1 -1
- package/dist/client/assets/{chunk-7PRAP22T-D9QvZUm3.js → chunk-7PRAP22T-BF_GNhON.js} +1 -1
- package/dist/client/assets/{chunk-GTNCS2PH-JFHsSpPU.js → chunk-GTNCS2PH-Bu7kc4uW.js} +1 -1
- package/dist/client/assets/{chunk-GWA4HPMP-CX_60U9Y.js → chunk-GWA4HPMP-DOeikbS_.js} +1 -1
- package/dist/client/assets/{chunk-MBY4JIJT-BVqUStmy.js → chunk-MBY4JIJT-BMMqnoVS.js} +1 -1
- package/dist/client/assets/{chunk-NETBCI7D-BoSm0O5f.js → chunk-NETBCI7D-YxbfsgLs.js} +1 -1
- package/dist/client/assets/{chunk-O7XYJQB3-DG64mbS_.js → chunk-O7XYJQB3-B5lrUf5i.js} +1 -1
- package/dist/client/assets/{chunk-UA2S7LBM-BL039fcM.js → chunk-UA2S7LBM-BDaXVsL8.js} +1 -1
- package/dist/client/assets/{chunk-WEXAMYUT-BPFyuzbi.js → chunk-WEXAMYUT-DxlWoHYQ.js} +1 -1
- package/dist/client/assets/{chunk-XXDRQBXY-BzCs4oPB.js → chunk-XXDRQBXY-Cp47KzsC.js} +1 -1
- package/dist/client/assets/{chunk-Z7XXMR3K-D9UN9ldM.js → chunk-Z7XXMR3K-CESnPXew.js} +1 -1
- package/dist/client/assets/{chunk-ZIGJFQKS-D47UlTiy.js → chunk-ZIGJFQKS-CNWS7Wkq.js} +1 -1
- package/dist/client/assets/{classDiagram-v2-NBCMYWYE-CXeBds6Z.js → classDiagram-v2-NBCMYWYE-BceAVX_T.js} +1 -1
- package/dist/client/assets/{core-De6Bel6T.js → core-Br-4vljZ.js} +1 -1
- package/dist/client/assets/{cose-bilkent-JH36ORCC-C5C9BMn5.js → cose-bilkent-JH36ORCC-D__9SuyS.js} +1 -1
- package/dist/client/assets/{cynefin-OW5HDTMX-TQm3krMs.js → cynefin-OW5HDTMX-DgTdpSz6.js} +1 -1
- package/dist/client/assets/{cynefinDiagram-VND7K2PF-D9L1g2S1.js → cynefinDiagram-VND7K2PF-CWEqRTNF.js} +1 -1
- package/dist/client/assets/{dagre-6A5THRUB-D9iVd0tg.js → dagre-6A5THRUB-B3HGDOgj.js} +1 -1
- package/dist/client/assets/{diagram-22UHCM2B-CD_1yZgj.js → diagram-22UHCM2B-Ce04XJcX.js} +1 -1
- package/dist/client/assets/{diagram-3UASUU5V-BLiXkub3.js → diagram-3UASUU5V-Bp5Chgzw.js} +1 -1
- package/dist/client/assets/{diagram-ATOU4E4O-CnXY0tjf.js → diagram-ATOU4E4O-BmKaDuB5.js} +1 -1
- package/dist/client/assets/{diagram-CDSNMT55-BBnDsrf_.js → diagram-CDSNMT55-DrSDVwyB.js} +1 -1
- package/dist/client/assets/{diagram-MLGK6HIB-BUiu4OKD.js → diagram-MLGK6HIB-8AyH2eMG.js} +1 -1
- package/dist/client/assets/{diagram-MPIPVDR6-DiI9FWeO.js → diagram-MPIPVDR6-C9AcuOld.js} +1 -1
- package/dist/client/assets/{dist-Co85aeoI.js → dist-CVtr89jj.js} +1 -1
- package/dist/client/assets/{dist-BWYGCgdo.js → dist-Cdc7REqJ.js} +1 -1
- package/dist/client/assets/{ebnfDiagram-ZINNZB2B-Bg_BLedv.js → ebnfDiagram-ZINNZB2B-DX6ekwEH.js} +1 -1
- package/dist/client/assets/{elk-276RUBZZ-BO7Zoa7U.js → elk-276RUBZZ-Cm9uWHa7.js} +1 -1
- package/dist/client/assets/{engine-oniguruma-DCFwTJLE.js → engine-oniguruma-DbGd6VkA.js} +1 -1
- package/dist/client/assets/{erDiagram-OPXOYQCR-DjBak3Ld.js → erDiagram-OPXOYQCR-CaUHiYv4.js} +1 -1
- package/dist/client/assets/eventmodeling-NTZA5JFV-n7NgJYAj.js +1 -0
- package/dist/client/assets/flowDiagram-KWPJA3E3-B-DNn9sz.js +1 -0
- package/dist/client/assets/{ganttDiagram-FUAMR5RP-CEn0Np5L.js → ganttDiagram-FUAMR5RP-DL6UN0sq.js} +1 -1
- package/dist/client/assets/{gitGraph-4MIJSDKK-DVMdaaG2.js → gitGraph-4MIJSDKK-CsKV1QJN.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-X574FWY7-B6ZkiY7u.js → gitGraphDiagram-X574FWY7-D8Snpa_F.js} +1 -1
- package/dist/client/assets/index-CE0LasmM.css +1 -0
- package/dist/client/assets/index-CEiheKtN.js +91 -0
- package/dist/client/assets/{info-A6RAGUB7-Idt2RahI.js → info-A6RAGUB7-BxOCsCG2.js} +1 -1
- package/dist/client/assets/{infoDiagram-VRGFBTTK-CA8T3csq.js → infoDiagram-VRGFBTTK-CfW5lEnk.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-OU5B5YK6-DcgLwVJX.js → ishikawaDiagram-OU5B5YK6-B4gbggT_.js} +1 -1
- package/dist/client/assets/{journeyDiagram-ZHPQQLJL-_AVEW5aE.js → journeyDiagram-ZHPQQLJL-IWmYxrcn.js} +1 -1
- package/dist/client/assets/{kanban-definition-PNTS6WVX-CZ2gNo-B.js → kanban-definition-PNTS6WVX-CbaKE2PB.js} +1 -1
- package/dist/client/assets/{line-CHew3ngr.js → line-BtA026Ya.js} +1 -1
- package/dist/client/assets/{linear-Baz1Hb3u.js → linear-B5Crnel0.js} +1 -1
- package/dist/client/assets/{mermaid-parser.core-D2BrkwRE.js → mermaid-parser.core-BPmT-0j3.js} +3 -3
- package/dist/client/assets/{mermaid.core-CCFlYVgY.js → mermaid.core-BTblV3B-.js} +4 -4
- package/dist/client/assets/{mindmap-definition-NLK3R4M7-BXG9w5sC.js → mindmap-definition-NLK3R4M7-CIB2jRud.js} +1 -1
- package/dist/client/assets/{packet-AYTQ26CC-BOvg32Rh.js → packet-AYTQ26CC-BWwlCBfL.js} +1 -1
- package/dist/client/assets/{pegDiagram-GJSIUBJH-COukdq7o.js → pegDiagram-GJSIUBJH-DhOZCJeC.js} +1 -1
- package/dist/client/assets/{pie-WAS4IAKB-ChHsdIQV.js → pie-WAS4IAKB-BYPEomkb.js} +1 -1
- package/dist/client/assets/{pieDiagram-5QR66LMP-Deng5oun.js → pieDiagram-5QR66LMP-BPMuMrQa.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-O4NWA36T-DmEJ83mR.js → quadrantDiagram-O4NWA36T-CNiAZ4Fx.js} +1 -1
- package/dist/client/assets/{radar-RG4KPBEZ-YxcXBiXc.js → radar-RG4KPBEZ-D4cJCxoB.js} +1 -1
- package/dist/client/assets/{railroad-74A4TZTK-RkYX7A2D.js → railroad-74A4TZTK-GypTiD9-.js} +1 -1
- package/dist/client/assets/railroad-abnf-HS5TGJTU-CJCTFtWl.js +1 -0
- package/dist/client/assets/railroad-ebnf-LZEXJU2U-DEndv2ed.js +1 -0
- package/dist/client/assets/railroad-peg-WCYAUIDC-BJQI82cq.js +1 -0
- package/dist/client/assets/{railroadDiagram-XR7U4H2S-uj5HQbYy.js → railroadDiagram-XR7U4H2S-C9onf3MB.js} +1 -1
- package/dist/client/assets/{requirementDiagram-PLB6GJNP-C_QtkIlI.js → requirementDiagram-PLB6GJNP-BAtMHH1O.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-IPEJSGJF-BfxM5TKv.js → sankeyDiagram-IPEJSGJF-ByIBebPb.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-PO4LG4MO-DXflg1u_.js → sequenceDiagram-PO4LG4MO-CZWeGbVd.js} +1 -1
- package/dist/client/assets/{src-YTrwJCk8.js → src-3ZsKiqdK.js} +1 -1
- package/dist/client/assets/{stateDiagram-v2-GCMORJYK-BjDmED1Q.js → stateDiagram-v2-GCMORJYK-BLS3Ppqp.js} +1 -1
- package/dist/client/assets/{swimlanes-2SLR337P-BAvnQ6KT.js → swimlanes-2SLR337P-VfJv1Azt.js} +1 -1
- package/dist/client/assets/swimlanesDiagram-TC7HE7FX-CsAstSgi.js +8 -0
- package/dist/client/assets/{timeline-definition-EJHVYXUP-BYemcgr1.js → timeline-definition-EJHVYXUP-CFsTCeFJ.js} +1 -1
- package/dist/client/assets/{treeView-Q6P3EWNA-CsuBtqLq.js → treeView-Q6P3EWNA-BcU2cd9W.js} +1 -1
- package/dist/client/assets/{treemap-WGGIJYW6-DUk1Z6g4.js → treemap-WGGIJYW6-BKWQgOsJ.js} +1 -1
- package/dist/client/assets/{usecaseDiagram-POWQR4AR-j1nHXvyL.js → usecaseDiagram-POWQR4AR-CaDVH5UF.js} +1 -1
- package/dist/client/assets/{vennDiagram-UO4OBE2U-B5eUL-dD.js → vennDiagram-UO4OBE2U-BD60NU6D.js} +1 -1
- package/dist/client/assets/{wardley-WFR3VGLG-1YjpwPJM.js → wardley-WFR3VGLG-CGRKLXxQ.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-VNRHLVJA-C7laBq5A.js → wardleyDiagram-VNRHLVJA-BNSajOpz.js} +1 -1
- package/dist/client/assets/{xychartDiagram-PMCCYNJV-BkYPx-ts.js → xychartDiagram-PMCCYNJV-Bw7XhF-N.js} +1 -1
- package/dist/client/index.html +2 -2
- package/package.json +1 -1
- package/plugin.json +1 -1
- package/skills/diffo/SKILL.md +7 -4
- package/dist/client/assets/architecture-7GRP2DOG-DzlmD0Wj.js +0 -1
- package/dist/client/assets/channel-BffjfVqs.js +0 -1
- package/dist/client/assets/eventmodeling-NTZA5JFV-BA4dpxhq.js +0 -1
- package/dist/client/assets/flowDiagram-KWPJA3E3-BXSGu0Q5.js +0 -1
- package/dist/client/assets/index-6w3rS9cw.js +0 -91
- package/dist/client/assets/index-D934d4yh.css +0 -1
- package/dist/client/assets/railroad-abnf-HS5TGJTU-CYF7Z2Wu.js +0 -1
- package/dist/client/assets/railroad-ebnf-LZEXJU2U-CqV11tet.js +0 -1
- package/dist/client/assets/railroad-peg-WCYAUIDC-CPusJj6I.js +0 -1
- package/dist/client/assets/swimlanesDiagram-TC7HE7FX-CbFPwcec.js +0 -8
package/README.md
CHANGED
|
@@ -32,9 +32,9 @@ come back as fixes.
|
|
|
32
32
|
<!-- Light-theme only. The clip opens once the session has finished writing the change:
|
|
33
33
|
waiting on the agent is fast-forwarded — the badge in the session's corner says so
|
|
34
34
|
while it runs — and nothing else is cut. -->
|
|
35
|
-
<img alt="One take of the whole loop. A Claude Code session has just written natural-language due dates into a todo app; the reviewer types /diffo, and the session opens a live review and hands over its localhost URL, which opens beside the session. The reviewer leaves a question on the weekday line
|
|
35
|
+
<img alt="One take of the whole loop. A Claude Code session has just written natural-language due dates into a todo app; the reviewer types /diffo, and the session opens a live review and hands over its localhost URL, which opens beside the session. The reviewer leaves a question on the weekday line (a bare weekday always lands next week, should it mean today?) and the agent's answer appears in the thread while they watch." src="docs/assets/loop.gif" width="100%">
|
|
36
36
|
|
|
37
|
-
<p align="center"><sub>The whole loop in one take: type <code>/diffo</code>, read the diff, ask on the line
|
|
37
|
+
<p align="center"><sub>The whole loop in one take: type <code>/diffo</code>, read the diff, ask on the line, and the answer comes back in the thread. Left is a real Claude Code session, right is the real review it opened. Nothing here is a mock-up; the only edit is that waiting on the agent runs fast.</sub></p>
|
|
38
38
|
|
|
39
39
|
---
|
|
40
40
|
|
|
@@ -192,6 +192,11 @@ So they stack rather than compete: iterate here until the diff reads clean, then
|
|
|
192
192
|
pull request you actually want reviewed. Your judgement is the scarce resource, and this is
|
|
193
193
|
the stage where spending it changes the outcome.
|
|
194
194
|
|
|
195
|
+
And when a pull request lands on *your* desk, Diffo reads that too: `/diffo <PR link>`
|
|
196
|
+
opens it in a worktree of its own, imports its conversation, puts your agent beside you as
|
|
197
|
+
a copilot for code it did not write, and submits your review to GitHub when you finish.
|
|
198
|
+
[Reviewing a pull request](https://diffohq.github.io/diffo/guide/pr-review) has the loop.
|
|
199
|
+
|
|
195
200
|
---
|
|
196
201
|
|
|
197
202
|
## How it works
|
|
@@ -231,7 +236,8 @@ cheapest to change.
|
|
|
231
236
|
TypeScript on Node >= 24: a [Hono](https://hono.dev) server over loopback serving a React 19
|
|
232
237
|
UI, live updates over server-sent events from one recursive filesystem watch, and state in a
|
|
233
238
|
single SQLite file at `~/.diffo/diffo.db` through the runtime's built-in `node:sqlite`, so
|
|
234
|
-
there is no database to install. **
|
|
239
|
+
there is no database to install. **No network calls of its own**: a pull request review
|
|
240
|
+
talks to GitHub only through your `gh`. 1,307 tests across 70 files.
|
|
235
241
|
|
|
236
242
|
Reviews are scoped per repo **and branch**, and the server is loopback-only, rejecting
|
|
237
243
|
non-loopback `Host` and `Origin` headers so a web page can't reach into your repo through
|
|
@@ -266,14 +272,15 @@ we commit to: **anything that runs on your machine for one reviewer is core.**
|
|
|
266
272
|
|
|
267
273
|
## Status
|
|
268
274
|
|
|
269
|
-
Diffo is pre-1.0: the loop below works end to end
|
|
270
|
-
daily
|
|
275
|
+
Diffo is pre-1.0: the loop below works end to end (this repo is reviewed with it
|
|
276
|
+
daily) and the edges are still moving. What works today:
|
|
271
277
|
|
|
272
278
|
- [x] [Live review of any changeset](https://diffohq.github.io/diffo/guide/how-it-works): the working tree, or anything since `--base`.
|
|
273
279
|
- [x] [The comment loop](https://diffohq.github.io/diffo/guide/the-loop): threads that reach the session that wrote the code.
|
|
274
280
|
- [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.
|
|
275
281
|
- [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.
|
|
276
282
|
- [x] [Reading tools](https://diffohq.github.io/diffo/reference/keyboard-shortcuts): unified and split diffs, word-level marks, coverage tracking.
|
|
283
|
+
- [x] [Pull request review](https://diffohq.github.io/diffo/guide/pr-review): `diffo <PR URL>` reviews a GitHub PR in a worktree of its own, with the conversation imported and your review submitted from Diffo.
|
|
277
284
|
|
|
278
285
|
## Contributing
|
|
279
286
|
|
|
@@ -286,7 +293,7 @@ pnpm typecheck && pnpm test && pnpm build && pnpm lint && pnpm docs:build
|
|
|
286
293
|
Local development is `pnpm dev` (server and client together). One hard rule:
|
|
287
294
|
**`skills/diffo/SKILL.md` is generated.** Edit [`src/skill.ts`](src/skill.ts) and run
|
|
288
295
|
`pnpm build:skill`; a test fails if the committed file drifts. That rewrites the repo
|
|
289
|
-
file, not the skill your own agent runs
|
|
296
|
+
file, not the skill your own agent runs; `pnpm dev:skill --global` installs a separate
|
|
290
297
|
`/diffo-dev` that drives your checkout, alongside the shipped `/diffo`.
|
|
291
298
|
|
|
292
299
|
Details in [CONTRIBUTING.md](CONTRIBUTING.md), plus a [Code of Conduct](CODE_OF_CONDUCT.md)
|