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,297 @@
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 channel_event_service_exports = {};
19
+ __export(channel_event_service_exports, {
20
+ _recordSeqForTests: () => _recordSeqForTests,
21
+ _resetSeqForTests: () => _resetSeqForTests,
22
+ eventToManifest: () => eventToManifest,
23
+ getChannelEvent: () => getChannelEvent,
24
+ getChannelEventsSinceSeq: () => getChannelEventsSinceSeq,
25
+ getCurrentSeqHead: () => getCurrentSeqHead,
26
+ listChannelEvents: () => listChannelEvents,
27
+ listThread: () => listThread,
28
+ manifestToEventInput: () => manifestToEventInput,
29
+ postChannelEvent: () => postChannelEvent,
30
+ setChannelEventStatus: () => setChannelEventStatus
31
+ });
32
+ module.exports = __toCommonJS(channel_event_service_exports);
33
+ var import_node_crypto = require("node:crypto");
34
+ var import_database = require("./database");
35
+ var import_persistence = require("./persistence");
36
+ var import_types = require("../../shared/types");
37
+ const PER_PLAN_RING_SIZE = 500;
38
+ let nextSeq = 1;
39
+ const seqRings = /* @__PURE__ */ new Map();
40
+ const firstSeqByPlan = /* @__PURE__ */ new Map();
41
+ function recordSeq(event) {
42
+ const seq = nextSeq++;
43
+ let ring = seqRings.get(event.planUid);
44
+ if (!ring) {
45
+ ring = [];
46
+ seqRings.set(event.planUid, ring);
47
+ firstSeqByPlan.set(event.planUid, seq);
48
+ }
49
+ ring.push({ seq, event });
50
+ if (ring.length > PER_PLAN_RING_SIZE) ring.shift();
51
+ return seq;
52
+ }
53
+ function getChannelEventsSinceSeq(planUid, sinceSeq, limit = 200) {
54
+ const ring = seqRings.get(planUid) ?? [];
55
+ const firstSeq = firstSeqByPlan.get(planUid) ?? null;
56
+ const latestSeq = ring.length > 0 ? ring[ring.length - 1].seq : firstSeq === null ? nextSeq - 1 : firstSeq - 1;
57
+ if (ring.length === 0) {
58
+ return { events: [], latestSeq, gap: false };
59
+ }
60
+ const oldestRingSeq = ring[0].seq;
61
+ const evicted = firstSeq !== null && oldestRingSeq > firstSeq;
62
+ if (evicted && sinceSeq < oldestRingSeq - 1) {
63
+ return { events: [], latestSeq, gap: true };
64
+ }
65
+ const newer = ring.filter((r) => r.seq > sinceSeq).slice(0, limit);
66
+ return { events: newer.map((r) => r.event), latestSeq, gap: false };
67
+ }
68
+ function getCurrentSeqHead() {
69
+ return nextSeq - 1;
70
+ }
71
+ function _recordSeqForTests(event) {
72
+ return recordSeq(event);
73
+ }
74
+ function _resetSeqForTests() {
75
+ nextSeq = 1;
76
+ seqRings.clear();
77
+ firstSeqByPlan.clear();
78
+ }
79
+ function postChannelEvent(input) {
80
+ if (!import_types.CHANNEL_EVENT_TYPES.includes(input.eventType)) {
81
+ throw new Error(`Unknown channel event type: ${input.eventType}`);
82
+ }
83
+ if (input.status && !import_types.CHANNEL_EVENT_STATUSES.includes(input.status)) {
84
+ throw new Error(`Unknown channel event status: ${input.status}`);
85
+ }
86
+ if (!input.payload || typeof input.payload.message !== "string" || !input.payload.message.trim()) {
87
+ throw new Error("Channel event payload must include a non-empty `message`.");
88
+ }
89
+ if (input.respondsTo) {
90
+ const parent = getChannelEvent(input.respondsTo);
91
+ if (!parent) {
92
+ throw new Error(`Cannot respond to unknown channel event: ${input.respondsTo}`);
93
+ }
94
+ if (parent.planUid !== input.planUid) {
95
+ throw new Error("Cannot thread across plans (`respondsTo` is on a different plan).");
96
+ }
97
+ }
98
+ const db = (0, import_database.getDb)();
99
+ const now = input.createdAt ?? Date.now();
100
+ const uid = input.uid ?? (0, import_node_crypto.randomUUID)();
101
+ const status = input.status ?? "open";
102
+ db.run(
103
+ `INSERT INTO channel_events
104
+ (uid, plan_uid, item_uid, event_type, payload, author, author_type, agent_model, responds_to, status, created_at, updated_at)
105
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
106
+ ON CONFLICT(uid) DO UPDATE SET
107
+ payload = excluded.payload,
108
+ status = excluded.status,
109
+ updated_at = excluded.updated_at`,
110
+ [
111
+ uid,
112
+ input.planUid,
113
+ input.itemUid ?? null,
114
+ input.eventType,
115
+ JSON.stringify(input.payload),
116
+ input.author,
117
+ input.authorType,
118
+ input.agentModel ?? null,
119
+ input.respondsTo ?? null,
120
+ status,
121
+ now,
122
+ input.updatedAt ?? now
123
+ ]
124
+ );
125
+ (0, import_persistence.markDirty)();
126
+ const created = getChannelEvent(uid);
127
+ if (!created) throw new Error("Channel event vanished immediately after insert");
128
+ recordSeq(created);
129
+ return created;
130
+ }
131
+ function getChannelEvent(uid) {
132
+ const db = (0, import_database.getDb)();
133
+ const result = db.exec(
134
+ `SELECT uid, plan_uid, item_uid, event_type, payload, author, author_type, agent_model, responds_to, status, created_at, updated_at
135
+ FROM channel_events
136
+ WHERE uid = ?`,
137
+ [uid]
138
+ );
139
+ if (!result[0] || result[0].values.length === 0) return null;
140
+ return rowToEvent(result[0].values[0]);
141
+ }
142
+ function listChannelEvents(planUid, options = {}) {
143
+ const db = (0, import_database.getDb)();
144
+ const params = [planUid];
145
+ let where = `plan_uid = ?`;
146
+ if (options.sinceMs !== void 0) {
147
+ where += ` AND created_at >= ?`;
148
+ params.push(options.sinceMs);
149
+ }
150
+ if (options.itemUid) {
151
+ where += ` AND item_uid = ?`;
152
+ params.push(options.itemUid);
153
+ }
154
+ if (options.eventTypes && options.eventTypes.length > 0) {
155
+ where += ` AND event_type IN (${options.eventTypes.map(() => "?").join(", ")})`;
156
+ for (const t of options.eventTypes) params.push(t);
157
+ }
158
+ if (options.status) {
159
+ const statuses = Array.isArray(options.status) ? options.status : [options.status];
160
+ if (statuses.length > 0) {
161
+ where += ` AND status IN (${statuses.map(() => "?").join(", ")})`;
162
+ for (const s of statuses) params.push(s);
163
+ }
164
+ }
165
+ const limit = options.limit ?? 200;
166
+ const offset = options.offset ?? 0;
167
+ params.push(limit, offset);
168
+ const result = db.exec(
169
+ `SELECT uid, plan_uid, item_uid, event_type, payload, author, author_type, agent_model, responds_to, status, created_at, updated_at
170
+ FROM channel_events
171
+ WHERE ${where}
172
+ ORDER BY created_at DESC
173
+ LIMIT ? OFFSET ?`,
174
+ params
175
+ );
176
+ if (!result[0]) return [];
177
+ return result[0].values.map(rowToEvent);
178
+ }
179
+ function listThread(rootUid) {
180
+ const db = (0, import_database.getDb)();
181
+ const collected = [];
182
+ const queue = [rootUid];
183
+ const seen = /* @__PURE__ */ new Set();
184
+ while (queue.length > 0) {
185
+ const uid = queue.shift();
186
+ if (seen.has(uid)) continue;
187
+ seen.add(uid);
188
+ const ev = getChannelEvent(uid);
189
+ if (ev) collected.push(ev);
190
+ const childRes = db.exec(
191
+ `SELECT uid FROM channel_events WHERE responds_to = ? ORDER BY created_at ASC`,
192
+ [uid]
193
+ );
194
+ if (childRes[0]) {
195
+ for (const row of childRes[0].values) {
196
+ queue.push(row[0]);
197
+ }
198
+ }
199
+ }
200
+ return collected.sort((a, b) => a.createdAt - b.createdAt);
201
+ }
202
+ function setChannelEventStatus(uid, status) {
203
+ if (!import_types.CHANNEL_EVENT_STATUSES.includes(status)) {
204
+ throw new Error(`Unknown channel event status: ${status}`);
205
+ }
206
+ const db = (0, import_database.getDb)();
207
+ const now = Date.now();
208
+ db.run(
209
+ `UPDATE channel_events SET status = ?, updated_at = ? WHERE uid = ?`,
210
+ [status, now, uid]
211
+ );
212
+ (0, import_persistence.markDirty)();
213
+ const updated = getChannelEvent(uid);
214
+ if (!updated) throw new Error(`Channel event not found: ${uid}`);
215
+ return updated;
216
+ }
217
+ function eventToManifest(event) {
218
+ return {
219
+ uid: event.uid,
220
+ itemUid: event.itemUid,
221
+ eventType: event.eventType,
222
+ payload: event.payload,
223
+ author: event.author,
224
+ authorType: event.authorType,
225
+ agentModel: event.agentModel,
226
+ respondsTo: event.respondsTo,
227
+ status: event.status,
228
+ createdAt: new Date(event.createdAt).toISOString(),
229
+ updatedAt: new Date(event.updatedAt).toISOString()
230
+ };
231
+ }
232
+ function manifestToEventInput(planUid, record) {
233
+ return {
234
+ uid: record.uid,
235
+ planUid,
236
+ itemUid: record.itemUid,
237
+ eventType: record.eventType,
238
+ payload: record.payload,
239
+ author: record.author,
240
+ authorType: record.authorType,
241
+ agentModel: record.agentModel,
242
+ respondsTo: record.respondsTo,
243
+ status: record.status,
244
+ createdAt: Date.parse(record.createdAt) || Date.now(),
245
+ updatedAt: Date.parse(record.updatedAt) || Date.now()
246
+ };
247
+ }
248
+ function rowToEvent(row) {
249
+ const [
250
+ uid,
251
+ planUid,
252
+ itemUid,
253
+ eventType,
254
+ payloadJson,
255
+ author,
256
+ authorType,
257
+ agentModel,
258
+ respondsTo,
259
+ status,
260
+ createdAt,
261
+ updatedAt
262
+ ] = row;
263
+ let payload = { message: "" };
264
+ try {
265
+ payload = JSON.parse(payloadJson) ?? { message: "" };
266
+ } catch {
267
+ payload = { message: "[unparseable payload]" };
268
+ }
269
+ return {
270
+ uid: String(uid),
271
+ planUid: String(planUid),
272
+ itemUid: itemUid ? String(itemUid) : null,
273
+ eventType: String(eventType),
274
+ payload,
275
+ author: String(author),
276
+ authorType: String(authorType),
277
+ agentModel: agentModel ? String(agentModel) : null,
278
+ respondsTo: respondsTo ? String(respondsTo) : null,
279
+ status: String(status),
280
+ createdAt: Number(createdAt),
281
+ updatedAt: Number(updatedAt)
282
+ };
283
+ }
284
+ // Annotate the CommonJS export names for ESM import in node:
285
+ 0 && (module.exports = {
286
+ _recordSeqForTests,
287
+ _resetSeqForTests,
288
+ eventToManifest,
289
+ getChannelEvent,
290
+ getChannelEventsSinceSeq,
291
+ getCurrentSeqHead,
292
+ listChannelEvents,
293
+ listThread,
294
+ manifestToEventInput,
295
+ postChannelEvent,
296
+ setChannelEventStatus
297
+ });
@@ -0,0 +1,177 @@
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 check_runs_exports = {};
29
+ __export(check_runs_exports, {
30
+ forgetTeammateCheckRuns: () => forgetTeammateCheckRuns,
31
+ getCheckRun: () => getCheckRun,
32
+ knownCheckRunCounters: () => knownCheckRunCounters,
33
+ listCheckRuns: () => listCheckRuns,
34
+ putTeammateCheckRun: () => putTeammateCheckRun,
35
+ recordCheckRun: () => recordCheckRun,
36
+ runWords: () => runWords,
37
+ setCheckRunListener: () => setCheckRunListener
38
+ });
39
+ module.exports = __toCommonJS(check_runs_exports);
40
+ var import_node_crypto = __toESM(require("node:crypto"));
41
+ var import_database = require("./database");
42
+ var import_persistence = require("./persistence");
43
+ var import_check_run_record = require("./task-records/check-run-record");
44
+ var import_agent_review = require("../../shared/lib/agent-review");
45
+ const KEEP_MINE = 200;
46
+ const parse = (s, fallback) => {
47
+ if (s === null || s === void 0) return fallback;
48
+ try {
49
+ return JSON.parse(String(s)) ?? fallback;
50
+ } catch {
51
+ return fallback;
52
+ }
53
+ };
54
+ let listener = null;
55
+ function setCheckRunListener(fn) {
56
+ listener = fn;
57
+ }
58
+ function recordCheckRun(run, me = { writer: "this-device", name: "you" }) {
59
+ const id = `local-${import_node_crypto.default.randomUUID()}`;
60
+ insert(run.projectRoot, id, true, { ...run, writer: me.writer, name: me.name, counter: 0 }, null);
61
+ (0, import_database.getDb)().run(
62
+ `DELETE FROM rule_check_runs WHERE project_root = ? AND mine = 1 AND id NOT IN (
63
+ SELECT id FROM rule_check_runs WHERE project_root = ? AND mine = 1 ORDER BY at DESC LIMIT ?)`,
64
+ [run.projectRoot, run.projectRoot, KEEP_MINE]
65
+ );
66
+ (0, import_persistence.markDirty)();
67
+ try {
68
+ listener?.(run);
69
+ } catch (err) {
70
+ console.warn("[check-runs] could not share a run:", err);
71
+ }
72
+ return id;
73
+ }
74
+ function insert(projectRoot, id, mine, r, verdict) {
75
+ (0, import_database.getDb)().run(
76
+ `INSERT OR REPLACE INTO rule_check_runs (project_root, id, mine, writer, counter, name, by_author, by_type, ran_in, commit_sha, dirty, base, rulebook, scope, strict, outcome, says, findings, at, verdict, review)
77
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
78
+ [
79
+ projectRoot,
80
+ id,
81
+ mine ? 1 : 0,
82
+ r.writer,
83
+ r.counter,
84
+ r.name,
85
+ r.by.author,
86
+ r.by.authorType,
87
+ r.ranIn,
88
+ r.commit,
89
+ JSON.stringify(r.dirty),
90
+ r.base,
91
+ r.rulebook,
92
+ r.scope,
93
+ r.strict ? 1 : 0,
94
+ JSON.stringify(r.outcome),
95
+ JSON.stringify(r.says),
96
+ JSON.stringify(r.findings),
97
+ r.at,
98
+ verdict ? JSON.stringify(verdict) : null,
99
+ r.review ? JSON.stringify(r.review) : null
100
+ ]
101
+ );
102
+ }
103
+ function putTeammateCheckRun(projectRoot, r, verdict) {
104
+ (0, import_database.getDb)().run("DELETE FROM rule_check_runs WHERE project_root = ? AND mine = 0 AND writer = ? AND counter < ?", [projectRoot, r.writer, r.counter]);
105
+ insert(projectRoot, `${r.writer}-${r.counter}`, false, r, verdict);
106
+ (0, import_persistence.markDirty)();
107
+ }
108
+ function knownCheckRunCounters(projectRoot) {
109
+ const rows = (0, import_database.getDb)().exec("SELECT writer, MAX(counter) FROM rule_check_runs WHERE project_root = ? AND mine = 0 GROUP BY writer", [projectRoot])[0]?.values ?? [];
110
+ return new Map(rows.map((r) => [String(r[0]), Number(r[1])]));
111
+ }
112
+ function forgetTeammateCheckRuns(q) {
113
+ const where = q.projectRoot ? "project_root = ? AND mine = 0" : "writer = ? AND mine = 0";
114
+ const arg = q.projectRoot ?? q.writer ?? "";
115
+ const n = Number((0, import_database.getDb)().exec(`SELECT COUNT(*) FROM rule_check_runs WHERE ${where}`, [arg])[0]?.values[0]?.[0] ?? 0);
116
+ if (n) {
117
+ (0, import_database.getDb)().run(`DELETE FROM rule_check_runs WHERE ${where}`, [arg]);
118
+ (0, import_persistence.markDirty)();
119
+ }
120
+ return n;
121
+ }
122
+ const COLS = "id, mine, writer, counter, name, by_author, by_type, ran_in, commit_sha, dirty, base, rulebook, scope, strict, outcome, says, findings, at, verdict, review";
123
+ function rowToRun(r) {
124
+ const mine = Number(r[1]) === 1;
125
+ const verdict = parse(r[18], {});
126
+ const name = verdict.verified && verdict.who ? verdict.who : String(r[4]);
127
+ const person = r[6] === "human" || r[6] === "unverified" || r[5] === r[4];
128
+ const who = mine ? person ? "you" : `${String(r[5])}` : person ? name : `${String(r[5])} for ${name}`;
129
+ const run = {
130
+ id: String(r[0]),
131
+ mine,
132
+ writer: String(r[2]),
133
+ counter: Number(r[3]),
134
+ who,
135
+ verified: mine || verdict.verified === true,
136
+ why: mine || verdict.verified ? null : verdict.why ?? null,
137
+ ranIn: String(r[7]),
138
+ commit: r[8] ?? null,
139
+ dirty: parse(r[9], []),
140
+ base: r[10] ?? null,
141
+ rulebook: r[11] ?? null,
142
+ scope: r[12] ?? null,
143
+ strict: Number(r[13]) === 1,
144
+ outcome: parse(r[14], { ok: false, files: 0, blocks: 0, warns: 0 }),
145
+ says: parse(r[15], []),
146
+ findings: parse(r[16], []),
147
+ at: Number(r[17]),
148
+ review: (0, import_agent_review.parseAgentReview)(parse(r[19], null))
149
+ };
150
+ return { ...run, words: runWords(run) };
151
+ }
152
+ function runWords(r) {
153
+ const at = r.commit ? ` at ${r.commit.slice(0, 7)}` : "";
154
+ const against = r.base ? `, against ${r.base}` : "";
155
+ const scope = r.scope ? `, ${r.scope}` : "";
156
+ const said = r.review ? `${r.review.agent}'s review${r.review.pass ? ` (${r.review.pass})` : ""}: ${(0, import_agent_review.reviewBlockWords)(r.review, r.outcome.blocks)}` : (0, import_check_run_record.outcomeWords)(r.outcome);
157
+ return `${r.who} in ${r.ranIn}${at}${against}${scope}: ${said}${r.verified ? "" : ` (unverified: ${r.why ?? "not signed"})`}`;
158
+ }
159
+ function listCheckRuns(projectRoot, limit = 50) {
160
+ const rows = (0, import_database.getDb)().exec(`SELECT ${COLS} FROM rule_check_runs WHERE project_root = ? ORDER BY at DESC LIMIT ?`, [projectRoot, Math.max(1, Math.min(limit, 500))])[0]?.values ?? [];
161
+ return rows.map(rowToRun);
162
+ }
163
+ function getCheckRun(projectRoot, id) {
164
+ const r = (0, import_database.getDb)().exec(`SELECT ${COLS} FROM rule_check_runs WHERE project_root = ? AND id = ?`, [projectRoot, id])[0]?.values[0];
165
+ return r ? rowToRun(r) : null;
166
+ }
167
+ // Annotate the CommonJS export names for ESM import in node:
168
+ 0 && (module.exports = {
169
+ forgetTeammateCheckRuns,
170
+ getCheckRun,
171
+ knownCheckRunCounters,
172
+ listCheckRuns,
173
+ putTeammateCheckRun,
174
+ recordCheckRun,
175
+ runWords,
176
+ setCheckRunListener
177
+ });
@@ -0,0 +1,73 @@
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 checkout_identity_exports = {};
29
+ __export(checkout_identity_exports, {
30
+ heldByAnotherCheckout: () => heldByAnotherCheckout,
31
+ sameRepository: () => sameRepository
32
+ });
33
+ module.exports = __toCommonJS(checkout_identity_exports);
34
+ var import_node_child_process = require("node:child_process");
35
+ var import_node_fs = __toESM(require("node:fs"));
36
+ var import_node_path = __toESM(require("node:path"));
37
+ var import_git_identity = require("./git-identity");
38
+ const canonical = (p) => {
39
+ try {
40
+ return import_node_fs.default.realpathSync.native(p);
41
+ } catch {
42
+ return import_node_path.default.resolve(p);
43
+ }
44
+ };
45
+ function commonDir(folder) {
46
+ if (!import_node_fs.default.existsSync(import_node_path.default.join(folder, ".git"))) return null;
47
+ try {
48
+ const out = (0, import_node_child_process.execFileSync)("git", ["rev-parse", "--git-common-dir"], {
49
+ cwd: folder,
50
+ encoding: "utf-8",
51
+ stdio: ["ignore", "pipe", "ignore"]
52
+ }).trim();
53
+ return out ? canonical(import_node_path.default.resolve(folder, out)) : null;
54
+ } catch {
55
+ return null;
56
+ }
57
+ }
58
+ function sameRepository(a, b) {
59
+ const common = commonDir(a);
60
+ if (common && common === commonDir(b)) return true;
61
+ const origin = (0, import_git_identity.getNormalisedOriginUrl)(a);
62
+ return !!origin && origin === (0, import_git_identity.getNormalisedOriginUrl)(b);
63
+ }
64
+ function heldByAnotherCheckout(holder, importing) {
65
+ if (!holder || !import_node_path.default.isAbsolute(holder) || !import_node_fs.default.existsSync(holder)) return false;
66
+ if (canonical(holder) === canonical(importing)) return false;
67
+ return sameRepository(holder, importing);
68
+ }
69
+ // Annotate the CommonJS export names for ESM import in node:
70
+ 0 && (module.exports = {
71
+ heldByAnotherCheckout,
72
+ sameRepository
73
+ });