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,67 @@
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 grant_guard_exports = {};
19
+ __export(grant_guard_exports, {
20
+ grantChange: () => grantChange,
21
+ grantRefusal: () => grantRefusal,
22
+ httpGrantsAllowed: () => httpGrantsAllowed
23
+ });
24
+ module.exports = __toCommonJS(grant_guard_exports);
25
+ const GRANT_FIELDS = [
26
+ ["mcp", "capabilities", "Settings \u2192 MCP Server"],
27
+ ["mcp", "projectScope", "Settings \u2192 MCP Server"],
28
+ // Who may change things over plain HTTP (carried item 2b). Otherwise a
29
+ // script refused a change could turn changes back on and try again.
30
+ ["mcp", "acceptLocalApiChanges", "Settings \u2192 MCP Server \u2192 Local API"],
31
+ ["device", "exposeMobileApi", "Settings \u2192 Devices"],
32
+ ["device", "advertise", "Settings \u2192 Devices"],
33
+ ["device", "shareAudio", "Settings \u2192 Devices"],
34
+ ["webhooks", "allowedHosts", "Settings \u2192 Plans"],
35
+ ["webhooks", "allowLoopback", "Settings \u2192 Plans"],
36
+ // How long the record is kept (B10.2): shortening it erases evidence, so
37
+ // no agent or script may, only the person.
38
+ ["data", "retentionDays", "Settings \u2192 Data"],
39
+ // Keeping remotes current (E5) has the app reach hosts on its own, on a
40
+ // timer: what it can reach widens, so only the person turns it on.
41
+ ["git", "keepRemotesCurrent", "Settings \u2192 Git"]
42
+ ];
43
+ function httpGrantsAllowed() {
44
+ return process.env.NODE_ENV === "test" && process.env.CODETRELLIS_ALLOW_HTTP_GRANTS === "1";
45
+ }
46
+ function grantChange(patch, current) {
47
+ if (!patch || typeof patch !== "object") return null;
48
+ const p = patch;
49
+ for (const [section, key, where] of GRANT_FIELDS) {
50
+ const next = p[section]?.[key];
51
+ if (next === void 0) continue;
52
+ const now = current[section]?.[key];
53
+ if (JSON.stringify(next) !== JSON.stringify(now ?? (Array.isArray(next) ? [] : void 0))) {
54
+ return { field: `${section}.${key}`, where };
55
+ }
56
+ }
57
+ return null;
58
+ }
59
+ function grantRefusal(field, where) {
60
+ return `Only you can change ${field} \u2014 in the CodeTrellis app, ${where}.`;
61
+ }
62
+ // Annotate the CommonJS export names for ESM import in node:
63
+ 0 && (module.exports = {
64
+ grantChange,
65
+ grantRefusal,
66
+ httpGrantsAllowed
67
+ });
@@ -0,0 +1,135 @@
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 html_view_policy_exports = {};
29
+ __export(html_view_policy_exports, {
30
+ htmlAssetType: () => htmlAssetType,
31
+ htmlViewCsp: () => htmlViewCsp,
32
+ isSameReport: () => isSameReport,
33
+ reportAssetPath: () => reportAssetPath,
34
+ serveReportFile: () => serveReportFile
35
+ });
36
+ module.exports = __toCommonJS(html_view_policy_exports);
37
+ var import_node_path = __toESM(require("node:path"));
38
+ var import_confined_fs = require("./confined-fs");
39
+ const ASSET_TYPES = {
40
+ html: "text/html; charset=utf-8",
41
+ htm: "text/html; charset=utf-8",
42
+ css: "text/css; charset=utf-8",
43
+ js: "text/javascript; charset=utf-8",
44
+ mjs: "text/javascript; charset=utf-8",
45
+ json: "application/json",
46
+ txt: "text/plain; charset=utf-8",
47
+ map: "application/json",
48
+ png: "image/png",
49
+ jpg: "image/jpeg",
50
+ jpeg: "image/jpeg",
51
+ gif: "image/gif",
52
+ webp: "image/webp",
53
+ svg: "image/svg+xml",
54
+ ico: "image/x-icon",
55
+ woff: "font/woff",
56
+ woff2: "font/woff2",
57
+ ttf: "font/ttf",
58
+ otf: "font/otf",
59
+ mp4: "video/mp4",
60
+ webm: "video/webm"
61
+ };
62
+ function htmlAssetType(rel) {
63
+ return ASSET_TYPES[import_node_path.default.extname(rel).slice(1).toLowerCase()] ?? null;
64
+ }
65
+ function reportAssetPath(reportRel, urlPath) {
66
+ let decoded;
67
+ try {
68
+ decoded = decodeURIComponent(urlPath);
69
+ } catch {
70
+ return null;
71
+ }
72
+ if (decoded.includes("\0") || decoded.includes("\\")) return null;
73
+ const folder = import_node_path.default.posix.dirname(reportRel.split(import_node_path.default.sep).join("/"));
74
+ const wanted = decoded.replace(/^\/+/, "") || import_node_path.default.posix.basename(reportRel);
75
+ const rel = import_node_path.default.posix.normalize(import_node_path.default.posix.join(folder, wanted));
76
+ if (rel === ".." || rel.startsWith("../") || import_node_path.default.posix.isAbsolute(rel)) return null;
77
+ if (folder !== "." && !rel.startsWith(`${folder}/`)) return null;
78
+ return rel;
79
+ }
80
+ function htmlViewCsp(scripts) {
81
+ return [
82
+ "default-src 'none'",
83
+ "img-src ct-html: data: blob:",
84
+ "style-src ct-html: 'unsafe-inline'",
85
+ "font-src ct-html: data:",
86
+ "media-src ct-html: data: blob:",
87
+ scripts ? "script-src ct-html: 'unsafe-inline'" : "script-src 'none'",
88
+ scripts ? "worker-src blob: ct-html:" : "worker-src 'none'",
89
+ "frame-src 'none'",
90
+ "object-src 'none'",
91
+ "form-action 'none'",
92
+ "base-uri 'none'"
93
+ ].join("; ");
94
+ }
95
+ function isSameReport(current, target) {
96
+ try {
97
+ const a = new URL(current);
98
+ const b = new URL(target);
99
+ return a.protocol === "ct-html:" && b.protocol === "ct-html:" && a.host === b.host;
100
+ } catch {
101
+ return false;
102
+ }
103
+ }
104
+ function serveReportFile(report, urlPath, scripts) {
105
+ const notFound = { status: 404, headers: {}, stream: null, error: "Not part of this report" };
106
+ if (!/\.html?$/i.test(report.rel)) return notFound;
107
+ const rel = reportAssetPath(report.rel, urlPath);
108
+ const type = rel ? htmlAssetType(rel) : null;
109
+ if (!rel || !type) return notFound;
110
+ let opened;
111
+ try {
112
+ opened = (0, import_confined_fs.openReadStreamWithin)(report.root, rel, {}, "report file");
113
+ } catch {
114
+ return notFound;
115
+ }
116
+ return {
117
+ status: 200,
118
+ stream: opened.stream,
119
+ headers: {
120
+ "Content-Type": type,
121
+ "Content-Length": String(opened.size),
122
+ "X-Content-Type-Options": "nosniff",
123
+ "Cache-Control": "no-store",
124
+ "Content-Security-Policy": htmlViewCsp(scripts)
125
+ }
126
+ };
127
+ }
128
+ // Annotate the CommonJS export names for ESM import in node:
129
+ 0 && (module.exports = {
130
+ htmlAssetType,
131
+ htmlViewCsp,
132
+ isSameReport,
133
+ reportAssetPath,
134
+ serveReportFile
135
+ });
@@ -0,0 +1,55 @@
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 human_decision_exports = {};
19
+ __export(human_decision_exports, {
20
+ actorTypeOf: () => actorTypeOf,
21
+ isHumanDecision: () => isHumanDecision,
22
+ isUnverifiedDecision: () => isUnverifiedDecision,
23
+ issueHumanDecision: () => issueHumanDecision,
24
+ issueUnverifiedDecision: () => issueUnverifiedDecision
25
+ });
26
+ module.exports = __toCommonJS(human_decision_exports);
27
+ const issued = /* @__PURE__ */ new WeakSet();
28
+ function issueHumanDecision(channel, actor, device = null) {
29
+ const decision = Object.freeze({ actor, channel, device });
30
+ issued.add(decision);
31
+ return decision;
32
+ }
33
+ function isHumanDecision(value) {
34
+ return typeof value === "object" && value !== null && issued.has(value);
35
+ }
36
+ const unverified = /* @__PURE__ */ new WeakSet();
37
+ function issueUnverifiedDecision(actor) {
38
+ const decision = Object.freeze({ actor, channel: "local-api", device: null });
39
+ unverified.add(decision);
40
+ return decision;
41
+ }
42
+ function isUnverifiedDecision(value) {
43
+ return typeof value === "object" && value !== null && unverified.has(value);
44
+ }
45
+ function actorTypeOf(decision) {
46
+ return isHumanDecision(decision) ? "human" : "unverified";
47
+ }
48
+ // Annotate the CommonJS export names for ESM import in node:
49
+ 0 && (module.exports = {
50
+ actorTypeOf,
51
+ isHumanDecision,
52
+ isUnverifiedDecision,
53
+ issueHumanDecision,
54
+ issueUnverifiedDecision
55
+ });
@@ -0,0 +1,159 @@
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 importers_exports = {};
29
+ __export(importers_exports, {
30
+ exportedNames: () => exportedNames,
31
+ exportedSymbols: () => exportedSymbols,
32
+ importersOf: () => importersOf,
33
+ originsOf: () => originsOf
34
+ });
35
+ module.exports = __toCommonJS(importers_exports);
36
+ var import_node_path = __toESM(require("node:path"));
37
+ var import_database = require("./database");
38
+ const MAX_DEPTH = 5;
39
+ const isGo = (file) => /\.go$/.test(file) && !/_test\.go$/.test(file);
40
+ function rowsImporting(target) {
41
+ const go = isGo(target);
42
+ const dir = import_node_path.default.dirname(target);
43
+ const res = go ? (0, import_database.getDb)().exec(
44
+ `SELECT f.path, f.relative_path, i.specifiers, i.is_namespace, i.is_reexport, i.resolved_path
45
+ FROM imports i JOIN files f ON i.file_id = f.id
46
+ WHERE i.resolved_path LIKE ? ESCAPE '\\'`,
47
+ [`${dir.replace(/[\\%_]/g, (c) => `\\${c}`)}${import_node_path.default.sep}%.go`]
48
+ ) : (0, import_database.getDb)().exec(
49
+ `SELECT f.path, f.relative_path, i.specifiers, i.is_namespace, i.is_reexport
50
+ FROM imports i JOIN files f ON i.file_id = f.id
51
+ WHERE i.resolved_path = ?`,
52
+ [target]
53
+ );
54
+ const rows = (res[0]?.values ?? []).filter((r) => !go || import_node_path.default.dirname(r[5]) === dir && isGo(r[5]));
55
+ if (go) {
56
+ return rows.map((r) => ({ path: r[0], rel: r[1], specifiers: [], namespace: true, reexport: false }));
57
+ }
58
+ return rows.map((r) => ({
59
+ path: r[0],
60
+ rel: r[1],
61
+ specifiers: JSON.parse(r[2] || "[]"),
62
+ namespace: r[3] === 1,
63
+ reexport: r[4] === 1
64
+ }));
65
+ }
66
+ function exportedNames(filePath) {
67
+ const res = (0, import_database.getDb)().exec(
68
+ `SELECT s.name, s.modifiers, f.language FROM symbols s JOIN files f ON s.file_id = f.id
69
+ WHERE f.path = ? AND s.parent_symbol_id IS NULL`,
70
+ [filePath]
71
+ );
72
+ const out = /* @__PURE__ */ new Set();
73
+ for (const [name, mods, lang] of res[0]?.values ?? []) {
74
+ const modifiers = JSON.parse(mods || "[]");
75
+ if (modifiers.includes("export") || lang === "python" && !name.startsWith("_")) out.add(name);
76
+ }
77
+ return out;
78
+ }
79
+ function exportedSymbols() {
80
+ const res = (0, import_database.getDb)().exec(
81
+ `SELECT f.path, f.relative_path, s.name, s.modifiers, f.language FROM symbols s JOIN files f ON s.file_id = f.id
82
+ WHERE s.parent_symbol_id IS NULL`
83
+ );
84
+ const out = [];
85
+ for (const [p, rel, name, mods, lang] of res[0]?.values ?? []) {
86
+ const modifiers = JSON.parse(mods || "[]");
87
+ if (modifiers.includes("export") || lang === "python" && !name.startsWith("_")) out.push({ path: p, rel, name });
88
+ }
89
+ return out;
90
+ }
91
+ function stored(filePath) {
92
+ const row = (0, import_database.getDb)().exec(
93
+ `SELECT path FROM files WHERE path = ? OR relative_path = ? LIMIT 1`,
94
+ [filePath, filePath.replace(/^\.\//, "")]
95
+ );
96
+ return row[0]?.values[0]?.[0] ?? filePath;
97
+ }
98
+ function importersOf(filePath, names) {
99
+ const target = stored(filePath);
100
+ const found = /* @__PURE__ */ new Map();
101
+ const seen = /* @__PURE__ */ new Set();
102
+ const visit = (file, wanted, via) => {
103
+ const key = `${file}\0${[...wanted ?? ["*"]].sort().join(",")}`;
104
+ if (seen.has(key) || via.length > MAX_DEPTH) return;
105
+ seen.add(key);
106
+ const offered = wanted ?? exportedNames(file);
107
+ const narrow = wanted !== null || offered.size > 0;
108
+ for (const row of rowsImporting(file)) {
109
+ if (row.path === target) continue;
110
+ if (row.reexport) {
111
+ const star = row.specifiers.includes("*");
112
+ const passed = row.namespace && !star ? null : new Set([...offered].filter((n) => star || row.specifiers.includes(n)));
113
+ if (passed === null || passed.size > 0 || !narrow) visit(row.path, passed, [row.rel, ...via]);
114
+ continue;
115
+ }
116
+ const direct = via.length === 0 && wanted === null;
117
+ const uses = row.namespace ? [...offered] : row.specifiers.filter((s) => !narrow || offered.has(s));
118
+ if (!direct && !row.namespace && uses.length === 0) continue;
119
+ const entry = {
120
+ path: row.path,
121
+ relativePath: row.rel,
122
+ names: direct && !row.namespace ? row.specifiers : uses,
123
+ possibly: row.namespace,
124
+ via: [...via]
125
+ };
126
+ const had = found.get(row.path);
127
+ if (!had || had.via.length > entry.via.length) found.set(row.path, entry);
128
+ }
129
+ };
130
+ visit(target, names ? new Set(names) : null, []);
131
+ return [...found.values()].sort((a, b) => a.via.length - b.via.length || a.relativePath.localeCompare(b.relativePath));
132
+ }
133
+ function originsOf(filePath, name) {
134
+ const out = [];
135
+ const seen = /* @__PURE__ */ new Set();
136
+ const visit = (file, depth) => {
137
+ if (seen.has(file) || depth > MAX_DEPTH) return;
138
+ seen.add(file);
139
+ out.push(file);
140
+ const res = (0, import_database.getDb)().exec(
141
+ `SELECT i.resolved_path, i.specifiers FROM imports i JOIN files f ON i.file_id = f.id
142
+ WHERE f.path = ? AND i.is_reexport = 1 AND i.resolved_path IS NOT NULL`,
143
+ [file]
144
+ );
145
+ for (const [resolved, specs] of res[0]?.values ?? []) {
146
+ const names = JSON.parse(specs || "[]");
147
+ if (name === "*" || names.includes(name) || names.includes("*")) visit(resolved, depth + 1);
148
+ }
149
+ };
150
+ visit(stored(filePath), 0);
151
+ return out;
152
+ }
153
+ // Annotate the CommonJS export names for ESM import in node:
154
+ 0 && (module.exports = {
155
+ exportedNames,
156
+ exportedSymbols,
157
+ importersOf,
158
+ originsOf
159
+ });
@@ -0,0 +1,105 @@
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 intent_service_exports = {};
29
+ __export(intent_service_exports, {
30
+ MAX_INTENT_PATHS: () => MAX_INTENT_PATHS,
31
+ MAX_INTENT_SUMMARY: () => MAX_INTENT_SUMMARY,
32
+ MAX_INTENT_SYMBOLS: () => MAX_INTENT_SYMBOLS,
33
+ clearAllIntents: () => clearAllIntents,
34
+ clearIntent: () => clearIntent,
35
+ declareIntent: () => declareIntent,
36
+ getIntent: () => getIntent,
37
+ intentFiles: () => intentFiles,
38
+ normaliseIntentPath: () => normaliseIntentPath,
39
+ parseIntentSymbol: () => parseIntentSymbol
40
+ });
41
+ module.exports = __toCommonJS(intent_service_exports);
42
+ var import_node_path = __toESM(require("node:path"));
43
+ const MAX_INTENT_PATHS = 50;
44
+ const MAX_INTENT_SYMBOLS = 50;
45
+ const MAX_INTENT_SUMMARY = 500;
46
+ const intents = /* @__PURE__ */ new Map();
47
+ function normaliseIntentPath(raw, roots) {
48
+ const trimmed = raw.trim();
49
+ if (!trimmed || trimmed.includes("\0")) return null;
50
+ let rel = trimmed;
51
+ if (import_node_path.default.isAbsolute(trimmed)) {
52
+ const inside = roots.map((r) => import_node_path.default.relative(r, trimmed)).find((r) => r && !r.startsWith("..") && !import_node_path.default.isAbsolute(r));
53
+ if (!inside) return null;
54
+ rel = inside;
55
+ }
56
+ const norm = import_node_path.default.posix.normalize(rel.split(import_node_path.default.sep).join("/")).replace(/^\.\//, "");
57
+ if (!norm || norm === "." || norm.startsWith("../") || norm === ".." || norm.startsWith("/")) return null;
58
+ return norm;
59
+ }
60
+ function parseIntentSymbol(raw, roots) {
61
+ const at = raw.lastIndexOf("#");
62
+ const name = (at >= 0 ? raw.slice(at + 1) : raw).trim();
63
+ if (!/^[A-Za-z_$][\w$]*(\.[A-Za-z_$][\w$]*)*$/.test(name)) return null;
64
+ if (at < 0) return { path: null, name };
65
+ const p = normaliseIntentPath(raw.slice(0, at), roots);
66
+ return p ? { path: p, name } : null;
67
+ }
68
+ function intentFiles(intent) {
69
+ const bare = intent.symbols.filter((s) => !s.includes("#"));
70
+ const files = /* @__PURE__ */ new Map();
71
+ for (const p of intent.paths) files.set(p, new Set(bare));
72
+ for (const s of intent.symbols) {
73
+ const at = s.lastIndexOf("#");
74
+ if (at < 0) continue;
75
+ const p = s.slice(0, at);
76
+ if (!files.has(p)) files.set(p, /* @__PURE__ */ new Set());
77
+ files.get(p).add(s.slice(at + 1));
78
+ }
79
+ return [...files].map(([p, names]) => ({ path: p, symbols: [...names].sort() })).sort((a, b) => a.path.localeCompare(b.path));
80
+ }
81
+ function declareIntent(intent) {
82
+ intents.set(intent.sessionId, intent);
83
+ }
84
+ function getIntent(sessionId) {
85
+ return intents.get(sessionId) ?? null;
86
+ }
87
+ function clearIntent(sessionId) {
88
+ return intents.delete(sessionId);
89
+ }
90
+ function clearAllIntents() {
91
+ intents.clear();
92
+ }
93
+ // Annotate the CommonJS export names for ESM import in node:
94
+ 0 && (module.exports = {
95
+ MAX_INTENT_PATHS,
96
+ MAX_INTENT_SUMMARY,
97
+ MAX_INTENT_SYMBOLS,
98
+ clearAllIntents,
99
+ clearIntent,
100
+ declareIntent,
101
+ getIntent,
102
+ intentFiles,
103
+ normaliseIntentPath,
104
+ parseIntentSymbol
105
+ });
@@ -0,0 +1,164 @@
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 ipc_dispatcher_exports = {};
19
+ __export(ipc_dispatcher_exports, {
20
+ cameFromAppWindow: () => cameFromAppWindow,
21
+ dispatch: () => dispatch,
22
+ dispatchAuthorised: () => dispatchAuthorised
23
+ });
24
+ module.exports = __toCommonJS(ipc_dispatcher_exports);
25
+ var import_node_net = require("node:net");
26
+ var import_node_http = require("node:http");
27
+ var import_capability_token = require("./capability-token");
28
+ function dispatchAuthorised(app, req) {
29
+ return run(app, {
30
+ ...req,
31
+ headers: {
32
+ ...req.headers ?? {},
33
+ // Last, deliberately: a caller cannot override it with a wrong value.
34
+ [import_capability_token.TOKEN_HEADER]: (0, import_capability_token.getCapabilityToken)()
35
+ }
36
+ }, true);
37
+ }
38
+ const appWindowRequests = /* @__PURE__ */ new WeakSet();
39
+ function cameFromAppWindow(req) {
40
+ return appWindowRequests.has(req);
41
+ }
42
+ function dispatch(app, req) {
43
+ return run(app, req, false);
44
+ }
45
+ function run(app, req, fromAppWindow) {
46
+ return new Promise((resolve) => {
47
+ const fakeReq = buildFakeRequest(req);
48
+ if (fromAppWindow) appWindowRequests.add(fakeReq);
49
+ const fakeRes = buildFakeResponse(fakeReq, (response) => resolve(response));
50
+ try {
51
+ app(fakeReq, fakeRes);
52
+ } catch (err) {
53
+ if (!fakeRes.writableEnded) {
54
+ resolve({
55
+ status: 500,
56
+ headers: { "content-type": "text/plain; charset=utf-8" },
57
+ body: err instanceof Error ? err.message : String(err)
58
+ });
59
+ }
60
+ }
61
+ });
62
+ }
63
+ function buildFakeRequest(input) {
64
+ const fakeSocket = new import_node_net.Socket();
65
+ fakeSocket._handle = null;
66
+ const req = new import_node_http.IncomingMessage(fakeSocket);
67
+ req.method = (input.method || "GET").toUpperCase();
68
+ req.url = input.url;
69
+ const headers = {};
70
+ for (const [k, v] of Object.entries(input.headers ?? {})) {
71
+ headers[k.toLowerCase()] = v;
72
+ }
73
+ let bodyBuf = null;
74
+ if (input.body != null) {
75
+ bodyBuf = typeof input.body === "string" ? Buffer.from(input.body, "utf-8") : Buffer.from(input.body);
76
+ if (!("content-length" in headers)) {
77
+ headers["content-length"] = String(bodyBuf.length);
78
+ }
79
+ if (!("content-type" in headers)) {
80
+ headers["content-type"] = "application/json; charset=utf-8";
81
+ }
82
+ }
83
+ req.headers = headers;
84
+ req.rawHeaders = Object.entries(headers).flatMap(([k, v]) => [k, v]);
85
+ req.complete = false;
86
+ process.nextTick(() => {
87
+ if (bodyBuf) req.push(bodyBuf);
88
+ req.push(null);
89
+ req.complete = true;
90
+ });
91
+ return req;
92
+ }
93
+ function buildFakeResponse(req, done) {
94
+ const res = new import_node_http.ServerResponse(req);
95
+ res.__chunks = [];
96
+ res.__statusCode = 200;
97
+ res.__headers = {};
98
+ res.__finished = false;
99
+ const origSetHeader = res.setHeader.bind(res);
100
+ res.setHeader = (name, value) => {
101
+ res.__headers[name.toLowerCase()] = Array.isArray(value) ? value.join(", ") : String(value);
102
+ return origSetHeader(name, value);
103
+ };
104
+ res.removeHeader = (name) => {
105
+ delete res.__headers[name.toLowerCase()];
106
+ };
107
+ res.writeHead = function writeHead(status, arg2, arg3) {
108
+ res.__statusCode = status;
109
+ res.statusCode = status;
110
+ const headerArg = typeof arg2 === "object" ? arg2 : arg3;
111
+ if (headerArg) {
112
+ for (const [k, v] of Object.entries(headerArg)) {
113
+ const value = Array.isArray(v) ? v.join(", ") : String(v);
114
+ res.__headers[k.toLowerCase()] = value;
115
+ }
116
+ }
117
+ return res;
118
+ };
119
+ res.write = function write(chunk) {
120
+ if (chunk != null) {
121
+ res.__chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk)));
122
+ }
123
+ return true;
124
+ };
125
+ res.end = function end(chunk) {
126
+ if (res.__finished) return res;
127
+ if (chunk != null && typeof chunk !== "function") {
128
+ res.__chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk)));
129
+ }
130
+ res.__finished = true;
131
+ try {
132
+ Object.defineProperty(res, "writableEnded", { value: true, writable: true, configurable: true });
133
+ } catch {
134
+ }
135
+ try {
136
+ Object.defineProperty(res, "finished", { value: true, writable: true, configurable: true });
137
+ } catch {
138
+ }
139
+ try {
140
+ Object.defineProperty(res, "headersSent", { value: true, writable: true, configurable: true });
141
+ } catch {
142
+ }
143
+ res.__statusCode = res.statusCode || res.__statusCode || 200;
144
+ for (const name of res.getHeaderNames()) {
145
+ const v = res.getHeader(name);
146
+ if (v != null && !(name.toLowerCase() in res.__headers)) {
147
+ res.__headers[name.toLowerCase()] = Array.isArray(v) ? v.join(", ") : String(v);
148
+ }
149
+ }
150
+ done({
151
+ status: res.__statusCode,
152
+ headers: res.__headers,
153
+ body: Buffer.concat(res.__chunks).toString("utf-8")
154
+ });
155
+ return res;
156
+ };
157
+ return res;
158
+ }
159
+ // Annotate the CommonJS export names for ESM import in node:
160
+ 0 && (module.exports = {
161
+ cameFromAppWindow,
162
+ dispatch,
163
+ dispatchAuthorised
164
+ });