codetrellis 0.0.0-stage → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (448) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +27 -2
  3. package/bin/codetrellis.mjs +4 -0
  4. package/package.json +41 -4
  5. package/reader/material-reader.mjs +130346 -0
  6. package/resources/tree-sitter/README.md +150 -0
  7. package/resources/tree-sitter/tree-sitter-c-sharp.wasm +0 -0
  8. package/resources/tree-sitter/tree-sitter-go.wasm +0 -0
  9. package/resources/tree-sitter/tree-sitter-java.wasm +0 -0
  10. package/resources/tree-sitter/tree-sitter-javascript.wasm +0 -0
  11. package/resources/tree-sitter/tree-sitter-kotlin.wasm +0 -0
  12. package/resources/tree-sitter/tree-sitter-php.wasm +0 -0
  13. package/resources/tree-sitter/tree-sitter-python.wasm +0 -0
  14. package/resources/tree-sitter/tree-sitter-ruby.wasm +0 -0
  15. package/resources/tree-sitter/tree-sitter-rust.wasm +0 -0
  16. package/resources/tree-sitter/tree-sitter-swift.wasm +0 -0
  17. package/resources/tree-sitter/tree-sitter-tsx.wasm +0 -0
  18. package/resources/tree-sitter/tree-sitter-typescript.wasm +0 -0
  19. package/resources/tree-sitter/tree-sitter.wasm +0 -0
  20. package/src/backend/agent/claude-code-watcher.js +270 -0
  21. package/src/backend/index.js +8 -0
  22. package/src/backend/lib/sha256-file.js +39 -0
  23. package/src/backend/lib/zip-entries.js +98 -0
  24. package/src/backend/lifecycle.js +102 -0
  25. package/src/backend/mcp/binding-headers.js +54 -0
  26. package/src/backend/mcp/client-identity.js +44 -0
  27. package/src/backend/mcp/connector/command.js +110 -0
  28. package/src/backend/mcp/connector/core.js +278 -0
  29. package/src/backend/mcp/connector/files.js +121 -0
  30. package/src/backend/mcp/connector/hook.js +284 -0
  31. package/src/backend/mcp/connector/main.js +126 -0
  32. package/src/backend/mcp/connector/sse-upstream.js +152 -0
  33. package/src/backend/mcp/helpers.js +43 -0
  34. package/src/backend/mcp/prompt-builders.js +104 -0
  35. package/src/backend/mcp/resources.js +197 -0
  36. package/src/backend/mcp/server.js +813 -0
  37. package/src/backend/mcp/skill-guide.js +1528 -0
  38. package/src/backend/mcp/tools/architecture-tools.js +273 -0
  39. package/src/backend/mcp/tools/audio-tools.js +117 -0
  40. package/src/backend/mcp/tools/awareness-tools.js +623 -0
  41. package/src/backend/mcp/tools/budget-tools.js +185 -0
  42. package/src/backend/mcp/tools/channel-tools.js +205 -0
  43. package/src/backend/mcp/tools/contribution-tools.js +181 -0
  44. package/src/backend/mcp/tools/drift-tools.js +252 -0
  45. package/src/backend/mcp/tools/git-tools.js +316 -0
  46. package/src/backend/mcp/tools/governance-tools.js +175 -0
  47. package/src/backend/mcp/tools/graph-tools.js +181 -0
  48. package/src/backend/mcp/tools/intake-tools.js +244 -0
  49. package/src/backend/mcp/tools/mobile-tools.js +118 -0
  50. package/src/backend/mcp/tools/peer-tools.js +330 -0
  51. package/src/backend/mcp/tools/plan-item-tools.js +1601 -0
  52. package/src/backend/mcp/tools/plan-tools.js +680 -0
  53. package/src/backend/mcp/tools/presence-tools.js +185 -0
  54. package/src/backend/mcp/tools/project-config-tools.js +150 -0
  55. package/src/backend/mcp/tools/review-tools.js +172 -0
  56. package/src/backend/mcp/tools/session-tools.js +554 -0
  57. package/src/backend/mcp/tools/system-docs-tools.js +168 -0
  58. package/src/backend/mcp/tools/terminal-tools.js +186 -0
  59. package/src/backend/mcp/tools/test-tools.js +117 -0
  60. package/src/backend/mcp/tools/ui-tools.js +356 -0
  61. package/src/backend/mcp/types.js +15 -0
  62. package/src/backend/middleware/local-auth.js +116 -0
  63. package/src/backend/server.js +5951 -0
  64. package/src/backend/services/agent-event-log.js +350 -0
  65. package/src/backend/services/architecture-rule.js +584 -0
  66. package/src/backend/services/architecture-rules.js +275 -0
  67. package/src/backend/services/artefact-content-service.js +181 -0
  68. package/src/backend/services/artefact-service.js +305 -0
  69. package/src/backend/services/artefact-watcher.js +167 -0
  70. package/src/backend/services/ast-parser.js +327 -0
  71. package/src/backend/services/audio-buffer-service.js +152 -0
  72. package/src/backend/services/awareness-notices.js +139 -0
  73. package/src/backend/services/awareness-replies.js +194 -0
  74. package/src/backend/services/awareness-service.js +344 -0
  75. package/src/backend/services/awareness-signals.js +267 -0
  76. package/src/backend/services/baseline-store.js +83 -0
  77. package/src/backend/services/branch-workstreams.js +341 -0
  78. package/src/backend/services/breakpoint-service.js +584 -0
  79. package/src/backend/services/brief-service.js +299 -0
  80. package/src/backend/services/budget-service.js +528 -0
  81. package/src/backend/services/callsites/base.js +15 -0
  82. package/src/backend/services/callsites/csharp.js +148 -0
  83. package/src/backend/services/callsites/go.js +163 -0
  84. package/src/backend/services/callsites/index.js +53 -0
  85. package/src/backend/services/callsites/kotlin.js +123 -0
  86. package/src/backend/services/callsites/process-env.js +125 -0
  87. package/src/backend/services/callsites/python.js +91 -0
  88. package/src/backend/services/callsites/ruby.js +164 -0
  89. package/src/backend/services/callsites/shared.js +198 -0
  90. package/src/backend/services/callsites/swift.js +115 -0
  91. package/src/backend/services/callsites/typescript.js +87 -0
  92. package/src/backend/services/capability-token.js +108 -0
  93. package/src/backend/services/change-check.js +156 -0
  94. package/src/backend/services/channel-dispatcher-service.js +235 -0
  95. package/src/backend/services/channel-event-file-service.js +125 -0
  96. package/src/backend/services/channel-event-service.js +297 -0
  97. package/src/backend/services/check-runs.js +177 -0
  98. package/src/backend/services/checkout-identity.js +73 -0
  99. package/src/backend/services/claude-code-parallel.js +221 -0
  100. package/src/backend/services/claude-desktop-config.js +186 -0
  101. package/src/backend/services/cli-install.js +249 -0
  102. package/src/backend/services/clock.js +57 -0
  103. package/src/backend/services/cloud-files.js +191 -0
  104. package/src/backend/services/coalesce.js +50 -0
  105. package/src/backend/services/code-breakpoints.js +291 -0
  106. package/src/backend/services/comment-service.js +168 -0
  107. package/src/backend/services/commit-attribution.js +134 -0
  108. package/src/backend/services/commit-edges.js +99 -0
  109. package/src/backend/services/confined-fs.js +241 -0
  110. package/src/backend/services/conformity-gate.js +132 -0
  111. package/src/backend/services/contribution-service.js +409 -0
  112. package/src/backend/services/coverage-service.js +173 -0
  113. package/src/backend/services/criteria-service.js +721 -0
  114. package/src/backend/services/criterion-checks.js +387 -0
  115. package/src/backend/services/criterion-loop-service.js +411 -0
  116. package/src/backend/services/cross-system-service.js +231 -0
  117. package/src/backend/services/database.js +916 -0
  118. package/src/backend/services/db-schema.js +1358 -0
  119. package/src/backend/services/deviation-service.js +344 -0
  120. package/src/backend/services/diff-engine.js +168 -0
  121. package/src/backend/services/evidence.js +363 -0
  122. package/src/backend/services/external-intake-service.js +269 -0
  123. package/src/backend/services/external-pointer-service.js +195 -0
  124. package/src/backend/services/external-refs-service.js +214 -0
  125. package/src/backend/services/file-history.js +158 -0
  126. package/src/backend/services/file-watcher.js +193 -0
  127. package/src/backend/services/folder-requests.js +118 -0
  128. package/src/backend/services/freeze-service.js +189 -0
  129. package/src/backend/services/gemini-cli-hook.js +172 -0
  130. package/src/backend/services/git-activity-service.js +325 -0
  131. package/src/backend/services/git-blobs.js +70 -0
  132. package/src/backend/services/git-branches.js +357 -0
  133. package/src/backend/services/git-checkout.js +153 -0
  134. package/src/backend/services/git-commit-service.js +91 -0
  135. package/src/backend/services/git-env.js +121 -0
  136. package/src/backend/services/git-identity.js +84 -0
  137. package/src/backend/services/git-refs.js +386 -0
  138. package/src/backend/services/git-safety.js +58 -0
  139. package/src/backend/services/grant-guard.js +67 -0
  140. package/src/backend/services/html-view-policy.js +135 -0
  141. package/src/backend/services/human-decision.js +55 -0
  142. package/src/backend/services/importers.js +159 -0
  143. package/src/backend/services/intent-service.js +105 -0
  144. package/src/backend/services/ipc-dispatcher.js +164 -0
  145. package/src/backend/services/item-git-state.js +208 -0
  146. package/src/backend/services/line-changes.js +232 -0
  147. package/src/backend/services/line-history.js +174 -0
  148. package/src/backend/services/local-api-changes.js +40 -0
  149. package/src/backend/services/logger.js +217 -0
  150. package/src/backend/services/material-footprints.js +203 -0
  151. package/src/backend/services/material-place.js +82 -0
  152. package/src/backend/services/material-reader/docx-markdown.js +198 -0
  153. package/src/backend/services/material-reader/fixtures.test-helper.js +169 -0
  154. package/src/backend/services/material-reader/quote.js +44 -0
  155. package/src/backend/services/material-reader/reader-host.js +202 -0
  156. package/src/backend/services/material-signals.js +141 -0
  157. package/src/backend/services/mcp-capabilities.js +390 -0
  158. package/src/backend/services/mdns-service.js +304 -0
  159. package/src/backend/services/mobile-api-server.js +281 -0
  160. package/src/backend/services/mobile-approvals.js +306 -0
  161. package/src/backend/services/mobile-awareness.js +180 -0
  162. package/src/backend/services/mobile-breakpoints.js +115 -0
  163. package/src/backend/services/mobile-budget.js +98 -0
  164. package/src/backend/services/mobile-freeze.js +106 -0
  165. package/src/backend/services/mobile-proposals.js +100 -0
  166. package/src/backend/services/mobile-rpc-service.js +1289 -0
  167. package/src/backend/services/mobile-workstreams.js +160 -0
  168. package/src/backend/services/monorepo-detector.js +131 -0
  169. package/src/backend/services/other-work.js +45 -0
  170. package/src/backend/services/pack-seal.js +129 -0
  171. package/src/backend/services/paired-device-service.js +192 -0
  172. package/src/backend/services/pairing-server.js +323 -0
  173. package/src/backend/services/pairing-service.js +200 -0
  174. package/src/backend/services/pantry-resolution-service.js +166 -0
  175. package/src/backend/services/parsers/base.js +124 -0
  176. package/src/backend/services/parsers/csharp.js +224 -0
  177. package/src/backend/services/parsers/go.js +180 -0
  178. package/src/backend/services/parsers/index.js +101 -0
  179. package/src/backend/services/parsers/java.js +103 -0
  180. package/src/backend/services/parsers/kotlin.js +252 -0
  181. package/src/backend/services/parsers/php.js +113 -0
  182. package/src/backend/services/parsers/python.js +189 -0
  183. package/src/backend/services/parsers/ruby.js +212 -0
  184. package/src/backend/services/parsers/rust.js +97 -0
  185. package/src/backend/services/parsers/swift.js +221 -0
  186. package/src/backend/services/parsers/typescript.js +235 -0
  187. package/src/backend/services/pattern-scan.js +65 -0
  188. package/src/backend/services/patterns.js +281 -0
  189. package/src/backend/services/peer-audit-service.js +123 -0
  190. package/src/backend/services/peer-auth.js +153 -0
  191. package/src/backend/services/peer-capabilities.js +209 -0
  192. package/src/backend/services/peer-connection-service.js +450 -0
  193. package/src/backend/services/peer-grants.js +33 -0
  194. package/src/backend/services/persistence.js +116 -0
  195. package/src/backend/services/personal-sync-service.js +232 -0
  196. package/src/backend/services/pipeline-approvals.js +72 -0
  197. package/src/backend/services/pipeline.js +232 -0
  198. package/src/backend/services/plan-arrivals.js +68 -0
  199. package/src/backend/services/plan-changes-service.js +273 -0
  200. package/src/backend/services/plan-conflict-service.js +288 -0
  201. package/src/backend/services/plan-dependencies.js +91 -0
  202. package/src/backend/services/plan-doc-guard.js +90 -0
  203. package/src/backend/services/plan-documents-service.js +275 -0
  204. package/src/backend/services/plan-event-service.js +154 -0
  205. package/src/backend/services/plan-file-refs.js +106 -0
  206. package/src/backend/services/plan-file-service.js +1564 -0
  207. package/src/backend/services/plan-history-service.js +156 -0
  208. package/src/backend/services/plan-import-service.js +261 -0
  209. package/src/backend/services/plan-item-service.js +1223 -0
  210. package/src/backend/services/plan-migrate-service.js +395 -0
  211. package/src/backend/services/plan-overlay-service.js +173 -0
  212. package/src/backend/services/plan-phases-service.js +182 -0
  213. package/src/backend/services/plan-progress-service.js +134 -0
  214. package/src/backend/services/plan-review-service.js +262 -0
  215. package/src/backend/services/plan-service.js +682 -0
  216. package/src/backend/services/plan-status.js +113 -0
  217. package/src/backend/services/plan-template-publish-service.js +217 -0
  218. package/src/backend/services/plan-templates-service.js +242 -0
  219. package/src/backend/services/plan-templates.js +1164 -0
  220. package/src/backend/services/planned-overlap-actions.js +200 -0
  221. package/src/backend/services/plans-home.js +224 -0
  222. package/src/backend/services/play-forward.js +256 -0
  223. package/src/backend/services/playback-service.js +117 -0
  224. package/src/backend/services/power-service.js +167 -0
  225. package/src/backend/services/power-signals.js +81 -0
  226. package/src/backend/services/pr-draft-service.js +142 -0
  227. package/src/backend/services/presence-service.js +122 -0
  228. package/src/backend/services/pricing.js +60 -0
  229. package/src/backend/services/project-config-service.js +474 -0
  230. package/src/backend/services/project-scanner.js +184 -0
  231. package/src/backend/services/projection-service.js +69 -0
  232. package/src/backend/services/push-notification-service.js +288 -0
  233. package/src/backend/services/recent-projects-service.js +204 -0
  234. package/src/backend/services/record-chain.js +162 -0
  235. package/src/backend/services/recurrence-rule.js +63 -0
  236. package/src/backend/services/recurring-agent.js +89 -0
  237. package/src/backend/services/recurring-scheduler.js +77 -0
  238. package/src/backend/services/recurring-service.js +276 -0
  239. package/src/backend/services/reference-service.js +169 -0
  240. package/src/backend/services/release-public-key.js +30 -0
  241. package/src/backend/services/release-signature.js +64 -0
  242. package/src/backend/services/remote-audio-service.js +224 -0
  243. package/src/backend/services/remote-interaction-service.js +275 -0
  244. package/src/backend/services/remote-terminal-service.js +324 -0
  245. package/src/backend/services/rendition/child/main.js +76 -0
  246. package/src/backend/services/rendition/engine-host.js +249 -0
  247. package/src/backend/services/rendition/engine-lock.js +39 -0
  248. package/src/backend/services/rendition/engine-lock.json +14 -0
  249. package/src/backend/services/rendition/engine-manifest.js +97 -0
  250. package/src/backend/services/rendition/network-proof.js +73 -0
  251. package/src/backend/services/rendition/rendition-service.js +175 -0
  252. package/src/backend/services/replay-frames.js +387 -0
  253. package/src/backend/services/replay-state.js +201 -0
  254. package/src/backend/services/resolvers/base.js +108 -0
  255. package/src/backend/services/resolvers/csharp.js +109 -0
  256. package/src/backend/services/resolvers/go.js +105 -0
  257. package/src/backend/services/resolvers/index.js +60 -0
  258. package/src/backend/services/resolvers/java.js +63 -0
  259. package/src/backend/services/resolvers/kotlin.js +109 -0
  260. package/src/backend/services/resolvers/php.js +89 -0
  261. package/src/backend/services/resolvers/python.js +154 -0
  262. package/src/backend/services/resolvers/ruby.js +103 -0
  263. package/src/backend/services/resolvers/rust.js +77 -0
  264. package/src/backend/services/resolvers/swift.js +98 -0
  265. package/src/backend/services/resolvers/typescript.js +71 -0
  266. package/src/backend/services/retention.js +54 -0
  267. package/src/backend/services/review-architecture.js +236 -0
  268. package/src/backend/services/review-attest.js +68 -0
  269. package/src/backend/services/review-bundle.js +226 -0
  270. package/src/backend/services/review-graduation.js +93 -0
  271. package/src/backend/services/review-host/bitbucket.js +79 -0
  272. package/src/backend/services/review-host/detect.js +80 -0
  273. package/src/backend/services/review-host/github.js +97 -0
  274. package/src/backend/services/review-host/gitlab.js +77 -0
  275. package/src/backend/services/review-host/host-state.js +103 -0
  276. package/src/backend/services/review-host/http.js +58 -0
  277. package/src/backend/services/review-host/switch.js +120 -0
  278. package/src/backend/services/review-marks.js +72 -0
  279. package/src/backend/services/review-notes.js +169 -0
  280. package/src/backend/services/review-other-work.js +90 -0
  281. package/src/backend/services/review-queue-service.js +147 -0
  282. package/src/backend/services/review-risk.js +127 -0
  283. package/src/backend/services/review-task.js +121 -0
  284. package/src/backend/services/rule-approvals.js +275 -0
  285. package/src/backend/services/rule-baseline.js +134 -0
  286. package/src/backend/services/rule-changes.js +162 -0
  287. package/src/backend/services/rule-preview.js +47 -0
  288. package/src/backend/services/rule-proposals.js +104 -0
  289. package/src/backend/services/rule-scope.js +76 -0
  290. package/src/backend/services/rulebook.js +286 -0
  291. package/src/backend/services/rules-at.js +56 -0
  292. package/src/backend/services/rules-overview.js +88 -0
  293. package/src/backend/services/schema-reconciler.js +250 -0
  294. package/src/backend/services/secret-store.js +119 -0
  295. package/src/backend/services/section-workstreams.js +95 -0
  296. package/src/backend/services/self-write-tracker.js +75 -0
  297. package/src/backend/services/sensor-bridge-service.js +285 -0
  298. package/src/backend/services/session-service.js +192 -0
  299. package/src/backend/services/settings-service.js +324 -0
  300. package/src/backend/services/signal-breakpoints.js +172 -0
  301. package/src/backend/services/signed-approval-record.js +86 -0
  302. package/src/backend/services/signed-approvals.js +244 -0
  303. package/src/backend/services/signoff-pack.js +328 -0
  304. package/src/backend/services/signoff-rows.js +114 -0
  305. package/src/backend/services/skill-arrival-service.js +138 -0
  306. package/src/backend/services/skill-model.js +193 -0
  307. package/src/backend/services/skill-use-service.js +140 -0
  308. package/src/backend/services/skills-service.js +150 -0
  309. package/src/backend/services/snapshot-compare-service.js +397 -0
  310. package/src/backend/services/source-control.js +189 -0
  311. package/src/backend/services/spec-links-service.js +123 -0
  312. package/src/backend/services/spec-proposal-withdraw.js +50 -0
  313. package/src/backend/services/spec-proposals-service.js +470 -0
  314. package/src/backend/services/sql/embedded.js +95 -0
  315. package/src/backend/services/sql/index.js +63 -0
  316. package/src/backend/services/sql/refs.js +357 -0
  317. package/src/backend/services/sql/schema.js +312 -0
  318. package/src/backend/services/sql/tokenizer.js +195 -0
  319. package/src/backend/services/stack-overlaps.js +117 -0
  320. package/src/backend/services/stack-service.js +225 -0
  321. package/src/backend/services/state-sync-service.js +384 -0
  322. package/src/backend/services/stuck-sensor-service.js +200 -0
  323. package/src/backend/services/system-discovery.js +481 -0
  324. package/src/backend/services/system-docs-service.js +701 -0
  325. package/src/backend/services/task-attachments-service.js +340 -0
  326. package/src/backend/services/task-grounding.js +60 -0
  327. package/src/backend/services/task-records/check-run-record.js +146 -0
  328. package/src/backend/services/task-records/check-runs.js +115 -0
  329. package/src/backend/services/task-records/heads.js +88 -0
  330. package/src/backend/services/task-records/material-reads.js +225 -0
  331. package/src/backend/services/task-records/read-record.js +100 -0
  332. package/src/backend/services/task-records/record.js +173 -0
  333. package/src/backend/services/task-records/run-record.js +136 -0
  334. package/src/backend/services/task-records/shared-state.js +548 -0
  335. package/src/backend/services/task-records/signing.js +140 -0
  336. package/src/backend/services/task-records/split-signals.js +52 -0
  337. package/src/backend/services/task-records/test-runs.js +164 -0
  338. package/src/backend/services/task-records/trust.js +243 -0
  339. package/src/backend/services/task-rules.js +81 -0
  340. package/src/backend/services/task-workstreams.js +90 -0
  341. package/src/backend/services/terminal-history-service.js +266 -0
  342. package/src/backend/services/terminal-service.js +267 -0
  343. package/src/backend/services/test-clock.js +53 -0
  344. package/src/backend/services/tests/grounding.js +266 -0
  345. package/src/backend/services/tests/junit.js +104 -0
  346. package/src/backend/services/tests/teammate-runs.js +134 -0
  347. package/src/backend/services/tests/test-results.js +234 -0
  348. package/src/backend/services/tree-watcher.js +204 -0
  349. package/src/backend/services/trellis-service.js +204 -0
  350. package/src/backend/services/trusted-roots.js +186 -0
  351. package/src/backend/services/update-download-service.js +342 -0
  352. package/src/backend/services/update-service.js +266 -0
  353. package/src/backend/services/watch-ignore.js +76 -0
  354. package/src/backend/services/webhook-egress.js +206 -0
  355. package/src/backend/services/webrtc-service.js +413 -0
  356. package/src/backend/services/work-changes.js +59 -0
  357. package/src/backend/services/workstream-binding.js +82 -0
  358. package/src/backend/services/workstream-commits.js +116 -0
  359. package/src/backend/services/workstream-imports.js +177 -0
  360. package/src/backend/services/workstream-service.js +335 -0
  361. package/src/backend/services/workstream-symbols.js +223 -0
  362. package/src/backend/services/workstream-watch-service.js +391 -0
  363. package/src/backend/services/worktree-service.js +235 -0
  364. package/src/cli/agent.js +100 -0
  365. package/src/cli/args.js +209 -0
  366. package/src/cli/conformity.js +106 -0
  367. package/src/cli/desktop.js +91 -0
  368. package/src/cli/main.js +411 -0
  369. package/src/cli/pipeline.js +109 -0
  370. package/src/cli/plan-verbs.js +259 -0
  371. package/src/cli/review-adapters.js +220 -0
  372. package/src/cli/review-output.js +93 -0
  373. package/src/cli/review-post.js +89 -0
  374. package/src/cli/review-sink.js +183 -0
  375. package/src/cli/review-skill.js +44 -0
  376. package/src/cli/review-verify.js +104 -0
  377. package/src/cli/review.js +386 -0
  378. package/src/cli/sarif.js +148 -0
  379. package/src/cli/verbs.js +360 -0
  380. package/src/shared/build-info.js +39 -0
  381. package/src/shared/lib/agent-review.js +199 -0
  382. package/src/shared/lib/agent-turns.js +140 -0
  383. package/src/shared/lib/awareness-digest.js +120 -0
  384. package/src/shared/lib/branch-name.js +45 -0
  385. package/src/shared/lib/breakpoint-words.js +118 -0
  386. package/src/shared/lib/budget-words.js +56 -0
  387. package/src/shared/lib/burst.js +69 -0
  388. package/src/shared/lib/call-entry.js +105 -0
  389. package/src/shared/lib/check-compare.js +42 -0
  390. package/src/shared/lib/check-words.js +216 -0
  391. package/src/shared/lib/csv.js +62 -0
  392. package/src/shared/lib/folder-entry.js +87 -0
  393. package/src/shared/lib/freeze-words.js +60 -0
  394. package/src/shared/lib/fuzzy.js +84 -0
  395. package/src/shared/lib/git-state-words.js +80 -0
  396. package/src/shared/lib/grep-entry.js +86 -0
  397. package/src/shared/lib/grounding-line.js +61 -0
  398. package/src/shared/lib/import-line.js +71 -0
  399. package/src/shared/lib/item-status.js +249 -0
  400. package/src/shared/lib/line-changes.js +53 -0
  401. package/src/shared/lib/locator.js +71 -0
  402. package/src/shared/lib/matcher.js +120 -0
  403. package/src/shared/lib/merge-order.js +65 -0
  404. package/src/shared/lib/open-findings.js +68 -0
  405. package/src/shared/lib/other-work.js +108 -0
  406. package/src/shared/lib/package-entry.js +142 -0
  407. package/src/shared/lib/plan-vocab.js +40 -0
  408. package/src/shared/lib/pptx-xml.js +86 -0
  409. package/src/shared/lib/proposal-words.js +61 -0
  410. package/src/shared/lib/recurrence.js +183 -0
  411. package/src/shared/lib/references.js +72 -0
  412. package/src/shared/lib/rule-pattern.js +56 -0
  413. package/src/shared/lib/sdp-fingerprint.js +115 -0
  414. package/src/shared/lib/sdp-minimal.js +123 -0
  415. package/src/shared/lib/secret-paths.js +34 -0
  416. package/src/shared/lib/signal-words.js +172 -0
  417. package/src/shared/lib/signoff.js +56 -0
  418. package/src/shared/lib/skills-note.js +60 -0
  419. package/src/shared/lib/spec-sections.js +78 -0
  420. package/src/shared/lib/symbol-entry.js +60 -0
  421. package/src/shared/lib/tool-phrasing.js +338 -0
  422. package/src/shared/lib/turn-gap.js +27 -0
  423. package/src/shared/lib/workstream-words.js +38 -0
  424. package/src/shared/lib/xlsx-xml.js +144 -0
  425. package/src/shared/lib/zip-reader.js +99 -0
  426. package/src/shared/types/agent.js +27 -0
  427. package/src/shared/types/architecture-rules.js +30 -0
  428. package/src/shared/types/ast.js +15 -0
  429. package/src/shared/types/breakpoint.js +33 -0
  430. package/src/shared/types/channel.js +41 -0
  431. package/src/shared/types/criteria.js +15 -0
  432. package/src/shared/types/graph.js +15 -0
  433. package/src/shared/types/index.js +53 -0
  434. package/src/shared/types/peer.js +36 -0
  435. package/src/shared/types/pipeline.js +15 -0
  436. package/src/shared/types/plan.js +15 -0
  437. package/src/shared/types/play-forward.js +15 -0
  438. package/src/shared/types/power.js +15 -0
  439. package/src/shared/types/presence.js +15 -0
  440. package/src/shared/types/project-config.js +35 -0
  441. package/src/shared/types/project.js +15 -0
  442. package/src/shared/types/record.js +15 -0
  443. package/src/shared/types/recurring.js +15 -0
  444. package/src/shared/types/review.js +15 -0
  445. package/src/shared/types/settings.js +114 -0
  446. package/src/shared/types/stack.js +15 -0
  447. package/src/shared/types/system-doc.js +15 -0
  448. package/src/shared/types/system.js +15 -0
@@ -0,0 +1,103 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+ var ruby_exports = {};
29
+ __export(ruby_exports, {
30
+ rubyResolver: () => rubyResolver
31
+ });
32
+ module.exports = __toCommonJS(ruby_exports);
33
+ var import_node_path = __toESM(require("node:path"));
34
+ var import_base = require("./base");
35
+ const RB_EXTS = [".rb", ".rake"];
36
+ const STDLIB = /* @__PURE__ */ new Set([
37
+ "json",
38
+ "yaml",
39
+ "set",
40
+ "date",
41
+ "time",
42
+ "uri",
43
+ "net/http",
44
+ "fileutils",
45
+ "logger",
46
+ "digest",
47
+ "openssl",
48
+ "base64",
49
+ "csv",
50
+ "stringio",
51
+ "pathname",
52
+ "securerandom",
53
+ "singleton",
54
+ "forwardable",
55
+ "ostruct",
56
+ "erb",
57
+ "tempfile",
58
+ "rails",
59
+ "active_record",
60
+ "active_support",
61
+ "action_controller",
62
+ "rspec",
63
+ "minitest",
64
+ "sinatra",
65
+ "rack",
66
+ "sidekiq"
67
+ ]);
68
+ function isLikelyGem(source) {
69
+ if (STDLIB.has(source)) return true;
70
+ const head = source.split("/")[0];
71
+ return STDLIB.has(head);
72
+ }
73
+ function resolve(ctx) {
74
+ const { importSource, importerPath, knownFiles, systems } = ctx;
75
+ if (!importSource) return null;
76
+ const source = importSource.replace(/\.rb$/, "");
77
+ if (ctx.isRelative || source.startsWith(".")) {
78
+ const base = import_node_path.default.resolve(import_node_path.default.dirname(importerPath), source);
79
+ return (0, import_base.tryExtensions)(base, knownFiles, RB_EXTS);
80
+ }
81
+ if (isLikelyGem(source)) return null;
82
+ const containing = (0, import_base.findContainingSystem)(importerPath, systems);
83
+ const roots = [];
84
+ if (containing) {
85
+ roots.push(containing.rootPath);
86
+ roots.push(import_node_path.default.join(containing.rootPath, "lib"));
87
+ roots.push(import_node_path.default.join(containing.rootPath, "app"));
88
+ }
89
+ roots.push(ctx.projectRoot, import_node_path.default.join(ctx.projectRoot, "lib"), import_node_path.default.join(ctx.projectRoot, "app"));
90
+ for (const root of roots) {
91
+ const hit = (0, import_base.tryExtensions)(import_node_path.default.join(root, source), knownFiles, RB_EXTS);
92
+ if (hit) return hit;
93
+ }
94
+ return null;
95
+ }
96
+ const rubyResolver = {
97
+ languages: ["ruby"],
98
+ resolve
99
+ };
100
+ // Annotate the CommonJS export names for ESM import in node:
101
+ 0 && (module.exports = {
102
+ rubyResolver
103
+ });
@@ -0,0 +1,77 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+ var rust_exports = {};
29
+ __export(rust_exports, {
30
+ rustResolver: () => rustResolver
31
+ });
32
+ module.exports = __toCommonJS(rust_exports);
33
+ var import_node_path = __toESM(require("node:path"));
34
+ var import_base = require("./base");
35
+ const RS_EXTS = [".rs"];
36
+ const RS_MOD_SUFFIXES = ["/mod.rs"];
37
+ const STD_PREFIXES = /* @__PURE__ */ new Set(["std", "core", "alloc"]);
38
+ function resolve(ctx) {
39
+ const { importSource, importerPath, knownFiles, systems } = ctx;
40
+ if (!importSource) return null;
41
+ const segments = importSource.split("::").filter((s) => s.length > 0);
42
+ if (segments.length === 0) return null;
43
+ const head = segments[0];
44
+ if (STD_PREFIXES.has(head)) return null;
45
+ const containing = (0, import_base.findContainingSystem)(importerPath, systems);
46
+ if (head === "crate") {
47
+ if (!containing) return null;
48
+ const crateRoot = import_node_path.default.join(containing.rootPath, "src");
49
+ const subpath = segments.slice(1, -1).join("/");
50
+ const base = import_node_path.default.join(crateRoot, subpath);
51
+ return (0, import_base.tryExtensions)(base, knownFiles, [...RS_EXTS, ...RS_MOD_SUFFIXES]) ?? (0, import_base.tryExtensions)(import_node_path.default.join(crateRoot, "lib"), knownFiles, RS_EXTS);
52
+ }
53
+ if (head === "self" || head === "super") {
54
+ const importerDir = import_node_path.default.dirname(importerPath);
55
+ let baseDir = importerDir;
56
+ if (head === "super") baseDir = import_node_path.default.dirname(importerDir);
57
+ const tail = segments.slice(1).join("/");
58
+ return (0, import_base.tryExtensions)(import_node_path.default.join(baseDir, tail), knownFiles, [...RS_EXTS, ...RS_MOD_SUFFIXES]);
59
+ }
60
+ for (const sys of systems) {
61
+ if (sys.language !== "rust") continue;
62
+ if (sys.name === head || sys.packageName === head) {
63
+ const crateRoot = import_node_path.default.join(sys.rootPath, "src");
64
+ const subpath = segments.slice(1).join("/");
65
+ return (0, import_base.tryExtensions)(import_node_path.default.join(crateRoot, subpath), knownFiles, [...RS_EXTS, ...RS_MOD_SUFFIXES]) ?? (0, import_base.tryExtensions)(import_node_path.default.join(crateRoot, "lib"), knownFiles, RS_EXTS);
66
+ }
67
+ }
68
+ return null;
69
+ }
70
+ const rustResolver = {
71
+ languages: ["rust"],
72
+ resolve
73
+ };
74
+ // Annotate the CommonJS export names for ESM import in node:
75
+ 0 && (module.exports = {
76
+ rustResolver
77
+ });
@@ -0,0 +1,98 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+ var swift_exports = {};
29
+ __export(swift_exports, {
30
+ swiftResolver: () => swiftResolver
31
+ });
32
+ module.exports = __toCommonJS(swift_exports);
33
+ var import_node_path = __toESM(require("node:path"));
34
+ var import_base = require("./base");
35
+ const EXTERNAL_MODULES = /* @__PURE__ */ new Set([
36
+ "Foundation",
37
+ "UIKit",
38
+ "AppKit",
39
+ "SwiftUI",
40
+ "Combine",
41
+ "CoreData",
42
+ "CoreGraphics",
43
+ "CoreLocation",
44
+ "CoreImage",
45
+ "AVFoundation",
46
+ "MapKit",
47
+ "WebKit",
48
+ "Network",
49
+ "OSLog",
50
+ "Dispatch",
51
+ "XCTest",
52
+ "Testing",
53
+ "Swift",
54
+ "ObjectiveC",
55
+ "Darwin",
56
+ "Security",
57
+ "CryptoKit",
58
+ "StoreKit",
59
+ "WidgetKit",
60
+ "ActivityKit",
61
+ "Charts",
62
+ "PhotosUI",
63
+ "UserNotifications",
64
+ "Alamofire",
65
+ "SnapKit",
66
+ "RxSwift",
67
+ "Kingfisher"
68
+ ]);
69
+ const SOURCE_ROOTS = ["Sources", "Tests", "src", ""];
70
+ function resolve(ctx) {
71
+ const { importSource, importerPath, knownFiles, systems } = ctx;
72
+ if (!importSource) return null;
73
+ if (EXTERNAL_MODULES.has(importSource)) return null;
74
+ const containing = (0, import_base.findContainingSystem)(importerPath, systems);
75
+ const searchRoots = containing ? [containing.rootPath, ctx.projectRoot] : [ctx.projectRoot];
76
+ for (const base of searchRoots) {
77
+ for (const root of SOURCE_ROOTS) {
78
+ const dir = import_node_path.default.join(base, root, importSource);
79
+ const hit = (0, import_base.pickRepresentativeFile)(dir, knownFiles, {
80
+ extensions: [".swift"],
81
+ // `Sources/BillingCore/BillingCore.swift` is the SwiftPM
82
+ // template's own entry file, so it is the best representative
83
+ // when it exists.
84
+ prefer: importSource
85
+ });
86
+ if (hit) return hit;
87
+ }
88
+ }
89
+ return null;
90
+ }
91
+ const swiftResolver = {
92
+ languages: ["swift"],
93
+ resolve
94
+ };
95
+ // Annotate the CommonJS export names for ESM import in node:
96
+ 0 && (module.exports = {
97
+ swiftResolver
98
+ });
@@ -0,0 +1,71 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+ var typescript_exports = {};
29
+ __export(typescript_exports, {
30
+ typescriptResolver: () => typescriptResolver
31
+ });
32
+ module.exports = __toCommonJS(typescript_exports);
33
+ var import_node_path = __toESM(require("node:path"));
34
+ var import_base = require("./base");
35
+ function resolve(ctx) {
36
+ const { importSource, importerPath, knownFiles, aliasMap } = ctx;
37
+ if (importSource.startsWith(".") || importSource.startsWith("/")) {
38
+ const importerDir = import_node_path.default.dirname(importerPath);
39
+ const basePath = importSource.startsWith("/") ? importSource : import_node_path.default.resolve(importerDir, importSource);
40
+ return (0, import_base.tryExtensions)(basePath, knownFiles);
41
+ }
42
+ for (const mapping of aliasMap) {
43
+ const { alias, rootPath, entries } = mapping;
44
+ if (importSource === alias) {
45
+ if (entries) {
46
+ for (const e of entries) {
47
+ const candidate = import_node_path.default.resolve(rootPath, e);
48
+ if (knownFiles.has(candidate)) return candidate;
49
+ }
50
+ }
51
+ const indexHit = (0, import_base.tryExtensions)(import_node_path.default.join(rootPath, "index"), knownFiles) ?? (0, import_base.tryExtensions)(import_node_path.default.join(rootPath, "src/index"), knownFiles);
52
+ if (indexHit) return indexHit;
53
+ continue;
54
+ }
55
+ if (importSource.startsWith(alias + "/")) {
56
+ const subpath = importSource.slice(alias.length + 1);
57
+ const basePath = import_node_path.default.resolve(rootPath, subpath);
58
+ const hit = (0, import_base.tryExtensions)(basePath, knownFiles);
59
+ if (hit) return hit;
60
+ }
61
+ }
62
+ return null;
63
+ }
64
+ const typescriptResolver = {
65
+ languages: ["typescript", "javascript"],
66
+ resolve
67
+ };
68
+ // Annotate the CommonJS export names for ESM import in node:
69
+ 0 && (module.exports = {
70
+ typescriptResolver
71
+ });
@@ -0,0 +1,54 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var retention_exports = {};
19
+ __export(retention_exports, {
20
+ DAY_MS: () => DAY_MS,
21
+ DEFAULT_RETENTION_DAYS: () => DEFAULT_RETENTION_DAYS,
22
+ DEVICE_LOG_CAP: () => DEVICE_LOG_CAP,
23
+ retentionCutoff: () => retentionCutoff,
24
+ retentionDays: () => retentionDays,
25
+ retentionWords: () => retentionWords
26
+ });
27
+ module.exports = __toCommonJS(retention_exports);
28
+ var import_settings_service = require("./settings-service");
29
+ const DAY_MS = 24 * 60 * 60 * 1e3;
30
+ const DEFAULT_RETENTION_DAYS = 14;
31
+ const DEVICE_LOG_CAP = 1e4;
32
+ function retentionDays() {
33
+ try {
34
+ return (0, import_settings_service.getSettings)().data.retentionDays;
35
+ } catch {
36
+ return DEFAULT_RETENTION_DAYS;
37
+ }
38
+ }
39
+ function retentionCutoff(now = Date.now(), days = retentionDays()) {
40
+ return days === null ? null : now - days * DAY_MS;
41
+ }
42
+ function retentionWords(days = retentionDays()) {
43
+ if (days === null) return "everything";
44
+ return days === 365 ? "a year" : `${days} days`;
45
+ }
46
+ // Annotate the CommonJS export names for ESM import in node:
47
+ 0 && (module.exports = {
48
+ DAY_MS,
49
+ DEFAULT_RETENTION_DAYS,
50
+ DEVICE_LOG_CAP,
51
+ retentionCutoff,
52
+ retentionDays,
53
+ retentionWords
54
+ });
@@ -0,0 +1,236 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+ var review_architecture_exports = {};
29
+ __export(review_architecture_exports, {
30
+ architectureMarkdown: () => architectureMarkdown,
31
+ architectureOf: () => architectureOf,
32
+ callChanges: () => callChanges,
33
+ folderLinks: () => folderLinks,
34
+ folderOf: () => folderOf,
35
+ packagesIn: () => packagesIn
36
+ });
37
+ module.exports = __toCommonJS(review_architecture_exports);
38
+ var import_node_path = __toESM(require("node:path"));
39
+ var import_node_child_process = require("node:child_process");
40
+ var import_snapshot_compare_service = require("./snapshot-compare-service");
41
+ var import_ast_parser = require("./ast-parser");
42
+ var import_rules_at = require("./rules-at");
43
+ var import_architecture_rule = require("./architecture-rule");
44
+ var import_rule_changes = require("./rule-changes");
45
+ var import_review_risk = require("./review-risk");
46
+ const MAX_PARSED = 200;
47
+ const MAX_BYTES = 512 * 1024;
48
+ function git(root, args) {
49
+ try {
50
+ return (0, import_node_child_process.execFileSync)("git", ["-C", root, ...args], { encoding: "utf8", stdio: ["ignore", "pipe", "ignore"], maxBuffer: 16 * 1024 * 1024, timeout: 2e4 });
51
+ } catch {
52
+ return null;
53
+ }
54
+ }
55
+ function at(root, commit, rel) {
56
+ const text = git(root, ["show", `${commit}:./${rel}`]);
57
+ return text !== null && text.length <= MAX_BYTES ? text : null;
58
+ }
59
+ function folderOf(p) {
60
+ const parts = p.replace(/\\/g, "/").replace(/^\.\//, "").split("/");
61
+ if (parts.length <= 1) return ".";
62
+ return parts.slice(0, Math.min(2, parts.length - 1)).join("/");
63
+ }
64
+ function folderLinks(added, removed) {
65
+ const links = /* @__PURE__ */ new Map();
66
+ const note = (e, change) => {
67
+ const from = folderOf(e.from);
68
+ const to = folderOf(e.to);
69
+ if (from === to) return;
70
+ const k = `${from}>${to}`;
71
+ let l = links.get(k);
72
+ if (!l) links.set(k, l = { from, to, added: 0, removed: 0, examples: [] });
73
+ l[change]++;
74
+ if (l.examples.length < 3) l.examples.push({ ...e, change });
75
+ };
76
+ for (const e of added) note(e, "added");
77
+ for (const e of removed) note(e, "removed");
78
+ return [...links.values()].sort((a, b) => b.added - a.added || b.removed - a.removed || a.from.localeCompare(b.from) || a.to.localeCompare(b.to));
79
+ }
80
+ function packagesIn(manifest, text) {
81
+ const out = /* @__PURE__ */ new Set();
82
+ if (!text) return out;
83
+ const base = import_node_path.default.posix.basename(manifest);
84
+ if (base === "package.json") {
85
+ try {
86
+ const j = JSON.parse(text);
87
+ for (const k of ["dependencies", "devDependencies", "peerDependencies", "optionalDependencies"]) {
88
+ const deps = j[k];
89
+ if (deps && typeof deps === "object") for (const name of Object.keys(deps)) out.add(name);
90
+ }
91
+ } catch {
92
+ }
93
+ } else if (base === "requirements.txt") {
94
+ for (const line of text.split("\n")) {
95
+ const m = /^\s*([A-Za-z0-9][A-Za-z0-9._-]*)/.exec(line.replace(/#.*/, ""));
96
+ if (m && !line.trim().startsWith("-")) out.add(m[1].toLowerCase());
97
+ }
98
+ } else if (base === "go.mod") {
99
+ let block = false;
100
+ for (const line of text.split("\n")) {
101
+ const t = line.replace(/\/\/.*/, "").trim();
102
+ if (/^require\s*\($/.test(t)) {
103
+ block = true;
104
+ continue;
105
+ }
106
+ if (block && t === ")") {
107
+ block = false;
108
+ continue;
109
+ }
110
+ const m = block ? /^(\S+)\s+\S+/.exec(t) : /^require\s+(\S+)\s+\S+/.exec(t);
111
+ if (m) out.add(m[1]);
112
+ }
113
+ }
114
+ return out;
115
+ }
116
+ const ECOSYSTEM = { "package.json": "npm", "requirements.txt": "pip", "go.mod": "go" };
117
+ function describeCall(c) {
118
+ if ((c.kind === "http_call" || c.kind === "http_route") && c.urlPattern) return `${c.method ? `${c.method} ` : ""}${c.urlPattern}`;
119
+ if (c.kind === "sql_query") return c.sqlText?.trim().split(/\s+/).slice(0, 6).join(" ") ?? c.context ?? null;
120
+ if (c.kind === "entry" && c.urlPattern) return c.urlPattern;
121
+ return null;
122
+ }
123
+ function callChanges(file, before, after) {
124
+ const key = (c) => `${c.kind}|${describeCall(c)}`;
125
+ const was = new Set(before.map(key));
126
+ const now = new Set(after.map(key));
127
+ const out = [];
128
+ for (const c of after) {
129
+ const what = describeCall(c);
130
+ if (what && !was.has(key(c))) out.push({ file, line: c.line, kind: c.kind, what, change: "added" });
131
+ }
132
+ for (const c of before) {
133
+ const what = describeCall(c);
134
+ if (what && !now.has(key(c))) out.push({ file, line: c.line, kind: c.kind, what, change: "removed" });
135
+ }
136
+ return out;
137
+ }
138
+ const plural = (n, one, many = `${one}s`) => `${n} ${n === 1 ? one : many}`;
139
+ const CALL_WORDS = {
140
+ http_call: "an HTTP call to",
141
+ http_route: "a route,",
142
+ sql_query: "SQL:",
143
+ subprocess: "a command:",
144
+ env_lookup: "an environment variable:",
145
+ entry: ""
146
+ };
147
+ async function architectureOf(projectRoot, baseRef, headRef) {
148
+ const base = git(projectRoot, ["rev-parse", "--verify", "--quiet", `${baseRef}^{commit}`])?.trim();
149
+ const head = git(projectRoot, ["rev-parse", "--verify", "--quiet", `${headRef}^{commit}`])?.trim();
150
+ if (!base) return { error: `${baseRef} is not a commit in this repository` };
151
+ if (!head) return { error: `${headRef} is not a commit in this repository` };
152
+ const cmp = (0, import_snapshot_compare_service.compareSnapshots)(`commit:${base}`, `commit:${head}`, projectRoot);
153
+ const rel = (p) => (import_node_path.default.isAbsolute(p) ? import_node_path.default.relative(projectRoot, p) : p).split(import_node_path.default.sep).join("/");
154
+ const edgesKnown = cmp.ok && cmp.result.edgesComparable;
155
+ const added = cmp.ok && edgesKnown ? cmp.result.diff.addedEdges.map((e) => ({ from: rel(e.source), to: rel(e.target) })) : [];
156
+ const removed = cmp.ok && edgesKnown ? cmp.result.diff.removedEdges.map((e) => ({ from: rel(e.source), to: rel(e.target) })) : [];
157
+ const folders = folderLinks(added, removed);
158
+ const changed = (git(projectRoot, ["diff", "--name-only", "--no-renames", base, head, "--"]) ?? "").split("\n").map((s) => s.trim()).filter(Boolean);
159
+ const packages = [];
160
+ for (const f of changed) {
161
+ const eco = ECOSYSTEM[import_node_path.default.posix.basename(f)];
162
+ if (!eco) continue;
163
+ const was = packagesIn(f, at(projectRoot, base, f));
164
+ const now = packagesIn(f, at(projectRoot, head, f));
165
+ const a = [...now].filter((p) => !was.has(p)).sort();
166
+ const r = [...was].filter((p) => !now.has(p)).sort();
167
+ if (a.length || r.length) packages.push({ manifest: f, ecosystem: eco, added: a, removed: r });
168
+ }
169
+ const calls = [];
170
+ for (const f of changed.slice(0, MAX_PARSED)) {
171
+ const before = at(projectRoot, base, f);
172
+ const after = at(projectRoot, head, f);
173
+ let b = [];
174
+ let h = [];
175
+ try {
176
+ b = before !== null ? (0, import_ast_parser.parseVirtualFile)(import_node_path.default.join(projectRoot, f), before)?.callsites ?? [] : [];
177
+ } catch {
178
+ b = [];
179
+ }
180
+ try {
181
+ h = after !== null ? (0, import_ast_parser.parseVirtualFile)(import_node_path.default.join(projectRoot, f), after)?.callsites ?? [] : [];
182
+ } catch {
183
+ h = [];
184
+ }
185
+ calls.push(...callChanges(f, b, h));
186
+ }
187
+ const rules = [];
188
+ const baseRules = await (0, import_rules_at.rulesAt)(projectRoot, base);
189
+ const headRules = await (0, import_rules_at.rulesAt)(projectRoot, head);
190
+ if (baseRules) {
191
+ for (const b of (0, import_architecture_rule.checkEdges)(baseRules.rules, added)) {
192
+ const r = baseRules.rules.find((x) => x.id === b.rule);
193
+ rules.push({ rule: r.id, words: (0, import_architecture_rule.ruleWords)(r), kind: "breach", detail: `${b.from} now imports ${b.to}, which it forbids` });
194
+ }
195
+ if (headRules) {
196
+ for (const c of (0, import_rule_changes.diffRules)(baseRules.rules, headRules.rules, added)) {
197
+ rules.push({ rule: c.rule, words: c.after ? (0, import_architecture_rule.ruleWords)(c.after) : c.before ? (0, import_architecture_rule.ruleWords)(c.before) : c.rule, kind: c.effect, detail: c.words });
198
+ }
199
+ }
200
+ }
201
+ const words = [];
202
+ for (const r of rules.filter((x) => x.kind === "breach" || x.kind === "loosens")) words.push(r.kind === "breach" ? `\u2717 ${r.detail} (${r.rule})` : r.detail);
203
+ for (const c of calls.filter((x) => x.change === "added")) words.push(`Adds ${CALL_WORDS[c.kind] ? `${CALL_WORDS[c.kind]} ` : ""}${c.what} (${c.file}:${c.line})`);
204
+ for (const p of packages) {
205
+ if (p.added.length) words.push(`Adds ${plural(p.added.length, `${p.ecosystem} package`)}: ${p.added.join(", ")} (${p.manifest})`);
206
+ if (p.removed.length) words.push(`Drops ${plural(p.removed.length, `${p.ecosystem} package`)}: ${p.removed.join(", ")} (${p.manifest})`);
207
+ }
208
+ for (const l of folders) {
209
+ const bits = [l.added ? `${plural(l.added, "import")} added` : "", l.removed ? `${plural(l.removed, "import")} removed` : ""].filter(Boolean).join(", ");
210
+ words.push(`${l.from} \u2192 ${l.to}: ${bits}`);
211
+ }
212
+ for (const c of calls.filter((x) => x.change === "removed")) words.push(`Drops ${CALL_WORDS[c.kind] ? `${CALL_WORDS[c.kind]} ` : ""}${c.what} (${c.file})`);
213
+ for (const r of rules.filter((x) => x.kind === "tightens" || x.kind === "reworded")) words.push(r.detail);
214
+ if (!edgesKnown) words.push("The imports between folders are not known: one side's import graph could not be read.");
215
+ const inputs = await (0, import_review_risk.riskInputs)(projectRoot, changed, headRef);
216
+ const order = (0, import_review_risk.riskOrder)(changed, inputs);
217
+ return { base, head, edgesKnown, folders, packages, calls, rules, words, order };
218
+ }
219
+ function architectureMarkdown(a) {
220
+ const lines = ["### What this change does to the architecture", ""];
221
+ const shown = a.words.filter((w) => !w.startsWith("The imports between folders are not known"));
222
+ if (shown.length === 0) lines.push("No imports between folders, outside packages, cross-system calls or rules change.");
223
+ else for (const w of a.words) lines.push(`- ${w}`);
224
+ if (shown.length === 0 && !a.edgesKnown) lines.push("", "_The imports between folders are not known: one side's import graph could not be read._");
225
+ if (a.order?.length) lines.push("", (0, import_review_risk.riskMarkdown)(a.order));
226
+ return lines.join("\n");
227
+ }
228
+ // Annotate the CommonJS export names for ESM import in node:
229
+ 0 && (module.exports = {
230
+ architectureMarkdown,
231
+ architectureOf,
232
+ callChanges,
233
+ folderLinks,
234
+ folderOf,
235
+ packagesIn
236
+ });