design-graph 0.34.0__tar.gz

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 (359) hide show
  1. design_graph-0.34.0/.coverage +0 -0
  2. design_graph-0.34.0/.githooks/post-commit +13 -0
  3. design_graph-0.34.0/.github/workflows/publish.yml +44 -0
  4. design_graph-0.34.0/.github/workflows/tests.yml +39 -0
  5. design_graph-0.34.0/.gitignore +38 -0
  6. design_graph-0.34.0/.mcp.json +10 -0
  7. design_graph-0.34.0/Makefile +217 -0
  8. design_graph-0.34.0/PKG-INFO +575 -0
  9. design_graph-0.34.0/README.md +558 -0
  10. design_graph-0.34.0/audit/fixtures/live-item-basic-catalog-notice.html +1 -0
  11. design_graph-0.34.0/audit/fixtures/live-item-basic-tab.html +1 -0
  12. design_graph-0.34.0/audit/fixtures/live-item-editor-header.html +1 -0
  13. design_graph-0.34.0/audit/fixtures/live-item-editor-overlay.html +1 -0
  14. design_graph-0.34.0/audit/mcp-gap-analysis-item-basic-tab.md +428 -0
  15. design_graph-0.34.0/audit/prototipo.png +0 -0
  16. design_graph-0.34.0/audit/sistema.png +0 -0
  17. design_graph-0.34.0/coverage.xml +4881 -0
  18. design_graph-0.34.0/diagram.excalidraw +1120 -0
  19. design_graph-0.34.0/docs/changes/C01-core-parsing/T01-source-loader.md +116 -0
  20. design_graph-0.34.0/docs/changes/C01-core-parsing/T02-format-detector.md +91 -0
  21. design_graph-0.34.0/docs/changes/C01-core-parsing/T03-js-parser.md +180 -0
  22. design_graph-0.34.0/docs/changes/C01-core-parsing/T04-token-extractor.md +152 -0
  23. design_graph-0.34.0/docs/changes/C01-core-parsing/T05-html-parser.md +189 -0
  24. design_graph-0.34.0/docs/changes/C01-core-parsing/plan.md +103 -0
  25. design_graph-0.34.0/docs/changes/C01-core-parsing/spec.md +325 -0
  26. design_graph-0.34.0/docs/changes/C02-component-extraction/T06-component-extractor.md +243 -0
  27. design_graph-0.34.0/docs/changes/C02-component-extraction/T07-screen-extractor.md +163 -0
  28. design_graph-0.34.0/docs/changes/C02-component-extraction/T08-section-extractor.md +209 -0
  29. design_graph-0.34.0/docs/changes/C02-component-extraction/plan.md +170 -0
  30. design_graph-0.34.0/docs/changes/C02-component-extraction/spec.md +324 -0
  31. design_graph-0.34.0/docs/changes/C03-graph-layer/T09-graph-schema.md +105 -0
  32. design_graph-0.34.0/docs/changes/C03-graph-layer/T10-graph-writer.md +217 -0
  33. design_graph-0.34.0/docs/changes/C03-graph-layer/T11-graph-reader.md +191 -0
  34. design_graph-0.34.0/docs/changes/C03-graph-layer/T12-graph-diff.md +167 -0
  35. design_graph-0.34.0/docs/changes/C03-graph-layer/plan.md +159 -0
  36. design_graph-0.34.0/docs/changes/C03-graph-layer/spec.md +319 -0
  37. design_graph-0.34.0/docs/changes/C04-pipeline-mcp/T13-pipeline-coordinator.md +267 -0
  38. design_graph-0.34.0/docs/changes/C04-pipeline-mcp/T14-mcp-search.md +173 -0
  39. design_graph-0.34.0/docs/changes/C04-pipeline-mcp/T15-mcp-tools.md +213 -0
  40. design_graph-0.34.0/docs/changes/C04-pipeline-mcp/plan.md +180 -0
  41. design_graph-0.34.0/docs/changes/C04-pipeline-mcp/spec.md +235 -0
  42. design_graph-0.34.0/docs/changes/C05-chunker/T16-chunker.md +222 -0
  43. design_graph-0.34.0/docs/changes/C05-chunker/plan.md +170 -0
  44. design_graph-0.34.0/docs/changes/C05-chunker/spec.md +237 -0
  45. design_graph-0.34.0/docs/changes/C06-concurrency/spec.md +203 -0
  46. design_graph-0.34.0/docs/changes/C07-reader-query-correctness/T17-reader-transitive-fix.md +114 -0
  47. design_graph-0.34.0/docs/changes/C07-reader-query-correctness/plan.md +88 -0
  48. design_graph-0.34.0/docs/changes/C07-reader-query-correctness/spec.md +74 -0
  49. design_graph-0.34.0/docs/changes/C08-component-discovery-tools/T18-list-components-tool.md +122 -0
  50. design_graph-0.34.0/docs/changes/C08-component-discovery-tools/T19-get-component-spec-tool.md +182 -0
  51. design_graph-0.34.0/docs/changes/C08-component-discovery-tools/plan.md +217 -0
  52. design_graph-0.34.0/docs/changes/C08-component-discovery-tools/spec.md +140 -0
  53. design_graph-0.34.0/docs/changes/C09-style-token-linkage/T20-style-token-edge.md +193 -0
  54. design_graph-0.34.0/docs/changes/C09-style-token-linkage/plan.md +110 -0
  55. design_graph-0.34.0/docs/changes/C09-style-token-linkage/spec.md +115 -0
  56. design_graph-0.34.0/docs/changes/C10-css-class-resolution/T21-css-class-resolver.md +117 -0
  57. design_graph-0.34.0/docs/changes/C10-css-class-resolution/plan.md +198 -0
  58. design_graph-0.34.0/docs/changes/C10-css-class-resolution/spec.md +138 -0
  59. design_graph-0.34.0/docs/changes/C11-jsx-completeness/T22-jsx-typed-markers.md +177 -0
  60. design_graph-0.34.0/docs/changes/C11-jsx-completeness/plan.md +182 -0
  61. design_graph-0.34.0/docs/changes/C11-jsx-completeness/spec.md +107 -0
  62. design_graph-0.34.0/docs/changes/C12-stateful-interactions/T23-imperative-style-interactions.md +23 -0
  63. design_graph-0.34.0/docs/changes/C12-stateful-interactions/plan.md +54 -0
  64. design_graph-0.34.0/docs/changes/C12-stateful-interactions/spec.md +81 -0
  65. design_graph-0.34.0/docs/changes/C13-interaction-capture-completeness/T24-multi-mutation-handlers.md +27 -0
  66. design_graph-0.34.0/docs/changes/C13-interaction-capture-completeness/T25-state-toggle-ternary-correlation.md +30 -0
  67. design_graph-0.34.0/docs/changes/C13-interaction-capture-completeness/T26-digit-suffixed-component-names.md +42 -0
  68. design_graph-0.34.0/docs/changes/C13-interaction-capture-completeness/plan.md +86 -0
  69. design_graph-0.34.0/docs/changes/C13-interaction-capture-completeness/spec.md +117 -0
  70. design_graph-0.34.0/docs/changes/C14-domain-model-value-objects/T27-domain-model-value-objects.md +36 -0
  71. design_graph-0.34.0/docs/changes/C14-domain-model-value-objects/T29-wire-chunklevel-into-chunker.md +30 -0
  72. design_graph-0.34.0/docs/changes/C14-domain-model-value-objects/plan.md +55 -0
  73. design_graph-0.34.0/docs/changes/C14-domain-model-value-objects/spec.md +118 -0
  74. design_graph-0.34.0/docs/changes/C15-tooltip-text-classification/T28-tooltip-text-classification.md +22 -0
  75. design_graph-0.34.0/docs/changes/C15-tooltip-text-classification/plan.md +52 -0
  76. design_graph-0.34.0/docs/changes/C15-tooltip-text-classification/spec.md +70 -0
  77. design_graph-0.34.0/docs/changes/C16-chunk-export-extraction-reuse/T30-reuse-coordinator-extraction-in-chunk-export.md +31 -0
  78. design_graph-0.34.0/docs/changes/C16-chunk-export-extraction-reuse/plan.md +63 -0
  79. design_graph-0.34.0/docs/changes/C16-chunk-export-extraction-reuse/spec.md +77 -0
  80. design_graph-0.34.0/docs/changes/C17-screen-detection-and-strenum-consolidation/T31-remove-dead-screen-regexes-consolidate-strenum.md +28 -0
  81. design_graph-0.34.0/docs/changes/C17-screen-detection-and-strenum-consolidation/plan.md +55 -0
  82. design_graph-0.34.0/docs/changes/C17-screen-detection-and-strenum-consolidation/spec.md +72 -0
  83. design_graph-0.34.0/docs/changes/C18-mcp-token-efficiency/T32-mcp-token-efficiency.md +37 -0
  84. design_graph-0.34.0/docs/changes/C18-mcp-token-efficiency/plan.md +78 -0
  85. design_graph-0.34.0/docs/changes/C18-mcp-token-efficiency/spec.md +113 -0
  86. design_graph-0.34.0/docs/changes/C19-jsx-variant-disambiguation/T33-jsx-variant-disambiguation.md +31 -0
  87. design_graph-0.34.0/docs/changes/C19-jsx-variant-disambiguation/plan.md +62 -0
  88. design_graph-0.34.0/docs/changes/C19-jsx-variant-disambiguation/spec.md +84 -0
  89. design_graph-0.34.0/docs/changes/C20-search-and-impact-correctness/T34-search-and-impact-correctness.md +24 -0
  90. design_graph-0.34.0/docs/changes/C20-search-and-impact-correctness/plan.md +58 -0
  91. design_graph-0.34.0/docs/changes/C20-search-and-impact-correctness/spec.md +89 -0
  92. design_graph-0.34.0/docs/changes/C21-jsx-marker-balanced-collapse/T35-jsx-marker-balanced-collapse.md +56 -0
  93. design_graph-0.34.0/docs/changes/C21-jsx-marker-balanced-collapse/plan.md +104 -0
  94. design_graph-0.34.0/docs/changes/C21-jsx-marker-balanced-collapse/spec.md +112 -0
  95. design_graph-0.34.0/docs/changes/C22-icon-deduplication/T36-icon-deduplication.md +56 -0
  96. design_graph-0.34.0/docs/changes/C22-icon-deduplication/plan.md +100 -0
  97. design_graph-0.34.0/docs/changes/C22-icon-deduplication/spec.md +94 -0
  98. design_graph-0.34.0/docs/changes/C23-agent-context-fidelity/T37-mcp-search-tokenization.md +40 -0
  99. design_graph-0.34.0/docs/changes/C23-agent-context-fidelity/T38-jsx-sanitizer-ternary-and-handler-names.md +44 -0
  100. design_graph-0.34.0/docs/changes/C23-agent-context-fidelity/T39-style-ownership-root-vs-descendant.md +51 -0
  101. design_graph-0.34.0/docs/changes/C23-agent-context-fidelity/T40-token-label-normalization.md +54 -0
  102. design_graph-0.34.0/docs/changes/C23-agent-context-fidelity/T41-jsx-snippet-honesty.md +62 -0
  103. design_graph-0.34.0/docs/changes/C23-agent-context-fidelity/T42-contains-completeness-investigation.md +64 -0
  104. design_graph-0.34.0/docs/changes/C23-agent-context-fidelity/T43-overlay-screen-classification.md +99 -0
  105. design_graph-0.34.0/docs/changes/C23-agent-context-fidelity/plan.md +251 -0
  106. design_graph-0.34.0/docs/changes/C23-agent-context-fidelity/spec.md +353 -0
  107. design_graph-0.34.0/docs/changes/C24-css-style-resolution-completeness/T44-inner-html-style-tag-extraction.md +45 -0
  108. design_graph-0.34.0/docs/changes/C24-css-style-resolution-completeness/T45-tag-pseudo-class-selector-resolution.md +64 -0
  109. design_graph-0.34.0/docs/changes/C24-css-style-resolution-completeness/T46-style-spread-resolution.md +50 -0
  110. design_graph-0.34.0/docs/changes/C24-css-style-resolution-completeness/plan.md +121 -0
  111. design_graph-0.34.0/docs/changes/C24-css-style-resolution-completeness/spec.md +225 -0
  112. design_graph-0.34.0/docs/changes/C25-write-integrity/plan.md +81 -0
  113. design_graph-0.34.0/docs/changes/C25-write-integrity/spec.md +91 -0
  114. design_graph-0.34.0/docs/changes/C26-parsing-correctness/plan.md +57 -0
  115. design_graph-0.34.0/docs/changes/C26-parsing-correctness/spec.md +116 -0
  116. design_graph-0.34.0/docs/changes/C27-reader-mcp-quick-wins/plan.md +50 -0
  117. design_graph-0.34.0/docs/changes/C27-reader-mcp-quick-wins/spec.md +114 -0
  118. design_graph-0.34.0/docs/changes/C28-truncation-as-data/plan.md +70 -0
  119. design_graph-0.34.0/docs/changes/C28-truncation-as-data/spec.md +115 -0
  120. design_graph-0.34.0/docs/changes/C29-hover-focus-states/plan.md +65 -0
  121. design_graph-0.34.0/docs/changes/C29-hover-focus-states/spec.md +109 -0
  122. design_graph-0.34.0/docs/changes/C30-render-order/plan.md +71 -0
  123. design_graph-0.34.0/docs/changes/C30-render-order/spec.md +113 -0
  124. design_graph-0.34.0/docs/changes/C31-mcp-api-expansion/plan.md +82 -0
  125. design_graph-0.34.0/docs/changes/C31-mcp-api-expansion/spec.md +129 -0
  126. design_graph-0.34.0/docs/changes/C32-library-icons/plan.md +59 -0
  127. design_graph-0.34.0/docs/changes/C32-library-icons/spec.md +106 -0
  128. design_graph-0.34.0/docs/changes/C33-round-trip-validation/plan.md +73 -0
  129. design_graph-0.34.0/docs/changes/C33-round-trip-validation/spec.md +120 -0
  130. design_graph-0.34.0/docs/changes/C34-post-audit-fixes/plan.md +80 -0
  131. design_graph-0.34.0/docs/changes/C34-post-audit-fixes/spec.md +157 -0
  132. design_graph-0.34.0/docs/changes/C35-media-query-css-scoping/plan.md +191 -0
  133. design_graph-0.34.0/docs/changes/C35-media-query-css-scoping/spec.md +276 -0
  134. design_graph-0.34.0/docs/changes/C36-mcp-style-attribution-and-discoverability/plan.md +142 -0
  135. design_graph-0.34.0/docs/changes/C36-mcp-style-attribution-and-discoverability/spec.md +84 -0
  136. design_graph-0.34.0/docs/changes/C37-structural-detection-css-resolved-padding/plan.md +72 -0
  137. design_graph-0.34.0/docs/changes/C37-structural-detection-css-resolved-padding/spec.md +66 -0
  138. design_graph-0.34.0/docs/changes/C38-mcp-text-recovery-and-root-screen/plan.md +101 -0
  139. design_graph-0.34.0/docs/changes/C38-mcp-text-recovery-and-root-screen/spec.md +117 -0
  140. design_graph-0.34.0/docs/changes/C39-referenced-module-data/plan.md +120 -0
  141. design_graph-0.34.0/docs/changes/C39-referenced-module-data/spec.md +111 -0
  142. design_graph-0.34.0/docs/changes/C40-object-literal-comment-stripping/plan.md +17 -0
  143. design_graph-0.34.0/docs/changes/C40-object-literal-comment-stripping/spec.md +65 -0
  144. design_graph-0.34.0/docs/changes/C41-responsive-styles-full-escape-hatch/plan.md +16 -0
  145. design_graph-0.34.0/docs/changes/C41-responsive-styles-full-escape-hatch/spec.md +49 -0
  146. design_graph-0.34.0/docs/changes/C42-semantic-chrome-tags-as-sections/plan.md +37 -0
  147. design_graph-0.34.0/docs/changes/C42-semantic-chrome-tags-as-sections/spec.md +86 -0
  148. design_graph-0.34.0/docs/changes/README.md +116 -0
  149. design_graph-0.34.0/docs/investigation/design-graph-findings.md +68 -0
  150. design_graph-0.34.0/docs/plan/00-migration-strategy.md +124 -0
  151. design_graph-0.34.0/docs/plan/01-phase-parsing.md +103 -0
  152. design_graph-0.34.0/docs/plan/02-phase-extraction.md +170 -0
  153. design_graph-0.34.0/docs/plan/03-phase-graph.md +159 -0
  154. design_graph-0.34.0/docs/plan/04-phase-mcp.md +180 -0
  155. design_graph-0.34.0/docs/plan/05-phase-chunker.md +170 -0
  156. design_graph-0.34.0/docs/roadmap/v2-ast-based-extraction.md +178 -0
  157. design_graph-0.34.0/docs/spec/00-overview.md +143 -0
  158. design_graph-0.34.0/docs/spec/01-parsing.md +325 -0
  159. design_graph-0.34.0/docs/spec/02-extraction.md +324 -0
  160. design_graph-0.34.0/docs/spec/03-graph.md +319 -0
  161. design_graph-0.34.0/docs/spec/04-mcp.md +235 -0
  162. design_graph-0.34.0/docs/spec/05-chunker.md +237 -0
  163. design_graph-0.34.0/docs/spec/06-concurrency.md +203 -0
  164. design_graph-0.34.0/docs/tasks/T01-source-loader.md +116 -0
  165. design_graph-0.34.0/docs/tasks/T02-format-detector.md +91 -0
  166. design_graph-0.34.0/docs/tasks/T03-js-parser.md +180 -0
  167. design_graph-0.34.0/docs/tasks/T04-token-extractor.md +152 -0
  168. design_graph-0.34.0/docs/tasks/T05-html-parser.md +189 -0
  169. design_graph-0.34.0/docs/tasks/T06-component-extractor.md +243 -0
  170. design_graph-0.34.0/docs/tasks/T07-screen-extractor.md +163 -0
  171. design_graph-0.34.0/docs/tasks/T08-section-extractor.md +209 -0
  172. design_graph-0.34.0/docs/tasks/T09-graph-schema.md +105 -0
  173. design_graph-0.34.0/docs/tasks/T10-graph-writer.md +217 -0
  174. design_graph-0.34.0/docs/tasks/T11-graph-reader.md +191 -0
  175. design_graph-0.34.0/docs/tasks/T12-graph-diff.md +167 -0
  176. design_graph-0.34.0/docs/tasks/T13-pipeline-coordinator.md +267 -0
  177. design_graph-0.34.0/docs/tasks/T14-mcp-search.md +173 -0
  178. design_graph-0.34.0/docs/tasks/T15-mcp-tools.md +213 -0
  179. design_graph-0.34.0/docs/tasks/T16-chunker.md +222 -0
  180. design_graph-0.34.0/docs/tasks/backlog.md +167 -0
  181. design_graph-0.34.0/mcp-config.example.json +7 -0
  182. design_graph-0.34.0/prototipo.png +0 -0
  183. design_graph-0.34.0/pyproject.toml +50 -0
  184. design_graph-0.34.0/schema.svg +5 -0
  185. design_graph-0.34.0/scripts/auto_version.py +185 -0
  186. design_graph-0.34.0/setup.cfg +4 -0
  187. design_graph-0.34.0/sistema.png +0 -0
  188. design_graph-0.34.0/src/__init__.py +0 -0
  189. design_graph-0.34.0/src/design_graph/__init__.py +0 -0
  190. design_graph-0.34.0/src/design_graph/cli/__init__.py +0 -0
  191. design_graph-0.34.0/src/design_graph/cli/_logging.py +36 -0
  192. design_graph-0.34.0/src/design_graph/cli/build.py +586 -0
  193. design_graph-0.34.0/src/design_graph/cli/databases.py +181 -0
  194. design_graph-0.34.0/src/design_graph/cli/init.py +295 -0
  195. design_graph-0.34.0/src/design_graph/cli/query.py +235 -0
  196. design_graph-0.34.0/src/design_graph/cli/report.py +224 -0
  197. design_graph-0.34.0/src/design_graph/cli/status.py +230 -0
  198. design_graph-0.34.0/src/design_graph/cli/validate.py +326 -0
  199. design_graph-0.34.0/src/design_graph/core/__init__.py +0 -0
  200. design_graph-0.34.0/src/design_graph/core/constants.py +205 -0
  201. design_graph-0.34.0/src/design_graph/core/graph_catalog.py +280 -0
  202. design_graph-0.34.0/src/design_graph/core/models.py +786 -0
  203. design_graph-0.34.0/src/design_graph/core/patterns.py +367 -0
  204. design_graph-0.34.0/src/design_graph/extraction/__init__.py +0 -0
  205. design_graph-0.34.0/src/design_graph/extraction/alias_extractor.py +79 -0
  206. design_graph-0.34.0/src/design_graph/extraction/chunker.py +247 -0
  207. design_graph-0.34.0/src/design_graph/extraction/component_extractor.py +639 -0
  208. design_graph-0.34.0/src/design_graph/extraction/icon_extractor.py +81 -0
  209. design_graph-0.34.0/src/design_graph/extraction/jsx_sanitizer.py +174 -0
  210. design_graph-0.34.0/src/design_graph/extraction/module_data_extractor.py +95 -0
  211. design_graph-0.34.0/src/design_graph/extraction/module_text_extractor.py +113 -0
  212. design_graph-0.34.0/src/design_graph/extraction/plain_html_component_extractor.py +164 -0
  213. design_graph-0.34.0/src/design_graph/extraction/prop_extractor.py +137 -0
  214. design_graph-0.34.0/src/design_graph/extraction/screen_extractor.py +187 -0
  215. design_graph-0.34.0/src/design_graph/extraction/section_extractor.py +625 -0
  216. design_graph-0.34.0/src/design_graph/extraction/visual_function.py +23 -0
  217. design_graph-0.34.0/src/design_graph/graph/__init__.py +0 -0
  218. design_graph-0.34.0/src/design_graph/graph/diff.py +50 -0
  219. design_graph-0.34.0/src/design_graph/graph/reader.py +1602 -0
  220. design_graph-0.34.0/src/design_graph/graph/schema.py +210 -0
  221. design_graph-0.34.0/src/design_graph/graph/writer.py +713 -0
  222. design_graph-0.34.0/src/design_graph/mcp/__init__.py +0 -0
  223. design_graph-0.34.0/src/design_graph/mcp/aliases.py +67 -0
  224. design_graph-0.34.0/src/design_graph/mcp/metrics.py +222 -0
  225. design_graph-0.34.0/src/design_graph/mcp/search.py +214 -0
  226. design_graph-0.34.0/src/design_graph/mcp/server.py +352 -0
  227. design_graph-0.34.0/src/design_graph/mcp/tools.py +1942 -0
  228. design_graph-0.34.0/src/design_graph/parsing/__init__.py +0 -0
  229. design_graph-0.34.0/src/design_graph/parsing/css_class_resolver.py +666 -0
  230. design_graph-0.34.0/src/design_graph/parsing/format_detector.py +64 -0
  231. design_graph-0.34.0/src/design_graph/parsing/html_parser.py +230 -0
  232. design_graph-0.34.0/src/design_graph/parsing/js_parser.py +700 -0
  233. design_graph-0.34.0/src/design_graph/parsing/palette_extractor.py +113 -0
  234. design_graph-0.34.0/src/design_graph/parsing/source_loader.py +203 -0
  235. design_graph-0.34.0/src/design_graph/parsing/token_extractor.py +426 -0
  236. design_graph-0.34.0/src/design_graph/paths.py +67 -0
  237. design_graph-0.34.0/src/design_graph/pipeline/__init__.py +0 -0
  238. design_graph-0.34.0/src/design_graph/pipeline/build_progress.py +223 -0
  239. design_graph-0.34.0/src/design_graph/pipeline/coordinator.py +440 -0
  240. design_graph-0.34.0/src/design_graph/pipeline/state.py +199 -0
  241. design_graph-0.34.0/src/design_graph/resources/skills/design-graph-ui-context/SKILL.md +124 -0
  242. design_graph-0.34.0/src/design_graph/workspace.py +113 -0
  243. design_graph-0.34.0/src/design_graph.egg-info/PKG-INFO +575 -0
  244. design_graph-0.34.0/src/design_graph.egg-info/SOURCES.txt +357 -0
  245. design_graph-0.34.0/src/design_graph.egg-info/dependency_links.txt +1 -0
  246. design_graph-0.34.0/src/design_graph.egg-info/entry_points.txt +4 -0
  247. design_graph-0.34.0/src/design_graph.egg-info/requires.txt +10 -0
  248. design_graph-0.34.0/src/design_graph.egg-info/scm_file_list.json +353 -0
  249. design_graph-0.34.0/src/design_graph.egg-info/scm_version.json +8 -0
  250. design_graph-0.34.0/src/design_graph.egg-info/top_level.txt +1 -0
  251. design_graph-0.34.0/tests/__init__.py +0 -0
  252. design_graph-0.34.0/tests/conftest.py +19 -0
  253. design_graph-0.34.0/tests/fixtures/arrow_screen.html +29 -0
  254. design_graph-0.34.0/tests/fixtures/large_bundle.html +687 -0
  255. design_graph-0.34.0/tests/fixtures/plain.html +82 -0
  256. design_graph-0.34.0/tests/fixtures/root_screen_with_prefix_component.html +20 -0
  257. design_graph-0.34.0/tests/fixtures/simple.html +42 -0
  258. design_graph-0.34.0/tests/integration/__init__.py +0 -0
  259. design_graph-0.34.0/tests/integration/test_cli_end_to_end.py +354 -0
  260. design_graph-0.34.0/tests/integration/test_icon_deduplication_pipeline.py +83 -0
  261. design_graph-0.34.0/tests/integration/test_large_prototype_stress.py +185 -0
  262. design_graph-0.34.0/tests/integration/test_mcp_e2e.py +408 -0
  263. design_graph-0.34.0/tests/integration/test_pipeline.py +100 -0
  264. design_graph-0.34.0/tests/integration/test_plain_html_pipeline.py +173 -0
  265. design_graph-0.34.0/tests/integration/test_report_e2e.py +188 -0
  266. design_graph-0.34.0/tests/integration/test_status_command_e2e.py +176 -0
  267. design_graph-0.34.0/tests/test_architecture_guardrails.py +384 -0
  268. design_graph-0.34.0/tests/unit/__init__.py +0 -0
  269. design_graph-0.34.0/tests/unit/cli/__init__.py +0 -0
  270. design_graph-0.34.0/tests/unit/cli/test_build_cli.py +254 -0
  271. design_graph-0.34.0/tests/unit/cli/test_database_maintenance_cli.py +65 -0
  272. design_graph-0.34.0/tests/unit/cli/test_init_cli.py +257 -0
  273. design_graph-0.34.0/tests/unit/cli/test_json_output.py +213 -0
  274. design_graph-0.34.0/tests/unit/cli/test_query_cli.py +247 -0
  275. design_graph-0.34.0/tests/unit/cli/test_report_builder.py +258 -0
  276. design_graph-0.34.0/tests/unit/cli/test_report_cli.py +150 -0
  277. design_graph-0.34.0/tests/unit/cli/test_status_command.py +246 -0
  278. design_graph-0.34.0/tests/unit/cli/test_validate_coverage.py +262 -0
  279. design_graph-0.34.0/tests/unit/cli/test_version_flag.py +34 -0
  280. design_graph-0.34.0/tests/unit/core/__init__.py +0 -0
  281. design_graph-0.34.0/tests/unit/core/test_graph_catalog.py +123 -0
  282. design_graph-0.34.0/tests/unit/core/test_models.py +511 -0
  283. design_graph-0.34.0/tests/unit/extraction/__init__.py +0 -0
  284. design_graph-0.34.0/tests/unit/extraction/test_alias_extractor.py +101 -0
  285. design_graph-0.34.0/tests/unit/extraction/test_chunker.py +217 -0
  286. design_graph-0.34.0/tests/unit/extraction/test_chunker_edge_cases.py +158 -0
  287. design_graph-0.34.0/tests/unit/extraction/test_component_extractor.py +819 -0
  288. design_graph-0.34.0/tests/unit/extraction/test_component_extractor_single_pass_guards.py +774 -0
  289. design_graph-0.34.0/tests/unit/extraction/test_component_prop_extractor.py +125 -0
  290. design_graph-0.34.0/tests/unit/extraction/test_icon_extractor.py +95 -0
  291. design_graph-0.34.0/tests/unit/extraction/test_jsx_sanitizer.py +293 -0
  292. design_graph-0.34.0/tests/unit/extraction/test_module_data_extractor.py +79 -0
  293. design_graph-0.34.0/tests/unit/extraction/test_module_text_extractor.py +165 -0
  294. design_graph-0.34.0/tests/unit/extraction/test_plain_html_component_extractor.py +166 -0
  295. design_graph-0.34.0/tests/unit/extraction/test_plain_html_extractor_deduplication.py +113 -0
  296. design_graph-0.34.0/tests/unit/extraction/test_screen_extractor.py +224 -0
  297. design_graph-0.34.0/tests/unit/extraction/test_section_extractor.py +467 -0
  298. design_graph-0.34.0/tests/unit/extraction/test_section_extractor_fallbacks.py +240 -0
  299. design_graph-0.34.0/tests/unit/extraction/test_section_extractor_list_markup.py +220 -0
  300. design_graph-0.34.0/tests/unit/extraction/test_section_extractor_semantic.py +134 -0
  301. design_graph-0.34.0/tests/unit/graph/__init__.py +0 -0
  302. design_graph-0.34.0/tests/unit/graph/test_component_prop_graph.py +165 -0
  303. design_graph-0.34.0/tests/unit/graph/test_layout_profile_queries.py +308 -0
  304. design_graph-0.34.0/tests/unit/graph/test_reader_advanced_queries.py +707 -0
  305. design_graph-0.34.0/tests/unit/graph/test_referenced_data_graph.py +75 -0
  306. design_graph-0.34.0/tests/unit/graph/test_schema_and_diff.py +162 -0
  307. design_graph-0.34.0/tests/unit/graph/test_schema_error_paths.py +72 -0
  308. design_graph-0.34.0/tests/unit/graph/test_screen_full_query.py +437 -0
  309. design_graph-0.34.0/tests/unit/graph/test_section_style_nodes.py +136 -0
  310. design_graph-0.34.0/tests/unit/graph/test_section_text_nodes.py +169 -0
  311. design_graph-0.34.0/tests/unit/graph/test_shared_class_styles.py +92 -0
  312. design_graph-0.34.0/tests/unit/graph/test_write_session.py +182 -0
  313. design_graph-0.34.0/tests/unit/graph/test_writer_deduplication_guards.py +385 -0
  314. design_graph-0.34.0/tests/unit/graph/test_writer_reader.py +1070 -0
  315. design_graph-0.34.0/tests/unit/mcp/__init__.py +0 -0
  316. design_graph-0.34.0/tests/unit/mcp/test_capped_jsx.py +54 -0
  317. design_graph-0.34.0/tests/unit/mcp/test_component_props_tool.py +64 -0
  318. design_graph-0.34.0/tests/unit/mcp/test_graph_directory_snapshot.py +68 -0
  319. design_graph-0.34.0/tests/unit/mcp/test_layout_tool.py +117 -0
  320. design_graph-0.34.0/tests/unit/mcp/test_mcp_reload.py +121 -0
  321. design_graph-0.34.0/tests/unit/mcp/test_metrics.py +233 -0
  322. design_graph-0.34.0/tests/unit/mcp/test_prop_default_honesty.py +93 -0
  323. design_graph-0.34.0/tests/unit/mcp/test_screen_full_tool.py +244 -0
  324. design_graph-0.34.0/tests/unit/mcp/test_screen_structure_gap_notice.py +87 -0
  325. design_graph-0.34.0/tests/unit/mcp/test_search.py +457 -0
  326. design_graph-0.34.0/tests/unit/mcp/test_server_dispatch.py +38 -0
  327. design_graph-0.34.0/tests/unit/mcp/test_server_metrics_instrumentation.py +146 -0
  328. design_graph-0.34.0/tests/unit/mcp/test_server_sdk_wiring.py +77 -0
  329. design_graph-0.34.0/tests/unit/mcp/test_server_tool_exception_path.py +77 -0
  330. design_graph-0.34.0/tests/unit/mcp/test_style_dedup.py +110 -0
  331. design_graph-0.34.0/tests/unit/mcp/test_style_extraction_gap.py +42 -0
  332. design_graph-0.34.0/tests/unit/mcp/test_style_gap_notice.py +110 -0
  333. design_graph-0.34.0/tests/unit/mcp/test_tools.py +948 -0
  334. design_graph-0.34.0/tests/unit/mcp/test_tools_full_coverage.py +743 -0
  335. design_graph-0.34.0/tests/unit/parsing/__init__.py +0 -0
  336. design_graph-0.34.0/tests/unit/parsing/test_bundled_react_extraction.py +363 -0
  337. design_graph-0.34.0/tests/unit/parsing/test_css_class_resolver.py +609 -0
  338. design_graph-0.34.0/tests/unit/parsing/test_format_detector.py +84 -0
  339. design_graph-0.34.0/tests/unit/parsing/test_html_parser.py +137 -0
  340. design_graph-0.34.0/tests/unit/parsing/test_html_parser_edge_cases.py +227 -0
  341. design_graph-0.34.0/tests/unit/parsing/test_js_parser.py +706 -0
  342. design_graph-0.34.0/tests/unit/parsing/test_palette_extractor.py +122 -0
  343. design_graph-0.34.0/tests/unit/parsing/test_parsing_edge_cases.py +131 -0
  344. design_graph-0.34.0/tests/unit/parsing/test_source_loader.py +167 -0
  345. design_graph-0.34.0/tests/unit/parsing/test_token_extractor.py +503 -0
  346. design_graph-0.34.0/tests/unit/paths/__init__.py +0 -0
  347. design_graph-0.34.0/tests/unit/paths/test_graph_directory_resolution.py +176 -0
  348. design_graph-0.34.0/tests/unit/pipeline/__init__.py +0 -0
  349. design_graph-0.34.0/tests/unit/pipeline/test_build_progress.py +283 -0
  350. design_graph-0.34.0/tests/unit/pipeline/test_build_state_persistence.py +243 -0
  351. design_graph-0.34.0/tests/unit/pipeline/test_build_state_repository.py +59 -0
  352. design_graph-0.34.0/tests/unit/pipeline/test_coordinator_edge_paths.py +437 -0
  353. design_graph-0.34.0/tests/unit/pipeline/test_extraction_progress.py +211 -0
  354. design_graph-0.34.0/tests/unit/pipeline/test_kuzu_version_guard.py +76 -0
  355. design_graph-0.34.0/tests/unit/pipeline/test_plain_html_routing.py +142 -0
  356. design_graph-0.34.0/tests/unit/scripts/__init__.py +0 -0
  357. design_graph-0.34.0/tests/unit/scripts/test_auto_version.py +197 -0
  358. design_graph-0.34.0/tests/unit/test_graph_workspace.py +67 -0
  359. design_graph-0.34.0/watch_prototype.sh +31 -0
Binary file
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env sh
2
+ # post-commit hook — auto-tags the repo and updates README version badge.
3
+ # Install via: make install-hooks (sets core.hooksPath = .githooks)
4
+ #
5
+ # Lock file prevents recursion: the version-bump commit re-triggers this hook,
6
+ # but exits immediately when the lock is present.
7
+ LOCK=/tmp/.design_graph_version_lock
8
+ if [ -f "$LOCK" ]; then exit 0; fi
9
+ touch "$LOCK"
10
+ python3 scripts/auto_version.py
11
+ STATUS=$?
12
+ rm -f "$LOCK"
13
+ exit $STATUS
@@ -0,0 +1,44 @@
1
+ name: Publish to PyPI
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ jobs:
8
+ build:
9
+ runs-on: ubuntu-latest
10
+ steps:
11
+ - uses: actions/checkout@v4
12
+ with:
13
+ fetch-depth: 0 # full history so setuptools-scm can read tags
14
+
15
+ - uses: actions/setup-python@v5
16
+ with:
17
+ python-version: "3.12"
18
+
19
+ - name: Install build tooling
20
+ run: pip install build
21
+
22
+ - name: Build sdist and wheel
23
+ run: python -m build
24
+
25
+ - name: Upload build artifacts
26
+ uses: actions/upload-artifact@v4
27
+ with:
28
+ name: dist
29
+ path: dist/
30
+
31
+ publish:
32
+ needs: build
33
+ runs-on: ubuntu-latest
34
+ environment: pypi
35
+ permissions:
36
+ id-token: write # required for PyPI trusted publishing (OIDC)
37
+ steps:
38
+ - uses: actions/download-artifact@v4
39
+ with:
40
+ name: dist
41
+ path: dist/
42
+
43
+ - name: Publish to PyPI
44
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,39 @@
1
+ name: Tests
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ jobs:
10
+ test:
11
+ runs-on: ubuntu-latest
12
+ strategy:
13
+ matrix:
14
+ python-version: ["3.10", "3.11", "3.12"]
15
+
16
+ steps:
17
+ - uses: actions/checkout@v4
18
+ with:
19
+ fetch-depth: 0 # full history so setuptools-scm can read tags
20
+
21
+ - uses: actions/setup-python@v5
22
+ with:
23
+ python-version: ${{ matrix.python-version }}
24
+
25
+ - name: Install package and dev dependencies
26
+ run: pip install -e ".[dev]"
27
+
28
+ - name: Check architecture guardrails (G1-G11)
29
+ run: pytest tests/test_architecture_guardrails.py -v --tb=short
30
+
31
+ - name: Run tests with coverage
32
+ run: pytest tests/ --cov=. --cov-report=term-missing --cov-report=xml -v
33
+
34
+ - name: Upload coverage report
35
+ uses: codecov/codecov-action@v4
36
+ if: matrix.python-version == '3.12'
37
+ with:
38
+ file: ./coverage.xml
39
+ fail_ci_if_error: false
@@ -0,0 +1,38 @@
1
+ # Graph databases (generated, can be large)
2
+ *.db
3
+ *.db/
4
+ .graph-state.json
5
+ graph-diff.md
6
+
7
+ # Private prototypes loaded for local testing (never commit these)
8
+ /*.html
9
+
10
+ # Generated context directories
11
+ agent-context/
12
+
13
+ # Personal MCP configs (contain local paths)
14
+ claude_mcp_config.json
15
+ *.local.json
16
+
17
+ # Python
18
+ _version.py
19
+ __pycache__/
20
+ *.pyc
21
+ *.pyo
22
+ *.egg-info/
23
+ dist/
24
+ build/
25
+ .venv/
26
+ venv/
27
+ *.egg
28
+ .eggs/
29
+
30
+ # OS
31
+ .DS_Store
32
+ Thumbs.db
33
+
34
+ # Editor
35
+ .idea/
36
+ .vscode/
37
+ *.swp
38
+ *.swo
@@ -0,0 +1,10 @@
1
+ {
2
+ "mcpServers": {
3
+ "design-graph": {
4
+ "type": "stdio",
5
+ "command": "design-mcp",
6
+ "args": [],
7
+ "env": {}
8
+ }
9
+ }
10
+ }
@@ -0,0 +1,217 @@
1
+ PROTO ?= $(shell ls *.html 2>/dev/null | head -1)
2
+ DB_DIR ?= $(shell PYTHONPATH=$(CONTEXT)/src python3 -c "from design_graph.paths import resolve_graph_dir; print(resolve_graph_dir())" 2>/dev/null || echo "$(HOME)/.local/share/design-graph")
3
+ GRAPH_DB ?= $(DB_DIR)/$(basename $(PROTO)).db
4
+ MCP_PID := /tmp/design-mcp.pid
5
+ MCP_LOG := /tmp/design-mcp.log
6
+ PYTHON := python3
7
+
8
+ # Resolve the directory where this Makefile lives (works from any cwd)
9
+ CONTEXT := $(shell dirname "$(abspath $(lastword $(MAKEFILE_LIST)))")
10
+
11
+ # Commands are provided by the package installation (pip/pipx/editable install).
12
+ DESIGN_GRAPH := design-graph
13
+ DESIGN_MCP := design-mcp
14
+ DESIGN_QUERY := design-query
15
+
16
+ .DEFAULT_GOAL := help
17
+
18
+ # ─────────────────────────────────────────────────────────────────────────────
19
+ help:
20
+ @echo ""
21
+ @echo " design-graph"
22
+ @echo ""
23
+ @echo " Graph"
24
+ @echo " make build PROTO=file.html Build / update the graph"
25
+ @echo " make diff PROTO=file.html Show what changed since last build"
26
+ @echo " make rebuild PROTO=file.html Force a full rebuild"
27
+ @echo " make databases List graph databases"
28
+ @echo " make use-db DOC='prototype' Select the default prototype"
29
+ @echo " make remove-db DOC='prototype' Remove a graph and its state"
30
+ @echo " make prune-dbs Preview orphan cleanup"
31
+ @echo ""
32
+ @echo " MCP Server"
33
+ @echo " make start Start MCP server in background"
34
+ @echo " make stop Stop MCP server"
35
+ @echo " make restart Restart MCP server"
36
+ @echo " make status Check if running"
37
+ @echo " make logs Tail server logs"
38
+ @echo ""
39
+ @echo " Direct queries (no Cursor needed)"
40
+ @echo " make screens List all screens"
41
+ @echo " make tokens List color tokens"
42
+ @echo " make search Q='button' Search the graph"
43
+ @echo " make inspect C='SectionCard' Component details"
44
+ @echo " make impact C='SectionCard' Impact analysis"
45
+ @echo " make screen S='RestaurantsPage' Screen details"
46
+ @echo ""
47
+ @echo " Developer setup"
48
+ @echo " make install-hooks Install git hooks (auto-versioning)"
49
+ @echo " make push Push commits + version tags to GitHub"
50
+ @echo " make version Show current and projected next version"
51
+ @echo " make release Push + publish a GitHub release (triggers PyPI)"
52
+ @echo ""
53
+ @echo " Maintenance"
54
+ @echo " make list-graphs List available graphs"
55
+ @echo " make clean-graph DB=~/graphs/x.db Remove a graph"
56
+ @echo " make clean-all Remove all graphs"
57
+ @echo ""
58
+
59
+ # ─────────────────────────────────────────────────────────────────────────────
60
+ # Graph
61
+ # ─────────────────────────────────────────────────────────────────────────────
62
+
63
+ build:
64
+ @test -n "$(PROTO)" || (echo "Error: PROTO not set. Ex: make build PROTO=file.html" && exit 1)
65
+ @test -f "$(PROTO)" || (echo "Error: file '$(PROTO)' not found" && exit 1)
66
+ @mkdir -p $(DB_DIR)
67
+ $(DESIGN_GRAPH) "$(PROTO)" --db $(GRAPH_DB)
68
+
69
+ diff:
70
+ @test -n "$(PROTO)" || (echo "Error: PROTO not set." && exit 1)
71
+ $(DESIGN_GRAPH) "$(PROTO)" --db $(GRAPH_DB) --diff
72
+
73
+ rebuild:
74
+ @test -n "$(PROTO)" || (echo "Error: PROTO not set." && exit 1)
75
+ $(DESIGN_GRAPH) "$(PROTO)" --db $(GRAPH_DB) --force
76
+
77
+ databases:
78
+ @GRAPH_DIR=$(DB_DIR) $(DESIGN_GRAPH) db list
79
+
80
+ use-db:
81
+ @test -n "$(DOC)" || (echo "Usage: make use-db DOC='prototype'" && exit 1)
82
+ @GRAPH_DIR=$(DB_DIR) $(DESIGN_GRAPH) db use "$(DOC)"
83
+
84
+ remove-db:
85
+ @test -n "$(DOC)" || (echo "Usage: make remove-db DOC='prototype'" && exit 1)
86
+ @GRAPH_DIR=$(DB_DIR) $(DESIGN_GRAPH) db remove "$(DOC)"
87
+
88
+ prune-dbs:
89
+ @GRAPH_DIR=$(DB_DIR) $(DESIGN_GRAPH) db prune --dry-run
90
+
91
+ # ─────────────────────────────────────────────────────────────────────────────
92
+ # MCP Server
93
+ # ─────────────────────────────────────────────────────────────────────────────
94
+
95
+ start:
96
+ @if [ -f $(MCP_PID) ] && kill -0 $$(cat $(MCP_PID)) 2>/dev/null; then \
97
+ echo "MCP already running (PID $$(cat $(MCP_PID)))"; \
98
+ else \
99
+ echo "Note: if Cursor is open with MCP active, the DB lock will prevent a second server."; \
100
+ GRAPH_DIR=$(DB_DIR) $(DESIGN_MCP) < /dev/null >> $(MCP_LOG) 2>&1 & \
101
+ echo $$! > $(MCP_PID); \
102
+ sleep 2; \
103
+ if kill -0 $$(cat $(MCP_PID)) 2>/dev/null; then \
104
+ echo "MCP started — PID $$(cat $(MCP_PID)) | make logs"; \
105
+ else \
106
+ echo "MCP failed to start — Cursor may already hold the DB lock. See: make logs"; \
107
+ rm -f $(MCP_PID); \
108
+ fi; \
109
+ fi
110
+
111
+ stop:
112
+ @if [ -f $(MCP_PID) ]; then \
113
+ PID=$$(cat $(MCP_PID)); \
114
+ if kill -0 $$PID 2>/dev/null; then \
115
+ kill $$PID && echo "MCP stopped (PID $$PID)."; \
116
+ else \
117
+ echo "PID $$PID was not running."; \
118
+ fi; \
119
+ rm -f $(MCP_PID); \
120
+ else \
121
+ STRAY=$$(pgrep -f mcp_server.py); \
122
+ if [ -n "$$STRAY" ]; then kill $$STRAY && echo "MCP stopped (PID $$STRAY)."; \
123
+ else echo "MCP is not running."; fi; \
124
+ fi
125
+
126
+ restart: stop start
127
+
128
+ status:
129
+ @if [ -f $(MCP_PID) ] && kill -0 $$(cat $(MCP_PID)) 2>/dev/null; then \
130
+ echo "MCP running (PID $$(cat $(MCP_PID)))"; \
131
+ ls $(DB_DIR)/*.db 2>/dev/null || echo " (no graphs in $(DB_DIR))"; \
132
+ else \
133
+ echo "MCP is not running"; \
134
+ fi
135
+
136
+ logs:
137
+ @tail -f $(MCP_LOG)
138
+
139
+ # ─────────────────────────────────────────────────────────────────────────────
140
+ # Direct queries
141
+ # ─────────────────────────────────────────────────────────────────────────────
142
+
143
+ screens:
144
+ @GRAPH_DIR=$(DB_DIR) $(DESIGN_QUERY) screens
145
+
146
+ tokens:
147
+ @GRAPH_DIR=$(DB_DIR) $(DESIGN_QUERY) tokens color
148
+
149
+ search:
150
+ @test -n "$(Q)" || (echo "Usage: make search Q='term'" && exit 1)
151
+ @GRAPH_DIR=$(DB_DIR) $(DESIGN_QUERY) search $(Q)
152
+
153
+ inspect:
154
+ @test -n "$(C)" || (echo "Usage: make inspect C='ComponentName'" && exit 1)
155
+ @GRAPH_DIR=$(DB_DIR) $(DESIGN_QUERY) inspect $(C)
156
+
157
+ impact:
158
+ @test -n "$(C)" || (echo "Usage: make impact C='ComponentName'" && exit 1)
159
+ @GRAPH_DIR=$(DB_DIR) $(DESIGN_QUERY) impact $(C)
160
+
161
+ screen:
162
+ @test -n "$(S)" || (echo "Usage: make screen S='ScreenName'" && exit 1)
163
+ @GRAPH_DIR=$(DB_DIR) $(DESIGN_QUERY) screen $(S)
164
+
165
+ # ─────────────────────────────────────────────────────────────────────────────
166
+ # Developer setup
167
+ # ─────────────────────────────────────────────────────────────────────────────
168
+
169
+ install-hooks:
170
+ git config core.hooksPath .githooks
171
+ git config push.followTags true
172
+ @echo "Git hooks installed — post-commit will auto-tag versions."
173
+ @echo "push.followTags enabled — 'git push' will now include annotated tags."
174
+ @echo "Run 'git config --unset core.hooksPath' to remove hooks."
175
+
176
+ push:
177
+ @echo "Pushing commits and all annotated version tags…"
178
+ git push --follow-tags
179
+ @echo "Done. pip install --upgrade git+<url> will now see the latest version."
180
+
181
+ version:
182
+ @python scripts/auto_version.py --dry-run 2>/dev/null || \
183
+ python3 -c "import subprocess; print(subprocess.run(['git','describe','--tags','--abbrev=0'],capture_output=True,text=True).stdout.strip() or '(no tags yet)')"
184
+
185
+ release:
186
+ @command -v gh >/dev/null 2>&1 || (echo "Error: GitHub CLI 'gh' not found. Install: https://cli.github.com" && exit 1)
187
+ @TAG=$$(git describe --tags --abbrev=0 2>/dev/null); \
188
+ test -n "$$TAG" || (echo "Error: no version tag found yet. Commit with a feat/fix/chore/refactor prefix first." && exit 1); \
189
+ git push --follow-tags; \
190
+ if gh release view $$TAG >/dev/null 2>&1; then \
191
+ echo "Release $$TAG already exists on GitHub."; \
192
+ else \
193
+ echo "Publishing GitHub release $$TAG (this triggers the PyPI publish workflow)…"; \
194
+ gh release create $$TAG --title $$TAG --generate-notes; \
195
+ fi
196
+
197
+ # ─────────────────────────────────────────────────────────────────────────────
198
+ # Maintenance
199
+ # ─────────────────────────────────────────────────────────────────────────────
200
+
201
+ list-graphs:
202
+ @echo "Graphs in $(DB_DIR):"
203
+ @ls -lh $(DB_DIR)/*.db 2>/dev/null || echo " (none)"
204
+
205
+ clean-graph:
206
+ @test -n "$(DB)" || (echo "Usage: make clean-graph DB=~/graphs/file.db" && exit 1)
207
+ rm -rf "$(DB)"
208
+ @echo "Removed: $(DB)"
209
+
210
+ clean-all:
211
+ @printf "Remove all graphs in $(DB_DIR)? [y/N] " && read c && \
212
+ [ "$$c" = "y" ] && rm -rf $(DB_DIR)/*.db && echo "Done." || echo "Cancelled."
213
+
214
+ .PHONY: help build diff rebuild databases use-db remove-db prune-dbs start stop restart status logs \
215
+ screens tokens search inspect impact screen \
216
+ install-hooks push version release \
217
+ list-graphs clean-graph clean-all