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,189 @@
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 source_control_exports = {};
29
+ __export(source_control_exports, {
30
+ parseNameStatus: () => parseNameStatus,
31
+ parsePorcelain: () => parsePorcelain,
32
+ projectPrefix: () => projectPrefix,
33
+ sourceControl: () => sourceControl
34
+ });
35
+ module.exports = __toCommonJS(source_control_exports);
36
+ var import_node_child_process = require("node:child_process");
37
+ var import_node_fs = __toESM(require("node:fs"));
38
+ var import_git_safety = require("./git-safety");
39
+ var import_git_checkout = require("./git-checkout");
40
+ const MAX_FILES = 500;
41
+ const trim = (p) => p.replace(/[\\/]+$/, "");
42
+ const real = (p) => {
43
+ try {
44
+ return import_node_fs.default.realpathSync.native(trim(p));
45
+ } catch {
46
+ return trim(p);
47
+ }
48
+ };
49
+ function git(cwd, args) {
50
+ return (0, import_node_child_process.execFileSync)("git", args, { cwd, encoding: "utf-8", maxBuffer: 32 * 1024 * 1024, stdio: ["ignore", "pipe", "ignore"] });
51
+ }
52
+ const STATUS = { A: "added", M: "modified", D: "deleted", R: "renamed", C: "added", T: "modified", U: "modified" };
53
+ function parsePorcelain(out, prefix) {
54
+ const staged = [];
55
+ const changes = [];
56
+ const untracked = [];
57
+ const rel = (p) => prefix && p.startsWith(prefix) ? p.slice(prefix.length) : p;
58
+ const parts = out.split("\0");
59
+ for (let i = 0; i < parts.length; i++) {
60
+ const entry = parts[i];
61
+ if (entry.length < 4) continue;
62
+ const x = entry[0];
63
+ const y = entry[1];
64
+ const file = rel(entry.slice(3));
65
+ const from = x === "R" || x === "C" || y === "R" || y === "C" ? rel(parts[++i] ?? "") : void 0;
66
+ if (x === "?" && y === "?") {
67
+ untracked.push({ path: file, status: "untracked" });
68
+ continue;
69
+ }
70
+ if (x === "!") continue;
71
+ if (x !== " " && STATUS[x]) staged.push({ path: file, status: STATUS[x], ...x === "R" && from ? { from } : {} });
72
+ if (y !== " " && STATUS[y]) changes.push({ path: file, status: STATUS[y], ...y === "R" && from ? { from } : {} });
73
+ }
74
+ return { staged, changes, untracked };
75
+ }
76
+ function parseNameStatus(out, prefix) {
77
+ const rel = (p) => prefix && p.startsWith(prefix) ? p.slice(prefix.length) : p;
78
+ const parts = out.split("\0").filter((p) => p.length > 0);
79
+ const files = [];
80
+ for (let i = 0; i < parts.length; i++) {
81
+ const code = parts[i];
82
+ const kind = code[0];
83
+ if (kind === "R" || kind === "C") {
84
+ const from = parts[++i];
85
+ const to = parts[++i];
86
+ if (to) files.push(kind === "R" ? { path: rel(to), status: "renamed", from: rel(from) } : { path: rel(to), status: "added" });
87
+ } else {
88
+ const p = parts[++i];
89
+ if (p && STATUS[kind]) files.push({ path: rel(p), status: STATUS[kind] });
90
+ }
91
+ }
92
+ return files;
93
+ }
94
+ const count = (n, one, many = `${one}s`) => `${n} ${n === 1 ? one : many}`;
95
+ function sourceControl(projectRoot, baselineCommit, workstreams) {
96
+ const project = trim(projectRoot);
97
+ let prefix = "";
98
+ try {
99
+ prefix = git(project, ["rev-parse", "--show-prefix"]).trim();
100
+ } catch {
101
+ return { project, git: false, branch: null, head: null, groups: [], words: "This folder is not a git repository, so there is nothing to compare it with." };
102
+ }
103
+ let head = null;
104
+ try {
105
+ const [sha, ...subject] = git(project, ["log", "-1", "--format=%h%x09%s"]).trim().split(" ");
106
+ if (sha) head = { sha, subject: subject.join(" ") };
107
+ } catch {
108
+ }
109
+ let branch = null;
110
+ try {
111
+ branch = git(project, ["symbolic-ref", "--short", "-q", "HEAD"]).trim() || null;
112
+ } catch {
113
+ }
114
+ const groups = [];
115
+ const headSpec = head ? "commit:HEAD" : "none";
116
+ const at = head ? `${branch ?? "HEAD"} ${head.sha}` : "no commit yet";
117
+ try {
118
+ const parsed = parsePorcelain(git(project, ["status", "--porcelain=v1", "-z", "--untracked-files=all", "--", "."]), prefix);
119
+ const { staged, changes } = parsed;
120
+ const untracked = (0, import_git_checkout.withoutNestedCheckouts)(project, parsed.untracked, (f) => f.path);
121
+ if (staged.length) groups.push({ id: "staged", kind: "staged", title: "Ready to commit", words: `Staged: these go into the next commit. Compared with the last commit (${at})`, git: { term: "staged", command: "git diff --cached" }, before: headSpec, after: "index", labels: { before: `Last commit (${head?.sha ?? "none"})`, after: "Staged" }, files: staged.slice(0, MAX_FILES), truncated: staged.length > MAX_FILES || void 0 });
122
+ if (changes.length) groups.push({ id: "changes", kind: "changes", title: "Changed, not staged", words: "Edited but not yet staged for a commit. Compared with what is staged", git: { term: "unstaged", command: "git diff" }, before: "index", after: "live", labels: { before: "Staged", after: "Working tree" }, files: changes.slice(0, MAX_FILES), truncated: changes.length > MAX_FILES || void 0 });
123
+ if (untracked.length) groups.push({ id: "untracked", kind: "untracked", title: "New files", words: "Files git is not tracking yet, so there is nothing earlier to compare them with", git: { term: "untracked", command: "git status --untracked-files" }, before: "none", after: "live", labels: { before: "Nothing (new file)", after: "Working tree" }, files: untracked.slice(0, MAX_FILES), truncated: untracked.length > MAX_FILES || void 0 });
124
+ } catch {
125
+ }
126
+ if (head && baselineCommit && (0, import_git_safety.isSafeGitRef)(baselineCommit)) {
127
+ try {
128
+ const commits = Number(git(project, ["rev-list", "--count", `${baselineCommit}..HEAD`]).trim()) || 0;
129
+ if (commits > 0) {
130
+ const files = parseNameStatus(git(project, ["diff", "--name-status", "-z", "-M", baselineCommit, "HEAD", "--", "."]), prefix);
131
+ const base = baselineCommit.slice(0, 7);
132
+ if (files.length) groups.push({ id: "since-opened", kind: "since-opened", title: "Committed since you opened it", words: `${count(commits, "commit")} since ${base}, when the graph's baseline was taken`, git: { term: null, command: `git diff ${base}..HEAD` }, before: `commit:${baselineCommit}`, after: "commit:HEAD", labels: { before: `When you opened it (${base})`, after: `Last commit (${head.sha})` }, files: files.slice(0, MAX_FILES), truncated: files.length > MAX_FILES || void 0 });
133
+ }
134
+ } catch {
135
+ }
136
+ }
137
+ const projectReal = real(project);
138
+ for (const w of workstreams) {
139
+ const wroot = w.root.startsWith("branch:") ? trim(w.root) : real(w.root);
140
+ if (wroot === projectReal || projectReal.startsWith(`${wroot}/`) || projectReal.startsWith(`${wroot}\\`)) continue;
141
+ const inside = w.changes.files.filter((f) => !prefix || f.path.startsWith(prefix)).map((f) => ({ ...f, path: f.path.slice(prefix.length), ...f.from ? { from: f.from.startsWith(prefix) ? f.from.slice(prefix.length) : f.from } : {} }));
142
+ if (inside.length === 0) continue;
143
+ const name = w.branch ?? w.root.split(/[\\/]/).pop() ?? w.root;
144
+ const base = w.changes.base;
145
+ const agents = [...new Set(w.agents.map((a) => a.agentType).filter((a) => !!a))];
146
+ const where = w.root.startsWith("branch:") ? "branch" : "worktree";
147
+ groups.push({
148
+ id: `workstream:${w.root}`,
149
+ kind: "workstream",
150
+ title: name,
151
+ words: `${where === "worktree" ? "A worktree" : "A branch"} with ${count(inside.length, "changed file")} since it left main${agents.length ? `, worked on by ${agents.join(" and ")}` : ""}`,
152
+ before: base && (0, import_git_safety.isSafeGitRef)(base) ? `commit:${base}` : "none",
153
+ after: `workstream:${w.root}`,
154
+ labels: { before: base ? `Where it left main (${base.slice(0, 7)})` : "Nothing", after: name },
155
+ git: {
156
+ term: where,
157
+ // A worktree's working copy, committed or not; a branch's own commits.
158
+ command: where === "worktree" ? `git -C ${w.root} diff ${base ? base.slice(0, 7) : "HEAD"}` : `git diff ${base ? base.slice(0, 7) : "main"}...${w.branch ?? name}`
159
+ },
160
+ files: inside.map((f) => ({ path: f.path, status: f.status, ...f.from ? { from: f.from } : {} })),
161
+ truncated: w.changes.truncated || void 0,
162
+ workstream: { id: w.root, branch: w.branch, agents }
163
+ });
164
+ }
165
+ const local = new Set(groups.filter((g) => g.kind === "staged" || g.kind === "changes" || g.kind === "untracked").flatMap((g) => g.files.map((f) => f.path))).size;
166
+ const since = groups.find((g) => g.kind === "since-opened");
167
+ const others = groups.filter((g) => g.kind === "workstream");
168
+ const said = [
169
+ local ? `${count(local, "file")} changed in this checkout` : null,
170
+ since ? `${count(since.files.length, "file")} committed since you opened it` : null,
171
+ others.length ? `work in ${count(others.length, "other worktree or branch", "other worktrees and branches")}` : null
172
+ ].filter(Boolean);
173
+ const words = said.length ? `${said.join("; ")}.` : `Nothing has changed: this checkout matches its last commit${head ? ` (${head.sha} \u201C${head.subject}\u201D)` : ""}, and no other worktree or branch has work in progress.`;
174
+ return { project, git: true, branch, head, groups, words };
175
+ }
176
+ function projectPrefix(projectRoot) {
177
+ try {
178
+ return git(trim(projectRoot), ["rev-parse", "--show-prefix"]).trim();
179
+ } catch {
180
+ return "";
181
+ }
182
+ }
183
+ // Annotate the CommonJS export names for ESM import in node:
184
+ 0 && (module.exports = {
185
+ parseNameStatus,
186
+ parsePorcelain,
187
+ projectPrefix,
188
+ sourceControl
189
+ });
@@ -0,0 +1,123 @@
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 spec_links_service_exports = {};
19
+ __export(spec_links_service_exports, {
20
+ reliedOnBy: () => reliedOnBy,
21
+ reliedOnWords: () => reliedOnWords,
22
+ reliesOn: () => reliesOn,
23
+ setReliesOn: () => setReliesOn,
24
+ specRefProblem: () => specRefProblem
25
+ });
26
+ module.exports = __toCommonJS(spec_links_service_exports);
27
+ var import_database = require("./database");
28
+ var import_persistence = require("./persistence");
29
+ var import_plan_item_service = require("./plan-item-service");
30
+ var import_spec_sections = require("../../shared/lib/spec-sections");
31
+ const rows = (sql, params = []) => (0, import_database.getDb)().exec(sql, params)[0]?.values ?? [];
32
+ const planTitle = (planUid) => rows("SELECT title FROM plans WHERE uid = ?", [planUid])[0]?.[0] ?? "";
33
+ const planProject = (planUid) => rows("SELECT project_path FROM plans WHERE uid = ?", [planUid])[0]?.[0] ?? null;
34
+ function specRefProblem(itemUid, refs, lookup = import_plan_item_service.getItem) {
35
+ for (const ref of refs) {
36
+ const page = lookup(ref.page);
37
+ if (!page) return `No page ${ref.page}: a task can only rely on a page that exists.`;
38
+ if (page.kind !== "object") return `"${page.title}" is a task, not a page: a task relies on pages (dependencies are for tasks).`;
39
+ if (itemUid && page.uid === itemUid) return "An item cannot rely on itself.";
40
+ const section = ref.section ?? "";
41
+ if (section && !(0, import_spec_sections.findSection)(page.body ?? "", section)) {
42
+ return `"${page.title}" has no heading "${section}". Sections are addressed by their heading's slug, such as "fields" for "## Fields".`;
43
+ }
44
+ }
45
+ return null;
46
+ }
47
+ function setReliesOn(itemUid, refs, by) {
48
+ const db = (0, import_database.getDb)();
49
+ const now = Date.now();
50
+ db.run("DELETE FROM spec_links WHERE item_uid = ?", [itemUid]);
51
+ const seen = /* @__PURE__ */ new Set();
52
+ for (const ref of refs) {
53
+ const key = `${ref.page}\0${ref.section ?? ""}`;
54
+ if (seen.has(key)) continue;
55
+ seen.add(key);
56
+ db.run(
57
+ "INSERT INTO spec_links (item_uid, page_uid, section, author, author_type, created_at) VALUES (?, ?, ?, ?, ?, ?)",
58
+ [itemUid, ref.page, ref.section ?? "", by.author, by.authorType, now]
59
+ );
60
+ }
61
+ (0, import_persistence.markDirty)();
62
+ }
63
+ function reliesOn(itemUid) {
64
+ return rows("SELECT page_uid, section FROM spec_links WHERE item_uid = ? ORDER BY created_at, page_uid, section", [itemUid]).flatMap((r) => {
65
+ const page = (0, import_plan_item_service.getItem)(r[0]);
66
+ if (!page) return [];
67
+ const section = r[1];
68
+ const heading = section ? (0, import_spec_sections.findSection)(page.body ?? "", section) : void 0;
69
+ return [{
70
+ pageUid: page.uid,
71
+ pageTitle: page.title,
72
+ planUid: page.planUid,
73
+ planTitle: planTitle(page.planUid),
74
+ section,
75
+ sectionTitle: heading?.title ?? null,
76
+ sectionMissing: !!section && !heading
77
+ }];
78
+ });
79
+ }
80
+ function reliedOnBy(pageUid, section) {
81
+ const page = (0, import_plan_item_service.getItem)(pageUid);
82
+ if (!page) return [];
83
+ const project = planProject(page.planUid);
84
+ const params = [pageUid];
85
+ let where = "l.page_uid = ?";
86
+ if (section) {
87
+ where += " AND (l.section = '' OR l.section = ?)";
88
+ params.push(section);
89
+ }
90
+ if (project) {
91
+ where += " AND p.project_path = ?";
92
+ params.push(project);
93
+ }
94
+ return rows(
95
+ `SELECT i.uid, i.title, i.status, i.assignee, i.plan_uid, p.title, l.section
96
+ FROM spec_links l JOIN plan_items i ON i.uid = l.item_uid JOIN plans p ON p.uid = i.plan_uid
97
+ WHERE ${where} ORDER BY p.title, i.sort_order, i.title`,
98
+ params
99
+ ).map((r) => ({
100
+ itemUid: r[0],
101
+ title: r[1],
102
+ status: r[2] ?? null,
103
+ assignee: r[3] ?? null,
104
+ planUid: r[4],
105
+ planTitle: r[5],
106
+ section: r[6],
107
+ sectionTitle: r[6] ? (0, import_spec_sections.findSection)(page.body ?? "", r[6])?.title ?? null : null
108
+ }));
109
+ }
110
+ function reliedOnWords(rel) {
111
+ if (rel.length === 0) return null;
112
+ const tasks = new Set(rel.map((r) => r.itemUid)).size;
113
+ const plans = new Set(rel.map((r) => r.planUid)).size;
114
+ return `Relied on by ${tasks} ${tasks === 1 ? "task" : "tasks"} in ${plans} ${plans === 1 ? "plan" : "plans"}`;
115
+ }
116
+ // Annotate the CommonJS export names for ESM import in node:
117
+ 0 && (module.exports = {
118
+ reliedOnBy,
119
+ reliedOnWords,
120
+ reliesOn,
121
+ setReliesOn,
122
+ specRefProblem
123
+ });
@@ -0,0 +1,50 @@
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 spec_proposal_withdraw_exports = {};
19
+ __export(spec_proposal_withdraw_exports, {
20
+ withdrawProposals: () => withdrawProposals
21
+ });
22
+ module.exports = __toCommonJS(spec_proposal_withdraw_exports);
23
+ var import_database = require("./database");
24
+ var import_persistence = require("./persistence");
25
+ function withdrawProposals(scope, reason, now = Date.now()) {
26
+ const where = scope.planUid ? { sql: "plan_uid = ?", params: [scope.planUid] } : scope.pageUids?.length ? { sql: `page_uid IN (${scope.pageUids.map(() => "?").join(",")})`, params: scope.pageUids } : null;
27
+ if (!where) return 0;
28
+ const db = (0, import_database.getDb)();
29
+ const open = db.exec(`SELECT uid, hit_ref FROM spec_proposals WHERE status = 'open' AND ${where.sql}`, where.params)[0]?.values ?? [];
30
+ for (const [uid, ref] of open) {
31
+ db.run(
32
+ `UPDATE spec_proposals SET status = 'withdrawn', decided_at = ?, decided_by = 'CodeTrellis', decided_by_type = 'system', decision_note = ? WHERE uid = ?`,
33
+ [now, reason, uid]
34
+ );
35
+ if (ref) {
36
+ db.run(
37
+ `UPDATE breakpoint_hits SET decision = 'stop', note = ?, answered_at = ?, answered_by = 'CodeTrellis', answered_by_type = 'system'
38
+ WHERE ref = ? AND answered_at IS NULL`,
39
+ [reason, now, ref]
40
+ );
41
+ }
42
+ db.run(`UPDATE breakpoints SET cleared_at = ?, cleared_by = 'CodeTrellis', cleared_by_type = 'system' WHERE kind = 'proposal' AND target = ? AND cleared_at IS NULL`, [now, uid]);
43
+ }
44
+ if (open.length) (0, import_persistence.markDirty)();
45
+ return open.length;
46
+ }
47
+ // Annotate the CommonJS export names for ESM import in node:
48
+ 0 && (module.exports = {
49
+ withdrawProposals
50
+ });