codetrellis 0.0.0-stage → 0.2.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 (449) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +27 -2
  3. package/bin/codetrellis.mjs +4 -0
  4. package/package.json +43 -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/clock.js +57 -0
  102. package/src/backend/services/cloud-files.js +191 -0
  103. package/src/backend/services/coalesce.js +50 -0
  104. package/src/backend/services/code-breakpoints.js +291 -0
  105. package/src/backend/services/comment-service.js +168 -0
  106. package/src/backend/services/commit-attribution.js +134 -0
  107. package/src/backend/services/commit-edges.js +99 -0
  108. package/src/backend/services/confined-fs.js +241 -0
  109. package/src/backend/services/conformity-gate.js +132 -0
  110. package/src/backend/services/contribution-service.js +409 -0
  111. package/src/backend/services/coverage-service.js +173 -0
  112. package/src/backend/services/criteria-service.js +721 -0
  113. package/src/backend/services/criterion-checks.js +387 -0
  114. package/src/backend/services/criterion-loop-service.js +411 -0
  115. package/src/backend/services/cross-system-service.js +231 -0
  116. package/src/backend/services/database.js +916 -0
  117. package/src/backend/services/db-schema.js +1358 -0
  118. package/src/backend/services/deviation-service.js +344 -0
  119. package/src/backend/services/diff-engine.js +168 -0
  120. package/src/backend/services/evidence.js +363 -0
  121. package/src/backend/services/external-intake-service.js +269 -0
  122. package/src/backend/services/external-pointer-service.js +195 -0
  123. package/src/backend/services/external-refs-service.js +214 -0
  124. package/src/backend/services/file-history.js +158 -0
  125. package/src/backend/services/file-watcher.js +193 -0
  126. package/src/backend/services/folder-requests.js +118 -0
  127. package/src/backend/services/freeze-service.js +189 -0
  128. package/src/backend/services/gemini-cli-hook.js +172 -0
  129. package/src/backend/services/git-activity-service.js +325 -0
  130. package/src/backend/services/git-blobs.js +70 -0
  131. package/src/backend/services/git-branches.js +357 -0
  132. package/src/backend/services/git-checkout.js +153 -0
  133. package/src/backend/services/git-commit-service.js +91 -0
  134. package/src/backend/services/git-env.js +121 -0
  135. package/src/backend/services/git-identity.js +84 -0
  136. package/src/backend/services/git-refs.js +386 -0
  137. package/src/backend/services/git-safety.js +58 -0
  138. package/src/backend/services/grant-guard.js +67 -0
  139. package/src/backend/services/html-view-policy.js +135 -0
  140. package/src/backend/services/human-decision.js +55 -0
  141. package/src/backend/services/importers.js +159 -0
  142. package/src/backend/services/intent-service.js +105 -0
  143. package/src/backend/services/ipc-dispatcher.js +164 -0
  144. package/src/backend/services/item-git-state.js +208 -0
  145. package/src/backend/services/line-changes.js +232 -0
  146. package/src/backend/services/line-history.js +174 -0
  147. package/src/backend/services/local-api-changes.js +40 -0
  148. package/src/backend/services/logger.js +217 -0
  149. package/src/backend/services/material-footprints.js +203 -0
  150. package/src/backend/services/material-place.js +82 -0
  151. package/src/backend/services/material-reader/child.js +4 -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/read.js +430 -0
  156. package/src/backend/services/material-reader/reader-host.js +202 -0
  157. package/src/backend/services/material-signals.js +141 -0
  158. package/src/backend/services/mcp-capabilities.js +390 -0
  159. package/src/backend/services/mdns-service.js +304 -0
  160. package/src/backend/services/mobile-api-server.js +281 -0
  161. package/src/backend/services/mobile-approvals.js +306 -0
  162. package/src/backend/services/mobile-awareness.js +180 -0
  163. package/src/backend/services/mobile-breakpoints.js +115 -0
  164. package/src/backend/services/mobile-budget.js +98 -0
  165. package/src/backend/services/mobile-freeze.js +106 -0
  166. package/src/backend/services/mobile-proposals.js +100 -0
  167. package/src/backend/services/mobile-rpc-service.js +1289 -0
  168. package/src/backend/services/mobile-workstreams.js +160 -0
  169. package/src/backend/services/monorepo-detector.js +131 -0
  170. package/src/backend/services/other-work.js +45 -0
  171. package/src/backend/services/pack-seal.js +129 -0
  172. package/src/backend/services/paired-device-service.js +192 -0
  173. package/src/backend/services/pairing-server.js +323 -0
  174. package/src/backend/services/pairing-service.js +200 -0
  175. package/src/backend/services/pantry-resolution-service.js +166 -0
  176. package/src/backend/services/parsers/base.js +124 -0
  177. package/src/backend/services/parsers/csharp.js +224 -0
  178. package/src/backend/services/parsers/go.js +180 -0
  179. package/src/backend/services/parsers/index.js +101 -0
  180. package/src/backend/services/parsers/java.js +103 -0
  181. package/src/backend/services/parsers/kotlin.js +252 -0
  182. package/src/backend/services/parsers/php.js +113 -0
  183. package/src/backend/services/parsers/python.js +189 -0
  184. package/src/backend/services/parsers/ruby.js +212 -0
  185. package/src/backend/services/parsers/rust.js +97 -0
  186. package/src/backend/services/parsers/swift.js +221 -0
  187. package/src/backend/services/parsers/typescript.js +235 -0
  188. package/src/backend/services/pattern-scan.js +65 -0
  189. package/src/backend/services/patterns.js +281 -0
  190. package/src/backend/services/peer-audit-service.js +123 -0
  191. package/src/backend/services/peer-auth.js +153 -0
  192. package/src/backend/services/peer-capabilities.js +209 -0
  193. package/src/backend/services/peer-connection-service.js +450 -0
  194. package/src/backend/services/peer-grants.js +33 -0
  195. package/src/backend/services/persistence.js +116 -0
  196. package/src/backend/services/personal-sync-service.js +232 -0
  197. package/src/backend/services/pipeline-approvals.js +72 -0
  198. package/src/backend/services/pipeline.js +232 -0
  199. package/src/backend/services/plan-arrivals.js +68 -0
  200. package/src/backend/services/plan-changes-service.js +273 -0
  201. package/src/backend/services/plan-conflict-service.js +288 -0
  202. package/src/backend/services/plan-dependencies.js +91 -0
  203. package/src/backend/services/plan-doc-guard.js +90 -0
  204. package/src/backend/services/plan-documents-service.js +275 -0
  205. package/src/backend/services/plan-event-service.js +154 -0
  206. package/src/backend/services/plan-file-refs.js +106 -0
  207. package/src/backend/services/plan-file-service.js +1564 -0
  208. package/src/backend/services/plan-history-service.js +156 -0
  209. package/src/backend/services/plan-import-service.js +261 -0
  210. package/src/backend/services/plan-item-service.js +1223 -0
  211. package/src/backend/services/plan-migrate-service.js +395 -0
  212. package/src/backend/services/plan-overlay-service.js +173 -0
  213. package/src/backend/services/plan-phases-service.js +182 -0
  214. package/src/backend/services/plan-progress-service.js +134 -0
  215. package/src/backend/services/plan-review-service.js +262 -0
  216. package/src/backend/services/plan-service.js +682 -0
  217. package/src/backend/services/plan-status.js +113 -0
  218. package/src/backend/services/plan-template-publish-service.js +217 -0
  219. package/src/backend/services/plan-templates-service.js +242 -0
  220. package/src/backend/services/plan-templates.js +1164 -0
  221. package/src/backend/services/planned-overlap-actions.js +200 -0
  222. package/src/backend/services/plans-home.js +224 -0
  223. package/src/backend/services/play-forward.js +256 -0
  224. package/src/backend/services/playback-service.js +117 -0
  225. package/src/backend/services/power-service.js +167 -0
  226. package/src/backend/services/power-signals.js +81 -0
  227. package/src/backend/services/pr-draft-service.js +142 -0
  228. package/src/backend/services/presence-service.js +122 -0
  229. package/src/backend/services/pricing.js +60 -0
  230. package/src/backend/services/project-config-service.js +474 -0
  231. package/src/backend/services/project-scanner.js +184 -0
  232. package/src/backend/services/projection-service.js +69 -0
  233. package/src/backend/services/push-notification-service.js +288 -0
  234. package/src/backend/services/recent-projects-service.js +204 -0
  235. package/src/backend/services/record-chain.js +162 -0
  236. package/src/backend/services/recurrence-rule.js +63 -0
  237. package/src/backend/services/recurring-agent.js +89 -0
  238. package/src/backend/services/recurring-scheduler.js +77 -0
  239. package/src/backend/services/recurring-service.js +276 -0
  240. package/src/backend/services/reference-service.js +169 -0
  241. package/src/backend/services/release-public-key.js +30 -0
  242. package/src/backend/services/release-signature.js +64 -0
  243. package/src/backend/services/remote-audio-service.js +224 -0
  244. package/src/backend/services/remote-interaction-service.js +275 -0
  245. package/src/backend/services/remote-terminal-service.js +324 -0
  246. package/src/backend/services/rendition/child/main.js +76 -0
  247. package/src/backend/services/rendition/engine-host.js +249 -0
  248. package/src/backend/services/rendition/engine-lock.js +39 -0
  249. package/src/backend/services/rendition/engine-lock.json +14 -0
  250. package/src/backend/services/rendition/engine-manifest.js +97 -0
  251. package/src/backend/services/rendition/network-proof.js +73 -0
  252. package/src/backend/services/rendition/rendition-service.js +175 -0
  253. package/src/backend/services/replay-frames.js +387 -0
  254. package/src/backend/services/replay-state.js +201 -0
  255. package/src/backend/services/resolvers/base.js +108 -0
  256. package/src/backend/services/resolvers/csharp.js +109 -0
  257. package/src/backend/services/resolvers/go.js +105 -0
  258. package/src/backend/services/resolvers/index.js +60 -0
  259. package/src/backend/services/resolvers/java.js +63 -0
  260. package/src/backend/services/resolvers/kotlin.js +109 -0
  261. package/src/backend/services/resolvers/php.js +89 -0
  262. package/src/backend/services/resolvers/python.js +154 -0
  263. package/src/backend/services/resolvers/ruby.js +103 -0
  264. package/src/backend/services/resolvers/rust.js +77 -0
  265. package/src/backend/services/resolvers/swift.js +98 -0
  266. package/src/backend/services/resolvers/typescript.js +71 -0
  267. package/src/backend/services/retention.js +54 -0
  268. package/src/backend/services/review-architecture.js +236 -0
  269. package/src/backend/services/review-attest.js +68 -0
  270. package/src/backend/services/review-bundle.js +226 -0
  271. package/src/backend/services/review-graduation.js +93 -0
  272. package/src/backend/services/review-host/bitbucket.js +79 -0
  273. package/src/backend/services/review-host/detect.js +80 -0
  274. package/src/backend/services/review-host/github.js +97 -0
  275. package/src/backend/services/review-host/gitlab.js +77 -0
  276. package/src/backend/services/review-host/host-state.js +103 -0
  277. package/src/backend/services/review-host/http.js +58 -0
  278. package/src/backend/services/review-host/switch.js +120 -0
  279. package/src/backend/services/review-marks.js +72 -0
  280. package/src/backend/services/review-notes.js +169 -0
  281. package/src/backend/services/review-other-work.js +90 -0
  282. package/src/backend/services/review-queue-service.js +147 -0
  283. package/src/backend/services/review-risk.js +127 -0
  284. package/src/backend/services/review-task.js +121 -0
  285. package/src/backend/services/rule-approvals.js +268 -0
  286. package/src/backend/services/rule-baseline.js +134 -0
  287. package/src/backend/services/rule-changes.js +162 -0
  288. package/src/backend/services/rule-preview.js +47 -0
  289. package/src/backend/services/rule-proposals.js +104 -0
  290. package/src/backend/services/rule-scope.js +76 -0
  291. package/src/backend/services/rulebook.js +286 -0
  292. package/src/backend/services/rules-at.js +56 -0
  293. package/src/backend/services/rules-overview.js +88 -0
  294. package/src/backend/services/schema-reconciler.js +250 -0
  295. package/src/backend/services/secret-store.js +119 -0
  296. package/src/backend/services/section-workstreams.js +95 -0
  297. package/src/backend/services/self-write-tracker.js +75 -0
  298. package/src/backend/services/sensor-bridge-service.js +285 -0
  299. package/src/backend/services/session-service.js +192 -0
  300. package/src/backend/services/settings-service.js +324 -0
  301. package/src/backend/services/signal-breakpoints.js +172 -0
  302. package/src/backend/services/signed-approval-record.js +86 -0
  303. package/src/backend/services/signed-approvals.js +244 -0
  304. package/src/backend/services/signoff-pack.js +328 -0
  305. package/src/backend/services/signoff-rows.js +114 -0
  306. package/src/backend/services/skill-arrival-service.js +138 -0
  307. package/src/backend/services/skill-model.js +193 -0
  308. package/src/backend/services/skill-use-service.js +140 -0
  309. package/src/backend/services/skills-service.js +150 -0
  310. package/src/backend/services/snapshot-compare-service.js +397 -0
  311. package/src/backend/services/source-control.js +189 -0
  312. package/src/backend/services/spec-links-service.js +123 -0
  313. package/src/backend/services/spec-proposal-withdraw.js +50 -0
  314. package/src/backend/services/spec-proposals-service.js +470 -0
  315. package/src/backend/services/sql/embedded.js +95 -0
  316. package/src/backend/services/sql/index.js +63 -0
  317. package/src/backend/services/sql/refs.js +357 -0
  318. package/src/backend/services/sql/schema.js +312 -0
  319. package/src/backend/services/sql/tokenizer.js +195 -0
  320. package/src/backend/services/stack-overlaps.js +117 -0
  321. package/src/backend/services/stack-service.js +225 -0
  322. package/src/backend/services/state-sync-service.js +384 -0
  323. package/src/backend/services/stuck-sensor-service.js +200 -0
  324. package/src/backend/services/system-discovery.js +481 -0
  325. package/src/backend/services/system-docs-service.js +701 -0
  326. package/src/backend/services/task-attachments-service.js +340 -0
  327. package/src/backend/services/task-grounding.js +60 -0
  328. package/src/backend/services/task-records/check-run-record.js +146 -0
  329. package/src/backend/services/task-records/check-runs.js +115 -0
  330. package/src/backend/services/task-records/heads.js +88 -0
  331. package/src/backend/services/task-records/material-reads.js +225 -0
  332. package/src/backend/services/task-records/read-record.js +100 -0
  333. package/src/backend/services/task-records/record.js +173 -0
  334. package/src/backend/services/task-records/run-record.js +136 -0
  335. package/src/backend/services/task-records/shared-state.js +548 -0
  336. package/src/backend/services/task-records/signing.js +140 -0
  337. package/src/backend/services/task-records/split-signals.js +52 -0
  338. package/src/backend/services/task-records/test-runs.js +164 -0
  339. package/src/backend/services/task-records/trust.js +243 -0
  340. package/src/backend/services/task-rules.js +81 -0
  341. package/src/backend/services/task-workstreams.js +90 -0
  342. package/src/backend/services/terminal-history-service.js +266 -0
  343. package/src/backend/services/terminal-service.js +267 -0
  344. package/src/backend/services/test-clock.js +53 -0
  345. package/src/backend/services/tests/grounding.js +266 -0
  346. package/src/backend/services/tests/junit.js +104 -0
  347. package/src/backend/services/tests/teammate-runs.js +134 -0
  348. package/src/backend/services/tests/test-results.js +234 -0
  349. package/src/backend/services/tree-watcher.js +204 -0
  350. package/src/backend/services/trellis-service.js +204 -0
  351. package/src/backend/services/trusted-roots.js +186 -0
  352. package/src/backend/services/update-download-service.js +342 -0
  353. package/src/backend/services/update-service.js +266 -0
  354. package/src/backend/services/watch-ignore.js +76 -0
  355. package/src/backend/services/webhook-egress.js +206 -0
  356. package/src/backend/services/webrtc-service.js +413 -0
  357. package/src/backend/services/work-changes.js +59 -0
  358. package/src/backend/services/workstream-binding.js +82 -0
  359. package/src/backend/services/workstream-commits.js +116 -0
  360. package/src/backend/services/workstream-imports.js +177 -0
  361. package/src/backend/services/workstream-service.js +335 -0
  362. package/src/backend/services/workstream-symbols.js +223 -0
  363. package/src/backend/services/workstream-watch-service.js +391 -0
  364. package/src/backend/services/worktree-service.js +235 -0
  365. package/src/cli/agent.js +100 -0
  366. package/src/cli/args.js +201 -0
  367. package/src/cli/conformity.js +106 -0
  368. package/src/cli/desktop.js +91 -0
  369. package/src/cli/main.js +409 -0
  370. package/src/cli/pipeline.js +109 -0
  371. package/src/cli/plan-verbs.js +259 -0
  372. package/src/cli/review-adapters.js +218 -0
  373. package/src/cli/review-output.js +93 -0
  374. package/src/cli/review-post.js +89 -0
  375. package/src/cli/review-sink.js +183 -0
  376. package/src/cli/review-skill.js +44 -0
  377. package/src/cli/review-verify.js +104 -0
  378. package/src/cli/review.js +386 -0
  379. package/src/cli/sarif.js +148 -0
  380. package/src/cli/verbs.js +359 -0
  381. package/src/shared/build-info.js +39 -0
  382. package/src/shared/lib/agent-review.js +199 -0
  383. package/src/shared/lib/agent-turns.js +140 -0
  384. package/src/shared/lib/awareness-digest.js +120 -0
  385. package/src/shared/lib/branch-name.js +45 -0
  386. package/src/shared/lib/breakpoint-words.js +118 -0
  387. package/src/shared/lib/budget-words.js +56 -0
  388. package/src/shared/lib/burst.js +69 -0
  389. package/src/shared/lib/call-entry.js +105 -0
  390. package/src/shared/lib/check-compare.js +42 -0
  391. package/src/shared/lib/check-words.js +216 -0
  392. package/src/shared/lib/csv.js +62 -0
  393. package/src/shared/lib/folder-entry.js +87 -0
  394. package/src/shared/lib/freeze-words.js +60 -0
  395. package/src/shared/lib/fuzzy.js +84 -0
  396. package/src/shared/lib/git-state-words.js +80 -0
  397. package/src/shared/lib/grep-entry.js +86 -0
  398. package/src/shared/lib/grounding-line.js +61 -0
  399. package/src/shared/lib/import-line.js +71 -0
  400. package/src/shared/lib/item-status.js +249 -0
  401. package/src/shared/lib/line-changes.js +53 -0
  402. package/src/shared/lib/locator.js +71 -0
  403. package/src/shared/lib/matcher.js +120 -0
  404. package/src/shared/lib/merge-order.js +65 -0
  405. package/src/shared/lib/open-findings.js +68 -0
  406. package/src/shared/lib/other-work.js +108 -0
  407. package/src/shared/lib/package-entry.js +142 -0
  408. package/src/shared/lib/plan-vocab.js +40 -0
  409. package/src/shared/lib/pptx-xml.js +86 -0
  410. package/src/shared/lib/proposal-words.js +61 -0
  411. package/src/shared/lib/recurrence.js +183 -0
  412. package/src/shared/lib/references.js +72 -0
  413. package/src/shared/lib/rule-pattern.js +56 -0
  414. package/src/shared/lib/sdp-fingerprint.js +115 -0
  415. package/src/shared/lib/sdp-minimal.js +123 -0
  416. package/src/shared/lib/secret-paths.js +34 -0
  417. package/src/shared/lib/signal-words.js +172 -0
  418. package/src/shared/lib/signoff.js +56 -0
  419. package/src/shared/lib/skills-note.js +60 -0
  420. package/src/shared/lib/spec-sections.js +78 -0
  421. package/src/shared/lib/symbol-entry.js +60 -0
  422. package/src/shared/lib/tool-phrasing.js +338 -0
  423. package/src/shared/lib/turn-gap.js +27 -0
  424. package/src/shared/lib/workstream-words.js +38 -0
  425. package/src/shared/lib/xlsx-xml.js +144 -0
  426. package/src/shared/lib/zip-reader.js +99 -0
  427. package/src/shared/types/agent.js +27 -0
  428. package/src/shared/types/architecture-rules.js +30 -0
  429. package/src/shared/types/ast.js +15 -0
  430. package/src/shared/types/breakpoint.js +33 -0
  431. package/src/shared/types/channel.js +41 -0
  432. package/src/shared/types/criteria.js +15 -0
  433. package/src/shared/types/graph.js +15 -0
  434. package/src/shared/types/index.js +53 -0
  435. package/src/shared/types/peer.js +36 -0
  436. package/src/shared/types/pipeline.js +15 -0
  437. package/src/shared/types/plan.js +15 -0
  438. package/src/shared/types/play-forward.js +15 -0
  439. package/src/shared/types/power.js +15 -0
  440. package/src/shared/types/presence.js +15 -0
  441. package/src/shared/types/project-config.js +35 -0
  442. package/src/shared/types/project.js +15 -0
  443. package/src/shared/types/record.js +15 -0
  444. package/src/shared/types/recurring.js +15 -0
  445. package/src/shared/types/review.js +15 -0
  446. package/src/shared/types/settings.js +114 -0
  447. package/src/shared/types/stack.js +15 -0
  448. package/src/shared/types/system-doc.js +15 -0
  449. package/src/shared/types/system.js +15 -0
@@ -0,0 +1,42 @@
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 key2 of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key2) && key2 !== except)
13
+ __defProp(to, key2, { get: () => from[key2], enumerable: !(desc = __getOwnPropDesc(from, key2)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var check_compare_exports = {};
19
+ __export(check_compare_exports, {
20
+ compareRuns: () => compareRuns
21
+ });
22
+ module.exports = __toCommonJS(check_compare_exports);
23
+ const key = (f) => `${f.rule}\0${f.path}\0${f.imports}`;
24
+ function compareRuns(a, b) {
25
+ const [before, after] = a.at <= b.at ? [a, b] : [b, a];
26
+ const was = new Map(before.findings.map((f) => [key(f), f]));
27
+ const now = new Map(after.findings.map((f) => [key(f), f]));
28
+ const added = after.findings.filter((f) => !was.has(key(f)));
29
+ const fixed = before.findings.filter((f) => !now.has(key(f)));
30
+ const unchanged = after.findings.filter((f) => was.has(key(f)));
31
+ const ruleLine = (s) => / now imports .*, which the rule “/.test(s);
32
+ const saysBefore = new Set(before.says.filter((s) => !ruleLine(s)));
33
+ const saysAfter = new Set(after.says.filter((s) => !ruleLine(s)));
34
+ const saysAdded = [...saysAfter].filter((s) => !saysBefore.has(s));
35
+ const saysGone = [...saysBefore].filter((s) => !saysAfter.has(s));
36
+ const words = [`${added.length + saysAdded.length} new`, `${fixed.length + saysGone.length} fixed`, `${unchanged.length} unchanged`].join(" \xB7 ");
37
+ return { added, fixed, unchanged, saysAdded, saysGone, words };
38
+ }
39
+ // Annotate the CommonJS export names for ESM import in node:
40
+ 0 && (module.exports = {
41
+ compareRuns
42
+ });
@@ -0,0 +1,216 @@
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 check_words_exports = {};
19
+ __export(check_words_exports, {
20
+ exitWords: () => exitWords,
21
+ fails: () => fails,
22
+ findingLine: () => findingLine,
23
+ findingNext: () => findingNext,
24
+ findingTitle: () => findingTitle,
25
+ headline: () => headline,
26
+ otherFindings: () => otherFindings,
27
+ otherNotes: () => otherNotes,
28
+ reachWords: () => reachWords,
29
+ renderMarkdown: () => renderMarkdown,
30
+ renderText: () => renderText,
31
+ ruleFix: () => ruleFix,
32
+ ruleLine: () => ruleLine,
33
+ rulebookLines: () => rulebookLines,
34
+ suiteCounts: () => suiteCounts,
35
+ suiteGroups: () => suiteGroups,
36
+ whatWords: () => whatWords
37
+ });
38
+ module.exports = __toCommonJS(check_words_exports);
39
+ var import_grep_entry = require("./grep-entry");
40
+ var import_call_entry = require("./call-entry");
41
+ const plural = (n, one, many = `${one}s`) => `${n} ${n === 1 ? one : many}`;
42
+ function ruleFix(rule) {
43
+ if ((rule.kind === "package" || rule.kind === "symbol" || rule.kind === "calls") && rule.only?.length) return `use ${rule.only.join(" or ")} instead`;
44
+ if ((rule.kind === void 0 || rule.kind === "imports" || rule.kind === "package") && rule.except.length) return `import ${rule.except.join(" or ")} instead`;
45
+ return null;
46
+ }
47
+ function reachWords(target) {
48
+ if ((0, import_grep_entry.isGrepEntry)(target)) return (0, import_grep_entry.grepWords)(target);
49
+ if (target.startsWith("http:")) return `calls ${target.slice(5)}`;
50
+ if (target.startsWith("sql:")) return `uses the table ${target.slice(4)}`;
51
+ if (target.startsWith("folder:")) return target.slice(7);
52
+ if (target.startsWith("exec:")) return `runs ${target.slice(5)}`;
53
+ if (target.startsWith("env:")) return `reads the environment variable ${target.slice(4)}`;
54
+ if ((0, import_call_entry.isOwnKind)(target)) return `reaches ${target}`;
55
+ return `imports ${target}`;
56
+ }
57
+ function findingLine(r) {
58
+ return `${r.path} now ${reachWords(r.imports)}, which the rule \u201C${r.words}\u201D forbids${r.because ? `: ${r.because}` : ""}`;
59
+ }
60
+ function findingTitle(r) {
61
+ return `${r.path}${r.line ? `:${r.line}` : ""} ${reachWords(r.imports)}`;
62
+ }
63
+ function findingNext(r) {
64
+ return r.fix || r.because || null;
65
+ }
66
+ function ruleLine(words, r) {
67
+ return `${words}${r?.fix && r.because ? `: ${r.because}` : ""}`;
68
+ }
69
+ function fails(r, strict = false) {
70
+ return r.strength === "block" || strict;
71
+ }
72
+ const GLYPH = { fail: "\u2717", warn: "\u26A0", hold: "\u2713" };
73
+ function suiteGroups(c) {
74
+ const failing = new Set(c.says);
75
+ const groups = /* @__PURE__ */ new Map();
76
+ const group = (suite) => {
77
+ let g = groups.get(suite);
78
+ if (!g) groups.set(suite, g = { suite, blocks: 0, warns: 0, holds: 0, rules: [] });
79
+ return g;
80
+ };
81
+ for (const r of c.rules) {
82
+ const g = group(r.suite ?? "architecture");
83
+ let entry = g.rules.find((x) => x.rule === r.rule);
84
+ if (!entry) {
85
+ entry = { rule: r.rule, words: r.words, strength: r.strength, failing: failing.has(`${GLYPH.fail} ${findingLine(r)}`), findings: [] };
86
+ g.rules.push(entry);
87
+ if (entry.failing) g.blocks += 1;
88
+ else g.warns += 1;
89
+ }
90
+ entry.findings.push(r);
91
+ }
92
+ for (const k of c.checked ?? []) {
93
+ if (k.strength === "guide") continue;
94
+ const g = group(k.suite);
95
+ if (!g.rules.some((x) => x.rule === k.rule)) g.holds += 1;
96
+ }
97
+ for (const g of groups.values()) {
98
+ g.rules.sort((a, b) => Number(b.failing) - Number(a.failing) || a.rule.localeCompare(b.rule));
99
+ for (const r of g.rules) r.findings.sort((a, b) => a.path.localeCompare(b.path) || a.imports.localeCompare(b.imports));
100
+ }
101
+ return [...groups.values()].sort((a, b) => b.blocks + b.warns - (a.blocks + a.warns) || a.suite.localeCompare(b.suite));
102
+ }
103
+ function suiteCounts(g) {
104
+ return [
105
+ g.blocks ? `${GLYPH.fail} ${g.blocks} ${g.blocks === 1 ? "blocks" : "block"}` : null,
106
+ g.warns ? `${GLYPH.warn} ${g.warns} ${g.warns === 1 ? "warns" : "warn"}` : null,
107
+ g.holds ? `${GLYPH.hold} ${plural(g.holds, "rule")} ${g.holds === 1 ? "holds" : "hold"}` : null
108
+ ].filter(Boolean).join(" \xB7 ");
109
+ }
110
+ function otherFindings(c) {
111
+ const mine = /* @__PURE__ */ new Set([
112
+ ...c.rules.map((r) => `${GLYPH.fail} ${findingLine(r)}`),
113
+ ...c.rulebook.map((b) => b.words)
114
+ ]);
115
+ return c.says.filter((s) => !mine.has(s));
116
+ }
117
+ function otherNotes(c) {
118
+ const mine = new Set(c.rules.map((r) => `${GLYPH.warn} ${findingLine(r)} (the rule warns; it does not fail the check)`));
119
+ const rulebook = new Set(c.rulebook.map((b) => b.words));
120
+ return c.notes.filter((n) => !mine.has(n) && !rulebook.has(n));
121
+ }
122
+ function rulebookLines(c) {
123
+ return c.rulebook.map((b) => b.words);
124
+ }
125
+ function whatWords(c) {
126
+ return `${plural(c.files, "changed file")}${c.base ? ` since ${c.base}` : ""}`;
127
+ }
128
+ function headline(c) {
129
+ const what = whatWords(c);
130
+ if (c.scope) return c.ok ? `Conforms to ${c.scope}: ${what}. They add no import those rules forbid, and loosen none of them.` : `Does not conform to ${c.scope} (${what}):`;
131
+ return c.ok ? `Conforms: ${what}. No breakpoint holds them, none of their tests fail or are older than the code, no done task fails its checks, no doc that describes them is stale, they add no import an architecture rule forbids, and they loosen no rule.` : `Does not conform (${what}):`;
132
+ }
133
+ function exitWords(c) {
134
+ if (c.ok) return "Nothing blocks this change (exit 0).";
135
+ return `${plural(c.says.length, "finding")} ${c.says.length === 1 ? "blocks" : "block"} this change (exit 3).`;
136
+ }
137
+ const ANSI = { [GLYPH.fail]: "31", [GLYPH.warn]: "33", [GLYPH.hold]: "32", "\u25A0": "35" };
138
+ function paint(line, color, bold = "") {
139
+ if (!color) return line;
140
+ let out = line.replace(/[✗⚠✓■]/g, (g) => `\x1B[${ANSI[g]}m${g}\x1B[0m`);
141
+ if (bold && out.startsWith(bold)) out = `\x1B[1m${bold}\x1B[0m${out.slice(bold.length)}`;
142
+ return out;
143
+ }
144
+ function renderText(c, opts = {}) {
145
+ const color = opts.color === true;
146
+ const lines = [headline(c)];
147
+ const groups = suiteGroups(c);
148
+ for (const g of groups) {
149
+ lines.push("", paint(`${g.suite} ${suiteCounts(g)}`, color, g.suite));
150
+ for (const r of g.rules) {
151
+ if (r.findings.length === 0) continue;
152
+ const glyph = r.failing ? GLYPH.fail : GLYPH.warn;
153
+ lines.push("", paint(` ${glyph} ${r.rule} ${ruleLine(r.words, r.findings[0])}`, color));
154
+ for (const f of r.findings) {
155
+ lines.push(` ${findingTitle(f)}${f.text ? ` ${f.text.trim()}` : ""}`);
156
+ const next = findingNext(f);
157
+ if (next) lines.push(` \u2192 ${next}`);
158
+ }
159
+ }
160
+ }
161
+ const rulebook = rulebookLines(c);
162
+ if (rulebook.length) lines.push("", "rulebook", ...rulebook.map((l) => paint(` ${l}`, color)));
163
+ const other = otherFindings(c);
164
+ if (other.length) lines.push("", "also", ...other.map((l) => paint(` ${l}`, color)));
165
+ const notes = otherNotes(c);
166
+ if (notes.length) lines.push("", "notes", ...notes.map((l) => paint(` ${l}`, color)));
167
+ if (c.rulesNote) lines.push("", c.rulesNote);
168
+ lines.push("", exitWords(c));
169
+ return lines.join("\n");
170
+ }
171
+ const code = (s) => `\`${s.replace(/`/g, "\u02CB")}\``;
172
+ function renderMarkdown(c) {
173
+ const lines = [
174
+ `### CodeTrellis check: ${c.ok ? "conforms" : "does not conform"}${c.scope ? ` (${c.scope})` : ""}`,
175
+ "",
176
+ `${whatWords(c)} \xB7 ${exitWords(c)}`
177
+ ];
178
+ for (const g of suiteGroups(c)) {
179
+ lines.push("", `**${g.suite}** \xB7 ${suiteCounts(g)}`);
180
+ for (const r of g.rules) {
181
+ for (const f of r.findings) {
182
+ lines.push("", `- ${r.failing ? GLYPH.fail : GLYPH.warn} **${code(findingTitle(f))}** \xB7 ${code(r.rule)} (${r.strength}) `, ` ${ruleLine(r.words, f)} `);
183
+ const next = findingNext(f);
184
+ if (next) lines.push(` \u2192 ${next}`);
185
+ }
186
+ }
187
+ }
188
+ const section = (title, items) => {
189
+ if (items.length) lines.push("", `**${title}**`, "", ...items.map((l) => `- ${l}`));
190
+ };
191
+ section("rulebook", rulebookLines(c));
192
+ section("also", otherFindings(c));
193
+ section("notes", otherNotes(c));
194
+ if (c.rulesNote) lines.push("", `_${c.rulesNote}_`);
195
+ return lines.join("\n");
196
+ }
197
+ // Annotate the CommonJS export names for ESM import in node:
198
+ 0 && (module.exports = {
199
+ exitWords,
200
+ fails,
201
+ findingLine,
202
+ findingNext,
203
+ findingTitle,
204
+ headline,
205
+ otherFindings,
206
+ otherNotes,
207
+ reachWords,
208
+ renderMarkdown,
209
+ renderText,
210
+ ruleFix,
211
+ ruleLine,
212
+ rulebookLines,
213
+ suiteCounts,
214
+ suiteGroups,
215
+ whatWords
216
+ });
@@ -0,0 +1,62 @@
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 csv_exports = {};
19
+ __export(csv_exports, {
20
+ csvShape: () => csvShape,
21
+ parseCsv: () => parseCsv
22
+ });
23
+ module.exports = __toCommonJS(csv_exports);
24
+ function parseCsv(text) {
25
+ const rows = [];
26
+ let row = [];
27
+ let field = "";
28
+ let quoted = false;
29
+ for (let i = 0; i < text.length; i++) {
30
+ const ch = text[i];
31
+ if (quoted) {
32
+ if (ch === '"' && text[i + 1] === '"') {
33
+ field += '"';
34
+ i++;
35
+ } else if (ch === '"') quoted = false;
36
+ else field += ch;
37
+ } else if (ch === '"') quoted = true;
38
+ else if (ch === ",") {
39
+ row.push(field);
40
+ field = "";
41
+ } else if (ch === "\n" || ch === "\r") {
42
+ if (ch === "\r" && text[i + 1] === "\n") i++;
43
+ row.push(field);
44
+ rows.push(row);
45
+ row = [];
46
+ field = "";
47
+ } else field += ch;
48
+ }
49
+ if (field !== "" || row.length) {
50
+ row.push(field);
51
+ rows.push(row);
52
+ }
53
+ return rows;
54
+ }
55
+ function csvShape(rows) {
56
+ return { rows: rows.length, cols: Math.max(0, ...rows.map((r) => r.length)) };
57
+ }
58
+ // Annotate the CommonJS export names for ESM import in node:
59
+ 0 && (module.exports = {
60
+ csvShape,
61
+ parseCsv
62
+ });
@@ -0,0 +1,87 @@
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 folder_entry_exports = {};
19
+ __export(folder_entry_exports, {
20
+ exportCount: () => exportCount,
21
+ fileFact: () => fileFact,
22
+ folderProblem: () => folderProblem,
23
+ folderWords: () => folderWords,
24
+ isFileFact: () => isFileFact,
25
+ nameMatches: () => nameMatches,
26
+ parseFileFact: () => parseFileFact
27
+ });
28
+ module.exports = __toCommonJS(folder_entry_exports);
29
+ const FACT_RE = /^file:([^:/]+):(\d+|\?)$/;
30
+ const basename = (p) => p.slice(p.lastIndexOf("/") + 1);
31
+ function fileFact(path, exportCount2) {
32
+ return `file:${basename(path)}:${exportCount2 === null ? "?" : exportCount2}`;
33
+ }
34
+ function isFileFact(s) {
35
+ return FACT_RE.test(s);
36
+ }
37
+ function parseFileFact(s) {
38
+ const m = FACT_RE.exec(s);
39
+ return m ? { name: m[1], exports: m[2] === "?" ? null : Number(m[2]) } : null;
40
+ }
41
+ function nameMatches(pattern, name) {
42
+ const re = new RegExp(`^${pattern.split("*").map((p) => p.replace(/[.+?^${}()|[\]\\]/g, "\\$&")).join(".*")}$`);
43
+ return re.test(name);
44
+ }
45
+ const extOf = (name) => {
46
+ const i = name.lastIndexOf(".");
47
+ return i > 0 ? name.slice(i + 1).toLowerCase() : "";
48
+ };
49
+ function folderProblem(terms, fact) {
50
+ const f = parseFileFact(fact);
51
+ if (!f) return null;
52
+ if (terms.kinds?.length && !terms.kinds.includes(extOf(f.name))) {
53
+ return `is a ${extOf(f.name) ? `.${extOf(f.name)}` : "extensionless"} file, not ${terms.kinds.map((k) => `.${k}`).join(" or ")}`;
54
+ }
55
+ if (terms.files?.length && !terms.files.some((p) => nameMatches(p, f.name))) {
56
+ return `is named ${f.name}, not ${terms.files.join(" or ")}`;
57
+ }
58
+ if (terms.exports === "one" && f.exports !== null && f.exports > 1) return `exports ${f.exports} names, not one`;
59
+ return null;
60
+ }
61
+ function folderWords(folder, terms) {
62
+ const parts = [
63
+ terms.kinds?.length ? `are ${terms.kinds.map((k) => `.${k}`).join(" or ")} files` : null,
64
+ terms.files?.length ? `are named ${terms.files.join(" or ")}` : null,
65
+ terms.exports === "one" ? "export one thing each" : null
66
+ ].filter(Boolean);
67
+ if (!parts.length) return `files in ${folder} follow its guide`;
68
+ const said = parts.length === 1 ? parts[0] : `${parts.slice(0, -1).join(", ")} and ${parts[parts.length - 1]}`;
69
+ return `files in ${folder} ${said}`;
70
+ }
71
+ const MARKS_EXPORTS = /* @__PURE__ */ new Set(["typescript", "tsx", "javascript", "jsx"]);
72
+ function exportCount(language, symbols) {
73
+ const top = symbols.filter((s) => !/[.#(]/.test(s.name));
74
+ if (MARKS_EXPORTS.has(language)) return top.filter((s) => s.modifiers.includes("export")).length;
75
+ if (language === "python") return top.filter((s) => !s.name.startsWith("_")).length;
76
+ return null;
77
+ }
78
+ // Annotate the CommonJS export names for ESM import in node:
79
+ 0 && (module.exports = {
80
+ exportCount,
81
+ fileFact,
82
+ folderProblem,
83
+ folderWords,
84
+ isFileFact,
85
+ nameMatches,
86
+ parseFileFact
87
+ });
@@ -0,0 +1,60 @@
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 freeze_words_exports = {};
19
+ __export(freeze_words_exports, {
20
+ describeFreezeChange: () => describeFreezeChange,
21
+ formatUntil: () => formatUntil
22
+ });
23
+ module.exports = __toCommonJS(freeze_words_exports);
24
+ function formatUntil(iso) {
25
+ const t = Date.parse(iso);
26
+ if (Number.isNaN(t)) return iso;
27
+ return `${new Date(t).toISOString().slice(0, 16).replace("T", " ")} UTC`;
28
+ }
29
+ const plans = (n) => `${n} plan${n === 1 ? "" : "s"}`;
30
+ function describeFreezeChange(before, after) {
31
+ const wasActive = Boolean(before?.active);
32
+ const parts = [];
33
+ if (!wasActive && after.active) {
34
+ let s = "froze the project";
35
+ if (after.reason) s += ` ("${after.reason}")`;
36
+ s += after.until ? ` until ${formatUntil(after.until)}` : " with no end";
37
+ parts.push(s);
38
+ } else if (wasActive && !after.active) {
39
+ parts.push("lifted the freeze");
40
+ } else if (after.active) {
41
+ if ((before?.reason ?? null) !== after.reason) {
42
+ parts.push(after.reason ? `changed the reason to "${after.reason}"` : "removed the reason");
43
+ }
44
+ if ((before?.until ?? null) !== after.until) {
45
+ parts.push(after.until ? `moved the end to ${formatUntil(after.until)}` : "removed the end date");
46
+ }
47
+ }
48
+ const had = new Set(before?.allowedPlanUids ?? []);
49
+ const has = new Set(after.allowedPlanUids);
50
+ const added = [...has].filter((u) => !had.has(u)).length;
51
+ const removed = [...had].filter((u) => !has.has(u)).length;
52
+ if (added) parts.push(`exempted ${plans(added)}`);
53
+ if (removed && after.active) parts.push(`removed the exemption for ${plans(removed)}`);
54
+ return parts.join(", ") || "changed the freeze";
55
+ }
56
+ // Annotate the CommonJS export names for ESM import in node:
57
+ 0 && (module.exports = {
58
+ describeFreezeChange,
59
+ formatUntil
60
+ });
@@ -0,0 +1,84 @@
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 fuzzy_exports = {};
19
+ __export(fuzzy_exports, {
20
+ DEFAULT_THRESHOLD: () => DEFAULT_THRESHOLD,
21
+ comparedNames: () => comparedNames,
22
+ fuzzyScore: () => fuzzyScore,
23
+ normaliseName: () => normaliseName,
24
+ scoreWords: () => scoreWords,
25
+ similarity: () => similarity,
26
+ wordsOf: () => wordsOf
27
+ });
28
+ module.exports = __toCommonJS(fuzzy_exports);
29
+ const DEFAULT_THRESHOLD = 0.85;
30
+ const MAX_NAME = 200;
31
+ function normaliseName(s) {
32
+ return s.slice(0, MAX_NAME).replace(/([a-z0-9])([A-Z])/g, "$1 $2").replace(/([A-Z]+)([A-Z][a-z])/g, "$1 $2").split(/[-_./:@\s]+/).filter(Boolean).join(" ").toLowerCase();
33
+ }
34
+ function distance(a, b) {
35
+ const rows = Array.from({ length: a.length + 1 }, (_, i) => [i, ...Array(b.length).fill(0)]);
36
+ for (let j = 1; j <= b.length; j++) rows[0][j] = j;
37
+ for (let i = 1; i <= a.length; i++) {
38
+ for (let j = 1; j <= b.length; j++) {
39
+ const cost = a[i - 1] === b[j - 1] ? 0 : 1;
40
+ rows[i][j] = Math.min(rows[i - 1][j] + 1, rows[i][j - 1] + 1, rows[i - 1][j - 1] + cost);
41
+ if (i > 1 && j > 1 && a[i - 1] === b[j - 2] && a[i - 2] === b[j - 1]) rows[i][j] = Math.min(rows[i][j], rows[i - 2][j - 2] + 1);
42
+ }
43
+ }
44
+ return rows[a.length][b.length];
45
+ }
46
+ function similarity(a, b) {
47
+ const x = normaliseName(a);
48
+ const y = normaliseName(b);
49
+ const longer = Math.max(x.length, y.length);
50
+ return longer === 0 ? 1 : 1 - distance(x, y) / longer;
51
+ }
52
+ const scoreWords = (n) => n.toFixed(2);
53
+ function comparedNames(kind, target, entry) {
54
+ const colon = (s) => s.indexOf(":");
55
+ if (kind === "package" || kind === "calls") {
56
+ const [tk, tr] = [target.slice(0, colon(target)), target.slice(colon(target) + 1)];
57
+ const [ek, er] = [entry.slice(0, colon(entry)), entry.slice(colon(entry) + 1)];
58
+ if (colon(target) < 0 || colon(entry) < 0 || tk !== ek) return null;
59
+ if (kind === "calls" && tk === "http" && !tr.includes("/")) return [tr, er.split("/")[0]];
60
+ return [tr, er];
61
+ }
62
+ if (kind === "symbol") {
63
+ const tn = target.slice(target.lastIndexOf("#") + 1);
64
+ const en = entry.slice(entry.lastIndexOf("#") + 1);
65
+ if (!entry.includes("#") || en === "*") return null;
66
+ return [tn, en];
67
+ }
68
+ return [target, entry];
69
+ }
70
+ function fuzzyScore(kind, target, entry) {
71
+ const pair = comparedNames(kind, target, entry);
72
+ return pair ? similarity(pair[0], pair[1]) : 0;
73
+ }
74
+ const wordsOf = (line) => line.match(/[A-Za-z_$][\w$]*/g) ?? [];
75
+ // Annotate the CommonJS export names for ESM import in node:
76
+ 0 && (module.exports = {
77
+ DEFAULT_THRESHOLD,
78
+ comparedNames,
79
+ fuzzyScore,
80
+ normaliseName,
81
+ scoreWords,
82
+ similarity,
83
+ wordsOf
84
+ });
@@ -0,0 +1,80 @@
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 git_state_words_exports = {};
19
+ __export(git_state_words_exports, {
20
+ gitStateChip: () => gitStateChip,
21
+ gitStateWords: () => gitStateWords,
22
+ shortDate: () => shortDate,
23
+ sourceWords: () => sourceWords
24
+ });
25
+ module.exports = __toCommonJS(git_state_words_exports);
26
+ const HOW = {
27
+ merge: "merge commit",
28
+ "fast-forward": "fast-forward",
29
+ "squash-or-rebase": "squash or rebase",
30
+ "names-key": "a commit names it",
31
+ "pull-request": "pull request"
32
+ };
33
+ const SOURCE = { git: "git", github: "GitHub", gitlab: "GitLab", bitbucket: "Bitbucket" };
34
+ function sourceWords(s) {
35
+ return `from ${SOURCE[s.source]}`;
36
+ }
37
+ const refOf = (r) => r.ref ?? `#${r.number}`;
38
+ function reviewParts(r) {
39
+ const parts = [];
40
+ if (r.checks === "passing") parts.push("checks passing");
41
+ else if (r.checks === "failing") parts.push("checks failing");
42
+ else if (r.checks === "pending") parts.push("checks running");
43
+ if (r.changesRequested) parts.push("changes requested");
44
+ if (r.approvals) parts.push(`${r.approvals} approval${r.approvals === 1 ? "" : "s"}`);
45
+ return parts;
46
+ }
47
+ function shortDate(unixSeconds) {
48
+ return new Date(unixSeconds * 1e3).toLocaleDateString("en-GB", { day: "numeric", month: "short", timeZone: "UTC" });
49
+ }
50
+ function gitStateWords(s) {
51
+ switch (s.state) {
52
+ case "merged": {
53
+ const how = s.how === "pull-request" && s.review ? refOf(s.review) : s.how ? HOW[s.how] : null;
54
+ const parts = [how, s.at ? shortDate(s.at) : null].filter(Boolean);
55
+ return `merged${s.base ? ` into ${s.base}` : ""}${parts.length ? ` (${parts.join(", ")})` : ""}`;
56
+ }
57
+ case "in-review": {
58
+ const parts = s.review ? reviewParts(s.review) : [];
59
+ return `in review${s.review ? ` (${refOf(s.review)})` : ""}${parts.length ? `, ${parts.join(", ")}` : ""}`;
60
+ }
61
+ case "closed":
62
+ return `closed without merging${s.review ? ` (${refOf(s.review)}${s.at ? `, ${shortDate(s.at)}` : ""})` : ""}`;
63
+ case "pushed":
64
+ return `pushed, not merged${s.unpushed ? `; ${s.unpushed} commit${s.unpushed === 1 ? "" : "s"} not pushed yet` : ""}`;
65
+ case "building":
66
+ return `building on ${s.branch}, not pushed`;
67
+ default:
68
+ return `no ${s.branch} branch yet`;
69
+ }
70
+ }
71
+ function gitStateChip(s) {
72
+ return s.state === "none" ? "" : s.state === "in-review" ? "in review" : s.state;
73
+ }
74
+ // Annotate the CommonJS export names for ESM import in node:
75
+ 0 && (module.exports = {
76
+ gitStateChip,
77
+ gitStateWords,
78
+ shortDate,
79
+ sourceWords
80
+ });