codetrellis 0.0.0-stage → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (449) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +27 -2
  3. package/bin/codetrellis.mjs +4 -0
  4. package/package.json +43 -4
  5. package/reader/material-reader.mjs +130346 -0
  6. package/resources/tree-sitter/README.md +150 -0
  7. package/resources/tree-sitter/tree-sitter-c-sharp.wasm +0 -0
  8. package/resources/tree-sitter/tree-sitter-go.wasm +0 -0
  9. package/resources/tree-sitter/tree-sitter-java.wasm +0 -0
  10. package/resources/tree-sitter/tree-sitter-javascript.wasm +0 -0
  11. package/resources/tree-sitter/tree-sitter-kotlin.wasm +0 -0
  12. package/resources/tree-sitter/tree-sitter-php.wasm +0 -0
  13. package/resources/tree-sitter/tree-sitter-python.wasm +0 -0
  14. package/resources/tree-sitter/tree-sitter-ruby.wasm +0 -0
  15. package/resources/tree-sitter/tree-sitter-rust.wasm +0 -0
  16. package/resources/tree-sitter/tree-sitter-swift.wasm +0 -0
  17. package/resources/tree-sitter/tree-sitter-tsx.wasm +0 -0
  18. package/resources/tree-sitter/tree-sitter-typescript.wasm +0 -0
  19. package/resources/tree-sitter/tree-sitter.wasm +0 -0
  20. package/src/backend/agent/claude-code-watcher.js +270 -0
  21. package/src/backend/index.js +8 -0
  22. package/src/backend/lib/sha256-file.js +39 -0
  23. package/src/backend/lib/zip-entries.js +98 -0
  24. package/src/backend/lifecycle.js +102 -0
  25. package/src/backend/mcp/binding-headers.js +54 -0
  26. package/src/backend/mcp/client-identity.js +44 -0
  27. package/src/backend/mcp/connector/command.js +110 -0
  28. package/src/backend/mcp/connector/core.js +278 -0
  29. package/src/backend/mcp/connector/files.js +121 -0
  30. package/src/backend/mcp/connector/hook.js +284 -0
  31. package/src/backend/mcp/connector/main.js +126 -0
  32. package/src/backend/mcp/connector/sse-upstream.js +152 -0
  33. package/src/backend/mcp/helpers.js +43 -0
  34. package/src/backend/mcp/prompt-builders.js +104 -0
  35. package/src/backend/mcp/resources.js +197 -0
  36. package/src/backend/mcp/server.js +813 -0
  37. package/src/backend/mcp/skill-guide.js +1528 -0
  38. package/src/backend/mcp/tools/architecture-tools.js +273 -0
  39. package/src/backend/mcp/tools/audio-tools.js +117 -0
  40. package/src/backend/mcp/tools/awareness-tools.js +623 -0
  41. package/src/backend/mcp/tools/budget-tools.js +185 -0
  42. package/src/backend/mcp/tools/channel-tools.js +205 -0
  43. package/src/backend/mcp/tools/contribution-tools.js +181 -0
  44. package/src/backend/mcp/tools/drift-tools.js +252 -0
  45. package/src/backend/mcp/tools/git-tools.js +316 -0
  46. package/src/backend/mcp/tools/governance-tools.js +175 -0
  47. package/src/backend/mcp/tools/graph-tools.js +181 -0
  48. package/src/backend/mcp/tools/intake-tools.js +244 -0
  49. package/src/backend/mcp/tools/mobile-tools.js +118 -0
  50. package/src/backend/mcp/tools/peer-tools.js +330 -0
  51. package/src/backend/mcp/tools/plan-item-tools.js +1601 -0
  52. package/src/backend/mcp/tools/plan-tools.js +680 -0
  53. package/src/backend/mcp/tools/presence-tools.js +185 -0
  54. package/src/backend/mcp/tools/project-config-tools.js +150 -0
  55. package/src/backend/mcp/tools/review-tools.js +172 -0
  56. package/src/backend/mcp/tools/session-tools.js +554 -0
  57. package/src/backend/mcp/tools/system-docs-tools.js +168 -0
  58. package/src/backend/mcp/tools/terminal-tools.js +186 -0
  59. package/src/backend/mcp/tools/test-tools.js +117 -0
  60. package/src/backend/mcp/tools/ui-tools.js +356 -0
  61. package/src/backend/mcp/types.js +15 -0
  62. package/src/backend/middleware/local-auth.js +116 -0
  63. package/src/backend/server.js +5951 -0
  64. package/src/backend/services/agent-event-log.js +350 -0
  65. package/src/backend/services/architecture-rule.js +584 -0
  66. package/src/backend/services/architecture-rules.js +275 -0
  67. package/src/backend/services/artefact-content-service.js +181 -0
  68. package/src/backend/services/artefact-service.js +305 -0
  69. package/src/backend/services/artefact-watcher.js +167 -0
  70. package/src/backend/services/ast-parser.js +327 -0
  71. package/src/backend/services/audio-buffer-service.js +152 -0
  72. package/src/backend/services/awareness-notices.js +139 -0
  73. package/src/backend/services/awareness-replies.js +194 -0
  74. package/src/backend/services/awareness-service.js +344 -0
  75. package/src/backend/services/awareness-signals.js +267 -0
  76. package/src/backend/services/baseline-store.js +83 -0
  77. package/src/backend/services/branch-workstreams.js +341 -0
  78. package/src/backend/services/breakpoint-service.js +584 -0
  79. package/src/backend/services/brief-service.js +299 -0
  80. package/src/backend/services/budget-service.js +528 -0
  81. package/src/backend/services/callsites/base.js +15 -0
  82. package/src/backend/services/callsites/csharp.js +148 -0
  83. package/src/backend/services/callsites/go.js +163 -0
  84. package/src/backend/services/callsites/index.js +53 -0
  85. package/src/backend/services/callsites/kotlin.js +123 -0
  86. package/src/backend/services/callsites/process-env.js +125 -0
  87. package/src/backend/services/callsites/python.js +91 -0
  88. package/src/backend/services/callsites/ruby.js +164 -0
  89. package/src/backend/services/callsites/shared.js +198 -0
  90. package/src/backend/services/callsites/swift.js +115 -0
  91. package/src/backend/services/callsites/typescript.js +87 -0
  92. package/src/backend/services/capability-token.js +108 -0
  93. package/src/backend/services/change-check.js +156 -0
  94. package/src/backend/services/channel-dispatcher-service.js +235 -0
  95. package/src/backend/services/channel-event-file-service.js +125 -0
  96. package/src/backend/services/channel-event-service.js +297 -0
  97. package/src/backend/services/check-runs.js +177 -0
  98. package/src/backend/services/checkout-identity.js +73 -0
  99. package/src/backend/services/claude-code-parallel.js +221 -0
  100. package/src/backend/services/claude-desktop-config.js +186 -0
  101. package/src/backend/services/clock.js +57 -0
  102. package/src/backend/services/cloud-files.js +191 -0
  103. package/src/backend/services/coalesce.js +50 -0
  104. package/src/backend/services/code-breakpoints.js +291 -0
  105. package/src/backend/services/comment-service.js +168 -0
  106. package/src/backend/services/commit-attribution.js +134 -0
  107. package/src/backend/services/commit-edges.js +99 -0
  108. package/src/backend/services/confined-fs.js +241 -0
  109. package/src/backend/services/conformity-gate.js +132 -0
  110. package/src/backend/services/contribution-service.js +409 -0
  111. package/src/backend/services/coverage-service.js +173 -0
  112. package/src/backend/services/criteria-service.js +721 -0
  113. package/src/backend/services/criterion-checks.js +387 -0
  114. package/src/backend/services/criterion-loop-service.js +411 -0
  115. package/src/backend/services/cross-system-service.js +231 -0
  116. package/src/backend/services/database.js +916 -0
  117. package/src/backend/services/db-schema.js +1358 -0
  118. package/src/backend/services/deviation-service.js +344 -0
  119. package/src/backend/services/diff-engine.js +168 -0
  120. package/src/backend/services/evidence.js +363 -0
  121. package/src/backend/services/external-intake-service.js +269 -0
  122. package/src/backend/services/external-pointer-service.js +195 -0
  123. package/src/backend/services/external-refs-service.js +214 -0
  124. package/src/backend/services/file-history.js +158 -0
  125. package/src/backend/services/file-watcher.js +193 -0
  126. package/src/backend/services/folder-requests.js +118 -0
  127. package/src/backend/services/freeze-service.js +189 -0
  128. package/src/backend/services/gemini-cli-hook.js +172 -0
  129. package/src/backend/services/git-activity-service.js +325 -0
  130. package/src/backend/services/git-blobs.js +70 -0
  131. package/src/backend/services/git-branches.js +357 -0
  132. package/src/backend/services/git-checkout.js +153 -0
  133. package/src/backend/services/git-commit-service.js +91 -0
  134. package/src/backend/services/git-env.js +121 -0
  135. package/src/backend/services/git-identity.js +84 -0
  136. package/src/backend/services/git-refs.js +386 -0
  137. package/src/backend/services/git-safety.js +58 -0
  138. package/src/backend/services/grant-guard.js +67 -0
  139. package/src/backend/services/html-view-policy.js +135 -0
  140. package/src/backend/services/human-decision.js +55 -0
  141. package/src/backend/services/importers.js +159 -0
  142. package/src/backend/services/intent-service.js +105 -0
  143. package/src/backend/services/ipc-dispatcher.js +164 -0
  144. package/src/backend/services/item-git-state.js +208 -0
  145. package/src/backend/services/line-changes.js +232 -0
  146. package/src/backend/services/line-history.js +174 -0
  147. package/src/backend/services/local-api-changes.js +40 -0
  148. package/src/backend/services/logger.js +217 -0
  149. package/src/backend/services/material-footprints.js +203 -0
  150. package/src/backend/services/material-place.js +82 -0
  151. package/src/backend/services/material-reader/child.js +4 -0
  152. package/src/backend/services/material-reader/docx-markdown.js +198 -0
  153. package/src/backend/services/material-reader/fixtures.test-helper.js +169 -0
  154. package/src/backend/services/material-reader/quote.js +44 -0
  155. package/src/backend/services/material-reader/read.js +430 -0
  156. package/src/backend/services/material-reader/reader-host.js +202 -0
  157. package/src/backend/services/material-signals.js +141 -0
  158. package/src/backend/services/mcp-capabilities.js +390 -0
  159. package/src/backend/services/mdns-service.js +304 -0
  160. package/src/backend/services/mobile-api-server.js +281 -0
  161. package/src/backend/services/mobile-approvals.js +306 -0
  162. package/src/backend/services/mobile-awareness.js +180 -0
  163. package/src/backend/services/mobile-breakpoints.js +115 -0
  164. package/src/backend/services/mobile-budget.js +98 -0
  165. package/src/backend/services/mobile-freeze.js +106 -0
  166. package/src/backend/services/mobile-proposals.js +100 -0
  167. package/src/backend/services/mobile-rpc-service.js +1289 -0
  168. package/src/backend/services/mobile-workstreams.js +160 -0
  169. package/src/backend/services/monorepo-detector.js +131 -0
  170. package/src/backend/services/other-work.js +45 -0
  171. package/src/backend/services/pack-seal.js +129 -0
  172. package/src/backend/services/paired-device-service.js +192 -0
  173. package/src/backend/services/pairing-server.js +323 -0
  174. package/src/backend/services/pairing-service.js +200 -0
  175. package/src/backend/services/pantry-resolution-service.js +166 -0
  176. package/src/backend/services/parsers/base.js +124 -0
  177. package/src/backend/services/parsers/csharp.js +224 -0
  178. package/src/backend/services/parsers/go.js +180 -0
  179. package/src/backend/services/parsers/index.js +101 -0
  180. package/src/backend/services/parsers/java.js +103 -0
  181. package/src/backend/services/parsers/kotlin.js +252 -0
  182. package/src/backend/services/parsers/php.js +113 -0
  183. package/src/backend/services/parsers/python.js +189 -0
  184. package/src/backend/services/parsers/ruby.js +212 -0
  185. package/src/backend/services/parsers/rust.js +97 -0
  186. package/src/backend/services/parsers/swift.js +221 -0
  187. package/src/backend/services/parsers/typescript.js +235 -0
  188. package/src/backend/services/pattern-scan.js +65 -0
  189. package/src/backend/services/patterns.js +281 -0
  190. package/src/backend/services/peer-audit-service.js +123 -0
  191. package/src/backend/services/peer-auth.js +153 -0
  192. package/src/backend/services/peer-capabilities.js +209 -0
  193. package/src/backend/services/peer-connection-service.js +450 -0
  194. package/src/backend/services/peer-grants.js +33 -0
  195. package/src/backend/services/persistence.js +116 -0
  196. package/src/backend/services/personal-sync-service.js +232 -0
  197. package/src/backend/services/pipeline-approvals.js +72 -0
  198. package/src/backend/services/pipeline.js +232 -0
  199. package/src/backend/services/plan-arrivals.js +68 -0
  200. package/src/backend/services/plan-changes-service.js +273 -0
  201. package/src/backend/services/plan-conflict-service.js +288 -0
  202. package/src/backend/services/plan-dependencies.js +91 -0
  203. package/src/backend/services/plan-doc-guard.js +90 -0
  204. package/src/backend/services/plan-documents-service.js +275 -0
  205. package/src/backend/services/plan-event-service.js +154 -0
  206. package/src/backend/services/plan-file-refs.js +106 -0
  207. package/src/backend/services/plan-file-service.js +1564 -0
  208. package/src/backend/services/plan-history-service.js +156 -0
  209. package/src/backend/services/plan-import-service.js +261 -0
  210. package/src/backend/services/plan-item-service.js +1223 -0
  211. package/src/backend/services/plan-migrate-service.js +395 -0
  212. package/src/backend/services/plan-overlay-service.js +173 -0
  213. package/src/backend/services/plan-phases-service.js +182 -0
  214. package/src/backend/services/plan-progress-service.js +134 -0
  215. package/src/backend/services/plan-review-service.js +262 -0
  216. package/src/backend/services/plan-service.js +682 -0
  217. package/src/backend/services/plan-status.js +113 -0
  218. package/src/backend/services/plan-template-publish-service.js +217 -0
  219. package/src/backend/services/plan-templates-service.js +242 -0
  220. package/src/backend/services/plan-templates.js +1164 -0
  221. package/src/backend/services/planned-overlap-actions.js +200 -0
  222. package/src/backend/services/plans-home.js +224 -0
  223. package/src/backend/services/play-forward.js +256 -0
  224. package/src/backend/services/playback-service.js +117 -0
  225. package/src/backend/services/power-service.js +167 -0
  226. package/src/backend/services/power-signals.js +81 -0
  227. package/src/backend/services/pr-draft-service.js +142 -0
  228. package/src/backend/services/presence-service.js +122 -0
  229. package/src/backend/services/pricing.js +60 -0
  230. package/src/backend/services/project-config-service.js +474 -0
  231. package/src/backend/services/project-scanner.js +184 -0
  232. package/src/backend/services/projection-service.js +69 -0
  233. package/src/backend/services/push-notification-service.js +288 -0
  234. package/src/backend/services/recent-projects-service.js +204 -0
  235. package/src/backend/services/record-chain.js +162 -0
  236. package/src/backend/services/recurrence-rule.js +63 -0
  237. package/src/backend/services/recurring-agent.js +89 -0
  238. package/src/backend/services/recurring-scheduler.js +77 -0
  239. package/src/backend/services/recurring-service.js +276 -0
  240. package/src/backend/services/reference-service.js +169 -0
  241. package/src/backend/services/release-public-key.js +30 -0
  242. package/src/backend/services/release-signature.js +64 -0
  243. package/src/backend/services/remote-audio-service.js +224 -0
  244. package/src/backend/services/remote-interaction-service.js +275 -0
  245. package/src/backend/services/remote-terminal-service.js +324 -0
  246. package/src/backend/services/rendition/child/main.js +76 -0
  247. package/src/backend/services/rendition/engine-host.js +249 -0
  248. package/src/backend/services/rendition/engine-lock.js +39 -0
  249. package/src/backend/services/rendition/engine-lock.json +14 -0
  250. package/src/backend/services/rendition/engine-manifest.js +97 -0
  251. package/src/backend/services/rendition/network-proof.js +73 -0
  252. package/src/backend/services/rendition/rendition-service.js +175 -0
  253. package/src/backend/services/replay-frames.js +387 -0
  254. package/src/backend/services/replay-state.js +201 -0
  255. package/src/backend/services/resolvers/base.js +108 -0
  256. package/src/backend/services/resolvers/csharp.js +109 -0
  257. package/src/backend/services/resolvers/go.js +105 -0
  258. package/src/backend/services/resolvers/index.js +60 -0
  259. package/src/backend/services/resolvers/java.js +63 -0
  260. package/src/backend/services/resolvers/kotlin.js +109 -0
  261. package/src/backend/services/resolvers/php.js +89 -0
  262. package/src/backend/services/resolvers/python.js +154 -0
  263. package/src/backend/services/resolvers/ruby.js +103 -0
  264. package/src/backend/services/resolvers/rust.js +77 -0
  265. package/src/backend/services/resolvers/swift.js +98 -0
  266. package/src/backend/services/resolvers/typescript.js +71 -0
  267. package/src/backend/services/retention.js +54 -0
  268. package/src/backend/services/review-architecture.js +236 -0
  269. package/src/backend/services/review-attest.js +68 -0
  270. package/src/backend/services/review-bundle.js +226 -0
  271. package/src/backend/services/review-graduation.js +93 -0
  272. package/src/backend/services/review-host/bitbucket.js +79 -0
  273. package/src/backend/services/review-host/detect.js +80 -0
  274. package/src/backend/services/review-host/github.js +97 -0
  275. package/src/backend/services/review-host/gitlab.js +77 -0
  276. package/src/backend/services/review-host/host-state.js +103 -0
  277. package/src/backend/services/review-host/http.js +58 -0
  278. package/src/backend/services/review-host/switch.js +120 -0
  279. package/src/backend/services/review-marks.js +72 -0
  280. package/src/backend/services/review-notes.js +169 -0
  281. package/src/backend/services/review-other-work.js +90 -0
  282. package/src/backend/services/review-queue-service.js +147 -0
  283. package/src/backend/services/review-risk.js +127 -0
  284. package/src/backend/services/review-task.js +121 -0
  285. package/src/backend/services/rule-approvals.js +268 -0
  286. package/src/backend/services/rule-baseline.js +134 -0
  287. package/src/backend/services/rule-changes.js +162 -0
  288. package/src/backend/services/rule-preview.js +47 -0
  289. package/src/backend/services/rule-proposals.js +104 -0
  290. package/src/backend/services/rule-scope.js +76 -0
  291. package/src/backend/services/rulebook.js +286 -0
  292. package/src/backend/services/rules-at.js +56 -0
  293. package/src/backend/services/rules-overview.js +88 -0
  294. package/src/backend/services/schema-reconciler.js +250 -0
  295. package/src/backend/services/secret-store.js +119 -0
  296. package/src/backend/services/section-workstreams.js +95 -0
  297. package/src/backend/services/self-write-tracker.js +75 -0
  298. package/src/backend/services/sensor-bridge-service.js +285 -0
  299. package/src/backend/services/session-service.js +192 -0
  300. package/src/backend/services/settings-service.js +324 -0
  301. package/src/backend/services/signal-breakpoints.js +172 -0
  302. package/src/backend/services/signed-approval-record.js +86 -0
  303. package/src/backend/services/signed-approvals.js +244 -0
  304. package/src/backend/services/signoff-pack.js +328 -0
  305. package/src/backend/services/signoff-rows.js +114 -0
  306. package/src/backend/services/skill-arrival-service.js +138 -0
  307. package/src/backend/services/skill-model.js +193 -0
  308. package/src/backend/services/skill-use-service.js +140 -0
  309. package/src/backend/services/skills-service.js +150 -0
  310. package/src/backend/services/snapshot-compare-service.js +397 -0
  311. package/src/backend/services/source-control.js +189 -0
  312. package/src/backend/services/spec-links-service.js +123 -0
  313. package/src/backend/services/spec-proposal-withdraw.js +50 -0
  314. package/src/backend/services/spec-proposals-service.js +470 -0
  315. package/src/backend/services/sql/embedded.js +95 -0
  316. package/src/backend/services/sql/index.js +63 -0
  317. package/src/backend/services/sql/refs.js +357 -0
  318. package/src/backend/services/sql/schema.js +312 -0
  319. package/src/backend/services/sql/tokenizer.js +195 -0
  320. package/src/backend/services/stack-overlaps.js +117 -0
  321. package/src/backend/services/stack-service.js +225 -0
  322. package/src/backend/services/state-sync-service.js +384 -0
  323. package/src/backend/services/stuck-sensor-service.js +200 -0
  324. package/src/backend/services/system-discovery.js +481 -0
  325. package/src/backend/services/system-docs-service.js +701 -0
  326. package/src/backend/services/task-attachments-service.js +340 -0
  327. package/src/backend/services/task-grounding.js +60 -0
  328. package/src/backend/services/task-records/check-run-record.js +146 -0
  329. package/src/backend/services/task-records/check-runs.js +115 -0
  330. package/src/backend/services/task-records/heads.js +88 -0
  331. package/src/backend/services/task-records/material-reads.js +225 -0
  332. package/src/backend/services/task-records/read-record.js +100 -0
  333. package/src/backend/services/task-records/record.js +173 -0
  334. package/src/backend/services/task-records/run-record.js +136 -0
  335. package/src/backend/services/task-records/shared-state.js +548 -0
  336. package/src/backend/services/task-records/signing.js +140 -0
  337. package/src/backend/services/task-records/split-signals.js +52 -0
  338. package/src/backend/services/task-records/test-runs.js +164 -0
  339. package/src/backend/services/task-records/trust.js +243 -0
  340. package/src/backend/services/task-rules.js +81 -0
  341. package/src/backend/services/task-workstreams.js +90 -0
  342. package/src/backend/services/terminal-history-service.js +266 -0
  343. package/src/backend/services/terminal-service.js +267 -0
  344. package/src/backend/services/test-clock.js +53 -0
  345. package/src/backend/services/tests/grounding.js +266 -0
  346. package/src/backend/services/tests/junit.js +104 -0
  347. package/src/backend/services/tests/teammate-runs.js +134 -0
  348. package/src/backend/services/tests/test-results.js +234 -0
  349. package/src/backend/services/tree-watcher.js +204 -0
  350. package/src/backend/services/trellis-service.js +204 -0
  351. package/src/backend/services/trusted-roots.js +186 -0
  352. package/src/backend/services/update-download-service.js +342 -0
  353. package/src/backend/services/update-service.js +266 -0
  354. package/src/backend/services/watch-ignore.js +76 -0
  355. package/src/backend/services/webhook-egress.js +206 -0
  356. package/src/backend/services/webrtc-service.js +413 -0
  357. package/src/backend/services/work-changes.js +59 -0
  358. package/src/backend/services/workstream-binding.js +82 -0
  359. package/src/backend/services/workstream-commits.js +116 -0
  360. package/src/backend/services/workstream-imports.js +177 -0
  361. package/src/backend/services/workstream-service.js +335 -0
  362. package/src/backend/services/workstream-symbols.js +223 -0
  363. package/src/backend/services/workstream-watch-service.js +391 -0
  364. package/src/backend/services/worktree-service.js +235 -0
  365. package/src/cli/agent.js +100 -0
  366. package/src/cli/args.js +201 -0
  367. package/src/cli/conformity.js +106 -0
  368. package/src/cli/desktop.js +91 -0
  369. package/src/cli/main.js +409 -0
  370. package/src/cli/pipeline.js +109 -0
  371. package/src/cli/plan-verbs.js +259 -0
  372. package/src/cli/review-adapters.js +218 -0
  373. package/src/cli/review-output.js +93 -0
  374. package/src/cli/review-post.js +89 -0
  375. package/src/cli/review-sink.js +183 -0
  376. package/src/cli/review-skill.js +44 -0
  377. package/src/cli/review-verify.js +104 -0
  378. package/src/cli/review.js +386 -0
  379. package/src/cli/sarif.js +148 -0
  380. package/src/cli/verbs.js +359 -0
  381. package/src/shared/build-info.js +39 -0
  382. package/src/shared/lib/agent-review.js +199 -0
  383. package/src/shared/lib/agent-turns.js +140 -0
  384. package/src/shared/lib/awareness-digest.js +120 -0
  385. package/src/shared/lib/branch-name.js +45 -0
  386. package/src/shared/lib/breakpoint-words.js +118 -0
  387. package/src/shared/lib/budget-words.js +56 -0
  388. package/src/shared/lib/burst.js +69 -0
  389. package/src/shared/lib/call-entry.js +105 -0
  390. package/src/shared/lib/check-compare.js +42 -0
  391. package/src/shared/lib/check-words.js +216 -0
  392. package/src/shared/lib/csv.js +62 -0
  393. package/src/shared/lib/folder-entry.js +87 -0
  394. package/src/shared/lib/freeze-words.js +60 -0
  395. package/src/shared/lib/fuzzy.js +84 -0
  396. package/src/shared/lib/git-state-words.js +80 -0
  397. package/src/shared/lib/grep-entry.js +86 -0
  398. package/src/shared/lib/grounding-line.js +61 -0
  399. package/src/shared/lib/import-line.js +71 -0
  400. package/src/shared/lib/item-status.js +249 -0
  401. package/src/shared/lib/line-changes.js +53 -0
  402. package/src/shared/lib/locator.js +71 -0
  403. package/src/shared/lib/matcher.js +120 -0
  404. package/src/shared/lib/merge-order.js +65 -0
  405. package/src/shared/lib/open-findings.js +68 -0
  406. package/src/shared/lib/other-work.js +108 -0
  407. package/src/shared/lib/package-entry.js +142 -0
  408. package/src/shared/lib/plan-vocab.js +40 -0
  409. package/src/shared/lib/pptx-xml.js +86 -0
  410. package/src/shared/lib/proposal-words.js +61 -0
  411. package/src/shared/lib/recurrence.js +183 -0
  412. package/src/shared/lib/references.js +72 -0
  413. package/src/shared/lib/rule-pattern.js +56 -0
  414. package/src/shared/lib/sdp-fingerprint.js +115 -0
  415. package/src/shared/lib/sdp-minimal.js +123 -0
  416. package/src/shared/lib/secret-paths.js +34 -0
  417. package/src/shared/lib/signal-words.js +172 -0
  418. package/src/shared/lib/signoff.js +56 -0
  419. package/src/shared/lib/skills-note.js +60 -0
  420. package/src/shared/lib/spec-sections.js +78 -0
  421. package/src/shared/lib/symbol-entry.js +60 -0
  422. package/src/shared/lib/tool-phrasing.js +338 -0
  423. package/src/shared/lib/turn-gap.js +27 -0
  424. package/src/shared/lib/workstream-words.js +38 -0
  425. package/src/shared/lib/xlsx-xml.js +144 -0
  426. package/src/shared/lib/zip-reader.js +99 -0
  427. package/src/shared/types/agent.js +27 -0
  428. package/src/shared/types/architecture-rules.js +30 -0
  429. package/src/shared/types/ast.js +15 -0
  430. package/src/shared/types/breakpoint.js +33 -0
  431. package/src/shared/types/channel.js +41 -0
  432. package/src/shared/types/criteria.js +15 -0
  433. package/src/shared/types/graph.js +15 -0
  434. package/src/shared/types/index.js +53 -0
  435. package/src/shared/types/peer.js +36 -0
  436. package/src/shared/types/pipeline.js +15 -0
  437. package/src/shared/types/plan.js +15 -0
  438. package/src/shared/types/play-forward.js +15 -0
  439. package/src/shared/types/power.js +15 -0
  440. package/src/shared/types/presence.js +15 -0
  441. package/src/shared/types/project-config.js +35 -0
  442. package/src/shared/types/project.js +15 -0
  443. package/src/shared/types/record.js +15 -0
  444. package/src/shared/types/recurring.js +15 -0
  445. package/src/shared/types/review.js +15 -0
  446. package/src/shared/types/settings.js +114 -0
  447. package/src/shared/types/stack.js +15 -0
  448. package/src/shared/types/system-doc.js +15 -0
  449. package/src/shared/types/system.js +15 -0
@@ -0,0 +1,250 @@
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 schema_reconciler_exports = {};
19
+ __export(schema_reconciler_exports, {
20
+ parseCreateTableSql: () => parseCreateTableSql,
21
+ reconcileSchema: () => reconcileSchema,
22
+ reconcileSchemaFromSql: () => reconcileSchemaFromSql
23
+ });
24
+ module.exports = __toCommonJS(schema_reconciler_exports);
25
+ const COMMENT_LINE = /--[^\n]*/g;
26
+ const COMMENT_BLOCK = /\/\*[\s\S]*?\*\//g;
27
+ function stripComments(sql) {
28
+ return sql.replace(COMMENT_BLOCK, "").replace(COMMENT_LINE, "");
29
+ }
30
+ function parseCreateTableSql(sql) {
31
+ const cleaned = stripComments(sql);
32
+ const out = [];
33
+ const headRe = /CREATE\s+TABLE\s+(?:IF\s+NOT\s+EXISTS\s+)?([A-Za-z_][A-Za-z0-9_]*)\s*\(/gi;
34
+ let m;
35
+ while ((m = headRe.exec(cleaned)) !== null) {
36
+ const tableName = m[1];
37
+ const bodyStart = m.index + m[0].length;
38
+ const bodyEnd = findMatchingParen(cleaned, bodyStart - 1);
39
+ if (bodyEnd < 0) continue;
40
+ const body = cleaned.slice(bodyStart, bodyEnd);
41
+ const columns = parseColumnList(body);
42
+ out.push({ name: tableName, columns });
43
+ headRe.lastIndex = bodyEnd + 1;
44
+ }
45
+ return out;
46
+ }
47
+ function findMatchingParen(s, openIdx) {
48
+ if (s[openIdx] !== "(") return -1;
49
+ let depth = 1;
50
+ let i = openIdx + 1;
51
+ while (i < s.length) {
52
+ const ch = s[i];
53
+ if (ch === "'" || ch === '"') {
54
+ const quote = ch;
55
+ i++;
56
+ while (i < s.length) {
57
+ if (s[i] === quote) {
58
+ if (s[i + 1] === quote) {
59
+ i += 2;
60
+ continue;
61
+ }
62
+ i++;
63
+ break;
64
+ }
65
+ i++;
66
+ }
67
+ continue;
68
+ }
69
+ if (ch === "(") depth++;
70
+ else if (ch === ")") {
71
+ depth--;
72
+ if (depth === 0) return i;
73
+ }
74
+ i++;
75
+ }
76
+ return -1;
77
+ }
78
+ function parseColumnList(body) {
79
+ const parts = splitTopLevelCommas(body);
80
+ const columns = [];
81
+ for (const raw of parts) {
82
+ const part = raw.trim();
83
+ if (!part) continue;
84
+ if (isConstraintClause(part)) continue;
85
+ const col = parseColumnDef(part);
86
+ if (col) columns.push(col);
87
+ }
88
+ return columns;
89
+ }
90
+ function splitTopLevelCommas(s) {
91
+ const out = [];
92
+ let depth = 0;
93
+ let start = 0;
94
+ let i = 0;
95
+ while (i < s.length) {
96
+ const ch = s[i];
97
+ if (ch === "'" || ch === '"') {
98
+ const quote = ch;
99
+ i++;
100
+ while (i < s.length) {
101
+ if (s[i] === quote) {
102
+ if (s[i + 1] === quote) {
103
+ i += 2;
104
+ continue;
105
+ }
106
+ i++;
107
+ break;
108
+ }
109
+ i++;
110
+ }
111
+ continue;
112
+ }
113
+ if (ch === "(") depth++;
114
+ else if (ch === ")") depth--;
115
+ else if (ch === "," && depth === 0) {
116
+ out.push(s.slice(start, i));
117
+ start = i + 1;
118
+ }
119
+ i++;
120
+ }
121
+ out.push(s.slice(start));
122
+ return out;
123
+ }
124
+ const CONSTRAINT_KEYWORDS = [
125
+ "PRIMARY KEY",
126
+ "UNIQUE",
127
+ "CHECK",
128
+ "FOREIGN KEY",
129
+ "CONSTRAINT"
130
+ ];
131
+ function isConstraintClause(part) {
132
+ const upper = part.toUpperCase().trimStart();
133
+ return CONSTRAINT_KEYWORDS.some((kw) => upper.startsWith(kw + " ") || upper.startsWith(kw + "("));
134
+ }
135
+ function parseColumnDef(def) {
136
+ let rest = def.trim();
137
+ let name;
138
+ if (rest.startsWith('"')) {
139
+ const closeIdx = rest.indexOf('"', 1);
140
+ if (closeIdx < 0) return null;
141
+ name = rest.slice(1, closeIdx);
142
+ rest = rest.slice(closeIdx + 1).trim();
143
+ } else {
144
+ const m = rest.match(/^([A-Za-z_][A-Za-z0-9_]*)\s+([\s\S]*)$/);
145
+ if (!m) return null;
146
+ name = m[1];
147
+ rest = m[2];
148
+ }
149
+ const typeMatch = rest.match(/^([A-Za-z][A-Za-z0-9_]*)/);
150
+ const type = typeMatch ? typeMatch[1].toUpperCase() : "TEXT";
151
+ const upper = rest.toUpperCase();
152
+ const notNull = /\bNOT\s+NULL\b/.test(upper);
153
+ const defaultValue = extractDefault(rest);
154
+ return { name, type, notNull, defaultValue };
155
+ }
156
+ function extractDefault(s) {
157
+ const re = /\bDEFAULT\s+/i;
158
+ const m = re.exec(s);
159
+ if (!m) return null;
160
+ const i = m.index + m[0].length;
161
+ if (i >= s.length) return null;
162
+ const ch = s[i];
163
+ if (ch === "'" || ch === '"') {
164
+ const quote = ch;
165
+ let j2 = i + 1;
166
+ while (j2 < s.length) {
167
+ if (s[j2] === quote) {
168
+ if (s[j2 + 1] === quote) {
169
+ j2 += 2;
170
+ continue;
171
+ }
172
+ return s.slice(i, j2 + 1);
173
+ }
174
+ j2++;
175
+ }
176
+ return null;
177
+ }
178
+ let j = i;
179
+ while (j < s.length && !/\s|,/.test(s[j])) j++;
180
+ return s.slice(i, j);
181
+ }
182
+ function liveColumns(db, table) {
183
+ if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(table)) return [];
184
+ const result = db.exec(`PRAGMA table_info(${table})`);
185
+ if (result.length === 0) return [];
186
+ const { columns, values } = result[0];
187
+ const nameIdx = columns.indexOf("name");
188
+ if (nameIdx < 0) return [];
189
+ const out = [];
190
+ for (const row of values) {
191
+ const v = row[nameIdx];
192
+ if (typeof v === "string") out.push(v);
193
+ }
194
+ return out;
195
+ }
196
+ function buildAddColumnSql(table, col) {
197
+ const parts = [`ALTER TABLE ${table} ADD COLUMN ${col.name} ${col.type}`];
198
+ if (col.notNull && col.defaultValue !== null) {
199
+ parts.push(`NOT NULL DEFAULT ${col.defaultValue}`);
200
+ } else if (col.defaultValue !== null) {
201
+ parts.push(`DEFAULT ${col.defaultValue}`);
202
+ }
203
+ return parts.join(" ");
204
+ }
205
+ function reconcileSchema(db, expected, options = {}) {
206
+ const skip = new Set(options.skipTables ?? []);
207
+ const report = {
208
+ tablesChecked: 0,
209
+ tablesSkipped: [],
210
+ columnsAdded: [],
211
+ errors: []
212
+ };
213
+ for (const table of expected) {
214
+ if (skip.has(table.name)) {
215
+ report.tablesSkipped.push(table.name);
216
+ continue;
217
+ }
218
+ const actual = liveColumns(db, table.name);
219
+ if (actual.length === 0) {
220
+ report.tablesSkipped.push(table.name);
221
+ continue;
222
+ }
223
+ report.tablesChecked++;
224
+ const actualSet = new Set(actual);
225
+ for (const col of table.columns) {
226
+ if (actualSet.has(col.name)) continue;
227
+ const sql = buildAddColumnSql(table.name, col);
228
+ try {
229
+ db.run(sql);
230
+ report.columnsAdded.push({ table: table.name, column: col.name, sql });
231
+ } catch (err) {
232
+ report.errors.push({
233
+ table: table.name,
234
+ column: col.name,
235
+ error: err instanceof Error ? err.message : String(err)
236
+ });
237
+ }
238
+ }
239
+ }
240
+ return report;
241
+ }
242
+ function reconcileSchemaFromSql(db, schemaSql, options = {}) {
243
+ return reconcileSchema(db, parseCreateTableSql(schemaSql), options);
244
+ }
245
+ // Annotate the CommonJS export names for ESM import in node:
246
+ 0 && (module.exports = {
247
+ parseCreateTableSql,
248
+ reconcileSchema,
249
+ reconcileSchemaFromSql
250
+ });
@@ -0,0 +1,119 @@
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 secret_store_exports = {};
29
+ __export(secret_store_exports, {
30
+ fileStore: () => fileStore,
31
+ memoryStore: () => memoryStore,
32
+ openSecretStore: () => openSecretStore,
33
+ secretStore: () => secretStore
34
+ });
35
+ module.exports = __toCommonJS(secret_store_exports);
36
+ var import_node_crypto = require("node:crypto");
37
+ var import_node_fs = __toESM(require("node:fs"));
38
+ var import_node_path = __toESM(require("node:path"));
39
+ var import_persistence = require("./persistence");
40
+ const KEY = /^[a-z][a-z0-9:._-]{0,127}$/;
41
+ function checkKey(key) {
42
+ if (!KEY.test(key)) throw new Error(`Not a secret key: ${key}`);
43
+ }
44
+ function memoryStore(why) {
45
+ const values = /* @__PURE__ */ new Map();
46
+ return {
47
+ kind: "memory",
48
+ where: `kept only until CodeTrellis quits: ${why}`,
49
+ has: (key) => values.has(key),
50
+ get: (key) => values.get(key) ?? null,
51
+ set: (key, value) => {
52
+ checkKey(key);
53
+ values.set(key, value);
54
+ },
55
+ delete: (key) => {
56
+ values.delete(key);
57
+ }
58
+ };
59
+ }
60
+ function fileStore(dir, cipher, where) {
61
+ const fileOf = (key) => import_node_path.default.join(dir, `${(0, import_node_crypto.createHash)("sha256").update(key).digest("hex").slice(0, 32)}.bin`);
62
+ return {
63
+ kind: "os-keychain",
64
+ where,
65
+ has: (key) => import_node_fs.default.existsSync(fileOf(key)),
66
+ get: (key) => {
67
+ try {
68
+ return cipher.decrypt(import_node_fs.default.readFileSync(fileOf(key)));
69
+ } catch {
70
+ return null;
71
+ }
72
+ },
73
+ set: (key, value) => {
74
+ checkKey(key);
75
+ import_node_fs.default.mkdirSync(dir, { recursive: true, mode: 448 });
76
+ const file = fileOf(key);
77
+ const tmp = `${file}.${process.pid}.tmp`;
78
+ import_node_fs.default.writeFileSync(tmp, cipher.encrypt(value), { mode: 384 });
79
+ import_node_fs.default.renameSync(tmp, file);
80
+ },
81
+ delete: (key) => {
82
+ import_node_fs.default.rmSync(fileOf(key), { force: true });
83
+ }
84
+ };
85
+ }
86
+ function electronSafeStorage() {
87
+ if (!process.versions.electron) return null;
88
+ try {
89
+ const { safeStorage } = require("electron");
90
+ return safeStorage ?? null;
91
+ } catch {
92
+ return null;
93
+ }
94
+ }
95
+ const KEYCHAIN_NAME = { darwin: "the macOS Keychain", win32: "Windows (DPAPI)", linux: "the system keyring" };
96
+ function openSecretStore() {
97
+ const safe = electronSafeStorage();
98
+ if (!safe) return memoryStore("this build has no OS keychain (it is not running inside the desktop app)");
99
+ if (!safe.isEncryptionAvailable()) return memoryStore("the OS keychain is not available");
100
+ if (process.platform === "linux" && safe.getSelectedStorageBackend?.() === "basic_text") {
101
+ return memoryStore("no system keyring is running, so the token could not be encrypted");
102
+ }
103
+ return fileStore(
104
+ import_node_path.default.join((0, import_persistence.getDataDir)(), "secrets"),
105
+ { encrypt: (s) => safe.encryptString(s), decrypt: (b) => safe.decryptString(b) },
106
+ `encrypted with a key held by ${KEYCHAIN_NAME[process.platform] ?? "the OS keychain"}`
107
+ );
108
+ }
109
+ let store = null;
110
+ function secretStore() {
111
+ return store ??= openSecretStore();
112
+ }
113
+ // Annotate the CommonJS export names for ESM import in node:
114
+ 0 && (module.exports = {
115
+ fileStore,
116
+ memoryStore,
117
+ openSecretStore,
118
+ secretStore
119
+ });
@@ -0,0 +1,95 @@
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 section_workstreams_exports = {};
19
+ __export(section_workstreams_exports, {
20
+ branchOfRoot: () => branchOfRoot,
21
+ claimRefusal: () => claimRefusal,
22
+ cleanBranch: () => cleanBranch,
23
+ elsewhereLine: () => elsewhereLine,
24
+ offeredTo: () => offeredTo,
25
+ resolveSection: () => resolveSection,
26
+ usableBase: () => usableBase,
27
+ whereWorked: () => whereWorked,
28
+ workstreamOfBranch: () => workstreamOfBranch,
29
+ worktreeDirFor: () => import_branch_name.worktreeDirFor
30
+ });
31
+ module.exports = __toCommonJS(section_workstreams_exports);
32
+ var import_branch_name = require("../../shared/lib/branch-name");
33
+ const BRANCH_RE = /^(?!\/|.*\/\/|.*\.\.|.*@\{|.*\.lock$|.*\/$|-)[A-Za-z0-9._/@+-]{1,100}$/;
34
+ function cleanBranch(raw) {
35
+ if (typeof raw !== "string") return null;
36
+ const b = raw.trim();
37
+ return BRANCH_RE.test(b) ? b : null;
38
+ }
39
+ function resolveSection(item, getItem) {
40
+ let cur = item;
41
+ const seen = /* @__PURE__ */ new Set();
42
+ while (cur && !seen.has(cur.uid)) {
43
+ seen.add(cur.uid);
44
+ if (cur.workstream) return { branch: cur.workstream, fromUid: cur.uid, fromTitle: cur.title };
45
+ cur = cur.parentUid ? getItem(cur.parentUid) : null;
46
+ }
47
+ return null;
48
+ }
49
+ function workstreamOfBranch(branch, workstreams) {
50
+ return workstreams.find((w) => w.branch === branch && !w.root.startsWith("branch:")) ?? workstreams.find((w) => w.branch === branch) ?? null;
51
+ }
52
+ function branchOfRoot(root, workstreams) {
53
+ if (!root) return null;
54
+ return workstreams.find((w) => w.root === root)?.branch ?? null;
55
+ }
56
+ function whereWorked(branch, workstreams) {
57
+ const w = workstreamOfBranch(branch, workstreams);
58
+ if (w && !w.root.startsWith("branch:")) return `${branch} in ${w.root}`;
59
+ if (w) return `${branch} (checked out in no worktree yet)`;
60
+ return `${branch} (no worktree or branch of that name here yet)`;
61
+ }
62
+ function claimRefusal(item, section, callerBranch, workstreams) {
63
+ if (!section || section.branch === callerBranch) return null;
64
+ const where = whereWorked(section.branch, workstreams);
65
+ const lead = section.fromUid === item.uid ? `\u201C${item.title}\u201D is worked on ${where}` : `\u201C${item.title}\u201D is in \u201C${section.fromTitle}\u201D, which is worked on ${where}`;
66
+ const you = callerBranch ? `You are working on ${callerBranch}.` : "CodeTrellis cannot tell which worktree you are in: your client reported no folder, or its checkout is on no branch.";
67
+ return `${lead}. ${you} Start a session there to claim it, or ask the person to move the section to your worktree.`;
68
+ }
69
+ function offeredTo(section, callerBranch) {
70
+ return !section || section.branch === callerBranch;
71
+ }
72
+ function elsewhereLine(branches) {
73
+ const counts = /* @__PURE__ */ new Map();
74
+ for (const b of branches) counts.set(b, (counts.get(b) ?? 0) + 1);
75
+ return [...counts].sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0])).map(([b, n]) => `${n} in ${b}`).join(", ");
76
+ }
77
+ function usableBase(baseRef) {
78
+ if (!baseRef) return null;
79
+ const b = baseRef.trim();
80
+ if (/^[0-9a-f]{7,40}$/i.test(b)) return b;
81
+ return cleanBranch(b);
82
+ }
83
+ // Annotate the CommonJS export names for ESM import in node:
84
+ 0 && (module.exports = {
85
+ branchOfRoot,
86
+ claimRefusal,
87
+ cleanBranch,
88
+ elsewhereLine,
89
+ offeredTo,
90
+ resolveSection,
91
+ usableBase,
92
+ whereWorked,
93
+ workstreamOfBranch,
94
+ worktreeDirFor
95
+ });
@@ -0,0 +1,75 @@
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 self_write_tracker_exports = {};
29
+ __export(self_write_tracker_exports, {
30
+ stampSelfWrite: () => stampSelfWrite,
31
+ wasJustWrittenByUs: () => wasJustWrittenByUs
32
+ });
33
+ module.exports = __toCommonJS(self_write_tracker_exports);
34
+ var import_node_crypto = __toESM(require("node:crypto"));
35
+ var import_node_fs = __toESM(require("node:fs"));
36
+ const recentSelfWrites = /* @__PURE__ */ new Map();
37
+ const SELF_WRITE_TTL_MS = 1e3;
38
+ const MAX_STAMPS = 5e3;
39
+ function hashOf(filePath) {
40
+ try {
41
+ return import_node_crypto.default.createHash("sha1").update(import_node_fs.default.readFileSync(filePath)).digest("hex");
42
+ } catch {
43
+ return null;
44
+ }
45
+ }
46
+ function stampSelfWrite(filePath) {
47
+ recentSelfWrites.delete(filePath);
48
+ recentSelfWrites.set(filePath, { at: Date.now(), hash: hashOf(filePath) });
49
+ if (recentSelfWrites.size > MAX_STAMPS) {
50
+ const oldest = recentSelfWrites.keys().next().value;
51
+ if (oldest !== void 0) recentSelfWrites.delete(oldest);
52
+ }
53
+ }
54
+ function wasJustWrittenByUs(filePath) {
55
+ const t = recentSelfWrites.get(filePath);
56
+ if (!t) return false;
57
+ if (t.hash) {
58
+ const now = hashOf(filePath);
59
+ if (now === t.hash) return true;
60
+ if (now !== null) {
61
+ recentSelfWrites.delete(filePath);
62
+ return false;
63
+ }
64
+ }
65
+ if (Date.now() - t.at > SELF_WRITE_TTL_MS) {
66
+ recentSelfWrites.delete(filePath);
67
+ return false;
68
+ }
69
+ return true;
70
+ }
71
+ // Annotate the CommonJS export names for ESM import in node:
72
+ 0 && (module.exports = {
73
+ stampSelfWrite,
74
+ wasJustWrittenByUs
75
+ });