@quickchatai/pi-quickreview 1.2.0 → 1.3.2

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 (231) hide show
  1. package/README.md +79 -27
  2. package/assets/config.example.toml +25 -7
  3. package/assets/prompts/onboarding.md +8 -7
  4. package/assets/schemas/review-result.v1.json +60 -0
  5. package/dist/extensions/quickreview.d.ts +17 -5
  6. package/dist/extensions/quickreview.d.ts.map +1 -1
  7. package/dist/extensions/quickreview.js +79 -26
  8. package/dist/extensions/quickreview.js.map +1 -1
  9. package/dist/src/engine/auth.d.ts +4 -0
  10. package/dist/src/engine/auth.d.ts.map +1 -1
  11. package/dist/src/engine/auth.js +11 -2
  12. package/dist/src/engine/auth.js.map +1 -1
  13. package/dist/src/engine/lens/activity.d.ts +45 -0
  14. package/dist/src/engine/lens/activity.d.ts.map +1 -0
  15. package/dist/src/engine/lens/activity.js +118 -0
  16. package/dist/src/engine/lens/activity.js.map +1 -0
  17. package/dist/src/engine/lens/runlens.d.ts +7 -0
  18. package/dist/src/engine/lens/runlens.d.ts.map +1 -1
  19. package/dist/src/engine/lens/runlens.js +30 -1
  20. package/dist/src/engine/lens/runlens.js.map +1 -1
  21. package/dist/src/engine/lens/tool.d.ts +7 -0
  22. package/dist/src/engine/lens/tool.d.ts.map +1 -1
  23. package/dist/src/engine/lens/tool.js +101 -18
  24. package/dist/src/engine/lens/tool.js.map +1 -1
  25. package/dist/src/engine/lens/wave.d.ts +6 -0
  26. package/dist/src/engine/lens/wave.d.ts.map +1 -1
  27. package/dist/src/engine/lens/wave.js +16 -0
  28. package/dist/src/engine/lens/wave.js.map +1 -1
  29. package/dist/src/homes.js +1 -1
  30. package/dist/src/homes.js.map +1 -1
  31. package/dist/src/live/events.d.ts +3 -0
  32. package/dist/src/live/events.d.ts.map +1 -1
  33. package/dist/src/live/events.js.map +1 -1
  34. package/dist/src/live/lensline.d.ts +20 -0
  35. package/dist/src/live/lensline.d.ts.map +1 -0
  36. package/dist/src/live/lensline.js +70 -0
  37. package/dist/src/live/lensline.js.map +1 -0
  38. package/dist/src/live/projection.d.ts +55 -0
  39. package/dist/src/live/projection.d.ts.map +1 -0
  40. package/dist/src/live/projection.js +465 -0
  41. package/dist/src/live/projection.js.map +1 -0
  42. package/dist/src/live/read.d.ts +24 -0
  43. package/dist/src/live/read.d.ts.map +1 -0
  44. package/dist/src/live/read.js +60 -0
  45. package/dist/src/live/read.js.map +1 -0
  46. package/dist/src/live/writer.d.ts +3 -0
  47. package/dist/src/live/writer.d.ts.map +1 -1
  48. package/dist/src/live/writer.js +6 -1
  49. package/dist/src/live/writer.js.map +1 -1
  50. package/dist/src/localreview.d.ts +18 -8
  51. package/dist/src/localreview.d.ts.map +1 -1
  52. package/dist/src/localreview.js +103 -43
  53. package/dist/src/localreview.js.map +1 -1
  54. package/dist/src/modelroute.d.ts +4 -0
  55. package/dist/src/modelroute.d.ts.map +1 -1
  56. package/dist/src/modelroute.js +21 -0
  57. package/dist/src/modelroute.js.map +1 -1
  58. package/dist/src/plugin/args.d.ts +38 -7
  59. package/dist/src/plugin/args.d.ts.map +1 -1
  60. package/dist/src/plugin/args.js +134 -37
  61. package/dist/src/plugin/args.js.map +1 -1
  62. package/dist/src/plugin/index.d.ts.map +1 -1
  63. package/dist/src/plugin/index.js +5 -1
  64. package/dist/src/plugin/index.js.map +1 -1
  65. package/dist/src/plugin/login.d.ts +8 -4
  66. package/dist/src/plugin/login.d.ts.map +1 -1
  67. package/dist/src/plugin/login.js +25 -32
  68. package/dist/src/plugin/login.js.map +1 -1
  69. package/dist/src/plugin/messages.d.ts +7 -0
  70. package/dist/src/plugin/messages.d.ts.map +1 -0
  71. package/dist/src/plugin/messages.js +13 -0
  72. package/dist/src/plugin/messages.js.map +1 -0
  73. package/dist/src/plugin/peers.d.ts +17 -0
  74. package/dist/src/plugin/peers.d.ts.map +1 -0
  75. package/dist/src/plugin/peers.js +55 -0
  76. package/dist/src/plugin/peers.js.map +1 -0
  77. package/dist/src/plugin/review.d.ts +52 -6
  78. package/dist/src/plugin/review.d.ts.map +1 -1
  79. package/dist/src/plugin/review.js +261 -95
  80. package/dist/src/plugin/review.js.map +1 -1
  81. package/dist/src/plugin/scan.d.ts +80 -44
  82. package/dist/src/plugin/scan.d.ts.map +1 -1
  83. package/dist/src/plugin/scan.js +450 -233
  84. package/dist/src/plugin/scan.js.map +1 -1
  85. package/dist/src/plugin/scancases.d.ts +33 -0
  86. package/dist/src/plugin/scancases.d.ts.map +1 -0
  87. package/dist/src/plugin/scancases.js +153 -0
  88. package/dist/src/plugin/scancases.js.map +1 -0
  89. package/dist/src/plugin/settings.d.ts +18 -0
  90. package/dist/src/plugin/settings.d.ts.map +1 -0
  91. package/dist/src/plugin/settings.js +47 -0
  92. package/dist/src/plugin/settings.js.map +1 -0
  93. package/dist/src/plugin/setup.d.ts +35 -12
  94. package/dist/src/plugin/setup.d.ts.map +1 -1
  95. package/dist/src/plugin/setup.js +258 -118
  96. package/dist/src/plugin/setup.js.map +1 -1
  97. package/dist/src/plugin/versiongate.d.ts +3 -0
  98. package/dist/src/plugin/versiongate.d.ts.map +1 -1
  99. package/dist/src/plugin/versiongate.js +9 -4
  100. package/dist/src/plugin/versiongate.js.map +1 -1
  101. package/dist/src/profileoverrides.d.ts +3 -0
  102. package/dist/src/profileoverrides.d.ts.map +1 -1
  103. package/dist/src/profileoverrides.js +9 -2
  104. package/dist/src/profileoverrides.js.map +1 -1
  105. package/dist/src/reviewapi.d.ts +22 -31
  106. package/dist/src/reviewapi.d.ts.map +1 -1
  107. package/dist/src/reviewapi.js +90 -66
  108. package/dist/src/reviewapi.js.map +1 -1
  109. package/dist/src/reviewdest.d.ts +1 -1
  110. package/dist/src/reviewdest.d.ts.map +1 -1
  111. package/dist/src/reviewdest.js +4 -3
  112. package/dist/src/reviewdest.js.map +1 -1
  113. package/dist/src/reviewtarget.d.ts +36 -0
  114. package/dist/src/reviewtarget.d.ts.map +1 -0
  115. package/dist/src/reviewtarget.js +6 -0
  116. package/dist/src/reviewtarget.js.map +1 -0
  117. package/dist/src/round-progress.d.ts +5 -0
  118. package/dist/src/round-progress.d.ts.map +1 -1
  119. package/dist/src/round-progress.js.map +1 -1
  120. package/dist/src/round-stage-deadlines.d.ts +26 -1
  121. package/dist/src/round-stage-deadlines.d.ts.map +1 -1
  122. package/dist/src/round-stage-deadlines.js +45 -2
  123. package/dist/src/round-stage-deadlines.js.map +1 -1
  124. package/dist/src/savedpost.d.ts +65 -0
  125. package/dist/src/savedpost.d.ts.map +1 -0
  126. package/dist/src/savedpost.js +131 -0
  127. package/dist/src/savedpost.js.map +1 -0
  128. package/dist/src/scan/caseread.d.ts +84 -0
  129. package/dist/src/scan/caseread.d.ts.map +1 -0
  130. package/dist/src/scan/caseread.js +263 -0
  131. package/dist/src/scan/caseread.js.map +1 -0
  132. package/dist/src/scan/channelfs.d.ts +6 -0
  133. package/dist/src/scan/channelfs.d.ts.map +1 -0
  134. package/dist/src/scan/channelfs.js +27 -0
  135. package/dist/src/scan/channelfs.js.map +1 -0
  136. package/dist/src/scan/cutrender.d.ts +13 -0
  137. package/dist/src/scan/cutrender.d.ts.map +1 -0
  138. package/dist/src/scan/cutrender.js +51 -0
  139. package/dist/src/scan/cutrender.js.map +1 -0
  140. package/dist/src/scan/facts.d.ts +72 -0
  141. package/dist/src/scan/facts.d.ts.map +1 -0
  142. package/dist/src/scan/facts.js +593 -0
  143. package/dist/src/scan/facts.js.map +1 -0
  144. package/dist/src/scan/findings.d.ts +320 -0
  145. package/dist/src/scan/findings.d.ts.map +1 -0
  146. package/dist/src/scan/findings.js +948 -0
  147. package/dist/src/scan/findings.js.map +1 -0
  148. package/dist/src/scan/ledger.d.ts +116 -0
  149. package/dist/src/scan/ledger.d.ts.map +1 -0
  150. package/dist/src/scan/ledger.js +207 -0
  151. package/dist/src/scan/ledger.js.map +1 -0
  152. package/dist/src/scan/presentation.d.ts +19 -0
  153. package/dist/src/scan/presentation.d.ts.map +1 -0
  154. package/dist/src/scan/presentation.js +9 -0
  155. package/dist/src/scan/presentation.js.map +1 -0
  156. package/dist/src/scan/scan.d.ts +354 -0
  157. package/dist/src/scan/scan.d.ts.map +1 -0
  158. package/dist/src/scan/scan.js +725 -0
  159. package/dist/src/scan/scan.js.map +1 -0
  160. package/dist/src/scan/scanagents.d.ts +23 -0
  161. package/dist/src/scan/scanagents.d.ts.map +1 -0
  162. package/dist/src/scan/scanagents.js +99 -0
  163. package/dist/src/scan/scanagents.js.map +1 -0
  164. package/dist/src/scan/scanassemble.d.ts +65 -0
  165. package/dist/src/scan/scanassemble.d.ts.map +1 -0
  166. package/dist/src/scan/scanassemble.js +93 -0
  167. package/dist/src/scan/scanassemble.js.map +1 -0
  168. package/dist/src/scan/scanfs.d.ts +26 -0
  169. package/dist/src/scan/scanfs.d.ts.map +1 -0
  170. package/dist/src/scan/scanfs.js +229 -0
  171. package/dist/src/scan/scanfs.js.map +1 -0
  172. package/dist/src/scan/scanlease.d.ts +50 -0
  173. package/dist/src/scan/scanlease.d.ts.map +1 -0
  174. package/dist/src/scan/scanlease.js +251 -0
  175. package/dist/src/scan/scanlease.js.map +1 -0
  176. package/dist/src/scan/scanleaves.d.ts +55 -0
  177. package/dist/src/scan/scanleaves.d.ts.map +1 -0
  178. package/dist/src/scan/scanleaves.js +258 -0
  179. package/dist/src/scan/scanleaves.js.map +1 -0
  180. package/dist/src/scan/scanports.d.ts +79 -0
  181. package/dist/src/scan/scanports.d.ts.map +1 -0
  182. package/dist/src/scan/scanports.js +8 -0
  183. package/dist/src/scan/scanports.js.map +1 -0
  184. package/dist/src/scan/scanrender.d.ts +128 -0
  185. package/dist/src/scan/scanrender.d.ts.map +1 -0
  186. package/dist/src/scan/scanrender.js +527 -0
  187. package/dist/src/scan/scanrender.js.map +1 -0
  188. package/dist/src/scan/scanreport.d.ts +126 -0
  189. package/dist/src/scan/scanreport.d.ts.map +1 -0
  190. package/dist/src/scan/scanreport.js +289 -0
  191. package/dist/src/scan/scanreport.js.map +1 -0
  192. package/dist/src/scan/scanrun.d.ts +472 -0
  193. package/dist/src/scan/scanrun.d.ts.map +1 -0
  194. package/dist/src/scan/scanrun.js +1733 -0
  195. package/dist/src/scan/scanrun.js.map +1 -0
  196. package/dist/src/scan/scantree.d.ts +21 -0
  197. package/dist/src/scan/scantree.d.ts.map +1 -0
  198. package/dist/src/scan/scantree.js +297 -0
  199. package/dist/src/scan/scantree.js.map +1 -0
  200. package/dist/src/scan/scanverbs.d.ts +208 -0
  201. package/dist/src/scan/scanverbs.d.ts.map +1 -0
  202. package/dist/src/scan/scanverbs.js +689 -0
  203. package/dist/src/scan/scanverbs.js.map +1 -0
  204. package/dist/src/scan/stage2.d.ts +221 -0
  205. package/dist/src/scan/stage2.d.ts.map +1 -0
  206. package/dist/src/scan/stage2.js +617 -0
  207. package/dist/src/scan/stage2.js.map +1 -0
  208. package/dist/src/scan/stage2request.d.ts +125 -0
  209. package/dist/src/scan/stage2request.d.ts.map +1 -0
  210. package/dist/src/scan/stage2request.js +259 -0
  211. package/dist/src/scan/stage2request.js.map +1 -0
  212. package/dist/src/scan/textsniff.d.ts +14 -0
  213. package/dist/src/scan/textsniff.d.ts.map +1 -0
  214. package/dist/src/scan/textsniff.js +88 -0
  215. package/dist/src/scan/textsniff.js.map +1 -0
  216. package/dist/src/scan/unitcut.d.ts +135 -0
  217. package/dist/src/scan/unitcut.d.ts.map +1 -0
  218. package/dist/src/scan/unitcut.js +437 -0
  219. package/dist/src/scan/unitcut.js.map +1 -0
  220. package/dist/src/scan/unitcutstore.d.ts +155 -0
  221. package/dist/src/scan/unitcutstore.d.ts.map +1 -0
  222. package/dist/src/scan/unitcutstore.js +381 -0
  223. package/dist/src/scan/unitcutstore.js.map +1 -0
  224. package/dist/src/setupchecklist.d.ts +240 -0
  225. package/dist/src/setupchecklist.d.ts.map +1 -0
  226. package/dist/src/setupchecklist.js +407 -0
  227. package/dist/src/setupchecklist.js.map +1 -0
  228. package/package.json +7 -3
  229. package/skills/qcr-review/SKILL.md +24 -0
  230. package/skills/qcr-scan/SKILL.md +23 -0
  231. package/skills/qcr-setup/SKILL.md +18 -0
@@ -0,0 +1,593 @@
1
+ // Deterministic repo facts: what a repo says about itself in files, read
2
+ // without a model — the stack, frameworks, CI checks, linters and formatters,
3
+ // the design docs and style guides, the agent-directive files, and a
4
+ // stack-aware first guess at the unit cut. Free facts must not cost model
5
+ // time, and the survey lens and the portrait start from these rather than
6
+ // rediscovering them.
7
+ //
8
+ // Pure: a listing of repo-relative paths plus a reader that answers null for
9
+ // anything it cannot read. Nothing here touches a filesystem, so the engine's
10
+ // repo port decides what "the repo" is (git-tracked files of the reviewed
11
+ // checkout, in production) and tests hand over a map.
12
+ //
13
+ // Every detection is evidence-carrying: each fact names the file that proves
14
+ // it, so the operator can check the facts and the companion can cite them.
15
+ // Nothing is inferred from absence — a repo with no CI config has `ci: []`,
16
+ // which says "no config file found", not "no CI".
17
+ import { parse as parseToml } from "smol-toml";
18
+ import { DEFAULT_DIRECTIVE_VOCABULARY } from "../severity.js";
19
+ import { styleGuideRefsIn } from "../styleguide.js";
20
+ import { escapeControls } from "./textsniff.js";
21
+ /** Every unit kind — the type and the runtime check (`unitcut.ts`) read this
22
+ * one list. */
23
+ export const UNIT_KINDS = [
24
+ "django-app",
25
+ "js-package",
26
+ "python-package",
27
+ "go-module",
28
+ "rust-crate",
29
+ "directory",
30
+ "rest",
31
+ "custom",
32
+ ];
33
+ /** Stable item text shared by facts and portrait renderers. */
34
+ export const evidenceText = (item) => `${item.name} — ${item.evidence}`;
35
+ export const ciText = (item) => `${item.system} — ${item.path}${item.name ? ` ("${item.name}")` : ""}`;
36
+ export const displayRoot = (root) => root || "(repo root)";
37
+ // ---- helpers -----------------------------------------------------------------
38
+ function base(path) {
39
+ return path.slice(path.lastIndexOf("/") + 1);
40
+ }
41
+ function dirOf(path) {
42
+ const i = path.lastIndexOf("/");
43
+ return i < 0 ? "" : path.slice(0, i);
44
+ }
45
+ /** Migration files, whatever the stack calls their directory. */
46
+ const MIGRATION_RE = /(^|\/)(migrations?|alembic\/versions|db\/migrate)\//i;
47
+ export function isMigrationFile(path) {
48
+ return MIGRATION_RE.test(path);
49
+ }
50
+ /** Vendored trees are someone else's repo: never evidence about this one. */
51
+ export function isVendored(path) {
52
+ return path
53
+ .split("/")
54
+ .some((s) => DEFAULT_DIRECTIVE_VOCABULARY.vendoredSegments.has(s.toLowerCase()));
55
+ }
56
+ const LANGUAGE_BY_EXT = {
57
+ py: "Python",
58
+ pyi: "Python",
59
+ js: "JavaScript",
60
+ jsx: "JavaScript",
61
+ mjs: "JavaScript",
62
+ cjs: "JavaScript",
63
+ ts: "TypeScript",
64
+ tsx: "TypeScript",
65
+ mts: "TypeScript",
66
+ cts: "TypeScript",
67
+ go: "Go",
68
+ rs: "Rust",
69
+ rb: "Ruby",
70
+ java: "Java",
71
+ kt: "Kotlin",
72
+ kts: "Kotlin",
73
+ scala: "Scala",
74
+ php: "PHP",
75
+ cs: "C#",
76
+ c: "C",
77
+ h: "C",
78
+ cc: "C++",
79
+ cpp: "C++",
80
+ cxx: "C++",
81
+ hh: "C++",
82
+ hxx: "C++",
83
+ hpp: "C++",
84
+ swift: "Swift",
85
+ m: "Objective-C",
86
+ mm: "Objective-C",
87
+ dart: "Dart",
88
+ ex: "Elixir",
89
+ exs: "Elixir",
90
+ erl: "Erlang",
91
+ hs: "Haskell",
92
+ clj: "Clojure",
93
+ lua: "Lua",
94
+ sh: "Shell",
95
+ bash: "Shell",
96
+ sql: "SQL",
97
+ vue: "Vue",
98
+ svelte: "Svelte",
99
+ html: "HTML",
100
+ css: "CSS",
101
+ scss: "CSS",
102
+ less: "CSS",
103
+ tf: "Terraform",
104
+ };
105
+ function languages(files) {
106
+ const counts = new Map();
107
+ for (const f of files) {
108
+ const b = base(f);
109
+ const dot = b.lastIndexOf(".");
110
+ if (dot <= 0)
111
+ continue;
112
+ const lang = LANGUAGE_BY_EXT[b.slice(dot + 1).toLowerCase()];
113
+ if (lang)
114
+ counts.set(lang, (counts.get(lang) ?? 0) + 1);
115
+ }
116
+ return [...counts.entries()]
117
+ .map(([language, n]) => ({ language, files: n }))
118
+ .sort((a, b) => b.files - a.files || a.language.localeCompare(b.language));
119
+ }
120
+ /** Manifest basename → ecosystem. */
121
+ const MANIFESTS = {
122
+ "package.json": "npm",
123
+ "pnpm-workspace.yaml": "pnpm workspace",
124
+ "pyproject.toml": "python (pyproject)",
125
+ "setup.py": "python (setuptools)",
126
+ "setup.cfg": "python (setuptools)",
127
+ "requirements.txt": "python (pip)",
128
+ Pipfile: "python (pipenv)",
129
+ "go.mod": "go modules",
130
+ "Cargo.toml": "cargo",
131
+ Gemfile: "bundler",
132
+ "pom.xml": "maven",
133
+ "build.gradle": "gradle",
134
+ "build.gradle.kts": "gradle",
135
+ "composer.json": "composer",
136
+ "mix.exs": "mix",
137
+ "pubspec.yaml": "pub",
138
+ "Package.swift": "swiftpm",
139
+ };
140
+ const isRequirementsName = (name) => /^requirements([-_.][\w.-]*)?\.txt$/.test(name);
141
+ function manifests(files) {
142
+ const out = [];
143
+ for (const f of files) {
144
+ const b = base(f);
145
+ const eco = MANIFESTS[b] ?? (isRequirementsName(b) ? "python (pip)" : null);
146
+ if (eco)
147
+ out.push({ name: eco, evidence: f });
148
+ }
149
+ return out;
150
+ }
151
+ /** A Python dependency line naming exactly `dep` (any version spec, extras,
152
+ * or a Poetry `dep = "…"` table entry) — `flask-cors` is not Flask. */
153
+ function pyDep(dep) {
154
+ return new RegExp(`^\\s*${dep}(\\[[^\\]]*\\])?\\s*([<>=~!;,"'@]|$)`, "im");
155
+ }
156
+ /** Framework → the dependency spelling that proves it, per manifest family. */
157
+ const PY_FRAMEWORKS = [
158
+ ["Django", pyDep("django")],
159
+ ["Django REST framework", pyDep("djangorestframework")],
160
+ ["Flask", pyDep("flask")],
161
+ ["FastAPI", pyDep("fastapi")],
162
+ ["Celery", pyDep("celery")],
163
+ ["SQLAlchemy", pyDep("sqlalchemy")],
164
+ ["pytest", pyDep("pytest")],
165
+ ["Pydantic", pyDep("pydantic")],
166
+ ];
167
+ const JS_FRAMEWORKS = [
168
+ ["React", "react"],
169
+ ["Next.js", "next"],
170
+ ["Vue", "vue"],
171
+ ["Nuxt", "nuxt"],
172
+ ["Svelte", "svelte"],
173
+ ["SvelteKit", "@sveltejs/kit"],
174
+ ["Angular", "@angular/core"],
175
+ ["Express", "express"],
176
+ ["NestJS", "@nestjs/core"],
177
+ ["Fastify", "fastify"],
178
+ ["Tailwind CSS", "tailwindcss"],
179
+ ["Vite", "vite"],
180
+ ["Jest", "jest"],
181
+ ["Vitest", "vitest"],
182
+ ["Playwright", "@playwright/test"],
183
+ ["Electron", "electron"],
184
+ ["React Native", "react-native"],
185
+ ];
186
+ const SPRING_SIGNATURE = /spring-boot|springframework/;
187
+ const OTHER_FRAMEWORKS = [
188
+ ["Rails", "Gemfile", /^\s*gem\s+["']rails["']/m],
189
+ ["Spring", "pom.xml", SPRING_SIGNATURE],
190
+ ["Spring", "build.gradle", SPRING_SIGNATURE],
191
+ ["Spring", "build.gradle.kts", SPRING_SIGNATURE],
192
+ ["Laravel", "composer.json", /"laravel\/framework"/],
193
+ ["Phoenix", "mix.exs", /:phoenix\b/],
194
+ ["Gin", "go.mod", /github\.com\/gin-gonic\/gin/],
195
+ ["Echo", "go.mod", /github\.com\/labstack\/echo/],
196
+ ["Actix", "Cargo.toml", /^\s*actix-web\s*=/m],
197
+ ["Axum", "Cargo.toml", /^\s*axum\s*=/m],
198
+ ];
199
+ function packageDeps(text) {
200
+ try {
201
+ const pkg = JSON.parse(text);
202
+ const deps = new Set();
203
+ for (const key of ["dependencies", "devDependencies", "peerDependencies"]) {
204
+ const block = pkg[key];
205
+ if (block && typeof block === "object")
206
+ for (const d of Object.keys(block))
207
+ deps.add(d);
208
+ }
209
+ return deps;
210
+ }
211
+ catch {
212
+ return new Set();
213
+ }
214
+ }
215
+ /** Python dependency declarations only; project metadata is never evidence. */
216
+ function pythonDependencies(name, text) {
217
+ if (isRequirementsName(name))
218
+ return text;
219
+ if (name === "setup.py") {
220
+ const declarations = [
221
+ ...text.matchAll(/\b(install_requires|tests_require|extras_require)\s*=\s*(\[[\s\S]*?\]|\{[\s\S]*?\})/g),
222
+ ];
223
+ return declarations
224
+ .flatMap((m) => {
225
+ const lists = m[1] === "extras_require"
226
+ ? [...m[2].matchAll(/:\s*(\[[\s\S]*?\])/g)].map((v) => v[1])
227
+ : [m[2]];
228
+ return lists.flatMap((list) => [...list.matchAll(/["']([^"'\n]+)["']/g)].map((v) => v[1]));
229
+ })
230
+ .join("\n");
231
+ }
232
+ if (name === "setup.cfg") {
233
+ let section = "";
234
+ let collecting = false;
235
+ const out = [];
236
+ for (const line of text.split("\n")) {
237
+ const header = /^\s*\[([^\]]+)\]/.exec(line);
238
+ if (header) {
239
+ section = header[1];
240
+ collecting = false;
241
+ continue;
242
+ }
243
+ const key = /^([\w.-]+)\s*=\s*(.*)$/.exec(line);
244
+ if (key) {
245
+ collecting =
246
+ section === "options.extras_require" ||
247
+ (section === "options" && ["install_requires", "tests_require"].includes(key[1]));
248
+ if (collecting)
249
+ out.push(key[2]);
250
+ }
251
+ else if (collecting && /^\s+/.test(line))
252
+ out.push(line.trim());
253
+ }
254
+ return out.join("\n");
255
+ }
256
+ try {
257
+ const table = (v) => v !== null && typeof v === "object" && !Array.isArray(v)
258
+ ? v
259
+ : {};
260
+ const doc = table(parseToml(text));
261
+ const out = [];
262
+ const strings = (v) => {
263
+ if (Array.isArray(v))
264
+ for (const item of v)
265
+ if (typeof item === "string")
266
+ out.push(item);
267
+ };
268
+ const tableNames = (v) => {
269
+ out.push(...Object.keys(table(v)));
270
+ };
271
+ if (name === "Pipfile") {
272
+ tableNames(doc.packages);
273
+ tableNames(doc["dev-packages"]);
274
+ }
275
+ else {
276
+ const project = table(doc.project);
277
+ strings(project.dependencies);
278
+ for (const values of Object.values(table(project["optional-dependencies"])))
279
+ strings(values);
280
+ for (const values of Object.values(table(doc["dependency-groups"])))
281
+ strings(values);
282
+ const poetry = table(table(doc.tool).poetry);
283
+ tableNames(poetry.dependencies);
284
+ tableNames(poetry["dev-dependencies"]);
285
+ for (const group of Object.values(table(poetry.group)))
286
+ tableNames(table(group).dependencies);
287
+ }
288
+ return out.join("\n");
289
+ }
290
+ catch {
291
+ return "";
292
+ }
293
+ }
294
+ function frameworks(files, read) {
295
+ const seen = new Map();
296
+ const note = (name, evidence) => {
297
+ if (!seen.has(name))
298
+ seen.set(name, evidence);
299
+ };
300
+ for (const f of files) {
301
+ const b = base(f);
302
+ if (b === "manage.py") {
303
+ const text = read(f);
304
+ if (text !== null && /django/i.test(text))
305
+ note("Django", f);
306
+ }
307
+ else if (b === "pyproject.toml" ||
308
+ b === "Pipfile" ||
309
+ b === "setup.py" ||
310
+ b === "setup.cfg" ||
311
+ isRequirementsName(b)) {
312
+ const text = read(f);
313
+ if (text === null)
314
+ continue;
315
+ const lines = pythonDependencies(b, text);
316
+ for (const [name, re] of PY_FRAMEWORKS)
317
+ if (re.test(lines))
318
+ note(name, f);
319
+ }
320
+ else if (b === "package.json") {
321
+ const text = read(f);
322
+ if (text === null)
323
+ continue;
324
+ const deps = packageDeps(text);
325
+ for (const [name, dep] of JS_FRAMEWORKS)
326
+ if (deps.has(dep))
327
+ note(name, f);
328
+ }
329
+ else {
330
+ for (const [name, file, re] of OTHER_FRAMEWORKS) {
331
+ if (b !== file)
332
+ continue;
333
+ const text = read(f);
334
+ if (text !== null && re.test(text))
335
+ note(name, f);
336
+ }
337
+ }
338
+ }
339
+ return [...seen.entries()].map(([name, evidence]) => ({ name, evidence }));
340
+ }
341
+ function ciFacts(files, read) {
342
+ const out = [];
343
+ for (const f of files) {
344
+ let system = null;
345
+ if (/^\.github\/workflows\/[^/]+\.ya?ml$/.test(f))
346
+ system = "GitHub Actions";
347
+ else if (f === ".gitlab-ci.yml")
348
+ system = "GitLab CI";
349
+ else if (f === ".circleci/config.yml")
350
+ system = "CircleCI";
351
+ else if (f === "Jenkinsfile")
352
+ system = "Jenkins";
353
+ else if (f === "azure-pipelines.yml")
354
+ system = "Azure Pipelines";
355
+ else if (f === ".travis.yml")
356
+ system = "Travis CI";
357
+ else if (f === "bitbucket-pipelines.yml")
358
+ system = "Bitbucket Pipelines";
359
+ else if (/^\.buildkite\/[^/]+\.ya?ml$/.test(f))
360
+ system = "Buildkite";
361
+ if (!system)
362
+ continue;
363
+ const text = system === "GitHub Actions" ? read(f) : null;
364
+ // The name reaches the portrait and the companion's prompt: a control
365
+ // byte in the workflow file (a stray NUL is still text) is escaped.
366
+ const raw = text === null ? null : (/^name:\s*["']?(.+?)["']?\s*$/m.exec(text)?.[1] ?? null);
367
+ const name = raw === null ? null : escapeControls(raw);
368
+ out.push({ system, path: f, name });
369
+ }
370
+ return out;
371
+ }
372
+ /** Tool → config basenames that prove it (anywhere in the tree). */
373
+ const LINTER_FILES = [
374
+ ["Ruff", /^\.?ruff\.toml$/],
375
+ ["Flake8", /^\.flake8$/],
376
+ ["Pylint", /^\.?pylintrc$/],
377
+ ["mypy", /^\.?mypy\.ini$/],
378
+ ["Black", /^\.black$/],
379
+ ["isort", /^\.isort\.cfg$/],
380
+ ["ESLint", /^(\.eslintrc(\.(js|cjs|json|ya?ml))?|eslint\.config\.(js|mjs|cjs|ts))$/],
381
+ ["Prettier", /^(\.prettierrc(\.(js|cjs|json|ya?ml|toml))?|prettier\.config\.(js|mjs|cjs))$/],
382
+ ["Biome", /^biome\.jsonc?$/],
383
+ ["Stylelint", /^(\.stylelintrc(\.(js|json|ya?ml))?|stylelint\.config\.(js|cjs|mjs))$/],
384
+ ["TypeScript compiler", /^tsconfig\.json$/],
385
+ ["golangci-lint", /^\.golangci\.ya?ml$/],
386
+ ["rustfmt", /^\.?rustfmt\.toml$/],
387
+ ["Clippy", /^\.?clippy\.toml$/],
388
+ ["RuboCop", /^\.rubocop\.yml$/],
389
+ ["EditorConfig", /^\.editorconfig$/],
390
+ ["pre-commit", /^\.pre-commit-config\.yaml$/],
391
+ ["Checkstyle", /^checkstyle\.xml$/],
392
+ ["Spotless", /^\.spotless$/],
393
+ ];
394
+ /** `[tool.X]` sections in a pyproject.toml / setup.cfg. */
395
+ const PY_TOOL_SECTIONS = [
396
+ ["Ruff", /^\[tool\.ruff[\].]/m],
397
+ ["Black", /^\[tool\.black\]/m],
398
+ ["isort", /^\[(tool\.)?isort\]/m],
399
+ ["mypy", /^\[(tool\.)?mypy[\].-]/m],
400
+ ["Pylint", /^\[tool\.pylint[\].]/m],
401
+ ["Flake8", /^\[flake8\]/m],
402
+ ["pyright", /^\[tool\.pyright\]/m],
403
+ ];
404
+ function linters(files, read) {
405
+ const seen = new Map();
406
+ const note = (name, evidence) => {
407
+ if (!seen.has(name))
408
+ seen.set(name, evidence);
409
+ };
410
+ for (const f of files) {
411
+ const b = base(f);
412
+ for (const [name, re] of LINTER_FILES)
413
+ if (re.test(b))
414
+ note(name, f);
415
+ if (b === "pyproject.toml" || b === "setup.cfg" || b === "tox.ini") {
416
+ const text = read(f);
417
+ if (text !== null)
418
+ for (const [name, re] of PY_TOOL_SECTIONS)
419
+ if (re.test(text))
420
+ note(name, f);
421
+ }
422
+ else if (b === "package.json") {
423
+ const text = read(f);
424
+ if (text === null)
425
+ continue;
426
+ try {
427
+ const pkg = JSON.parse(text);
428
+ if (pkg.eslintConfig)
429
+ note("ESLint", f);
430
+ if (pkg.prettier)
431
+ note("Prettier", f);
432
+ }
433
+ catch {
434
+ // Not JSON: nothing to read, and no reason to fail the whole facts call.
435
+ }
436
+ }
437
+ }
438
+ return [...seen.entries()].map(([name, evidence]) => ({ name, evidence }));
439
+ }
440
+ /** Design docs the survey reads in full — the repo's stated intent. */
441
+ const GUIDE_RE = /^(readme|contributing|design|product|architecture|overview|development|hacking|security|conventions|styleguide|style[-_]guide)(\.[a-z]+)?$/i;
442
+ function guides(files) {
443
+ return files
444
+ .filter((f) => {
445
+ const d = dirOf(f);
446
+ return (d === "" || d === "docs" || d === "doc" || d === ".github") && GUIDE_RE.test(base(f));
447
+ })
448
+ .sort();
449
+ }
450
+ /** Agent-directive files: what the repo's team already told agents. Broader
451
+ * than the review's `isFirstPartyDirectivePath` on purpose — that predicate
452
+ * decides a finding's provenance and keeps its shipped vocabulary; this one is
453
+ * a reading list, so it also takes the other tools' rule files. */
454
+ const AGENT_BASENAMES = new Set([
455
+ "AGENTS.md",
456
+ "AGENT.md",
457
+ "CLAUDE.md",
458
+ "GEMINI.md",
459
+ ".cursorrules",
460
+ ".windsurfrules",
461
+ ".clinerules",
462
+ ]);
463
+ export function isAgentFile(path) {
464
+ if (isVendored(path))
465
+ return false;
466
+ if (AGENT_BASENAMES.has(base(path)))
467
+ return true;
468
+ if (path === ".github/copilot-instructions.md")
469
+ return true;
470
+ if (/^\.github\/instructions\/.+\.md$/.test(path))
471
+ return true;
472
+ if (/(^|\/)\.cursor\/rules\//.test(path))
473
+ return true;
474
+ if (/(^|\/)\.clinerules\//.test(path))
475
+ return true;
476
+ if (/(^|\/)\.claude\/.+\.md$/.test(path))
477
+ return true;
478
+ return false;
479
+ }
480
+ /** The shallowest vendored directories in the listing (`web/node_modules`,
481
+ * `third_party`) — what a proposed cut ignores by default. */
482
+ export function vendoredRoots(files) {
483
+ const roots = new Set();
484
+ for (const f of files) {
485
+ const segs = f.split("/");
486
+ const i = segs.findIndex((s) => DEFAULT_DIRECTIVE_VOCABULARY.vendoredSegments.has(s.toLowerCase()));
487
+ if (i >= 0 && i < segs.length - 1)
488
+ roots.add(segs.slice(0, i + 1).join("/"));
489
+ }
490
+ return [...roots].filter((r) => ![...roots].some((o) => o !== r && r.startsWith(`${o}/`))).sort();
491
+ }
492
+ // ---- unit candidates ---------------------------------------------------------
493
+ /** The longest unit name. */
494
+ export const UNIT_NAME_MAX = 64;
495
+ /** A unit name: one plain segment (the state files and reports key on it). */
496
+ export const UNIT_NAME_RE = new RegExp(`^[A-Za-z0-9][A-Za-z0-9._-]{0,${UNIT_NAME_MAX - 1}}$`);
497
+ function slug(path) {
498
+ const s = path
499
+ .replace(/[^A-Za-z0-9._-]+/g, "-")
500
+ .replace(/\.{2,}/g, "-")
501
+ .replace(/^[-._]+|-+$/g, "");
502
+ return (s || "root").slice(0, UNIT_NAME_MAX);
503
+ }
504
+ /** Directories never offered as units of their own (they ride "rest"). */
505
+ const NON_UNIT_TOP = /^(\..*|docs?|scripts?|tools?|bin|ci|examples?|fixtures|assets|static|public)$/i;
506
+ /**
507
+ * The stack-aware first guess at the unit cut. Markers, most specific first:
508
+ * a Django app (`apps.py`), a JS package (a nested `package.json`), a Python
509
+ * package with its own `pyproject.toml`/`setup.py`, a Go module, a Rust crate.
510
+ * Top-level directories holding code that no marker claimed become
511
+ * `directory` units, and a `rest` unit at the repo root catches the remainder
512
+ * so the guess is always a complete partition. The companion reshapes this;
513
+ * it is evidence, not the answer.
514
+ */
515
+ export function unitCandidates(files) {
516
+ const out = [];
517
+ const roots = new Set();
518
+ const add = (root, kind, reason) => {
519
+ if (roots.has(root))
520
+ return;
521
+ roots.add(root);
522
+ out.push({ name: "", roots: [root], kind, reason });
523
+ };
524
+ const sorted = [...files].filter((f) => !isVendored(f)).sort();
525
+ for (const f of sorted) {
526
+ const b = base(f);
527
+ const d = dirOf(f);
528
+ if (d === "")
529
+ continue;
530
+ if (b === "apps.py")
531
+ add(d, "django-app", `${f} declares a Django app`);
532
+ else if (b === "package.json")
533
+ add(d, "js-package", `${f} declares a package`);
534
+ else if (b === "pyproject.toml" || b === "setup.py")
535
+ add(d, "python-package", `${f} declares a Python package`);
536
+ else if (b === "go.mod")
537
+ add(d, "go-module", `${f} declares a Go module`);
538
+ else if (b === "Cargo.toml")
539
+ add(d, "rust-crate", `${f} declares a crate`);
540
+ }
541
+ const covered = (f) => [...roots].some((r) => f === r || f.startsWith(`${r}/`));
542
+ const tops = new Map();
543
+ for (const f of sorted) {
544
+ const i = f.indexOf("/");
545
+ if (i < 0 || covered(f) || !/\.[A-Za-z0-9]+$/.test(f))
546
+ continue;
547
+ const top = f.slice(0, i);
548
+ if (NON_UNIT_TOP.test(top))
549
+ continue;
550
+ const ext = f.slice(f.lastIndexOf(".") + 1).toLowerCase();
551
+ if (LANGUAGE_BY_EXT[ext])
552
+ tops.set(top, (tops.get(top) ?? 0) + 1);
553
+ }
554
+ for (const [top, n] of [...tops.entries()].sort()) {
555
+ add(top, "directory", `top-level directory with ${n} code file${n === 1 ? "" : "s"} no package marker claims`);
556
+ }
557
+ // Names: the last segment, widened with its parents only where two collide.
558
+ const byLast = new Map();
559
+ for (const c of out) {
560
+ const last = base(c.roots[0]);
561
+ byLast.set(last, (byLast.get(last) ?? 0) + 1);
562
+ }
563
+ const taken = new Set(["rest"]);
564
+ for (const c of out) {
565
+ const root = c.roots[0];
566
+ let name = slug(byLast.get(base(root)) > 1 ? root : base(root));
567
+ // The suffix must fit UNIT_NAME_MAX too, or the whole candidate cut is
568
+ // refused for one long colliding path.
569
+ for (let i = 2; taken.has(name); i++)
570
+ name = `${slug(root).slice(0, UNIT_NAME_MAX - `-${i}`.length)}-${i}`;
571
+ taken.add(name);
572
+ c.name = name;
573
+ }
574
+ out.push({ name: "rest", roots: [""], kind: "rest", reason: "everything no other unit claims" });
575
+ return out;
576
+ }
577
+ // ---- the whole read ----------------------------------------------------------
578
+ export function repoFacts(files, read) {
579
+ const own = files.filter((f) => !isVendored(f));
580
+ return {
581
+ files: files.length,
582
+ languages: languages(own),
583
+ manifests: manifests(own),
584
+ frameworks: frameworks(own, read),
585
+ ci: ciFacts(own, read),
586
+ linters: linters(own, read),
587
+ guides: guides(own),
588
+ style_guides: styleGuideRefsIn(own, read),
589
+ agent_files: own.filter(isAgentFile).sort(),
590
+ unit_candidates: unitCandidates(own),
591
+ };
592
+ }
593
+ //# sourceMappingURL=facts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"facts.js","sourceRoot":"","sources":["../../../src/scan/facts.ts"],"names":[],"mappings":"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"}