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,344 @@
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 deviation_service_exports = {};
29
+ __export(deviation_service_exports, {
30
+ DeviationError: () => DeviationError,
31
+ checkFileDeviation: () => checkFileDeviation,
32
+ detectDeviations: () => detectDeviations,
33
+ getDeviations: () => getDeviations,
34
+ planOfDeviation: () => planOfDeviation,
35
+ reconcileDeviations: () => reconcileDeviations,
36
+ resolveDeviation: () => resolveDeviation
37
+ });
38
+ module.exports = __toCommonJS(deviation_service_exports);
39
+ var _lazy___plan_service = __toESM(require("./plan-service"));
40
+ var import_database = require("./database");
41
+ var import_plan_item_service = require("./plan-item-service");
42
+ var import_database2 = require("./database");
43
+ var import_persistence = require("./persistence");
44
+ var import_server = require("../server");
45
+ var import_sensor_bridge_service = require("./sensor-bridge-service");
46
+ function collectExpectations(planUid) {
47
+ const items = (0, import_plan_item_service.listAllItems)(planUid).filter((i) => i.kind === "action");
48
+ const files = /* @__PURE__ */ new Map();
49
+ for (const item of items) {
50
+ for (const fs of item.fileSpecs ?? []) {
51
+ files.set(fs.path, {
52
+ path: fs.path,
53
+ action: fs.action,
54
+ label: item.title,
55
+ status: item.status ?? null
56
+ });
57
+ }
58
+ }
59
+ return { files, items };
60
+ }
61
+ function getResolvedDeviationPaths(db, planUid) {
62
+ const result = db.exec(
63
+ `SELECT file_path FROM deviations
64
+ WHERE plan_uid = ? AND file_path IS NOT NULL AND resolution != 'pending'`,
65
+ [planUid]
66
+ );
67
+ const paths = /* @__PURE__ */ new Set();
68
+ if (result[0]) {
69
+ for (const row of result[0].values) {
70
+ if (row[0]) paths.add(row[0]);
71
+ }
72
+ }
73
+ return paths;
74
+ }
75
+ function getPendingDeviationPaths(db, planUid) {
76
+ const result = db.exec(
77
+ `SELECT file_path FROM deviations
78
+ WHERE plan_uid = ? AND file_path IS NOT NULL AND resolution = 'pending'`,
79
+ [planUid]
80
+ );
81
+ const paths = /* @__PURE__ */ new Set();
82
+ if (result[0]) {
83
+ for (const row of result[0].values) {
84
+ if (row[0]) paths.add(row[0]);
85
+ }
86
+ }
87
+ return paths;
88
+ }
89
+ function detectDeviations(planUid, changedFiles) {
90
+ const db = (0, import_database.getDb)();
91
+ const { files: fileExpectations, items } = collectExpectations(planUid);
92
+ const deviations = [];
93
+ const now = Date.now();
94
+ const resolvedPaths = getResolvedDeviationPaths(db, planUid);
95
+ const pendingPaths = getPendingDeviationPaths(db, planUid);
96
+ const alreadyHandled = /* @__PURE__ */ new Set([...resolvedPaths, ...pendingPaths]);
97
+ for (const [file, exp] of fileExpectations) {
98
+ if (alreadyHandled.has(file)) continue;
99
+ const result = db.exec(
100
+ `SELECT id FROM files WHERE relative_path = ? OR path LIKE ?`,
101
+ [file, `%/${file}`]
102
+ );
103
+ const fileExists = !!result[0]?.values[0];
104
+ if (exp.action === "create") {
105
+ if (exp.status === "done" && !fileExists) {
106
+ deviations.push(createDeviation(
107
+ db,
108
+ planUid,
109
+ "missing_file",
110
+ "warning",
111
+ `"${exp.label}" expected to create "${file}" but it doesn't exist`,
112
+ now,
113
+ file
114
+ ));
115
+ alreadyHandled.add(file);
116
+ }
117
+ } else if (exp.action === "delete") {
118
+ if (exp.status === "done" && fileExists) {
119
+ deviations.push(createDeviation(
120
+ db,
121
+ planUid,
122
+ "unexpected_file",
123
+ "warning",
124
+ `"${exp.label}" expected to delete "${file}" but it still exists`,
125
+ now,
126
+ file
127
+ ));
128
+ alreadyHandled.add(file);
129
+ }
130
+ } else {
131
+ if (exp.status === "done" && !fileExists) {
132
+ deviations.push(createDeviation(
133
+ db,
134
+ planUid,
135
+ "missing_file",
136
+ "warning",
137
+ `"${exp.label}" expected file "${file}" but it doesn't exist`,
138
+ now,
139
+ file
140
+ ));
141
+ alreadyHandled.add(file);
142
+ }
143
+ }
144
+ }
145
+ if (changedFiles && changedFiles.length > 0) {
146
+ const expectedPaths = [...fileExpectations.keys()];
147
+ for (const file of changedFiles) {
148
+ if (alreadyHandled.has(file)) continue;
149
+ const isExpected = expectedPaths.some(
150
+ (p) => file === p || file.endsWith("/" + p) || p.endsWith("/" + file)
151
+ );
152
+ const wasResolved = [...resolvedPaths].some(
153
+ (p) => file === p || file.endsWith("/" + p) || p.endsWith("/" + file)
154
+ );
155
+ if (!isExpected && !wasResolved) {
156
+ deviations.push(createDeviation(
157
+ db,
158
+ planUid,
159
+ "unexpected_file",
160
+ "info",
161
+ `File "${file}" changed since baseline but is not in any plan item`,
162
+ now,
163
+ file
164
+ ));
165
+ alreadyHandled.add(file);
166
+ }
167
+ }
168
+ }
169
+ let edges = [];
170
+ try {
171
+ edges = (0, import_database2.getDependencyEdges)();
172
+ } catch {
173
+ }
174
+ const edgeSet = new Set(edges.map((e) => `${e.sourceRelative}->${e.targetRelative}`));
175
+ for (const item of items) {
176
+ if (item.status !== "done") continue;
177
+ for (const conn of item.newConnections ?? []) {
178
+ if (!edgeSet.has(`${conn.from}->${conn.to}`)) {
179
+ deviations.push(createDeviation(
180
+ db,
181
+ planUid,
182
+ "missing_import",
183
+ "info",
184
+ `Expected import ${conn.from} \u2192 ${conn.to} not found`,
185
+ now
186
+ ));
187
+ }
188
+ }
189
+ }
190
+ for (const dev of deviations) {
191
+ (0, import_server.broadcast)("deviation-detected", { deviation: dev });
192
+ }
193
+ return deviations;
194
+ }
195
+ function checkFileDeviation(relativePath) {
196
+ const db = (0, import_database.getDb)();
197
+ const plansResult = db.exec(`SELECT uid FROM plans WHERE status IN ('in_progress', 'approved')`);
198
+ if (!plansResult[0]) return;
199
+ for (const row of plansResult[0].values) {
200
+ const planUid = row[0];
201
+ const { files } = collectExpectations(planUid);
202
+ const resolvedPaths = getResolvedDeviationPaths(db, planUid);
203
+ const pendingPaths = getPendingDeviationPaths(db, planUid);
204
+ if (resolvedPaths.has(relativePath) || pendingPaths.has(relativePath)) continue;
205
+ const isExpected = [...files.keys()].some(
206
+ (f) => relativePath.includes(f) || f.includes(relativePath)
207
+ );
208
+ if (!isExpected) {
209
+ createDeviation(
210
+ db,
211
+ planUid,
212
+ "unexpected_file",
213
+ "info",
214
+ `File "${relativePath}" was modified but is not listed in any plan item`,
215
+ Date.now(),
216
+ relativePath
217
+ );
218
+ (0, import_server.broadcast)("deviation-detected", {
219
+ deviation: {
220
+ planUid,
221
+ deviationType: "unexpected_file",
222
+ severity: "info",
223
+ description: `File "${relativePath}" modified outside of plan`
224
+ }
225
+ });
226
+ }
227
+ }
228
+ }
229
+ function createDeviation(db, planUid, deviationType, severity, description, now, filePath) {
230
+ db.run(
231
+ `INSERT INTO deviations (plan_uid, deviation_type, severity, description, resolution, detected_at, file_path)
232
+ VALUES (?, ?, ?, ?, 'pending', ?, ?)`,
233
+ [planUid, deviationType, severity, description, now, filePath ?? null]
234
+ );
235
+ const idResult = db.exec(`SELECT last_insert_rowid()`);
236
+ const id = idResult[0]?.values[0]?.[0] || 0;
237
+ (0, import_persistence.markDirty)();
238
+ const deviation = { id, planUid, deviationType, severity, description, resolution: "pending", detectedAt: now, resolvedAt: null, filePath: filePath ?? null };
239
+ try {
240
+ const { getPlan: getPlanLazy } = _lazy___plan_service;
241
+ const plan = getPlanLazy(planUid);
242
+ if (plan?.projectPath) {
243
+ (0, import_sensor_bridge_service.onDeviationDetected)(deviation, plan.projectPath);
244
+ }
245
+ } catch {
246
+ }
247
+ return deviation;
248
+ }
249
+ function getDeviations(planUid) {
250
+ const result = (0, import_database.getDb)().exec(
251
+ `SELECT id, plan_uid, deviation_type, severity, description, resolution, detected_at, resolved_at, file_path,
252
+ resolved_by, resolved_by_type
253
+ FROM deviations WHERE plan_uid = ? ORDER BY detected_at DESC`,
254
+ [planUid]
255
+ );
256
+ if (!result[0]) return [];
257
+ return result[0].values.map((r) => ({
258
+ id: r[0],
259
+ planUid: r[1],
260
+ deviationType: r[2],
261
+ severity: r[3],
262
+ description: r[4],
263
+ resolution: r[5],
264
+ detectedAt: r[6],
265
+ resolvedAt: r[7],
266
+ filePath: r[8] ?? null,
267
+ resolvedBy: r[9] ?? null,
268
+ resolvedByType: r[10] ?? null
269
+ }));
270
+ }
271
+ class DeviationError extends Error {
272
+ }
273
+ function planOfDeviation(id) {
274
+ const row = (0, import_database.getDb)().exec(`SELECT plan_uid FROM deviations WHERE id = ?`, [id])[0]?.values[0];
275
+ return row ? row[0] : null;
276
+ }
277
+ const RESOLUTIONS = ["accepted", "reverted", "ignored"];
278
+ function reconcileDeviations(planUid, requested, by) {
279
+ const own = new Set(getDeviations(planUid).map((d) => d.id));
280
+ const problems = [];
281
+ for (const d of requested) {
282
+ if (typeof d.id !== "number" || !own.has(d.id)) problems.push(`${String(d.id)} is not a deviation on this plan`);
283
+ if (!RESOLUTIONS.includes(d.action)) problems.push(`"${String(d.action)}" is not one of ${RESOLUTIONS.join(", ")}`);
284
+ }
285
+ if (problems.length) throw new DeviationError(`Nothing resolved: ${problems.join("; ")}.`);
286
+ for (const d of requested) resolveDeviation(d.id, d.action, by);
287
+ return requested.length;
288
+ }
289
+ const RECONCILED_ITEM_TITLE = "Reconciled changes";
290
+ function resolveDeviation(deviationId, resolution, by = { actor: "codetrellis", actorType: "system" }) {
291
+ const db = (0, import_database.getDb)();
292
+ const now = Date.now();
293
+ db.run(
294
+ `UPDATE deviations SET resolution = ?, resolved_at = ?, resolved_by = ?, resolved_by_type = ? WHERE id = ?`,
295
+ [resolution, now, by.actor, by.actorType, deviationId]
296
+ );
297
+ (0, import_persistence.markDirty)();
298
+ if (resolution === "accepted") {
299
+ const devResult = db.exec(
300
+ `SELECT plan_uid, deviation_type, file_path FROM deviations WHERE id = ?`,
301
+ [deviationId]
302
+ );
303
+ if (!devResult[0]?.values[0]) return;
304
+ const [planUid, devType, filePath] = devResult[0].values[0];
305
+ if (!filePath || devType !== "unexpected_file" && devType !== "missing_file") return;
306
+ const items = (0, import_plan_item_service.listAllItems)(planUid).filter((i) => i.kind === "action");
307
+ const reconciledItem = items.find((i) => i.title === RECONCILED_ITEM_TITLE);
308
+ if (reconciledItem) {
309
+ const existingSpecs = reconciledItem.fileSpecs ?? [];
310
+ const already = existingSpecs.some((fs) => fs.path === filePath);
311
+ if (!already) {
312
+ (0, import_plan_item_service.updateItem)(reconciledItem.uid, {
313
+ fileSpecs: [...existingSpecs, { path: filePath, action: "modify" }],
314
+ // The plan changes because someone accepted the drift: in their name.
315
+ author: by.actor,
316
+ authorType: by.actorType,
317
+ changeSummary: `Accepted deviation: ${filePath}`
318
+ });
319
+ }
320
+ } else {
321
+ (0, import_plan_item_service.createItem)({
322
+ planUid,
323
+ kind: "action",
324
+ title: RECONCILED_ITEM_TITLE,
325
+ body: "Files accepted from drift detection \u2014 originally not in the plan but confirmed as intentional.",
326
+ fileSpecs: [{ path: filePath, action: "modify" }],
327
+ status: "done",
328
+ author: by.actor,
329
+ authorType: by.actorType
330
+ });
331
+ }
332
+ (0, import_server.broadcast)("plan-item-changed", { planUid });
333
+ }
334
+ }
335
+ // Annotate the CommonJS export names for ESM import in node:
336
+ 0 && (module.exports = {
337
+ DeviationError,
338
+ checkFileDeviation,
339
+ detectDeviations,
340
+ getDeviations,
341
+ planOfDeviation,
342
+ reconcileDeviations,
343
+ resolveDeviation
344
+ });
@@ -0,0 +1,168 @@
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 diff_engine_exports = {};
19
+ __export(diff_engine_exports, {
20
+ baselineLabel: () => baselineLabel,
21
+ captureSnapshot: () => captureSnapshot,
22
+ clearBaseline: () => clearBaseline,
23
+ computeDiff: () => computeDiff,
24
+ diffSnapshots: () => diffSnapshots,
25
+ getBaseline: () => getBaseline,
26
+ restoreBaseline: () => restoreBaseline,
27
+ setBaseline: () => setBaseline,
28
+ setBaselineStore: () => setBaselineStore
29
+ });
30
+ module.exports = __toCommonJS(diff_engine_exports);
31
+ function baselineLabel(b) {
32
+ if (!b.shortCommitHash) return "working tree";
33
+ return b.dirty ? `${b.shortCommitHash} + uncommitted changes` : b.shortCommitHash;
34
+ }
35
+ let baselineSnapshot = null;
36
+ let store = null;
37
+ function setBaselineStore(next) {
38
+ store = next;
39
+ }
40
+ function captureSnapshot(fileData, depEdges) {
41
+ const files = /* @__PURE__ */ new Map();
42
+ for (const f of fileData) {
43
+ files.set(f.path, { hash: f.hash, symbolCount: f.symbolCount });
44
+ }
45
+ const edges = /* @__PURE__ */ new Set();
46
+ for (const e of depEdges) {
47
+ edges.add(`${e.sourceRelative}->${e.targetRelative}`);
48
+ }
49
+ return { timestamp: Date.now(), files, edges };
50
+ }
51
+ function setBaseline(snapshot, metadata) {
52
+ baselineSnapshot = {
53
+ ...snapshot,
54
+ commitHash: metadata?.commitHash ?? snapshot.commitHash ?? null,
55
+ shortCommitHash: metadata?.shortCommitHash ?? snapshot.shortCommitHash ?? null,
56
+ source: metadata?.source ?? "scan",
57
+ dirty: metadata?.dirty ?? false,
58
+ projectPath: metadata?.projectPath ?? null,
59
+ capturedAt: Date.now()
60
+ };
61
+ console.log(`[Diff] Baseline set (${baselineSnapshot.source}): ${snapshot.files.size} files, ${snapshot.edges.size} edges`);
62
+ if (store && baselineSnapshot.projectPath) {
63
+ try {
64
+ store.save(baselineSnapshot);
65
+ } catch (err) {
66
+ console.warn(`[Diff] Baseline not saved: ${err.message}`);
67
+ }
68
+ }
69
+ }
70
+ function clearBaseline() {
71
+ const projectPath = baselineSnapshot?.projectPath;
72
+ baselineSnapshot = null;
73
+ if (store && projectPath) {
74
+ try {
75
+ store.remove(projectPath);
76
+ } catch (err) {
77
+ console.warn(`[Diff] Stored baseline not removed: ${err.message}`);
78
+ }
79
+ }
80
+ }
81
+ function restoreBaseline(projectPath) {
82
+ if (!store) return null;
83
+ let stored = null;
84
+ try {
85
+ stored = store.load(projectPath);
86
+ } catch (err) {
87
+ console.warn(`[Diff] Stored baseline unreadable: ${err.message}`);
88
+ }
89
+ if (!stored) return null;
90
+ baselineSnapshot = stored;
91
+ console.log(`[Diff] Baseline restored (${stored.source}): ${stored.files.size} files, ${stored.edges.size} edges`);
92
+ return stored;
93
+ }
94
+ function getBaseline() {
95
+ return baselineSnapshot;
96
+ }
97
+ function diffSnapshots(before, current) {
98
+ const baselineSnapshot2 = before;
99
+ const addedFiles = [];
100
+ const removedFiles = [];
101
+ const modifiedFiles = [];
102
+ for (const [path, data] of current.files) {
103
+ const baseline = baselineSnapshot2.files.get(path);
104
+ if (!baseline) {
105
+ addedFiles.push(path);
106
+ } else if (baseline.hash !== data.hash) {
107
+ modifiedFiles.push(path);
108
+ }
109
+ }
110
+ for (const path of baselineSnapshot2.files.keys()) {
111
+ if (!current.files.has(path)) {
112
+ removedFiles.push(path);
113
+ }
114
+ }
115
+ const addedEdges = [];
116
+ const removedEdges = [];
117
+ for (const edge of current.edges) {
118
+ if (!baselineSnapshot2.edges.has(edge)) {
119
+ const [source, target] = edge.split("->");
120
+ addedEdges.push({ source, target });
121
+ }
122
+ }
123
+ for (const edge of baselineSnapshot2.edges) {
124
+ if (!current.edges.has(edge)) {
125
+ const [source, target] = edge.split("->");
126
+ removedEdges.push({ source, target });
127
+ }
128
+ }
129
+ const changedFiles = /* @__PURE__ */ new Set([...addedFiles, ...modifiedFiles]);
130
+ const blastRadius = [];
131
+ for (const edge of current.edges) {
132
+ const [source, target] = edge.split("->");
133
+ if (changedFiles.has(target) && !changedFiles.has(source)) {
134
+ blastRadius.push(source);
135
+ }
136
+ }
137
+ return {
138
+ addedFiles,
139
+ removedFiles,
140
+ modifiedFiles,
141
+ addedEdges,
142
+ removedEdges,
143
+ blastRadius: [...new Set(blastRadius)],
144
+ summary: {
145
+ added: addedFiles.length,
146
+ removed: removedFiles.length,
147
+ modified: modifiedFiles.length,
148
+ edgesAdded: addedEdges.length,
149
+ edgesRemoved: removedEdges.length
150
+ }
151
+ };
152
+ }
153
+ function computeDiff(current) {
154
+ if (!baselineSnapshot) return null;
155
+ return diffSnapshots(baselineSnapshot, current);
156
+ }
157
+ // Annotate the CommonJS export names for ESM import in node:
158
+ 0 && (module.exports = {
159
+ baselineLabel,
160
+ captureSnapshot,
161
+ clearBaseline,
162
+ computeDiff,
163
+ diffSnapshots,
164
+ getBaseline,
165
+ restoreBaseline,
166
+ setBaseline,
167
+ setBaselineStore
168
+ });