@peaske7/readit 0.1.4 → 0.1.6
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/.agents/skills/remotion-best-practices/SKILL.md +61 -0
- package/.agents/skills/remotion-best-practices/rules/3d.md +86 -0
- package/.agents/skills/remotion-best-practices/rules/animations.md +27 -0
- package/.agents/skills/remotion-best-practices/rules/assets/charts-bar-chart.tsx +178 -0
- package/.agents/skills/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
- package/.agents/skills/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +108 -0
- package/.agents/skills/remotion-best-practices/rules/assets.md +78 -0
- package/.agents/skills/remotion-best-practices/rules/audio-visualization.md +198 -0
- package/.agents/skills/remotion-best-practices/rules/audio.md +169 -0
- package/.agents/skills/remotion-best-practices/rules/calculate-metadata.md +134 -0
- package/.agents/skills/remotion-best-practices/rules/can-decode.md +75 -0
- package/.agents/skills/remotion-best-practices/rules/charts.md +120 -0
- package/.agents/skills/remotion-best-practices/rules/compositions.md +154 -0
- package/.agents/skills/remotion-best-practices/rules/display-captions.md +184 -0
- package/.agents/skills/remotion-best-practices/rules/extract-frames.md +229 -0
- package/.agents/skills/remotion-best-practices/rules/ffmpeg.md +38 -0
- package/.agents/skills/remotion-best-practices/rules/fonts.md +152 -0
- package/.agents/skills/remotion-best-practices/rules/get-audio-duration.md +58 -0
- package/.agents/skills/remotion-best-practices/rules/get-video-dimensions.md +68 -0
- package/.agents/skills/remotion-best-practices/rules/get-video-duration.md +60 -0
- package/.agents/skills/remotion-best-practices/rules/gifs.md +141 -0
- package/.agents/skills/remotion-best-practices/rules/images.md +134 -0
- package/.agents/skills/remotion-best-practices/rules/import-srt-captions.md +69 -0
- package/.agents/skills/remotion-best-practices/rules/light-leaks.md +73 -0
- package/.agents/skills/remotion-best-practices/rules/lottie.md +70 -0
- package/.agents/skills/remotion-best-practices/rules/maps.md +412 -0
- package/.agents/skills/remotion-best-practices/rules/measuring-dom-nodes.md +34 -0
- package/.agents/skills/remotion-best-practices/rules/measuring-text.md +140 -0
- package/.agents/skills/remotion-best-practices/rules/parameters.md +109 -0
- package/.agents/skills/remotion-best-practices/rules/sequencing.md +118 -0
- package/.agents/skills/remotion-best-practices/rules/sfx.md +26 -0
- package/.agents/skills/remotion-best-practices/rules/subtitles.md +36 -0
- package/.agents/skills/remotion-best-practices/rules/tailwind.md +11 -0
- package/.agents/skills/remotion-best-practices/rules/text-animations.md +20 -0
- package/.agents/skills/remotion-best-practices/rules/timing.md +179 -0
- package/.agents/skills/remotion-best-practices/rules/transcribe-captions.md +70 -0
- package/.agents/skills/remotion-best-practices/rules/transitions.md +197 -0
- package/.agents/skills/remotion-best-practices/rules/transparent-videos.md +106 -0
- package/.agents/skills/remotion-best-practices/rules/trimming.md +51 -0
- package/.agents/skills/remotion-best-practices/rules/videos.md +171 -0
- package/.agents/skills/remotion-best-practices/rules/voiceover.md +99 -0
- package/.agents/skills/simple/SKILL.md +52 -0
- package/.agents/skills/vercel-react-best-practices/AGENTS.md +3254 -0
- package/.agents/skills/vercel-react-best-practices/README.md +123 -0
- package/.agents/skills/vercel-react-best-practices/SKILL.md +141 -0
- package/.agents/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/.agents/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
- package/.agents/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
- package/.agents/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
- package/.agents/skills/vercel-react-best-practices/rules/async-defer-await.md +80 -0
- package/.agents/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
- package/.agents/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
- package/.agents/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/.agents/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +59 -0
- package/.agents/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
- package/.agents/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/.agents/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/.agents/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
- package/.agents/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
- package/.agents/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/.agents/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/.agents/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
- package/.agents/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
- package/.agents/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
- package/.agents/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
- package/.agents/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
- package/.agents/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
- package/.agents/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
- package/.agents/skills/vercel-react-best-practices/rules/js-flatmap-filter.md +60 -0
- package/.agents/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/.agents/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
- package/.agents/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
- package/.agents/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
- package/.agents/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/.agents/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/.agents/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
- package/.agents/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/.agents/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/.agents/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/.agents/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/.agents/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/.agents/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
- package/.agents/skills/vercel-react-best-practices/rules/rendering-resource-hints.md +85 -0
- package/.agents/skills/vercel-react-best-practices/rules/rendering-script-defer-async.md +68 -0
- package/.agents/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/.agents/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
- package/.agents/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/.agents/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
- package/.agents/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
- package/.agents/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
- package/.agents/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/.agents/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/.agents/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
- package/.agents/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
- package/.agents/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
- package/.agents/skills/vercel-react-best-practices/rules/rerender-no-inline-components.md +82 -0
- package/.agents/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
- package/.agents/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
- package/.agents/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
- package/.agents/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/.agents/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
- package/.agents/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
- package/.agents/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
- package/.agents/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
- package/.agents/skills/vercel-react-best-practices/rules/server-hoist-static-io.md +142 -0
- package/.agents/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/.agents/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
- package/.claude/CLAUDE.md +142 -0
- package/.claude/commands/review.md +120 -0
- package/.claude/commands/sync-docs.md +71 -0
- package/.claude/roadmap.md +98 -0
- package/.claude/rules/style-guide.md +830 -0
- package/.claude/settings.json +18 -0
- package/.claude/user-stories.md +248 -0
- package/AGENTS.md +64 -0
- package/README.md +7 -7
- package/biome.json +69 -0
- package/bun.lock +1124 -0
- package/docs/design.md +563 -0
- package/docs/plans/2026-03-13-client-mode-design.md +86 -0
- package/docs/plans/2026-03-13-client-mode-plan.md +605 -0
- package/docs/plans/2026-03-13-keyboard-shortcuts-design.md +129 -0
- package/docs/plans/2026-03-13-keyboard-shortcuts-plan.md +1471 -0
- package/docs/plans/2026-03-13-multi-document-design.md +183 -0
- package/docs/plans/2026-03-13-performance-benchmarks-design.md +121 -0
- package/e2e/comments.spec.ts +125 -0
- package/e2e/document-load.spec.ts +54 -0
- package/e2e/export.spec.ts +58 -0
- package/e2e/fixtures/sample.html +13 -0
- package/e2e/fixtures/sample.md +7 -0
- package/e2e/persistence-file.spec.ts +342 -0
- package/e2e/utils/cli.ts +84 -0
- package/e2e/utils/selection.ts +135 -0
- package/{dist/index.html → index.html} +8 -2
- package/lefthook.yml +8 -0
- package/package.json +17 -39
- package/playwright.config.ts +22 -0
- package/skills-lock.json +20 -0
- package/src/App.tsx +396 -0
- package/src/cli/index.ts +467 -0
- package/src/components/ActionsMenu.tsx +110 -0
- package/src/components/DocumentViewer/CodeBlock.tsx +83 -0
- package/src/components/DocumentViewer/DocumentViewer.tsx +257 -0
- package/src/components/DocumentViewer/IframeContainer.tsx +251 -0
- package/src/components/DocumentViewer/MermaidDiagram.tsx +137 -0
- package/src/components/DocumentViewer/index.ts +1 -0
- package/src/components/FloatingTOC.tsx +59 -0
- package/src/components/Header.tsx +63 -0
- package/src/components/InlineEditor.tsx +72 -0
- package/src/components/MarginNote.tsx +198 -0
- package/src/components/MarginNotes.tsx +50 -0
- package/src/components/RawModal.tsx +141 -0
- package/src/components/ReanchorConfirm.tsx +33 -0
- package/src/components/SettingsModal.tsx +221 -0
- package/src/components/ShortcutCapture.tsx +45 -0
- package/src/components/ShortcutList.tsx +157 -0
- package/src/components/TabBar.tsx +60 -0
- package/src/components/TableOfContents.tsx +108 -0
- package/src/components/comments/CommentBadge.tsx +43 -0
- package/src/components/comments/CommentInput.tsx +119 -0
- package/src/components/comments/CommentListItem.tsx +82 -0
- package/src/components/comments/CommentManager.tsx +106 -0
- package/src/components/comments/CommentMinimap.tsx +62 -0
- package/src/components/comments/CommentNav.tsx +104 -0
- package/src/components/ui/ActionBar.tsx +16 -0
- package/src/components/ui/ActionLink.tsx +32 -0
- package/src/components/ui/Button.tsx +55 -0
- package/src/components/ui/Dialog.tsx +156 -0
- package/src/components/ui/DropdownMenu.tsx +114 -0
- package/src/components/ui/SeparatorDot.tsx +9 -0
- package/src/components/ui/Text.tsx +54 -0
- package/src/contexts/CommentContext.tsx +222 -0
- package/src/contexts/LayoutContext.tsx +76 -0
- package/src/hooks/useClickOutside.ts +35 -0
- package/src/hooks/useClipboard.ts +79 -0
- package/src/hooks/useCommentNavigation.ts +130 -0
- package/src/hooks/useComments.ts +323 -0
- package/src/hooks/useDocument.ts +141 -0
- package/src/hooks/useFontPreference.ts +76 -0
- package/src/hooks/useHeadings.test.ts +159 -0
- package/src/hooks/useHeadings.ts +129 -0
- package/src/hooks/useKeybindings.ts +120 -0
- package/src/hooks/useKeyboardShortcuts.ts +63 -0
- package/src/hooks/useLayoutMode.ts +44 -0
- package/src/hooks/useReanchorMode.ts +33 -0
- package/src/hooks/useScrollMetrics.ts +56 -0
- package/src/hooks/useScrollSpy.ts +81 -0
- package/src/hooks/useTextSelection.ts +123 -0
- package/src/hooks/useThemePreference.ts +66 -0
- package/src/index.css +823 -0
- package/src/lib/__fixtures__/bench-data.ts +167 -0
- package/src/lib/anchor.bench.ts +112 -0
- package/src/lib/anchor.test.ts +531 -0
- package/src/lib/anchor.ts +465 -0
- package/src/lib/comment-storage.bench.ts +63 -0
- package/src/lib/comment-storage.test.ts +624 -0
- package/src/lib/comment-storage.ts +263 -0
- package/src/lib/context.bench.ts +41 -0
- package/src/lib/context.test.ts +224 -0
- package/src/lib/context.ts +193 -0
- package/src/lib/export.bench.ts +35 -0
- package/src/lib/export.ts +43 -0
- package/src/lib/highlight/colors.ts +37 -0
- package/src/lib/highlight/core.test.ts +98 -0
- package/src/lib/highlight/core.ts +54 -0
- package/src/lib/highlight/dom.ts +342 -0
- package/src/lib/highlight/highlighter.ts +427 -0
- package/src/lib/highlight/index.ts +23 -0
- package/src/lib/highlight/script-builder.ts +485 -0
- package/src/lib/highlight/types.ts +57 -0
- package/src/lib/html-processor.test.tsx +170 -0
- package/src/lib/html-processor.tsx +95 -0
- package/src/lib/layout-constants.ts +12 -0
- package/src/lib/margin-layout.bench.ts +28 -0
- package/src/lib/margin-layout.ts +100 -0
- package/src/lib/scroll.test.ts +118 -0
- package/src/lib/scroll.ts +47 -0
- package/src/lib/shortcut-registry.test.ts +173 -0
- package/src/lib/shortcut-registry.ts +209 -0
- package/src/lib/utils.test.ts +110 -0
- package/src/lib/utils.ts +61 -0
- package/src/main.tsx +10 -0
- package/src/server/index.ts +883 -0
- package/src/store/index.test.ts +220 -0
- package/src/store/index.ts +234 -0
- package/src/test-setup.ts +1 -0
- package/src/types/index.ts +115 -0
- package/test.md +74 -0
- package/tsconfig.cli.json +12 -0
- package/tsconfig.json +20 -0
- package/vite.config.ts +19 -0
- package/vitest.config.ts +15 -0
- package/dist/assets/_basePickBy-hOr-yGsE.js +0 -1
- package/dist/assets/_baseUniq-b7bzdUSn.js +0 -1
- package/dist/assets/arc-D65wG9gm.js +0 -1
- package/dist/assets/architecture-PBZL5I3N-DBa6CAv_.js +0 -1
- package/dist/assets/architectureDiagram-2XIMDMQ5-Djwpsh98.js +0 -36
- package/dist/assets/array-DOVTz2Mq.js +0 -1
- package/dist/assets/blockDiagram-WCTKOSBZ-BdW5TTxj.js +0 -132
- package/dist/assets/c4Diagram-IC4MRINW-DTmkHEXu.js +0 -10
- package/dist/assets/channel-B3MUFipN.js +0 -1
- package/dist/assets/chunk-4BX2VUAB-DEqzsvDc.js +0 -1
- package/dist/assets/chunk-55IACEB6-BzVuSUV8.js +0 -1
- package/dist/assets/chunk-7E7YKBS2-CZ8IcA4c.js +0 -1
- package/dist/assets/chunk-7R4GIKGN-CWVVC8HX.js +0 -79
- package/dist/assets/chunk-C72U2L5F-B1Tso5TH.js +0 -1
- package/dist/assets/chunk-EGIJ26TM-Cx_7CFik.js +0 -1
- package/dist/assets/chunk-FMBD7UC4-Cfk_iGhv.js +0 -15
- package/dist/assets/chunk-GEFDOKGD-C_5hRbJt.js +0 -2
- package/dist/assets/chunk-GLR3WWYH-CkY7IyBj.js +0 -2
- package/dist/assets/chunk-HHEYEP7N-B0I4X5cr.js +0 -1
- package/dist/assets/chunk-JSJVCQXG-CAjwlVLg.js +0 -1
- package/dist/assets/chunk-KX2RTZJC-DWqnZZ02.js +0 -1
- package/dist/assets/chunk-KYZI473N-gjRVhJgJ.js +0 -53
- package/dist/assets/chunk-L3YUKLVL-D7C9GuxL.js +0 -1
- package/dist/assets/chunk-MX3YWQON-i-77iuVj.js +0 -1
- package/dist/assets/chunk-NQ4KR5QH-B22Pvemm.js +0 -220
- package/dist/assets/chunk-O4XLMI2P-ZQd5L6ZD.js +0 -7
- package/dist/assets/chunk-OZEHJAEY-BaPKTELw.js +0 -1
- package/dist/assets/chunk-PQ6SQG4A-DqE1eupT.js +0 -1
- package/dist/assets/chunk-PU5JKC2W-BTqWqedh.js +0 -70
- package/dist/assets/chunk-QZHKN3VN-Nm9TvMss.js +0 -1
- package/dist/assets/chunk-R5LLSJPH-DkiNs1dN.js +0 -1
- package/dist/assets/chunk-WL4C6EOR-CioD2fv2.js +0 -189
- package/dist/assets/chunk-XIRO2GV7-B4GGQONY.js +0 -1
- package/dist/assets/chunk-XPW4576I-C0IbbQos.js +0 -32
- package/dist/assets/chunk-XZSTWKYB-DMOqFWmT.js +0 -94
- package/dist/assets/chunk-YBOYWFTD-CoeQgeVY.js +0 -1
- package/dist/assets/classDiagram-VBA2DB6C-DV9ltQ7h.js +0 -1
- package/dist/assets/classDiagram-v2-RAHNMMFH-C6nD9wmM.js +0 -1
- package/dist/assets/clone-DuY6BQEm.js +0 -1
- package/dist/assets/cose-bilkent-S5V4N54A-B6FexK6p.js +0 -1
- package/dist/assets/cytoscape.esm-DoTFyJaN.js +0 -321
- package/dist/assets/dagre-CCcocoCU.js +0 -1
- package/dist/assets/dagre-KLK3FWXG-DIELowj9.js +0 -4
- package/dist/assets/defaultLocale-Ck2Xxk-C.js +0 -1
- package/dist/assets/diagram-E7M64L7V-D1mm0PoO.js +0 -24
- package/dist/assets/diagram-IFDJBPK2-7DVjly8y.js +0 -43
- package/dist/assets/diagram-P4PSJMXO-jO7pfyMb.js +0 -24
- package/dist/assets/dist-BywRdrPx.js +0 -1
- package/dist/assets/erDiagram-INFDFZHY-DSRxlRFy.js +0 -70
- package/dist/assets/flowDiagram-PKNHOUZH-CgKzzNdR.js +0 -162
- package/dist/assets/ganttDiagram-A5KZAMGK-CtsE7Y4E.js +0 -292
- package/dist/assets/gitGraph-HDMCJU4V-BU9uhwtz.js +0 -1
- package/dist/assets/gitGraphDiagram-K3NZZRJ6-DOU8RGdw.js +0 -65
- package/dist/assets/graphlib-WkJoBgka.js +0 -1
- package/dist/assets/index-CKVArt9D.js +0 -562
- package/dist/assets/index-DzRKJazf.css +0 -2
- package/dist/assets/info-3K5VOQVL-CPpvM-SG.js +0 -1
- package/dist/assets/infoDiagram-LFFYTUFH-VKLs5DsF.js +0 -2
- package/dist/assets/init-Bft5Ffpj.js +0 -1
- package/dist/assets/isArrayLikeObject-icl0H0jo.js +0 -1
- package/dist/assets/isEmpty-Du8sNmkE.js +0 -1
- package/dist/assets/ishikawaDiagram-PHBUUO56-CsWvEjux.js +0 -70
- package/dist/assets/journeyDiagram-4ABVD52K-BzJGTdIT.js +0 -139
- package/dist/assets/kanban-definition-K7BYSVSG-B_9ClJ1A.js +0 -89
- package/dist/assets/katex-BJrMXEjr.js +0 -261
- package/dist/assets/line-CC_tDGId.js +0 -1
- package/dist/assets/linear-Cts_d04Y.js +0 -1
- package/dist/assets/math-CNhlSIO3.js +0 -1
- package/dist/assets/mermaid-parser.core-Vb9KKv1R.js +0 -4
- package/dist/assets/mermaid.core-C_7xsp3d.js +0 -11
- package/dist/assets/mindmap-definition-YRQLILUH-BWmfy5wB.js +0 -68
- package/dist/assets/ordinal-DIg8h6NI.js +0 -1
- package/dist/assets/packet-RMMSAZCW-Q-WG6o3b.js +0 -1
- package/dist/assets/path-DfRbCp9y.js +0 -1
- package/dist/assets/pie-UPGHQEXC-Cwi2tLlt.js +0 -1
- package/dist/assets/pieDiagram-SKSYHLDU-Dyf3X_in.js +0 -30
- package/dist/assets/quadrantDiagram-337W2JSQ-B5_5m61Q.js +0 -7
- package/dist/assets/radar-KQ55EAFF-Dtw2VzxY.js +0 -1
- package/dist/assets/requirementDiagram-Z7DCOOCP-BSERBnlW.js +0 -73
- package/dist/assets/rough.esm-KjoEK0it.js +0 -1
- package/dist/assets/sankeyDiagram-WA2Y5GQK-CMcEY8Cz.js +0 -10
- package/dist/assets/sequenceDiagram-2WXFIKYE-D28qcXwC.js +0 -145
- package/dist/assets/src-C8kkzlHX.js +0 -1
- package/dist/assets/stateDiagram-RAJIS63D-7oVrCmRl.js +0 -1
- package/dist/assets/stateDiagram-v2-FVOUBMTO-DtFptQAd.js +0 -1
- package/dist/assets/timeline-definition-YZTLITO2-rbCfBEvG.js +0 -61
- package/dist/assets/treemap-KZPCXAKY-BlRvF0um.js +0 -1
- package/dist/assets/vennDiagram-LZ73GAT5-DBit3zWa.js +0 -34
- package/dist/assets/xychartDiagram-JWTSCODW-BVYXv51y.js +0 -7
- package/dist/index.js +0 -1040
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"project": {
|
|
3
|
+
"name": "readit",
|
|
4
|
+
"description": "CLI tool for reviewing Markdown documents with inline comments",
|
|
5
|
+
"version": "0.1.0"
|
|
6
|
+
},
|
|
7
|
+
"context": {
|
|
8
|
+
"entryPoints": ["src/cli.ts", "src/App.tsx"],
|
|
9
|
+
"documentation": ["CLAUDE.md", ".claude/user-stories.md"],
|
|
10
|
+
"testFile": "test.md"
|
|
11
|
+
},
|
|
12
|
+
"preferences": {
|
|
13
|
+
"language": "typescript",
|
|
14
|
+
"style": "functional",
|
|
15
|
+
"formatting": "prettier",
|
|
16
|
+
"imports": "esm"
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
# User Stories
|
|
2
|
+
|
|
3
|
+
## Core Workflow
|
|
4
|
+
|
|
5
|
+
### US-001: View Document in Browser
|
|
6
|
+
|
|
7
|
+
**As a** writer/reviewer
|
|
8
|
+
**I want to** view my Markdown or HTML document rendered in a browser
|
|
9
|
+
**So that** I can review the content in a more readable format
|
|
10
|
+
|
|
11
|
+
**Acceptance Criteria:**
|
|
12
|
+
|
|
13
|
+
- Run `readit document.md` or `readit document.html` and browser opens with rendered content
|
|
14
|
+
- react-markdown for Markdown, unified/rehype for HTML (client-side rendering)
|
|
15
|
+
- Clean light theme with good typography for reading
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
### US-002: Add Comment to Selected Text
|
|
20
|
+
|
|
21
|
+
**As a** reviewer
|
|
22
|
+
**I want to** select text and add a comment
|
|
23
|
+
**So that** I can note feedback or changes needed
|
|
24
|
+
|
|
25
|
+
**Acceptance Criteria:**
|
|
26
|
+
|
|
27
|
+
- Select any text in the document
|
|
28
|
+
- Input area appears in margin to enter comment
|
|
29
|
+
- ⌘+Enter saves the comment
|
|
30
|
+
- Comment appears as margin note next to highlighted text
|
|
31
|
+
- Selection is preserved as reference
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
### US-003: Manage Comments
|
|
36
|
+
|
|
37
|
+
**As a** reviewer
|
|
38
|
+
**I want to** edit, delete, and copy individual comments
|
|
39
|
+
**So that** I can refine my feedback
|
|
40
|
+
|
|
41
|
+
**Acceptance Criteria:**
|
|
42
|
+
|
|
43
|
+
- Each margin note shows: selected text (truncated) + comment text
|
|
44
|
+
- Click to edit → inline textarea editing
|
|
45
|
+
- Delete button → removes comment and highlight
|
|
46
|
+
- Copy button → copies "Selected: ... Comment: ..." format
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
### US-004: Export All Comments
|
|
51
|
+
|
|
52
|
+
**As a** reviewer
|
|
53
|
+
**I want to** export all comments at once
|
|
54
|
+
**So that** I can use them with AI or share with others
|
|
55
|
+
|
|
56
|
+
**Acceptance Criteria:**
|
|
57
|
+
|
|
58
|
+
- "Copy All" button copies formatted prompt to clipboard
|
|
59
|
+
- "Export JSON" button downloads JSON file with all comments
|
|
60
|
+
- Format is AI-friendly (clear structure)
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
### US-005: Persistent Comments ✅
|
|
65
|
+
|
|
66
|
+
**As a** reviewer
|
|
67
|
+
**I want to** close and reopen the tool without losing comments
|
|
68
|
+
**So that** I can continue review sessions
|
|
69
|
+
|
|
70
|
+
**Acceptance Criteria:**
|
|
71
|
+
|
|
72
|
+
- Comments saved to `.comments.md` files in `~/.readit/comments/`
|
|
73
|
+
- Comments restored when reopening same file
|
|
74
|
+
- Different files have separate comment storage
|
|
75
|
+
- Human-readable markdown format for LLM/git compatibility
|
|
76
|
+
|
|
77
|
+
**Status:** Implemented (file-based storage)
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## Planned Features
|
|
82
|
+
|
|
83
|
+
### US-006: File-Based Comment Storage ✅
|
|
84
|
+
|
|
85
|
+
**As a** reviewer
|
|
86
|
+
**I want to** have my comments stored in a plain markdown file
|
|
87
|
+
**So that** I can version them with git, share them, and use them with LLMs and other tools
|
|
88
|
+
|
|
89
|
+
**Acceptance Criteria:**
|
|
90
|
+
|
|
91
|
+
- Comments stored in `~/.readit/comments/{hashed-path}/{filename}.comments.md`
|
|
92
|
+
- Format is human-readable markdown (selected text as quote, comment below)
|
|
93
|
+
- ~~Existing localStorage comments migrated on first run~~ (localStorage removed)
|
|
94
|
+
- Comments auto-save to file on add/edit/delete
|
|
95
|
+
- ~~`--storage local|file` flag~~ (file-only, no flag needed)
|
|
96
|
+
- File can be edited manually and changes reflected on refresh
|
|
97
|
+
|
|
98
|
+
**Status:** Implemented
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
### US-007: Comment Resolution Workflow
|
|
103
|
+
|
|
104
|
+
**As a** reviewer
|
|
105
|
+
**I want to** mark comments as resolved/unresolved and navigate between them
|
|
106
|
+
**So that** I can systematically address feedback with LLM assistance
|
|
107
|
+
|
|
108
|
+
**Acceptance Criteria:**
|
|
109
|
+
|
|
110
|
+
- Each comment has `unresolved` or `resolved` status
|
|
111
|
+
- New comments default to `unresolved`
|
|
112
|
+
- Visual indicators: yellow = unresolved, green/muted = resolved
|
|
113
|
+
- Navigate to next/previous unresolved comment (keyboard shortcuts)
|
|
114
|
+
- Unresolved count displayed in header
|
|
115
|
+
- Copy single comment with context for LLM discussion (⌘⇧C on margin note)
|
|
116
|
+
- Toggle status with one click, optionally auto-navigate to next
|
|
117
|
+
|
|
118
|
+
**Status:** Not implemented (planned for v0.3.0)
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
### US-008: Highlight Commented Text ✅
|
|
123
|
+
|
|
124
|
+
**As a** reviewer
|
|
125
|
+
**I want to** see which parts of the document have comments
|
|
126
|
+
**So that** I can quickly identify reviewed sections
|
|
127
|
+
|
|
128
|
+
**Acceptance Criteria:**
|
|
129
|
+
|
|
130
|
+
- Text with comments has yellow background highlight (`<mark>` tags)
|
|
131
|
+
- Margin notes are positioned next to their corresponding highlights
|
|
132
|
+
- Clicking highlight scrolls to margin note
|
|
133
|
+
- Clicking quoted text in margin note scrolls to highlight
|
|
134
|
+
|
|
135
|
+
**Status:** Implemented
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
### US-009: Comment Categories
|
|
140
|
+
|
|
141
|
+
**As a** reviewer
|
|
142
|
+
**I want to** categorize comments (TODO, Question, Suggestion, etc.)
|
|
143
|
+
**So that** I can organize and filter feedback
|
|
144
|
+
|
|
145
|
+
**Acceptance Criteria:**
|
|
146
|
+
|
|
147
|
+
- Dropdown to select category when adding comment
|
|
148
|
+
- Visual indicator (color/icon) per category
|
|
149
|
+
- Filter sidebar by category
|
|
150
|
+
- Export includes category information
|
|
151
|
+
|
|
152
|
+
**Status:** Not implemented
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
### US-010: Review Multiple Files
|
|
157
|
+
|
|
158
|
+
**As a** reviewer
|
|
159
|
+
**I want to** review multiple Markdown files in one session
|
|
160
|
+
**So that** I can review an entire document set
|
|
161
|
+
|
|
162
|
+
**Acceptance Criteria:**
|
|
163
|
+
|
|
164
|
+
- `readit docs/*.md` opens multi-file view
|
|
165
|
+
- File tabs or sidebar navigation
|
|
166
|
+
- Comments stored per file
|
|
167
|
+
- Bulk export across all files
|
|
168
|
+
|
|
169
|
+
**Status:** Not implemented
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
### US-011: Collaborative Review
|
|
174
|
+
|
|
175
|
+
**As a** team lead
|
|
176
|
+
**I want to** share review sessions with teammates
|
|
177
|
+
**So that** we can collaborate on document feedback
|
|
178
|
+
|
|
179
|
+
**Acceptance Criteria:**
|
|
180
|
+
|
|
181
|
+
- Generate shareable link
|
|
182
|
+
- Real-time sync of comments
|
|
183
|
+
- Author attribution on comments
|
|
184
|
+
- Conflict resolution for simultaneous edits
|
|
185
|
+
|
|
186
|
+
**Status:** Not implemented (future consideration)
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
### US-012: Export Document as PDF with Comments
|
|
191
|
+
|
|
192
|
+
**As a** reviewer
|
|
193
|
+
**I want to** export the current document view as a PDF
|
|
194
|
+
**So that** I can share or archive the reviewed document with all highlights and comments visible
|
|
195
|
+
|
|
196
|
+
**Acceptance Criteria:**
|
|
197
|
+
|
|
198
|
+
- "Export PDF" button in the header
|
|
199
|
+
- PDF includes the rendered document with highlighted text
|
|
200
|
+
- Margin notes are included next to their corresponding highlights
|
|
201
|
+
- PDF preserves the visual layout of the review interface
|
|
202
|
+
- Filename follows pattern: `{original-filename}-reviewed.pdf`
|
|
203
|
+
|
|
204
|
+
**Status:** Not implemented (future consideration)
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
## Technical Stories
|
|
209
|
+
|
|
210
|
+
### TS-001: CLI Argument Parsing
|
|
211
|
+
|
|
212
|
+
- Use Commander.js for CLI
|
|
213
|
+
- Main command: `<file>`, `--port`, `--host`, `--no-open`, `--clean`
|
|
214
|
+
- Subcommands: `list` (show all commented files), `show <file>` (display comments for a file)
|
|
215
|
+
- Validate file exists and is Markdown (.md) or HTML (.html)
|
|
216
|
+
- Graceful error messages
|
|
217
|
+
|
|
218
|
+
### TS-002: Server Architecture
|
|
219
|
+
|
|
220
|
+
- Express server serves API + static files
|
|
221
|
+
- `/api/document` returns `{ content, type, filePath, fileName, clean }`
|
|
222
|
+
- `/api/heartbeat` SSE for browser disconnect detection
|
|
223
|
+
- Development mode proxies to Vite
|
|
224
|
+
- Production mode serves built assets from dist/
|
|
225
|
+
|
|
226
|
+
### TS-003: Build System
|
|
227
|
+
|
|
228
|
+
- Vite for frontend bundling
|
|
229
|
+
- tsup for CLI bundling
|
|
230
|
+
- Single `npm run build` produces complete distributable
|
|
231
|
+
- `npx readit` works without global install
|
|
232
|
+
|
|
233
|
+
### TS-004: File-Based Comment Storage
|
|
234
|
+
|
|
235
|
+
- Store comments in `~/.readit/comments/{hashed-path}/{filename}.comments.md`
|
|
236
|
+
- Markdown format for human/LLM readability:
|
|
237
|
+
|
|
238
|
+
```markdown
|
|
239
|
+
## Comment 1
|
|
240
|
+
> Selected text here
|
|
241
|
+
|
|
242
|
+
Comment text here
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
- API endpoints: `GET/POST/PUT/DELETE /api/comments` for CRUD operations
|
|
248
|
+
- Watch file for external changes (optional)
|
package/AGENTS.md
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# AGENTS.md
|
|
2
|
+
|
|
3
|
+
Instructions for AI coding agents working on this project.
|
|
4
|
+
|
|
5
|
+
## Project Context
|
|
6
|
+
|
|
7
|
+
readit is a CLI tool for reviewing Markdown documents with inline comments. The workflow is:
|
|
8
|
+
|
|
9
|
+
1. User runs `readit document.md`
|
|
10
|
+
2. CLI converts Markdown to HTML using Pandoc
|
|
11
|
+
3. Express server starts and opens browser
|
|
12
|
+
4. User selects text and adds comments
|
|
13
|
+
5. Comments are saved to localStorage
|
|
14
|
+
6. User can export comments for AI or apply back to Markdown
|
|
15
|
+
|
|
16
|
+
## Development Commands
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
pnpm install # Install dependencies
|
|
20
|
+
pnpm dev # Start development (Vite + CLI hot reload)
|
|
21
|
+
pnpm build # Build for production
|
|
22
|
+
pnpm test # Run tests
|
|
23
|
+
pnpm typecheck # TypeScript check
|
|
24
|
+
pnpm check # Biome lint + format check
|
|
25
|
+
pnpm check:fix # Fix issues
|
|
26
|
+
pnpm format # Format code
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Code Organization
|
|
30
|
+
|
|
31
|
+
- `src/cli/` - CLI entry point, argument parsing
|
|
32
|
+
- `src/server/` - Express server, Pandoc integration
|
|
33
|
+
- `src/components/` - React UI components
|
|
34
|
+
- `src/hooks/` - Custom React hooks
|
|
35
|
+
- `src/lib/` - Utility functions
|
|
36
|
+
- `src/types/` - TypeScript types
|
|
37
|
+
|
|
38
|
+
## Testing
|
|
39
|
+
|
|
40
|
+
- Tests are co-located with source files (`*.test.ts`)
|
|
41
|
+
- Use Vitest for testing
|
|
42
|
+
- Run `pnpm test` before committing
|
|
43
|
+
|
|
44
|
+
## Commit Guidelines
|
|
45
|
+
|
|
46
|
+
- Use conventional commits (feat:, fix:, docs:, etc.)
|
|
47
|
+
- Keep commits focused and atomic
|
|
48
|
+
- Run `pnpm typecheck && pnpm check` before committing
|
|
49
|
+
|
|
50
|
+
## Adding Features
|
|
51
|
+
|
|
52
|
+
1. Check `.claude/user-stories.md` for planned features
|
|
53
|
+
2. Update types in `src/types/` first
|
|
54
|
+
3. Create/update hooks if needed
|
|
55
|
+
4. Create/update components
|
|
56
|
+
5. Add tests
|
|
57
|
+
6. Update CHANGELOG.md
|
|
58
|
+
|
|
59
|
+
## Key Files to Review
|
|
60
|
+
|
|
61
|
+
- `CLAUDE.md` - Project overview and architecture
|
|
62
|
+
- `.claude/user-stories.md` - User stories and acceptance criteria
|
|
63
|
+
- `.claude/roadmap.md` - Development roadmap
|
|
64
|
+
- `package.json` - Scripts and dependencies
|
package/README.md
CHANGED
|
@@ -13,12 +13,12 @@ Inspired by [difit](https://github.com/yoshiko-pg/difit).
|
|
|
13
13
|
|
|
14
14
|
## Requirements
|
|
15
15
|
|
|
16
|
-
-
|
|
16
|
+
- [Bun](https://bun.sh) >= 1.0
|
|
17
17
|
|
|
18
18
|
## Quick Start
|
|
19
19
|
|
|
20
20
|
```bash
|
|
21
|
-
|
|
21
|
+
bunx readit document.md
|
|
22
22
|
```
|
|
23
23
|
|
|
24
24
|
## Usage
|
|
@@ -39,11 +39,11 @@ Select text to add comments. Comments appear as margin notes. Copy all comments
|
|
|
39
39
|
## Development
|
|
40
40
|
|
|
41
41
|
```bash
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
42
|
+
bun install # Install dependencies
|
|
43
|
+
bun dev # Start dev server
|
|
44
|
+
bun run build # Build for production
|
|
45
|
+
bun run test # Run tests
|
|
46
|
+
bun run check # Lint and format (Biome)
|
|
47
47
|
```
|
|
48
48
|
|
|
49
49
|
## License
|
package/biome.json
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://biomejs.dev/schemas/2.4.6/schema.json",
|
|
3
|
+
"vcs": {
|
|
4
|
+
"enabled": true,
|
|
5
|
+
"clientKind": "git",
|
|
6
|
+
"useIgnoreFile": true
|
|
7
|
+
},
|
|
8
|
+
"formatter": {
|
|
9
|
+
"enabled": true,
|
|
10
|
+
"indentWidth": 2,
|
|
11
|
+
"indentStyle": "space"
|
|
12
|
+
},
|
|
13
|
+
"assist": {
|
|
14
|
+
"enabled": true
|
|
15
|
+
},
|
|
16
|
+
"linter": {
|
|
17
|
+
"enabled": true,
|
|
18
|
+
"rules": {
|
|
19
|
+
"style": {
|
|
20
|
+
"noNonNullAssertion": "off"
|
|
21
|
+
},
|
|
22
|
+
"correctness": {
|
|
23
|
+
"useExhaustiveDependencies": "warn"
|
|
24
|
+
},
|
|
25
|
+
"complexity": {
|
|
26
|
+
"noForEach": "off",
|
|
27
|
+
"noImportantStyles": "off"
|
|
28
|
+
},
|
|
29
|
+
"suspicious": {
|
|
30
|
+
"noArrayIndexKey": "warn",
|
|
31
|
+
"noExplicitAny": "warn",
|
|
32
|
+
"noUnknownAtRules": "off"
|
|
33
|
+
},
|
|
34
|
+
"a11y": {
|
|
35
|
+
"useKeyWithClickEvents": "off",
|
|
36
|
+
"noSvgWithoutTitle": "off",
|
|
37
|
+
"useSemanticElements": "warn",
|
|
38
|
+
"useFocusableInteractive": "warn"
|
|
39
|
+
},
|
|
40
|
+
"security": {
|
|
41
|
+
"noDangerouslySetInnerHtml": "warn"
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
"css": {
|
|
46
|
+
"parser": {
|
|
47
|
+
"tailwindDirectives": true
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
"files": {
|
|
51
|
+
"includes": [
|
|
52
|
+
"**",
|
|
53
|
+
"!!**/dist",
|
|
54
|
+
"!!**/build",
|
|
55
|
+
"!!**/node_modules",
|
|
56
|
+
"!!**/generated",
|
|
57
|
+
"!!**/prisma/generated",
|
|
58
|
+
"!!**/supabase/generated",
|
|
59
|
+
"!!**/.next",
|
|
60
|
+
"!!**/.turbo",
|
|
61
|
+
"!!**/.git",
|
|
62
|
+
"!!**/.temp",
|
|
63
|
+
"!!**/.wrangler",
|
|
64
|
+
"!!**/playwright-report",
|
|
65
|
+
"!!**/test-results"
|
|
66
|
+
],
|
|
67
|
+
"ignoreUnknown": true
|
|
68
|
+
}
|
|
69
|
+
}
|