@monoes/monograph 1.5.6 → 1.5.8

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 (708) hide show
  1. package/README.md +31 -15
  2. package/dist/src/analysis/changed-files.d.ts +3 -0
  3. package/dist/src/analysis/changed-files.d.ts.map +1 -1
  4. package/dist/src/analysis/changed-files.js +11 -9
  5. package/dist/src/analysis/changed-files.js.map +1 -1
  6. package/dist/src/analysis/changed-workspaces.d.ts.map +1 -1
  7. package/dist/src/analysis/changed-workspaces.js +2 -9
  8. package/dist/src/analysis/changed-workspaces.js.map +1 -1
  9. package/dist/src/analysis/git-changed-files.d.ts +3 -0
  10. package/dist/src/analysis/git-changed-files.d.ts.map +1 -1
  11. package/dist/src/analysis/git-changed-files.js +17 -12
  12. package/dist/src/analysis/git-changed-files.js.map +1 -1
  13. package/dist/src/analysis/git-ref.d.ts +33 -0
  14. package/dist/src/analysis/git-ref.d.ts.map +1 -0
  15. package/dist/src/analysis/git-ref.js +54 -0
  16. package/dist/src/analysis/git-ref.js.map +1 -0
  17. package/dist/src/analyze/boundary-analysis.d.ts.map +1 -1
  18. package/dist/src/analyze/boundary-analysis.js +42 -42
  19. package/dist/src/analyze/boundary-analysis.js.map +1 -1
  20. package/dist/src/index.d.ts +1 -0
  21. package/dist/src/index.d.ts.map +1 -1
  22. package/dist/src/index.js +1 -0
  23. package/dist/src/index.js.map +1 -1
  24. package/dist/src/lsp/server.d.ts +1 -1
  25. package/dist/src/lsp/server.d.ts.map +1 -1
  26. package/dist/src/lsp/server.js +48 -13
  27. package/dist/src/lsp/server.js.map +1 -1
  28. package/dist/src/mcp-tools/api-impact.d.ts.map +1 -1
  29. package/dist/src/mcp-tools/api-impact.js +1 -16
  30. package/dist/src/mcp-tools/api-impact.js.map +1 -1
  31. package/dist/src/mcp-tools/context.d.ts.map +1 -1
  32. package/dist/src/mcp-tools/context.js +12 -23
  33. package/dist/src/mcp-tools/context.js.map +1 -1
  34. package/dist/src/mcp-tools/explain.d.ts.map +1 -1
  35. package/dist/src/mcp-tools/explain.js +15 -20
  36. package/dist/src/mcp-tools/explain.js.map +1 -1
  37. package/dist/src/mcp-tools/graph-query.d.ts.map +1 -1
  38. package/dist/src/mcp-tools/graph-query.js +10 -19
  39. package/dist/src/mcp-tools/graph-query.js.map +1 -1
  40. package/dist/src/mcp-tools/impact.d.ts.map +1 -1
  41. package/dist/src/mcp-tools/impact.js +38 -41
  42. package/dist/src/mcp-tools/impact.js.map +1 -1
  43. package/dist/src/mcp-tools/neighbors.d.ts.map +1 -1
  44. package/dist/src/mcp-tools/neighbors.js +4 -22
  45. package/dist/src/mcp-tools/neighbors.js.map +1 -1
  46. package/dist/src/mcp-tools/query.d.ts.map +1 -1
  47. package/dist/src/mcp-tools/query.js +14 -9
  48. package/dist/src/mcp-tools/query.js.map +1 -1
  49. package/dist/src/mcp-tools/rename.d.ts.map +1 -1
  50. package/dist/src/mcp-tools/rename.js +3 -20
  51. package/dist/src/mcp-tools/rename.js.map +1 -1
  52. package/dist/src/parsers/c.d.ts.map +1 -1
  53. package/dist/src/parsers/c.js +12 -0
  54. package/dist/src/parsers/c.js.map +1 -1
  55. package/dist/src/parsers/extractor.d.ts.map +1 -1
  56. package/dist/src/parsers/extractor.js +2 -1
  57. package/dist/src/parsers/extractor.js.map +1 -1
  58. package/dist/src/parsers/go.d.ts.map +1 -1
  59. package/dist/src/parsers/go.js +19 -1
  60. package/dist/src/parsers/go.js.map +1 -1
  61. package/dist/src/parsers/language-config.d.ts +4 -0
  62. package/dist/src/parsers/language-config.d.ts.map +1 -1
  63. package/dist/src/parsers/language-parsers.d.ts.map +1 -1
  64. package/dist/src/parsers/language-parsers.js +3 -1
  65. package/dist/src/parsers/language-parsers.js.map +1 -1
  66. package/dist/src/parsers/loader.d.ts +1 -0
  67. package/dist/src/parsers/loader.d.ts.map +1 -1
  68. package/dist/src/parsers/loader.js +161 -20
  69. package/dist/src/parsers/loader.js.map +1 -1
  70. package/dist/src/parsers/python.d.ts.map +1 -1
  71. package/dist/src/parsers/python.js +6 -0
  72. package/dist/src/parsers/python.js.map +1 -1
  73. package/dist/src/parsers/rust.d.ts.map +1 -1
  74. package/dist/src/parsers/rust.js +10 -0
  75. package/dist/src/parsers/rust.js.map +1 -1
  76. package/dist/src/pipeline/orchestrator.d.ts.map +1 -1
  77. package/dist/src/pipeline/orchestrator.js +17 -0
  78. package/dist/src/pipeline/orchestrator.js.map +1 -1
  79. package/dist/src/pipeline/phases/pdf-parse.d.ts.map +1 -1
  80. package/dist/src/pipeline/phases/pdf-parse.js +10 -11
  81. package/dist/src/pipeline/phases/pdf-parse.js.map +1 -1
  82. package/dist/src/storage/edge-store.d.ts +1 -0
  83. package/dist/src/storage/edge-store.d.ts.map +1 -1
  84. package/dist/src/storage/edge-store.js +5 -8
  85. package/dist/src/storage/edge-store.js.map +1 -1
  86. package/dist/src/storage/node-store.d.ts +1 -0
  87. package/dist/src/storage/node-store.d.ts.map +1 -1
  88. package/dist/src/storage/node-store.js +11 -12
  89. package/dist/src/storage/node-store.js.map +1 -1
  90. package/dist/src/storage/schema.d.ts.map +1 -1
  91. package/dist/src/storage/schema.js +6 -0
  92. package/dist/src/storage/schema.js.map +1 -1
  93. package/dist/src/storage/utils.d.ts +11 -0
  94. package/dist/src/storage/utils.d.ts.map +1 -0
  95. package/dist/src/storage/utils.js +24 -0
  96. package/dist/src/storage/utils.js.map +1 -0
  97. package/dist/tsconfig.tsbuildinfo +1 -1
  98. package/package.json +12 -9
  99. package/.monomind/data/ranked-context.json +0 -5
  100. package/.monomind/loops/mastermind-review-1782162423447.json +0 -16
  101. package/.monomind/sessions/session-1777578175215.json +0 -15
  102. package/.monomind/sessions/session-1777823684507.json +0 -15
  103. package/.monomind/sessions/session-1777928944749.json +0 -15
  104. package/.monomind/sessions/session-1778052902210.json +0 -15
  105. package/.monomind/sessions/session-1778056744636.json +0 -15
  106. package/.monomind/sessions/session-1778061077599.json +0 -15
  107. package/.monomind/sessions/session-1778102154764.json +0 -15
  108. package/__tests__/analysis/shape-extractor.test.ts +0 -124
  109. package/__tests__/analysis/surprise-scorer.test.ts +0 -154
  110. package/__tests__/cache/extraction-cache.test.ts +0 -45
  111. package/__tests__/cli/ai-context.test.ts +0 -175
  112. package/__tests__/cli/augment.test.ts +0 -128
  113. package/__tests__/cli/doctor.test.ts +0 -125
  114. package/__tests__/cli/eval-server.test.ts +0 -89
  115. package/__tests__/cli/setup.test.ts +0 -178
  116. package/__tests__/cli/skill-gen.test.ts +0 -280
  117. package/__tests__/export/formats.test.ts +0 -82
  118. package/__tests__/fixtures/sample.c +0 -25
  119. package/__tests__/fixtures/sample.cpp +0 -32
  120. package/__tests__/fixtures/sample.dart +0 -34
  121. package/__tests__/fixtures/sample.kt +0 -30
  122. package/__tests__/fixtures/sample.php +0 -30
  123. package/__tests__/fixtures/sample.py +0 -11
  124. package/__tests__/fixtures/sample.rb +0 -26
  125. package/__tests__/fixtures/sample.swift +0 -42
  126. package/__tests__/fixtures/sample.ts +0 -17
  127. package/__tests__/fixtures/sample.vue +0 -40
  128. package/__tests__/groups/group-search.test.ts +0 -221
  129. package/__tests__/groups/group-sync.test.ts +0 -336
  130. package/__tests__/integration/build-atomicity.test.ts +0 -61
  131. package/__tests__/integration/call-attribution.test.ts +0 -116
  132. package/__tests__/integration/full-pipeline.test.ts +0 -64
  133. package/__tests__/integration/graph-report-freshness.test.ts +0 -53
  134. package/__tests__/integration/incremental-build.test.ts +0 -103
  135. package/__tests__/mcp-resources/resources.test.ts +0 -256
  136. package/__tests__/mcp-tools/api-impact.test.ts +0 -188
  137. package/__tests__/mcp-tools/context.test.ts +0 -130
  138. package/__tests__/mcp-tools/cypher.test.ts +0 -258
  139. package/__tests__/mcp-tools/detect-changes.test.ts +0 -114
  140. package/__tests__/mcp-tools/impact.test.ts +0 -133
  141. package/__tests__/mcp-tools/rename.test.ts +0 -117
  142. package/__tests__/mcp-tools/route-map.test.ts +0 -237
  143. package/__tests__/mcp-tools/shape-check.test.ts +0 -202
  144. package/__tests__/mcp-tools/tool-map.test.ts +0 -135
  145. package/__tests__/parsers/c.test.ts +0 -28
  146. package/__tests__/parsers/cpp.test.ts +0 -28
  147. package/__tests__/parsers/csharp.test.ts +0 -62
  148. package/__tests__/parsers/dart.test.ts +0 -28
  149. package/__tests__/parsers/kotlin.test.ts +0 -28
  150. package/__tests__/parsers/loader.test.ts +0 -14
  151. package/__tests__/parsers/php.test.ts +0 -28
  152. package/__tests__/parsers/python.test.ts +0 -32
  153. package/__tests__/parsers/ruby.test.ts +0 -33
  154. package/__tests__/parsers/swift.test.ts +0 -28
  155. package/__tests__/parsers/typescript.test.ts +0 -45
  156. package/__tests__/parsers/vue.test.ts +0 -28
  157. package/__tests__/pipeline/analysis.test.ts +0 -58
  158. package/__tests__/pipeline/phases/corpus-check.test.ts +0 -26
  159. package/__tests__/pipeline/phases/evidence.test.ts +0 -41
  160. package/__tests__/pipeline/phases/field-access.test.ts +0 -22
  161. package/__tests__/pipeline/phases/leiden.test.ts +0 -72
  162. package/__tests__/pipeline/phases/markdown.test.ts +0 -84
  163. package/__tests__/pipeline/phases/middleware-extractor.test.ts +0 -131
  164. package/__tests__/pipeline/phases/orm.test.ts +0 -379
  165. package/__tests__/pipeline/phases/processes.test.ts +0 -191
  166. package/__tests__/pipeline/phases/routes.test.ts +0 -195
  167. package/__tests__/pipeline/phases/scope-resolution.test.ts +0 -133
  168. package/__tests__/pipeline/phases/tools.test.ts +0 -161
  169. package/__tests__/pipeline/phases/variables.test.ts +0 -30
  170. package/__tests__/pipeline/phases/wildcard-synthesis.test.ts +0 -207
  171. package/__tests__/pipeline/phases.test.ts +0 -41
  172. package/__tests__/pipeline/runner.test.ts +0 -28
  173. package/__tests__/registry/repo-registry.test.ts +0 -127
  174. package/__tests__/reporting/graph-report.suggest.test.ts +0 -36
  175. package/__tests__/reporting/graph-report.test.ts +0 -165
  176. package/__tests__/search/ast-chunker.test.ts +0 -63
  177. package/__tests__/search/rrf.test.ts +0 -95
  178. package/__tests__/security/safe-fetch.test.ts +0 -41
  179. package/__tests__/security/sensitive-files.test.ts +0 -32
  180. package/__tests__/setup.ts +0 -1
  181. package/__tests__/skills/platform-skills.test.ts +0 -63
  182. package/__tests__/staleness/git-staleness.test.ts +0 -107
  183. package/__tests__/storage/db.test.ts +0 -37
  184. package/__tests__/storage/evidence-roundtrip.test.ts +0 -89
  185. package/__tests__/storage/stores.test.ts +0 -165
  186. package/__tests__/types.test.ts +0 -13
  187. package/__tests__/validation/extraction-validator.test.ts +0 -48
  188. package/__tests__/watch/watcher.test.ts +0 -31
  189. package/__tests__/web/analyze-api.test.ts +0 -66
  190. package/__tests__/web/api.test.ts +0 -210
  191. package/__tests__/web/mcp-http.test.ts +0 -67
  192. package/__tests__/web/react-ui.test.ts +0 -43
  193. package/__tests__/wiki/gist-publisher.test.ts +0 -66
  194. package/__tests__/wiki/providers.test.ts +0 -69
  195. package/__tests__/wiki/wiki-generator.test.ts +0 -260
  196. package/dist/src/fix/deps.d.ts +0 -14
  197. package/dist/src/fix/deps.d.ts.map +0 -1
  198. package/dist/src/fix/deps.js +0 -47
  199. package/dist/src/fix/deps.js.map +0 -1
  200. package/dist/src/fix/enum-members.d.ts +0 -20
  201. package/dist/src/fix/enum-members.d.ts.map +0 -1
  202. package/dist/src/fix/enum-members.js +0 -95
  203. package/dist/src/fix/enum-members.js.map +0 -1
  204. package/dist/src/fix/export-surgery.d.ts +0 -14
  205. package/dist/src/fix/export-surgery.d.ts.map +0 -1
  206. package/dist/src/fix/export-surgery.js +0 -140
  207. package/dist/src/fix/export-surgery.js.map +0 -1
  208. package/dist/src/fix/exports.d.ts +0 -16
  209. package/dist/src/fix/exports.d.ts.map +0 -1
  210. package/dist/src/fix/exports.js +0 -65
  211. package/dist/src/fix/exports.js.map +0 -1
  212. package/dist/src/fix/orchestrator.d.ts +0 -28
  213. package/dist/src/fix/orchestrator.d.ts.map +0 -1
  214. package/dist/src/fix/orchestrator.js +0 -39
  215. package/dist/src/fix/orchestrator.js.map +0 -1
  216. package/src/__tests__/analysis/benchmark.test.ts +0 -59
  217. package/src/__tests__/analysis/cluster-quality.test.ts +0 -106
  218. package/src/__tests__/analysis/corpus-health.test.ts +0 -33
  219. package/src/__tests__/analysis/dependency-health.test.ts +0 -105
  220. package/src/__tests__/analysis/file-classifier.test.ts +0 -50
  221. package/src/__tests__/analysis/node-similarity.test.ts +0 -81
  222. package/src/__tests__/cache/augment-cache.test.ts +0 -55
  223. package/src/__tests__/cli/check-update.test.ts +0 -42
  224. package/src/__tests__/cli/hooks-install.test.ts +0 -56
  225. package/src/__tests__/cli/hooks-marker.test.ts +0 -138
  226. package/src/__tests__/cli/hooks-status.test.ts +0 -42
  227. package/src/__tests__/export/adjacency-matrix.test.ts +0 -116
  228. package/src/__tests__/export/csv.test.ts +0 -39
  229. package/src/__tests__/export/dot.test.ts +0 -86
  230. package/src/__tests__/export/gexf.test.ts +0 -78
  231. package/src/__tests__/export/graphml.test.ts +0 -57
  232. package/src/__tests__/export/mermaid.test.ts +0 -89
  233. package/src/__tests__/graph/betweenness.test.ts +0 -89
  234. package/src/__tests__/graph/cycles.test.ts +0 -131
  235. package/src/__tests__/graph/dead-code.test.ts +0 -174
  236. package/src/__tests__/graph/dfs.test.ts +0 -62
  237. package/src/__tests__/graph/diff-summary.test.ts +0 -83
  238. package/src/__tests__/graph/edge-filter.test.ts +0 -129
  239. package/src/__tests__/graph/import-chain.test.ts +0 -111
  240. package/src/__tests__/graph/merge.test.ts +0 -151
  241. package/src/__tests__/graph/node-search.test.ts +0 -167
  242. package/src/__tests__/graph/normalize-id.test.ts +0 -102
  243. package/src/__tests__/graph/pagerank.test.ts +0 -96
  244. package/src/__tests__/graph/prune.test.ts +0 -110
  245. package/src/__tests__/graph/regex-search.test.ts +0 -166
  246. package/src/__tests__/graph/ripple-impact.test.ts +0 -73
  247. package/src/__tests__/graph/scc.test.ts +0 -85
  248. package/src/__tests__/graph/statistics.test.ts +0 -219
  249. package/src/__tests__/graph/subgraph.test.ts +0 -127
  250. package/src/__tests__/graph/topo-sort.test.ts +0 -110
  251. package/src/__tests__/graph/wcc.test.ts +0 -101
  252. package/src/__tests__/groups/grpc-extractor.test.ts +0 -47
  253. package/src/__tests__/groups/service-boundary.test.ts +0 -86
  254. package/src/__tests__/groups/topic-extractor.test.ts +0 -43
  255. package/src/__tests__/ingest/git-clone.test.ts +0 -128
  256. package/src/__tests__/ingest/query-memory.test.ts +0 -123
  257. package/src/__tests__/ingest/transcribe.test.ts +0 -58
  258. package/src/__tests__/ingest/url-ingest.test.ts +0 -48
  259. package/src/__tests__/mcp-resources/repo-context-resource.test.ts +0 -37
  260. package/src/__tests__/mcp-resources/repos-resource.test.ts +0 -71
  261. package/src/__tests__/mcp-resources/wiki-resource.test.ts +0 -52
  262. package/src/__tests__/mcp-tools/explain.test.ts +0 -46
  263. package/src/__tests__/mcp-tools/graph-query.test.ts +0 -45
  264. package/src/__tests__/mcp-tools/group-sync.test.ts +0 -8
  265. package/src/__tests__/mcp-tools/impact-filtering.test.ts +0 -48
  266. package/src/__tests__/mcp-tools/impact.risk.test.ts +0 -24
  267. package/src/__tests__/mcp-tools/list-repos.test.ts +0 -24
  268. package/src/__tests__/mcp-tools/neighbors.test.ts +0 -48
  269. package/src/__tests__/mcp-tools/query.test.ts +0 -42
  270. package/src/__tests__/parsers/language-parsers.test.ts +0 -52
  271. package/src/__tests__/parsers/named-bindings.test.ts +0 -73
  272. package/src/__tests__/pipeline/cluster-only.test.ts +0 -33
  273. package/src/__tests__/pipeline/phases/bridge-adapters/electron-ipc.test.ts +0 -87
  274. package/src/__tests__/pipeline/phases/bridge-adapters/tauri.test.ts +0 -116
  275. package/src/__tests__/pipeline/phases/bridge-adapters/wails.test.ts +0 -81
  276. package/src/__tests__/pipeline/phases/bridge-resolver.test.ts +0 -110
  277. package/src/__tests__/pipeline/phases/communities.cohesion.test.ts +0 -43
  278. package/src/__tests__/pipeline/phases/community-split.test.ts +0 -30
  279. package/src/__tests__/pipeline/phases/framework-detect.test.ts +0 -65
  280. package/src/__tests__/pipeline/phases/import-resolver.test.ts +0 -64
  281. package/src/__tests__/pipeline/phases/parse-arrow.test.ts +0 -33
  282. package/src/__tests__/pipeline/phases/parse-csharp.test.ts +0 -33
  283. package/src/__tests__/pipeline/phases/scan.monographignore.test.ts +0 -53
  284. package/src/__tests__/pipeline/phases/scan.negation.test.ts +0 -40
  285. package/src/__tests__/pipeline/phases/scope-resolution.go.test.ts +0 -34
  286. package/src/__tests__/pipeline/phases/scope-resolution.java.test.ts +0 -30
  287. package/src/__tests__/pipeline/phases/scope-resolution.rust.test.ts +0 -31
  288. package/src/__tests__/pipeline/phases/suggest-questions.test.ts +0 -46
  289. package/src/__tests__/pipeline/phases/surprises-scoring.test.ts +0 -46
  290. package/src/__tests__/pipeline/phases/variables-phase.test.ts +0 -78
  291. package/src/__tests__/pipeline/phases/wildcard-phase.test.ts +0 -99
  292. package/src/__tests__/pipeline/runner.parallel.test.ts +0 -78
  293. package/src/__tests__/reporting/graph-report-confidence.test.ts +0 -43
  294. package/src/__tests__/reporting/graph-report-gaps.test.ts +0 -41
  295. package/src/__tests__/scope-resolution/call-sites.test.ts +0 -89
  296. package/src/__tests__/scope-resolution/evidence-weights.test.ts +0 -49
  297. package/src/__tests__/search/diacritic.test.ts +0 -23
  298. package/src/__tests__/security/safe-fetch.test.ts +0 -125
  299. package/src/__tests__/skills/platform-skills.extra.test.ts +0 -36
  300. package/src/__tests__/web/api.clusters.test.ts +0 -65
  301. package/src/__tests__/web/api.file.test.ts +0 -44
  302. package/src/__tests__/web/api.grep.test.ts +0 -47
  303. package/src/__tests__/web/api.info.test.ts +0 -18
  304. package/src/__tests__/web/api.jobs.test.ts +0 -47
  305. package/src/__tests__/web/api.progress.test.ts +0 -25
  306. package/src/__tests__/web/api.stream.test.ts +0 -35
  307. package/src/__tests__/wiki/providers-reasoning.test.ts +0 -46
  308. package/src/__tests__/wiki/wiki-review-mode.test.ts +0 -22
  309. package/src/analysis/benchmark.ts +0 -132
  310. package/src/analysis/changed-files.ts +0 -73
  311. package/src/analysis/changed-workspaces.ts +0 -94
  312. package/src/analysis/churn-cache.ts +0 -179
  313. package/src/analysis/churn-trend.ts +0 -57
  314. package/src/analysis/churn.ts +0 -263
  315. package/src/analysis/cluster-quality.ts +0 -142
  316. package/src/analysis/combined.ts +0 -41
  317. package/src/analysis/corpus-health.ts +0 -41
  318. package/src/analysis/coverage-gaps.ts +0 -246
  319. package/src/analysis/dep-classification.ts +0 -167
  320. package/src/analysis/dependency-health.ts +0 -146
  321. package/src/analysis/duplicate-exports.ts +0 -110
  322. package/src/analysis/fallow-suppression.ts +0 -98
  323. package/src/analysis/feature-flags-config.ts +0 -47
  324. package/src/analysis/feature-flags.ts +0 -223
  325. package/src/analysis/file-classifier.ts +0 -87
  326. package/src/analysis/git-changed-files.ts +0 -62
  327. package/src/analysis/health-baseline.ts +0 -80
  328. package/src/analysis/issue-filters.ts +0 -56
  329. package/src/analysis/list.ts +0 -74
  330. package/src/analysis/node-similarity.ts +0 -115
  331. package/src/analysis/private-type-leaks.ts +0 -119
  332. package/src/analysis/progress.ts +0 -43
  333. package/src/analysis/project-state.ts +0 -95
  334. package/src/analysis/regression-config.ts +0 -36
  335. package/src/analysis/rule-overrides.ts +0 -81
  336. package/src/analysis/scripts.ts +0 -95
  337. package/src/analysis/shape-extractor.ts +0 -202
  338. package/src/analysis/since-duration.ts +0 -42
  339. package/src/analysis/suppression-context.ts +0 -95
  340. package/src/analysis/suppressions.ts +0 -80
  341. package/src/analysis/surprise-scorer.ts +0 -74
  342. package/src/analysis/targets.ts +0 -237
  343. package/src/analysis/unused-class-members.ts +0 -79
  344. package/src/analysis/workspace-filter.ts +0 -89
  345. package/src/analyze/boundary-analysis.ts +0 -129
  346. package/src/analyze/predicates/file.ts +0 -86
  347. package/src/analyze/predicates/import.ts +0 -90
  348. package/src/analyze/predicates/lifecycle.ts +0 -55
  349. package/src/analyze/unused-deps.ts +0 -70
  350. package/src/analyze/unused-exports.ts +0 -145
  351. package/src/analyze/unused-files.ts +0 -46
  352. package/src/api/production-override.ts +0 -63
  353. package/src/api/programmatic.ts +0 -118
  354. package/src/audit.ts +0 -234
  355. package/src/cache/augment-cache.ts +0 -63
  356. package/src/cache/extraction-cache.ts +0 -141
  357. package/src/check/filtering.ts +0 -78
  358. package/src/check/index.ts +0 -99
  359. package/src/check/output.ts +0 -79
  360. package/src/check/rules.ts +0 -61
  361. package/src/ci-template.ts +0 -84
  362. package/src/claude-cli.ts +0 -59
  363. package/src/cli/ai-context.ts +0 -193
  364. package/src/cli/augment.ts +0 -114
  365. package/src/cli/check-update.ts +0 -40
  366. package/src/cli/doctor.ts +0 -182
  367. package/src/cli/eval-server.ts +0 -126
  368. package/src/cli/hooks-install.ts +0 -202
  369. package/src/cli/setup.ts +0 -197
  370. package/src/cli/skill-gen.ts +0 -347
  371. package/src/commands/flags.ts +0 -72
  372. package/src/config/boundary-config.ts +0 -183
  373. package/src/config/cli-schema.ts +0 -81
  374. package/src/config/config-parsing.ts +0 -102
  375. package/src/config/duplicates-config.ts +0 -62
  376. package/src/config/external-plugin.ts +0 -77
  377. package/src/config/health-config.ts +0 -42
  378. package/src/config/ignore-exports-used-in-file.ts +0 -46
  379. package/src/config/migration-types.ts +0 -73
  380. package/src/config/output-format.ts +0 -24
  381. package/src/config/plugins/builtin.ts +0 -411
  382. package/src/config/plugins/registry.ts +0 -77
  383. package/src/config/plugins/types.ts +0 -14
  384. package/src/config/resolution.ts +0 -102
  385. package/src/config/rules.ts +0 -70
  386. package/src/config/schema-gen.ts +0 -115
  387. package/src/config/types.ts +0 -149
  388. package/src/config/used-class-members.ts +0 -53
  389. package/src/config/validate.ts +0 -108
  390. package/src/config/workspace.ts +0 -137
  391. package/src/coverage/cloud-client.ts +0 -111
  392. package/src/coverage/upload-inventory.ts +0 -84
  393. package/src/coverage/upload-source-maps.ts +0 -97
  394. package/src/discover/entry-points.ts +0 -51
  395. package/src/discover/infrastructure-entries.ts +0 -175
  396. package/src/duplicates/detect/concatenation.ts +0 -37
  397. package/src/duplicates/detect/extraction.ts +0 -107
  398. package/src/duplicates/detect/filtering.ts +0 -112
  399. package/src/duplicates/detect/lcp.ts +0 -27
  400. package/src/duplicates/detect/ranking.ts +0 -16
  401. package/src/duplicates/detect/statistics.ts +0 -69
  402. package/src/duplicates/detect/suffix-array.ts +0 -88
  403. package/src/duplicates/families.ts +0 -95
  404. package/src/duplicates/normalize.ts +0 -58
  405. package/src/duplicates/shingle-filter.ts +0 -37
  406. package/src/duplicates/token-types.ts +0 -62
  407. package/src/duplicates/tokenize/index.ts +0 -104
  408. package/src/error/fallow-error.ts +0 -94
  409. package/src/error.ts +0 -47
  410. package/src/export/adjacency-matrix.ts +0 -127
  411. package/src/export/analysis-json.ts +0 -87
  412. package/src/export/badge.ts +0 -105
  413. package/src/export/canvas.ts +0 -42
  414. package/src/export/codeclimate.ts +0 -201
  415. package/src/export/compact-health.ts +0 -119
  416. package/src/export/compact.ts +0 -83
  417. package/src/export/csv.ts +0 -33
  418. package/src/export/cypher.ts +0 -33
  419. package/src/export/dot.ts +0 -52
  420. package/src/export/gexf.ts +0 -59
  421. package/src/export/graphml.ts +0 -50
  422. package/src/export/html.ts +0 -548
  423. package/src/export/index.ts +0 -9
  424. package/src/export/json.ts +0 -36
  425. package/src/export/markdown.ts +0 -290
  426. package/src/export/mermaid.ts +0 -100
  427. package/src/export/obsidian.ts +0 -44
  428. package/src/export/sarif.ts +0 -245
  429. package/src/export/svg.ts +0 -68
  430. package/src/fix/deps.ts +0 -70
  431. package/src/fix/enum-members.ts +0 -103
  432. package/src/fix/export-surgery.ts +0 -197
  433. package/src/fix/exports.ts +0 -93
  434. package/src/fix/orchestrator.ts +0 -67
  435. package/src/graph/analyzer.ts +0 -69
  436. package/src/graph/author-analytics.ts +0 -217
  437. package/src/graph/baseline.ts +0 -432
  438. package/src/graph/clone-families.ts +0 -132
  439. package/src/graph/codeowners-extended.ts +0 -114
  440. package/src/graph/codeowners-gitlab.ts +0 -150
  441. package/src/graph/codeowners.ts +0 -217
  442. package/src/graph/complexity.ts +0 -200
  443. package/src/graph/cross-reference-findings.ts +0 -85
  444. package/src/graph/cross-reference.ts +0 -139
  445. package/src/graph/cycle-detection.ts +0 -311
  446. package/src/graph/cycles.ts +0 -222
  447. package/src/graph/dead-code.ts +0 -128
  448. package/src/graph/dependency-closure.ts +0 -126
  449. package/src/graph/dfs.ts +0 -118
  450. package/src/graph/diff.ts +0 -92
  451. package/src/graph/duplication-stats.ts +0 -79
  452. package/src/graph/edge-filter.ts +0 -117
  453. package/src/graph/explain.ts +0 -133
  454. package/src/graph/external-style-usage.ts +0 -81
  455. package/src/graph/health-score.ts +0 -179
  456. package/src/graph/hotspots.ts +0 -219
  457. package/src/graph/import-chain.ts +0 -148
  458. package/src/graph/loader.ts +0 -44
  459. package/src/graph/maintainability.ts +0 -156
  460. package/src/graph/merge.ts +0 -174
  461. package/src/graph/mirrored-dirs.ts +0 -202
  462. package/src/graph/narrowing.ts +0 -92
  463. package/src/graph/node-search.ts +0 -201
  464. package/src/graph/node-types.ts +0 -67
  465. package/src/graph/normalize-id.ts +0 -138
  466. package/src/graph/pagerank.ts +0 -165
  467. package/src/graph/prune.ts +0 -95
  468. package/src/graph/re-exports/propagate.ts +0 -95
  469. package/src/graph/reachability.ts +0 -99
  470. package/src/graph/regex-search.ts +0 -232
  471. package/src/graph/regression.ts +0 -199
  472. package/src/graph/resolve/discover-types.ts +0 -45
  473. package/src/graph/resolve/dynamic-imports.ts +0 -102
  474. package/src/graph/resolve/fallbacks.ts +0 -79
  475. package/src/graph/resolve/index.ts +0 -68
  476. package/src/graph/resolve/path-info.ts +0 -41
  477. package/src/graph/resolve/re-exports.ts +0 -14
  478. package/src/graph/resolve/react-native.ts +0 -27
  479. package/src/graph/resolve/require-imports.ts +0 -18
  480. package/src/graph/resolve/specifier.ts +0 -120
  481. package/src/graph/resolve/static-imports.ts +0 -14
  482. package/src/graph/resolve/types.ts +0 -108
  483. package/src/graph/resolve/upgrades.ts +0 -32
  484. package/src/graph/ripple-impact.ts +0 -131
  485. package/src/graph/risk-profile.ts +0 -179
  486. package/src/graph/statistics.ts +0 -165
  487. package/src/graph/stats.ts +0 -157
  488. package/src/graph/subgraph.ts +0 -162
  489. package/src/graph/topo-sort.ts +0 -171
  490. package/src/graph/wcc.ts +0 -187
  491. package/src/groups/contract-bridge.ts +0 -103
  492. package/src/groups/contract-registry.ts +0 -263
  493. package/src/groups/group-config.ts +0 -108
  494. package/src/groups/group-search.ts +0 -139
  495. package/src/groups/group-sync.ts +0 -82
  496. package/src/groups/grpc-extractor.ts +0 -64
  497. package/src/groups/service-boundary.ts +0 -119
  498. package/src/groups/topic-extractor.ts +0 -90
  499. package/src/health/analysis-counts-snapshot.ts +0 -57
  500. package/src/health/analysis-counts.ts +0 -70
  501. package/src/health/complexity-findings.ts +0 -115
  502. package/src/health/distribution-thresholds.ts +0 -54
  503. package/src/health/grouping.ts +0 -138
  504. package/src/health/health-grouping.ts +0 -86
  505. package/src/health/health-report-types.ts +0 -165
  506. package/src/health/health-report.ts +0 -81
  507. package/src/health/health-score.ts +0 -65
  508. package/src/health/hotspot-utils.ts +0 -55
  509. package/src/health/hotspots.ts +0 -104
  510. package/src/health/large-functions.ts +0 -34
  511. package/src/health/ownership-metrics.ts +0 -61
  512. package/src/health/ownership-risk.ts +0 -98
  513. package/src/health/ownership.ts +0 -174
  514. package/src/health/quality-gate.ts +0 -57
  515. package/src/health/risk-profile.ts +0 -39
  516. package/src/health/runtime-coverage-report.ts +0 -101
  517. package/src/health/runtime-coverage.ts +0 -71
  518. package/src/health/scores.ts +0 -72
  519. package/src/health/scoring-types.ts +0 -48
  520. package/src/health/target-thresholds.ts +0 -92
  521. package/src/health/target-types.ts +0 -54
  522. package/src/health/targets.ts +0 -151
  523. package/src/health/timings.ts +0 -86
  524. package/src/health/trend-types.ts +0 -57
  525. package/src/health/trends.ts +0 -86
  526. package/src/health/vital-signs-compute.ts +0 -108
  527. package/src/health/vital-signs-snapshot.ts +0 -72
  528. package/src/health/vital-signs.ts +0 -101
  529. package/src/index.ts +0 -111
  530. package/src/ingest/git-clone.ts +0 -246
  531. package/src/ingest/query-memory.ts +0 -132
  532. package/src/ingest/transcribe.ts +0 -254
  533. package/src/ingest/url-ingest.ts +0 -87
  534. package/src/init/agent-hooks.ts +0 -86
  535. package/src/init/git-hooks.ts +0 -71
  536. package/src/init/project-detection.ts +0 -105
  537. package/src/license/manager.ts +0 -120
  538. package/src/lsp/code-actions.ts +0 -127
  539. package/src/lsp/code-lens.ts +0 -56
  540. package/src/lsp/diagnostics-ext.ts +0 -150
  541. package/src/lsp/diagnostics-push.ts +0 -103
  542. package/src/lsp/diagnostics.ts +0 -98
  543. package/src/lsp/hover.ts +0 -64
  544. package/src/lsp/server.ts +0 -254
  545. package/src/mcp/params.ts +0 -201
  546. package/src/mcp/resources.ts +0 -124
  547. package/src/mcp/tool-builders.ts +0 -203
  548. package/src/mcp-resources/communities-resource.ts +0 -72
  549. package/src/mcp-resources/graph-resource.ts +0 -14
  550. package/src/mcp-resources/index.ts +0 -9
  551. package/src/mcp-resources/named-cluster-resource.ts +0 -35
  552. package/src/mcp-resources/named-process-resource.ts +0 -26
  553. package/src/mcp-resources/processes-resource.ts +0 -67
  554. package/src/mcp-resources/repo-context-resource.ts +0 -36
  555. package/src/mcp-resources/repos-resource.ts +0 -21
  556. package/src/mcp-resources/schema-resource.ts +0 -46
  557. package/src/mcp-resources/wiki-resource.ts +0 -23
  558. package/src/mcp-tools/api-impact.ts +0 -181
  559. package/src/mcp-tools/context.ts +0 -111
  560. package/src/mcp-tools/cypher.ts +0 -29
  561. package/src/mcp-tools/detect-changes.ts +0 -116
  562. package/src/mcp-tools/explain.ts +0 -65
  563. package/src/mcp-tools/graph-query.ts +0 -128
  564. package/src/mcp-tools/group-list.ts +0 -88
  565. package/src/mcp-tools/group-query.ts +0 -26
  566. package/src/mcp-tools/group-sync.ts +0 -32
  567. package/src/mcp-tools/impact.ts +0 -202
  568. package/src/mcp-tools/index.ts +0 -21
  569. package/src/mcp-tools/list-repos.ts +0 -38
  570. package/src/mcp-tools/neighbors.ts +0 -80
  571. package/src/mcp-tools/query.ts +0 -86
  572. package/src/mcp-tools/rename.ts +0 -118
  573. package/src/mcp-tools/route-map.ts +0 -98
  574. package/src/mcp-tools/serve.ts +0 -41
  575. package/src/mcp-tools/shape-check.ts +0 -182
  576. package/src/mcp-tools/staleness.ts +0 -13
  577. package/src/mcp-tools/tool-map.ts +0 -66
  578. package/src/mcp-tools/wiki-build.ts +0 -37
  579. package/src/mcp-tools/wiki.ts +0 -28
  580. package/src/migrate/jscpd.ts +0 -78
  581. package/src/migrate/jsonc-gen.ts +0 -38
  582. package/src/migrate/knip.ts +0 -126
  583. package/src/migrate/toml-gen.ts +0 -48
  584. package/src/parsers/c.ts +0 -31
  585. package/src/parsers/cpp.ts +0 -29
  586. package/src/parsers/csharp.ts +0 -43
  587. package/src/parsers/dart.ts +0 -39
  588. package/src/parsers/extractor.ts +0 -202
  589. package/src/parsers/go.ts +0 -27
  590. package/src/parsers/java.ts +0 -27
  591. package/src/parsers/kotlin.ts +0 -36
  592. package/src/parsers/language-config.ts +0 -28
  593. package/src/parsers/language-parsers.ts +0 -120
  594. package/src/parsers/loader.ts +0 -149
  595. package/src/parsers/named-bindings.ts +0 -63
  596. package/src/parsers/php.ts +0 -37
  597. package/src/parsers/python.ts +0 -26
  598. package/src/parsers/ruby.ts +0 -39
  599. package/src/parsers/rust.ts +0 -25
  600. package/src/parsers/swift.ts +0 -28
  601. package/src/parsers/typescript.ts +0 -41
  602. package/src/parsers/vue.ts +0 -79
  603. package/src/pipeline/cluster-only.ts +0 -64
  604. package/src/pipeline/effort.ts +0 -50
  605. package/src/pipeline/orchestrator.ts +0 -384
  606. package/src/pipeline/phases/boundary.ts +0 -151
  607. package/src/pipeline/phases/bridge-adapters/electron-ipc.ts +0 -91
  608. package/src/pipeline/phases/bridge-adapters/registry.ts +0 -14
  609. package/src/pipeline/phases/bridge-adapters/tauri.ts +0 -103
  610. package/src/pipeline/phases/bridge-adapters/types.ts +0 -31
  611. package/src/pipeline/phases/bridge-adapters/wails.ts +0 -33
  612. package/src/pipeline/phases/bridge-resolver.ts +0 -77
  613. package/src/pipeline/phases/call-site-extractors.ts +0 -177
  614. package/src/pipeline/phases/communities.ts +0 -183
  615. package/src/pipeline/phases/contextual-proximity.ts +0 -88
  616. package/src/pipeline/phases/cross-file.ts +0 -116
  617. package/src/pipeline/phases/docs-parse.ts +0 -307
  618. package/src/pipeline/phases/evidence.ts +0 -9
  619. package/src/pipeline/phases/field-access.ts +0 -49
  620. package/src/pipeline/phases/framework-detect.ts +0 -109
  621. package/src/pipeline/phases/god-nodes.ts +0 -163
  622. package/src/pipeline/phases/import-resolver.ts +0 -114
  623. package/src/pipeline/phases/leiden.ts +0 -77
  624. package/src/pipeline/phases/llm-extract.ts +0 -178
  625. package/src/pipeline/phases/markdown.ts +0 -121
  626. package/src/pipeline/phases/middleware-extractor.ts +0 -127
  627. package/src/pipeline/phases/module-resolution.ts +0 -294
  628. package/src/pipeline/phases/mro.ts +0 -56
  629. package/src/pipeline/phases/orm.ts +0 -503
  630. package/src/pipeline/phases/parse.ts +0 -222
  631. package/src/pipeline/phases/pdf-parse.ts +0 -133
  632. package/src/pipeline/phases/processes.ts +0 -249
  633. package/src/pipeline/phases/re-export-propagation.ts +0 -160
  634. package/src/pipeline/phases/reachability.ts +0 -156
  635. package/src/pipeline/phases/routes.ts +0 -350
  636. package/src/pipeline/phases/scan.ts +0 -133
  637. package/src/pipeline/phases/scope-resolution.ts +0 -442
  638. package/src/pipeline/phases/structure.ts +0 -68
  639. package/src/pipeline/phases/suggest.ts +0 -92
  640. package/src/pipeline/phases/surprises.ts +0 -83
  641. package/src/pipeline/phases/tools.ts +0 -180
  642. package/src/pipeline/phases/variables-phase.ts +0 -37
  643. package/src/pipeline/phases/variables.ts +0 -67
  644. package/src/pipeline/phases/wildcard-phase.ts +0 -50
  645. package/src/pipeline/phases/wildcard-synthesis.ts +0 -214
  646. package/src/pipeline/progress.ts +0 -58
  647. package/src/pipeline/runner.ts +0 -88
  648. package/src/pipeline/types.ts +0 -41
  649. package/src/query/cypher-parser.ts +0 -450
  650. package/src/registry/repo-registry.ts +0 -125
  651. package/src/regression/baseline-deltas.ts +0 -215
  652. package/src/regression/baseline.ts +0 -76
  653. package/src/regression/counts.ts +0 -87
  654. package/src/regression/outcome.ts +0 -78
  655. package/src/regression/tolerance.ts +0 -35
  656. package/src/report/attributed-duplication.ts +0 -112
  657. package/src/report/badge-svg.ts +0 -100
  658. package/src/report/cross-ref-human.ts +0 -50
  659. package/src/report/duplication-grouping.ts +0 -74
  660. package/src/report/grouping.ts +0 -137
  661. package/src/report/human-check.ts +0 -291
  662. package/src/report/human-dupes.ts +0 -142
  663. package/src/report/human-health.ts +0 -195
  664. package/src/report/human.ts +0 -120
  665. package/src/report/json-actions.ts +0 -91
  666. package/src/report/json-builders.ts +0 -70
  667. package/src/report/json-schema.ts +0 -75
  668. package/src/report/number-format.ts +0 -91
  669. package/src/report/output-grouped.ts +0 -102
  670. package/src/report/pipeline-perf.ts +0 -56
  671. package/src/report/trace-human.ts +0 -127
  672. package/src/reporting/graph-report.ts +0 -431
  673. package/src/results/fallow-results.ts +0 -152
  674. package/src/results/types.ts +0 -149
  675. package/src/scope-resolution/evidence-weights.ts +0 -41
  676. package/src/search/ast-chunker.ts +0 -206
  677. package/src/search/diacritic.ts +0 -7
  678. package/src/search/hybrid-query.ts +0 -65
  679. package/src/search/rrf.ts +0 -51
  680. package/src/security/safe-fetch.ts +0 -113
  681. package/src/security/sensitive-files.ts +0 -24
  682. package/src/skills/platform-skills.ts +0 -233
  683. package/src/staleness/git-staleness.ts +0 -66
  684. package/src/storage/db.ts +0 -110
  685. package/src/storage/edge-store.ts +0 -103
  686. package/src/storage/file-cache.ts +0 -78
  687. package/src/storage/fts-store.ts +0 -385
  688. package/src/storage/node-store.ts +0 -209
  689. package/src/storage/schema.ts +0 -171
  690. package/src/storage/suppressions.ts +0 -145
  691. package/src/storage/unlinked-refs.ts +0 -117
  692. package/src/types.ts +0 -197
  693. package/src/validation/extraction-validator.ts +0 -54
  694. package/src/watch/watcher.ts +0 -160
  695. package/src/web/analyze-api.ts +0 -146
  696. package/src/web/api.ts +0 -584
  697. package/src/web/async-jobs.ts +0 -109
  698. package/src/web/mcp-http.ts +0 -227
  699. package/src/web/react-ui.ts +0 -78
  700. package/src/web/server.ts +0 -90
  701. package/src/web/ui/index.html +0 -204
  702. package/src/wiki/gist-publisher.ts +0 -76
  703. package/src/wiki/prompt-builder.ts +0 -35
  704. package/src/wiki/providers.ts +0 -134
  705. package/src/wiki/wiki-generator.ts +0 -223
  706. package/src/wiki/wiki-store.ts +0 -49
  707. package/tsconfig.json +0 -11
  708. package/vitest.config.ts +0 -20
@@ -1,254 +0,0 @@
1
- /**
2
- * Video / audio transcription support.
3
- *
4
- * Mirrors graphify's `transcribe.py`: converts video/audio files or URLs to
5
- * plain-text transcript files that the pipeline can then extract as document
6
- * nodes.
7
- *
8
- * Implementation strategy
9
- * -----------------------
10
- * TypeScript cannot import Python's faster-whisper directly. Instead this
11
- * module shells out to the faster-whisper CLI (`faster-whisper`) or the
12
- * `whisper` CLI (OpenAI's original). yt-dlp is used for URL audio downloads.
13
- * If neither tool is installed, functions throw descriptive errors.
14
- *
15
- * Environment variables
16
- * ---------------------
17
- * MONOGRAPH_WHISPER_MODEL - Whisper model name (default: "base")
18
- * MONOGRAPH_WHISPER_PROMPT - Override initial prompt for Whisper
19
- */
20
-
21
- import { execFile } from 'child_process';
22
- import { promisify } from 'util';
23
- import { createHash } from 'crypto';
24
- import { mkdirSync, existsSync, writeFileSync } from 'fs';
25
- import { readFile, writeFile } from 'fs/promises';
26
- import path from 'path';
27
-
28
- const execFileAsync = promisify(execFile);
29
-
30
- // ── Constants ──────────────────────────────────────────────────────────────────
31
-
32
- export const VIDEO_EXTENSIONS = new Set([
33
- '.mp4', '.mov', '.webm', '.mkv', '.avi', '.m4v',
34
- '.mp3', '.wav', '.m4a', '.ogg',
35
- ]);
36
-
37
- const URL_PREFIXES = ['http://', 'https://', 'www.'];
38
- const DEFAULT_MODEL = 'base';
39
- const FALLBACK_PROMPT = 'Use proper punctuation and paragraph breaks.';
40
- const DEFAULT_TRANSCRIPTS_DIR = 'monograph-out/transcripts';
41
-
42
- // ── Helpers ────────────────────────────────────────────────────────────────────
43
-
44
- export function isUrl(input: string): boolean {
45
- return URL_PREFIXES.some(p => input.startsWith(p));
46
- }
47
-
48
- function getModel(): string {
49
- return process.env['MONOGRAPH_WHISPER_MODEL'] ?? DEFAULT_MODEL;
50
- }
51
-
52
- async function whisperCliAvailable(): Promise<string | null> {
53
- for (const cmd of ['faster-whisper', 'whisper']) {
54
- try {
55
- await execFileAsync(cmd, ['--help']);
56
- return cmd;
57
- } catch {
58
- // not found — try next
59
- }
60
- }
61
- return null;
62
- }
63
-
64
- async function ytdlpAvailable(): Promise<boolean> {
65
- try {
66
- await execFileAsync('yt-dlp', ['--version']);
67
- return true;
68
- } catch {
69
- return false;
70
- }
71
- }
72
-
73
- // ── Download audio ─────────────────────────────────────────────────────────────
74
-
75
- /**
76
- * Download audio from a URL using yt-dlp.
77
- * Returns the path to the downloaded audio file.
78
- * Cached: if a file with the same URL hash already exists it is returned immediately.
79
- *
80
- * @throws {Error} if yt-dlp is not installed.
81
- */
82
- export async function downloadAudio(url: string, outputDir: string): Promise<string> {
83
- if (!await ytdlpAvailable()) {
84
- throw new Error(
85
- 'Video URL download requires yt-dlp. Install it with: pip install yt-dlp',
86
- );
87
- }
88
-
89
- mkdirSync(outputDir, { recursive: true });
90
-
91
- const urlHash = createHash('sha1').update(url).digest('hex').slice(0, 12);
92
- const audioExts = ['.m4a', '.opus', '.mp3', '.ogg', '.wav', '.webm'];
93
-
94
- // Return cached file if present
95
- for (const ext of audioExts) {
96
- const candidate = path.join(outputDir, `yt_${urlHash}${ext}`);
97
- if (existsSync(candidate)) {
98
- return candidate;
99
- }
100
- }
101
-
102
- const outTemplate = path.join(outputDir, `yt_${urlHash}.%(ext)s`);
103
- await execFileAsync('yt-dlp', [
104
- '--format', 'bestaudio[ext=m4a]/bestaudio/best',
105
- '--output', outTemplate,
106
- '--quiet',
107
- '--no-warnings',
108
- '--no-playlist',
109
- url,
110
- ]);
111
-
112
- // Find the downloaded file
113
- for (const ext of audioExts) {
114
- const candidate = path.join(outputDir, `yt_${urlHash}${ext}`);
115
- if (existsSync(candidate)) return candidate;
116
- }
117
-
118
- throw new Error(`yt-dlp download completed but output file not found for URL: ${url}`);
119
- }
120
-
121
- // ── Whisper prompt ─────────────────────────────────────────────────────────────
122
-
123
- /**
124
- * Build a domain hint for Whisper from a set of god-node labels.
125
- * Mirrors graphify's `build_whisper_prompt`.
126
- */
127
- export function buildWhisperPrompt(godNodeLabels: string[]): string {
128
- const override = process.env['MONOGRAPH_WHISPER_PROMPT'];
129
- if (override) return override;
130
-
131
- if (godNodeLabels.length === 0) return FALLBACK_PROMPT;
132
-
133
- const topics = godNodeLabels.slice(0, 5).join(', ');
134
- return `Technical discussion about ${topics}. Use proper punctuation and paragraph breaks.`;
135
- }
136
-
137
- // ── Transcribe one file ────────────────────────────────────────────────────────
138
-
139
- export interface TranscribeOptions {
140
- /** Directory to write transcript files. Default: monograph-out/transcripts */
141
- outputDir?: string;
142
- /** Initial prompt / domain hint passed to Whisper. */
143
- initialPrompt?: string;
144
- /** Re-transcribe even if transcript already exists. Default: false */
145
- force?: boolean;
146
- }
147
-
148
- export interface TranscribeResult {
149
- transcriptPath: string;
150
- /** Number of non-empty lines in the transcript. */
151
- lineCount: number;
152
- /** Whether the transcript was loaded from cache (not freshly generated). */
153
- fromCache: boolean;
154
- }
155
-
156
- /**
157
- * Transcribe a video/audio file or URL to a plain-text transcript.
158
- *
159
- * Requires either `faster-whisper` or `whisper` CLI to be on the PATH.
160
- * For URLs, also requires `yt-dlp`.
161
- *
162
- * @param input - A local file path or a URL (http/https/www).
163
- * @param options - Transcription options.
164
- * @returns Resolved transcript path and metadata.
165
- */
166
- export async function transcribe(
167
- input: string,
168
- options: TranscribeOptions = {},
169
- ): Promise<TranscribeResult> {
170
- const outDir = options.outputDir ?? DEFAULT_TRANSCRIPTS_DIR;
171
- mkdirSync(outDir, { recursive: true });
172
-
173
- // Resolve audio path
174
- let audioPath: string;
175
- if (isUrl(input)) {
176
- const dlDir = path.join(outDir, 'downloads');
177
- audioPath = await downloadAudio(input, dlDir);
178
- } else {
179
- audioPath = input;
180
- }
181
-
182
- const stem = path.basename(audioPath, path.extname(audioPath));
183
- const transcriptPath = path.join(outDir, `${stem}.txt`);
184
-
185
- // Return cached transcript if it exists
186
- if (!options.force && existsSync(transcriptPath)) {
187
- const content = await readFile(transcriptPath, 'utf-8');
188
- const lines = content.split('\n').filter(l => l.trim().length > 0);
189
- return { transcriptPath, lineCount: lines.length, fromCache: true };
190
- }
191
-
192
- // Find available Whisper CLI
193
- const whisperCmd = await whisperCliAvailable();
194
- if (!whisperCmd) {
195
- throw new Error(
196
- 'Video transcription requires faster-whisper or whisper CLI. ' +
197
- 'Install with: pip install faster-whisper or pip install openai-whisper',
198
- );
199
- }
200
-
201
- const model = getModel();
202
- const prompt = options.initialPrompt ?? FALLBACK_PROMPT;
203
-
204
- const args = [audioPath, '--model', model, '--output_format', 'txt', '--output_dir', outDir];
205
- if (prompt) args.push('--initial_prompt', prompt);
206
-
207
- await execFileAsync(whisperCmd, args);
208
-
209
- // Whisper may write <stem>.txt directly or <stem>.<ext>.txt — normalise
210
- if (!existsSync(transcriptPath)) {
211
- // Try with original extension included in stem
212
- const altPath = path.join(outDir, `${path.basename(audioPath)}.txt`);
213
- if (existsSync(altPath)) {
214
- // Rename to canonical path
215
- const content = await readFile(altPath, 'utf-8');
216
- writeFileSync(transcriptPath, content, 'utf-8');
217
- }
218
- }
219
-
220
- const content = existsSync(transcriptPath)
221
- ? await readFile(transcriptPath, 'utf-8')
222
- : '';
223
- const lines = content.split('\n').filter(l => l.trim().length > 0);
224
-
225
- return { transcriptPath, lineCount: lines.length, fromCache: false };
226
- }
227
-
228
- // ── Transcribe many ────────────────────────────────────────────────────────────
229
-
230
- /**
231
- * Transcribe a list of video/audio files or URLs.
232
- * Already-transcribed files are returned from cache instantly.
233
- * The `initialPrompt` is shared across all files.
234
- *
235
- * @param inputs - Array of file paths or URLs.
236
- * @param options - Shared transcription options.
237
- * @returns Array of TranscribeResult (one per input, in order).
238
- */
239
- export async function transcribeAll(
240
- inputs: string[],
241
- options: TranscribeOptions = {},
242
- ): Promise<TranscribeResult[]> {
243
- if (inputs.length === 0) return [];
244
-
245
- const results: TranscribeResult[] = [];
246
- for (const input of inputs) {
247
- try {
248
- results.push(await transcribe(input, options));
249
- } catch (err) {
250
- console.error(`[monograph transcribe] Failed for ${input}: ${(err as Error).message}`);
251
- }
252
- }
253
- return results;
254
- }
@@ -1,87 +0,0 @@
1
- import { createHash } from 'crypto';
2
- import { validateUrl } from '../security/safe-fetch.js';
3
- import { classifyFile } from '../analysis/file-classifier.js';
4
-
5
- export type UrlType = 'paper' | 'github' | 'video' | 'webpage' | 'pdf' | 'image';
6
-
7
- export interface IngestResult {
8
- id: string;
9
- url: string;
10
- type: UrlType;
11
- title: string;
12
- snippet: string;
13
- fetchedAt: string;
14
- }
15
-
16
- export interface IngestOptions {
17
- fetch?: typeof globalThis.fetch;
18
- maxBytes?: number;
19
- }
20
-
21
- const URL_TYPE_PATTERNS: Array<[RegExp, UrlType]> = [
22
- [/arxiv\.org|semanticscholar\.org|openreview\.net/, 'paper'],
23
- [/github\.com/, 'github'],
24
- [/youtube\.com|youtu\.be/, 'video'],
25
- [/\.pdf($|\?)/, 'pdf'],
26
- ];
27
-
28
- export function classifyUrlType(url: string): UrlType {
29
- for (const [pattern, type] of URL_TYPE_PATTERNS) {
30
- if (pattern.test(url)) return type;
31
- }
32
- const fileType = classifyFile(url);
33
- if (fileType === 'IMAGE') return 'image';
34
- if (fileType === 'PAPER') return 'paper';
35
- return 'webpage';
36
- }
37
-
38
- function extractTitle(html: string): string {
39
- const m = /<title[^>]*>([^<]+)<\/title>/i.exec(html);
40
- return m ? m[1].trim() : 'Untitled';
41
- }
42
-
43
- function extractSnippet(html: string, maxLen = 500): string {
44
- const text = html
45
- .replace(/<script[^>]*>[\s\S]*?<\/script>/gi, '')
46
- .replace(/<style[^>]*>[\s\S]*?<\/style>/gi, '')
47
- .replace(/<[^>]+>/g, ' ')
48
- .replace(/\s+/g, ' ')
49
- .trim();
50
- return text.slice(0, maxLen);
51
- }
52
-
53
- export async function ingestUrl(url: string, options: IngestOptions = {}): Promise<IngestResult> {
54
- validateUrl(url);
55
-
56
- const { fetch: fetchFn = globalThis.fetch, maxBytes = 10 * 1024 * 1024 } = options;
57
-
58
- const response = await fetchFn(url, { redirect: 'follow' } as RequestInit);
59
- if (!response.ok) throw new Error(`HTTP ${response.status} fetching ${url}`);
60
- // Re-validate the final URL after redirects to prevent SSRF via open redirects.
61
- // Only validate when response.url is truthy (some fetch impls omit it on same-URL responses).
62
- if (response.url) validateUrl(response.url);
63
-
64
- const contentLength = response.headers.get('content-length');
65
- if (contentLength && parseInt(contentLength, 10) > maxBytes) {
66
- throw new Error(`Response too large: ${contentLength} bytes exceeds ${maxBytes}`);
67
- }
68
-
69
- const text = await response.text();
70
- if (text.length > maxBytes) throw new Error(`Response too large: body exceeds ${maxBytes} bytes`);
71
-
72
- const type = classifyUrlType(url);
73
- const contentType = response.headers.get('content-type') ?? '';
74
- const isHtml = contentType.includes('text/html') || text.trimStart().startsWith('<');
75
-
76
- const title = isHtml ? extractTitle(text) : (url.split('/').pop() ?? url);
77
- const snippet = isHtml ? extractSnippet(text) : text.slice(0, 500);
78
-
79
- return {
80
- id: createHash('sha256').update(url).digest('hex').slice(0, 16),
81
- url,
82
- type,
83
- title,
84
- snippet,
85
- fetchedAt: new Date().toISOString(),
86
- };
87
- }
@@ -1,86 +0,0 @@
1
- // Install/uninstall monograph quality gate into AI coding agents (Claude Code, Codex).
2
-
3
- export type AgentHooksTarget = 'claude-code' | 'codex' | 'auto';
4
-
5
- export interface SetupHooksOptions {
6
- root: string;
7
- target?: AgentHooksTarget;
8
- command?: string;
9
- uninstall?: boolean;
10
- }
11
-
12
- export interface SetupHooksResult {
13
- target: AgentHooksTarget;
14
- installed: boolean;
15
- modifiedFiles: string[];
16
- message: string;
17
- }
18
-
19
- export const AGENTS_BLOCK_START = '<!-- monograph-gate-start -->';
20
- export const AGENTS_BLOCK_END = '<!-- monograph-gate-end -->';
21
- export const MONOGRAPH_GATE_SCRIPT = 'npx monograph check --since $(git merge-base HEAD main)';
22
-
23
- /** Build the AGENTS.md block content. */
24
- export function buildAgentsMdBlock(command: string): string {
25
- return [
26
- AGENTS_BLOCK_START,
27
- '',
28
- '## Pre-commit Quality Gate (monograph)',
29
- '',
30
- 'Before completing any coding task, run:',
31
- '',
32
- '```sh',
33
- command,
34
- '```',
35
- '',
36
- 'Fix any new issues before marking the task complete.',
37
- '',
38
- AGENTS_BLOCK_END,
39
- ].join('\n');
40
- }
41
-
42
- /** Merge the monograph gate block into AGENTS.md content (idempotent). */
43
- export function mergeAgentsMdBlock(existing: string, block: string): string {
44
- const startIdx = existing.indexOf(AGENTS_BLOCK_START);
45
- const endIdx = existing.indexOf(AGENTS_BLOCK_END);
46
- if (startIdx !== -1 && endIdx !== -1) {
47
- return existing.slice(0, startIdx) + block + existing.slice(endIdx + AGENTS_BLOCK_END.length);
48
- }
49
- return existing ? existing + '\n\n' + block : block;
50
- }
51
-
52
- /** Remove the managed block from AGENTS.md. */
53
- export function removeAgentsMdBlock(content: string): string {
54
- const startIdx = content.indexOf(AGENTS_BLOCK_START);
55
- const endIdx = content.indexOf(AGENTS_BLOCK_END);
56
- if (startIdx === -1 || endIdx === -1) return content;
57
- return content.slice(0, startIdx).trimEnd() + '\n' + content.slice(endIdx + AGENTS_BLOCK_END.length).trimStart();
58
- }
59
-
60
- /** Build a Claude Code settings.json PreToolUse hook entry. */
61
- export function buildClaudeCodeHookEntry(command: string): Record<string, unknown> {
62
- return {
63
- hooks: {
64
- PreToolUse: [
65
- {
66
- matcher: 'Edit|Write|MultiEdit',
67
- hooks: [{ type: 'command', command: `sh -c '${command} --quiet || true'` }],
68
- },
69
- ],
70
- },
71
- };
72
- }
73
-
74
- /** Merge a hook entry into an existing Claude Code settings object (idempotent). */
75
- export function mergeClaudeCodeSettings(
76
- existing: Record<string, unknown>,
77
- entry: Record<string, unknown>,
78
- ): Record<string, unknown> {
79
- const result = { $schema: '', ...existing, ...entry };
80
- if (!result.$schema) { (result as Record<string, unknown>).$schema = undefined; }
81
- return result;
82
- }
83
-
84
- export const DEFAULT_SETUP_RESULT: SetupHooksResult = {
85
- target: 'auto', installed: false, modifiedFiles: [], message: 'No agent detected',
86
- };
@@ -1,71 +0,0 @@
1
- // Detect git hooks manager and install/uninstall a pre-commit monograph gate.
2
-
3
- export type GitHooksManager = 'husky' | 'lefthook' | 'raw' | 'none';
4
-
5
- export interface GitHooksInstallOptions {
6
- root: string;
7
- branch?: string;
8
- command?: string;
9
- }
10
-
11
- export interface GitHooksInstallResult {
12
- manager: GitHooksManager;
13
- installed: boolean;
14
- hookPath: string;
15
- message: string;
16
- }
17
-
18
- const MANAGED_BLOCK_START = '# monograph-gate-start';
19
- const MANAGED_BLOCK_END = '# monograph-gate-end';
20
-
21
- /** Detect which hooks manager is active in the project. */
22
- export function detectHooksManager(rootFiles: string[]): GitHooksManager {
23
- if (rootFiles.some(f => f.includes('.husky/'))) return 'husky';
24
- if (rootFiles.some(f => f.includes('lefthook.yml') || f.includes('lefthook.yaml'))) return 'lefthook';
25
- if (rootFiles.some(f => f.includes('.git/hooks/'))) return 'raw';
26
- return 'none';
27
- }
28
-
29
- /** Validate a branch name against shell injection. */
30
- export function validateBranchName(branch: string): boolean {
31
- return /^[a-zA-Z0-9/_.\-]+$/.test(branch) && !branch.includes('..') && branch.length < 256;
32
- }
33
-
34
- /** Generate the pre-commit hook script content. */
35
- export function renderedHookScript(opts: GitHooksInstallOptions): string {
36
- const branch = opts.branch ?? 'main';
37
- const cmd = opts.command ?? 'npx monograph check';
38
- return [
39
- '#!/bin/sh',
40
- MANAGED_BLOCK_START,
41
- `BASE=$(git merge-base HEAD ${branch} 2>/dev/null || echo "")`,
42
- `if [ -n "$BASE" ]; then`,
43
- ` ${cmd} --since "$BASE"`,
44
- `else`,
45
- ` ${cmd}`,
46
- `fi`,
47
- MANAGED_BLOCK_END,
48
- ].join('\n');
49
- }
50
-
51
- /** Build the hook content by merging with existing content (idempotent). */
52
- export function mergeHookContent(existing: string, script: string): string {
53
- const startIdx = existing.indexOf(MANAGED_BLOCK_START);
54
- const endIdx = existing.indexOf(MANAGED_BLOCK_END);
55
- if (startIdx !== -1 && endIdx !== -1) {
56
- return existing.slice(0, startIdx) + script + existing.slice(endIdx + MANAGED_BLOCK_END.length);
57
- }
58
- return existing ? existing + '\n' + script : script;
59
- }
60
-
61
- /** Remove the managed block from hook content. */
62
- export function removeHookBlock(content: string): string {
63
- const startIdx = content.indexOf(MANAGED_BLOCK_START);
64
- const endIdx = content.indexOf(MANAGED_BLOCK_END);
65
- if (startIdx === -1 || endIdx === -1) return content;
66
- return content.slice(0, startIdx).trimEnd() + content.slice(endIdx + MANAGED_BLOCK_END.length);
67
- }
68
-
69
- export const GIT_HOOK_INSTALL_RESULT_NONE: GitHooksInstallResult = {
70
- manager: 'none', installed: false, hookPath: '', message: 'No hooks manager detected',
71
- };
@@ -1,105 +0,0 @@
1
- // Inspects a project root to scaffold a tailored monograph config.
2
-
3
- export type DetectedFramework = 'react' | 'vue' | 'svelte' | 'angular' | 'none';
4
- export type DetectedTestRunner = 'vitest' | 'jest' | 'playwright' | 'none';
5
- export type DetectedPackageManager = 'pnpm' | 'yarn' | 'npm' | 'bun' | 'unknown';
6
- export type DetectedMonorepoTool = 'pnpm-workspaces' | 'npm-workspaces' | 'yarn-workspaces' | 'nx' | 'turborepo' | 'none';
7
-
8
- export interface ProjectInfo {
9
- root: string;
10
- hasTypeScript: boolean;
11
- framework: DetectedFramework;
12
- testRunner: DetectedTestRunner;
13
- packageManager: DetectedPackageManager;
14
- monorepoTool: DetectedMonorepoTool;
15
- workspaceGlobs: string[];
16
- hasStorybook: boolean;
17
- entryPoints: string[];
18
- testPatterns: string[];
19
- }
20
-
21
- export function detectFramework(deps: Record<string, string>): DetectedFramework {
22
- if ('react' in deps || 'react-dom' in deps) return 'react';
23
- if ('vue' in deps) return 'vue';
24
- if ('svelte' in deps) return 'svelte';
25
- if ('@angular/core' in deps) return 'angular';
26
- return 'none';
27
- }
28
-
29
- export function detectTestRunner(deps: Record<string, string>): DetectedTestRunner {
30
- if ('vitest' in deps) return 'vitest';
31
- if ('jest' in deps || '@jest/core' in deps) return 'jest';
32
- if ('@playwright/test' in deps) return 'playwright';
33
- return 'none';
34
- }
35
-
36
- export function detectPackageManager(files: string[]): DetectedPackageManager {
37
- if (files.includes('pnpm-lock.yaml')) return 'pnpm';
38
- if (files.includes('bun.lockb')) return 'bun';
39
- if (files.includes('yarn.lock')) return 'yarn';
40
- if (files.includes('package-lock.json')) return 'npm';
41
- return 'unknown';
42
- }
43
-
44
- export function detectProject(
45
- rootFiles: string[],
46
- packageJson: { dependencies?: Record<string, string>; devDependencies?: Record<string, string>; workspaces?: string[] | { packages: string[] } } | null,
47
- hasPnpmWorkspace: boolean,
48
- ): ProjectInfo {
49
- const allDeps = { ...(packageJson?.dependencies ?? {}), ...(packageJson?.devDependencies ?? {}) };
50
-
51
- const workspaceGlobs = hasPnpmWorkspace
52
- ? ['packages/*']
53
- : Array.isArray(packageJson?.workspaces)
54
- ? packageJson.workspaces
55
- : (packageJson?.workspaces as { packages?: string[] })?.packages ?? [];
56
-
57
- const monorepoTool: DetectedMonorepoTool = hasPnpmWorkspace
58
- ? 'pnpm-workspaces'
59
- : workspaceGlobs.length > 0
60
- ? 'npm-workspaces'
61
- : 'none';
62
-
63
- const framework = detectFramework(allDeps);
64
- const testRunner = detectTestRunner(allDeps);
65
- const packageManager = detectPackageManager(rootFiles);
66
-
67
- const testPatterns = testRunner !== 'none'
68
- ? ['**/*.test.{ts,tsx,js,jsx}', '**/*.spec.{ts,tsx,js,jsx}']
69
- : [];
70
-
71
- const entryPoints = ['src/index.ts', 'src/index.tsx', 'src/main.ts', 'index.ts']
72
- .filter(ep => rootFiles.some(f => f.endsWith(ep.replace('src/', ''))));
73
-
74
- return {
75
- root: '',
76
- hasTypeScript: rootFiles.includes('tsconfig.json'),
77
- framework,
78
- testRunner,
79
- packageManager,
80
- monorepoTool,
81
- workspaceGlobs,
82
- hasStorybook: rootFiles.some(f => f.includes('.storybook')),
83
- entryPoints: entryPoints.length > 0 ? entryPoints : ['src/index.ts'],
84
- testPatterns,
85
- };
86
- }
87
-
88
- export function buildJsonConfig(info: ProjectInfo): string {
89
- const config = {
90
- $schema: 'https://monograph.dev/schema.json',
91
- entryPoints: info.entryPoints,
92
- ignore: ['**/*.d.ts', '**/*.test.*', '**/*.spec.*', ...(info.testPatterns.length > 0 ? info.testPatterns : [])],
93
- ...(info.workspaceGlobs.length > 0 ? { workspaces: info.workspaceGlobs } : {}),
94
- };
95
- return JSON.stringify(config, null, 2);
96
- }
97
-
98
- export function buildTomlConfig(info: ProjectInfo): string {
99
- const lines = ['[monograph]'];
100
- lines.push(`entry_points = [${info.entryPoints.map(e => `"${e}"`).join(', ')}]`);
101
- if (info.workspaceGlobs.length > 0) {
102
- lines.push(`workspaces = [${info.workspaceGlobs.map(g => `"${g}"`).join(', ')}]`);
103
- }
104
- return lines.join('\n');
105
- }