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,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 ruby_exports = {};
19
+ __export(ruby_exports, {
20
+ rubyCallsites: () => rubyCallsites
21
+ });
22
+ module.exports = __toCommonJS(ruby_exports);
23
+ var import_shared = require("./shared");
24
+ const RESOURCE_ACTIONS = [
25
+ { action: "index", verb: "GET", member: false },
26
+ { action: "create", verb: "POST", member: false },
27
+ { action: "show", verb: "GET", member: true },
28
+ { action: "update", verb: "PATCH", member: true },
29
+ { action: "update", verb: "PUT", member: true },
30
+ { action: "destroy", verb: "DELETE", member: true }
31
+ ];
32
+ const NAMESPACE_RE = /^\s*namespace\s+[:'"]([\w-]+)['"]?\s+do\b/;
33
+ const SCOPE_RE = /^\s*scope\s+(?:path:\s*)?['"]([^'"]*)['"].*\bdo\b/;
34
+ const RESOURCES_RE = /^\s*(resources?)\s+:([\w-]+)(.*)$/;
35
+ const ONLY_RE = /\bonly:\s*(?:\[([^\]]*)\]|%i\[([^\]]*)\]|:(\w+))/;
36
+ const EXCEPT_RE = /\bexcept:\s*(?:\[([^\]]*)\]|%i\[([^\]]*)\]|:(\w+))/;
37
+ const VERB_ROUTE_RE = /^\s*(get|post|put|patch|delete|head|options)\s+['"]([^'"]*)['"]/;
38
+ function isSpecFile(filePath) {
39
+ const p = filePath.replace(/\\/g, "/");
40
+ return /(^|\/)(spec|test)\//.test(p) || /_(spec|test)\.rb$/.test(p);
41
+ }
42
+ const ROOT_RE = /^\s*root\b/;
43
+ const MEMBER_BLOCK_RE = /^\s*(member|collection)\s+do\b/;
44
+ const NET_HTTP_RE = /Net::HTTP\s*\.\s*(get|post|put|patch|delete|head)\w*\s*\(\s*URI(?:\.parse)?\s*\(\s*['"]([^'"]*)['"]/g;
45
+ const CLIENT_RE = /\b(HTTParty|RestClient|Faraday|[a-z_]\w*)\s*\.\s*(get|post|put|patch|delete|head|options)\s*\(?\s*['"]([^'"]*)['"]/g;
46
+ const rubyCallsites = {
47
+ language: "ruby",
48
+ extract(content, filePath) {
49
+ const routes = isSpecFile(filePath) ? [] : extractRoutes(content, filePath);
50
+ return [...routes, ...extractOutbound(content)];
51
+ }
52
+ };
53
+ function blockDelta(line) {
54
+ const code = stripRubyComment(line);
55
+ let delta = 0;
56
+ if (/\bdo\b\s*(\|[^|]*\|)?\s*$/.test(code)) delta++;
57
+ if (/^\s*end\b/.test(code)) delta--;
58
+ return delta;
59
+ }
60
+ function stripRubyComment(line) {
61
+ const idx = line.indexOf("#");
62
+ if (idx === -1) return line;
63
+ const before = line.slice(0, idx);
64
+ const doubles = (before.match(/"/g) || []).length;
65
+ const singles = (before.match(/'/g) || []).length;
66
+ if (line[idx + 1] === "{") return line;
67
+ return doubles % 2 === 0 && singles % 2 === 0 ? before : line;
68
+ }
69
+ function actionFilter(re, tail) {
70
+ const m = re.exec(tail);
71
+ if (!m) return null;
72
+ const body = m[1] ?? m[2] ?? m[3] ?? "";
73
+ const names = body.split(/[,\s]+/).map((s) => s.replace(/^:/, "").trim()).filter(Boolean);
74
+ return names.length > 0 ? new Set(names) : null;
75
+ }
76
+ function extractRoutes(content, filePath) {
77
+ const lines = content.split("\n");
78
+ const out = [];
79
+ const blockStack = [];
80
+ let depth = 0;
81
+ for (let i = 0; i < lines.length; i++) {
82
+ const raw = lines[i];
83
+ const line = stripRubyComment(raw);
84
+ const lineNo = i + 1;
85
+ while (blockStack.length > 0 && depth < blockStack[blockStack.length - 1].depth) {
86
+ blockStack.pop();
87
+ }
88
+ const top = blockStack.length > 0 ? blockStack[blockStack.length - 1] : null;
89
+ const prefix = top ? top.prefix : "";
90
+ const depthBefore = depth;
91
+ depth += blockDelta(line);
92
+ const ns = NAMESPACE_RE.exec(line);
93
+ if (ns) {
94
+ const nsPath = (0, import_shared.joinPath)(prefix, "/" + ns[1]);
95
+ blockStack.push({ depth: depthBefore + 1, prefix: nsPath, collection: nsPath });
96
+ continue;
97
+ }
98
+ const scope = SCOPE_RE.exec(line);
99
+ if (scope) {
100
+ const scopePath = (0, import_shared.joinPath)(prefix, scope[1]);
101
+ blockStack.push({ depth: depthBefore + 1, prefix: scopePath, collection: scopePath });
102
+ continue;
103
+ }
104
+ const memberBlock = MEMBER_BLOCK_RE.exec(line);
105
+ if (memberBlock) {
106
+ const inner = memberBlock[1] === "member" ? prefix : top?.collection ?? prefix;
107
+ blockStack.push({ depth: depthBefore + 1, prefix: inner, collection: inner });
108
+ continue;
109
+ }
110
+ const resources = RESOURCES_RE.exec(line);
111
+ if (resources) {
112
+ const [, keyword, name, tail] = resources;
113
+ const plural = keyword === "resources";
114
+ const base = (0, import_shared.joinPath)(prefix, "/" + name);
115
+ const only = actionFilter(ONLY_RE, tail);
116
+ const except = actionFilter(EXCEPT_RE, tail);
117
+ for (const { action, verb, member } of RESOURCE_ACTIONS) {
118
+ if (!plural && action === "index") continue;
119
+ if (only && !only.has(action)) continue;
120
+ if (except && except.has(action)) continue;
121
+ const path = member && plural ? `${base}/:id` : base;
122
+ out.push((0, import_shared.route)(lineNo, verb, path, `${keyword} :${name} (${action})`));
123
+ }
124
+ if (/\bdo\b\s*$/.test(line)) {
125
+ const nested = plural ? `${base}/:id` : base;
126
+ blockStack.push({ depth: depthBefore + 1, prefix: nested, collection: base });
127
+ }
128
+ continue;
129
+ }
130
+ const verbRoute = VERB_ROUTE_RE.exec(line);
131
+ if (verbRoute) {
132
+ const [, verb, path] = verbRoute;
133
+ out.push((0, import_shared.route)(lineNo, verb, (0, import_shared.joinPath)(prefix, path), `${verb} '${path}'`));
134
+ continue;
135
+ }
136
+ if (ROOT_RE.test(line) && /\bto:|=>/.test(line)) {
137
+ out.push((0, import_shared.route)(lineNo, "GET", (0, import_shared.joinPath)(prefix, "/") || "/", "root"));
138
+ }
139
+ }
140
+ void filePath;
141
+ return out;
142
+ }
143
+ function extractOutbound(content) {
144
+ const out = [];
145
+ let m;
146
+ NET_HTTP_RE.lastIndex = 0;
147
+ while (m = NET_HTTP_RE.exec(content)) {
148
+ const [, verb, url] = m;
149
+ if (!(0, import_shared.isLikelyApiPath)(url)) continue;
150
+ out.push((0, import_shared.call)((0, import_shared.lineOf)(content, m.index), verb, url, `Net::HTTP.${verb}`));
151
+ }
152
+ CLIENT_RE.lastIndex = 0;
153
+ while (m = CLIENT_RE.exec(content)) {
154
+ const [, recv, verb, url] = m;
155
+ if ((0, import_shared.isNonClientReceiver)(recv)) continue;
156
+ if (!(0, import_shared.isLikelyApiPath)(url)) continue;
157
+ out.push((0, import_shared.call)((0, import_shared.lineOf)(content, m.index), verb, url, `${recv}.${verb}`));
158
+ }
159
+ return out;
160
+ }
161
+ // Annotate the CommonJS export names for ESM import in node:
162
+ 0 && (module.exports = {
163
+ rubyCallsites
164
+ });
@@ -0,0 +1,198 @@
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 shared_exports = {};
19
+ __export(shared_exports, {
20
+ HTTP_VERBS: () => HTTP_VERBS,
21
+ VERB_SET: () => VERB_SET,
22
+ call: () => call,
23
+ countBraces: () => countBraces,
24
+ hostField: () => hostField,
25
+ hostOf: () => hostOf,
26
+ isLikelyApiPath: () => isLikelyApiPath,
27
+ isNonClientReceiver: () => isNonClientReceiver,
28
+ joinPath: () => joinPath,
29
+ lineOf: () => lineOf,
30
+ normalizeRoute: () => normalizeRoute,
31
+ normalizeUrl: () => normalizeUrl,
32
+ route: () => route,
33
+ stripLineComment: () => stripLineComment,
34
+ unwindBlocks: () => unwindBlocks
35
+ });
36
+ module.exports = __toCommonJS(shared_exports);
37
+ const HTTP_VERBS = ["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"];
38
+ const VERB_SET = new Set(HTTP_VERBS);
39
+ function lineOf(content, charIndex) {
40
+ let line = 1;
41
+ for (let i = 0; i < charIndex && i < content.length; i++) {
42
+ if (content.charCodeAt(i) === 10) line++;
43
+ }
44
+ return line;
45
+ }
46
+ function joinPath(prefix, literal) {
47
+ if (!prefix) return literal;
48
+ if (!literal || literal === "/") return prefix;
49
+ const left = prefix.endsWith("/") ? prefix.slice(0, -1) : prefix;
50
+ const right = literal.startsWith("/") ? literal : "/" + literal;
51
+ return left + right;
52
+ }
53
+ function normalizeRoute(url) {
54
+ let p = url;
55
+ p = p.replace(/\$\{[^}]*\}/g, ":id");
56
+ p = p.replace(/<[^>]*>/g, ":id");
57
+ p = p.replace(/\{[^}]*\}/g, ":id");
58
+ p = p.replace(/:[A-Za-z_]\w*/g, ":id");
59
+ p = p.replace(/\/?\*+$/, "");
60
+ if (p.length > 1 && p.endsWith("/")) p = p.slice(0, -1);
61
+ if (!p) return "/";
62
+ return p.startsWith("/") ? p : "/" + p;
63
+ }
64
+ function hostOf(url) {
65
+ const m = /^https?:\/\/([^/:?#@]+)/i.exec(url.trim());
66
+ return m ? m[1].toLowerCase() : void 0;
67
+ }
68
+ function hostField(url) {
69
+ const host = hostOf(url);
70
+ return host ? { host } : {};
71
+ }
72
+ function normalizeUrl(url) {
73
+ let p = url.replace(/^https?:\/\/[^/]+/, "");
74
+ p = p.replace(/^(?:%[sv]|\\\([^)]*\)|#\{[^}]*\}|\$\{[^}]*\})/, "");
75
+ const q = p.indexOf("?");
76
+ if (q >= 0) p = p.slice(0, q);
77
+ p = p.replace(/%[sdv]/g, ":id");
78
+ p = p.replace(/\\\([^)]*\)/g, ":id");
79
+ p = p.replace(/#\{[^}]*\}/g, ":id");
80
+ p = normalizeRoute(p);
81
+ if (p.length > 1 && p.endsWith("/")) p = p.slice(0, -1);
82
+ return p;
83
+ }
84
+ function isLikelyApiPath(s) {
85
+ if (!s) return false;
86
+ if (s.startsWith("/")) return true;
87
+ if (/^https?:\/\//.test(s)) {
88
+ const afterHost = s.replace(/^https?:\/\/[^/]+/, "");
89
+ return afterHost !== "" && afterHost !== "/";
90
+ }
91
+ if (/^(?:%[sv]|\\\([^)]*\)|#\{[^}]*\}|\$\{[^}]*\})\//.test(s)) return true;
92
+ return false;
93
+ }
94
+ const NON_CLIENT_RECEIVERS = /* @__PURE__ */ new Set([
95
+ // Containers and config, in every language.
96
+ "params",
97
+ "options",
98
+ "opts",
99
+ "config",
100
+ "configuration",
101
+ "settings",
102
+ "props",
103
+ "properties",
104
+ "preferences",
105
+ "prefs",
106
+ "headers",
107
+ "env",
108
+ "session",
109
+ "cookies",
110
+ "cache",
111
+ "store",
112
+ "storage",
113
+ "hash",
114
+ "map",
115
+ "dict",
116
+ "data",
117
+ "payload",
118
+ "attributes",
119
+ "attrs",
120
+ "json",
121
+ "body",
122
+ "registry",
123
+ "context",
124
+ "bundle",
125
+ // JVM test DSLs that spell an assertion like a call.
126
+ "mockmvc",
127
+ "mvc",
128
+ "mockserver",
129
+ "stubfor"
130
+ ]);
131
+ function isNonClientReceiver(recv) {
132
+ return NON_CLIENT_RECEIVERS.has(recv.toLowerCase());
133
+ }
134
+ function stripLineComment(line, marker) {
135
+ const idx = line.indexOf(marker);
136
+ if (idx === -1) return line;
137
+ const before = line.slice(0, idx);
138
+ const doubles = (before.match(/"/g) || []).length;
139
+ const singles = (before.match(/'/g) || []).length;
140
+ return doubles % 2 === 0 && singles % 2 === 0 ? before : line;
141
+ }
142
+ function countBraces(line) {
143
+ let delta = 0;
144
+ let inString = null;
145
+ let prev = "";
146
+ for (const ch of line) {
147
+ if ((ch === '"' || ch === "'") && prev !== "\\") {
148
+ if (inString === ch) inString = null;
149
+ else if (inString === null) inString = ch;
150
+ } else if (!inString && ch === "{") delta++;
151
+ else if (!inString && ch === "}") delta--;
152
+ prev = ch;
153
+ }
154
+ return delta;
155
+ }
156
+ function unwindBlocks(stack, depth) {
157
+ while (stack.length > 0 && depth < stack[stack.length - 1].depth) stack.pop();
158
+ return stack.length > 0 ? stack[stack.length - 1].prefix : "";
159
+ }
160
+ function route(line, method, pattern, context) {
161
+ return {
162
+ kind: "http_route",
163
+ protocol: "http",
164
+ line,
165
+ method: method.toUpperCase(),
166
+ urlPattern: normalizeRoute(pattern),
167
+ context
168
+ };
169
+ }
170
+ function call(line, method, url, context) {
171
+ return {
172
+ kind: "http_call",
173
+ protocol: "http",
174
+ line,
175
+ method: method.toUpperCase(),
176
+ urlPattern: normalizeUrl(url),
177
+ ...hostField(url),
178
+ context
179
+ };
180
+ }
181
+ // Annotate the CommonJS export names for ESM import in node:
182
+ 0 && (module.exports = {
183
+ HTTP_VERBS,
184
+ VERB_SET,
185
+ call,
186
+ countBraces,
187
+ hostField,
188
+ hostOf,
189
+ isLikelyApiPath,
190
+ isNonClientReceiver,
191
+ joinPath,
192
+ lineOf,
193
+ normalizeRoute,
194
+ normalizeUrl,
195
+ route,
196
+ stripLineComment,
197
+ unwindBlocks
198
+ });
@@ -0,0 +1,115 @@
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 swift_exports = {};
19
+ __export(swift_exports, {
20
+ swiftCallsites: () => swiftCallsites
21
+ });
22
+ module.exports = __toCommonJS(swift_exports);
23
+ var import_shared = require("./shared");
24
+ const HTTP_METHOD_WINDOW = 6;
25
+ const URL_STRING_RE = /URL\s*\(\s*string\s*:\s*"([^"]*)"/g;
26
+ const HTTP_METHOD_RE = /httpMethod\s*=\s*"([A-Za-z]+)"/;
27
+ const ALAMOFIRE_RE = /\brequest\s*\(\s*"([^"]*)"(?:\s*,\s*method\s*:\s*\.\s*(\w+))?/g;
28
+ const VAPOR_VERB_RE = /(\w+)\s*\.\s*(get|post|put|patch|delete|head|options)\s*\(\s*((?:"[^"]*"\s*,?\s*)+)\)\s*\{/g;
29
+ const VAPOR_GROUP_RE = /(?:let|var)\s+(\w+)\s*=\s*(\w+)\s*\.\s*grouped\s*\(\s*((?:"[^"]*"\s*,?\s*)+)\)/;
30
+ const VAPOR_GROUP_BLOCK_RE = /(\w+)\s*\.\s*group\s*\(\s*((?:"[^"]*"\s*,?\s*)+)\)\s*\{/;
31
+ const swiftCallsites = {
32
+ language: "swift",
33
+ extract(content, _filePath) {
34
+ return [...extractRoutes(content), ...extractOutbound(content)];
35
+ }
36
+ };
37
+ function componentsToPath(argList) {
38
+ const parts = [...argList.matchAll(/"([^"]*)"/g)].map((m) => m[1]).filter(Boolean);
39
+ if (parts.length === 0) return "";
40
+ return "/" + parts.join("/");
41
+ }
42
+ function extractRoutes(content) {
43
+ const lines = content.split("\n").map((l) => (0, import_shared.stripLineComment)(l, "//"));
44
+ const out = [];
45
+ const groupPrefix = /* @__PURE__ */ new Map();
46
+ for (let sweep = 0; sweep < 2; sweep++) {
47
+ for (const line of lines) {
48
+ const m = VAPOR_GROUP_RE.exec(line);
49
+ if (!m) continue;
50
+ const [, name, parent, args] = m;
51
+ groupPrefix.set(name, (0, import_shared.joinPath)(groupPrefix.get(parent) ?? "", componentsToPath(args)));
52
+ }
53
+ }
54
+ const blockStack = [];
55
+ let depth = 0;
56
+ for (let i = 0; i < lines.length; i++) {
57
+ const line = lines[i];
58
+ const lineNo = i + 1;
59
+ const depthBefore = depth;
60
+ depth += (0, import_shared.countBraces)(line);
61
+ const blockPrefix = (0, import_shared.unwindBlocks)(blockStack, depthBefore);
62
+ const groupBlock = VAPOR_GROUP_BLOCK_RE.exec(line);
63
+ if (groupBlock) {
64
+ const [, recv, args] = groupBlock;
65
+ const base = groupPrefix.get(recv) ?? blockPrefix;
66
+ blockStack.push({ depth: depthBefore + 1, prefix: (0, import_shared.joinPath)(base, componentsToPath(args)) });
67
+ }
68
+ VAPOR_VERB_RE.lastIndex = 0;
69
+ let m;
70
+ while (m = VAPOR_VERB_RE.exec(line)) {
71
+ const [, recv, verb, args] = m;
72
+ const prefix = groupPrefix.get(recv) ?? blockPrefix;
73
+ out.push((0, import_shared.route)(lineNo, verb, (0, import_shared.joinPath)(prefix, componentsToPath(args)), `${recv}.${verb}`));
74
+ }
75
+ }
76
+ return out;
77
+ }
78
+ function extractOutbound(content) {
79
+ const lines = content.split("\n");
80
+ const out = [];
81
+ let m;
82
+ const urls = [];
83
+ URL_STRING_RE.lastIndex = 0;
84
+ while (m = URL_STRING_RE.exec(content)) {
85
+ urls.push({ url: m[1], lineNo: (0, import_shared.lineOf)(content, m.index) });
86
+ }
87
+ for (let i = 0; i < urls.length; i++) {
88
+ const { url, lineNo } = urls[i];
89
+ if (!(0, import_shared.isLikelyApiPath)(url)) continue;
90
+ const nextUrlLine = urls[i + 1]?.lineNo ?? Infinity;
91
+ out.push((0, import_shared.call)(lineNo, verbNear(lines, lineNo, nextUrlLine), url, "URL(string:)"));
92
+ }
93
+ ALAMOFIRE_RE.lastIndex = 0;
94
+ while (m = ALAMOFIRE_RE.exec(content)) {
95
+ const [, url, verb] = m;
96
+ if (!(0, import_shared.isLikelyApiPath)(url)) continue;
97
+ const method = verb && import_shared.VERB_SET.has(verb.toUpperCase()) ? verb.toUpperCase() : "GET";
98
+ out.push((0, import_shared.call)((0, import_shared.lineOf)(content, m.index), method, url, "AF.request"));
99
+ }
100
+ return out;
101
+ }
102
+ function verbNear(lines, lineNo, nextUrlLine) {
103
+ const end = Math.min(lines.length, lineNo + HTTP_METHOD_WINDOW, nextUrlLine - 1);
104
+ for (let i = lineNo - 1; i < end; i++) {
105
+ const m = HTTP_METHOD_RE.exec(lines[i]);
106
+ if (!m) continue;
107
+ const verb = m[1].toUpperCase();
108
+ if (import_shared.VERB_SET.has(verb)) return verb;
109
+ }
110
+ return "GET";
111
+ }
112
+ // Annotate the CommonJS export names for ESM import in node:
113
+ 0 && (module.exports = {
114
+ swiftCallsites
115
+ });
@@ -0,0 +1,87 @@
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 typescript_exports = {};
19
+ __export(typescript_exports, {
20
+ javascriptCallsites: () => javascriptCallsites,
21
+ typescriptCallsites: () => typescriptCallsites
22
+ });
23
+ module.exports = __toCommonJS(typescript_exports);
24
+ var import_shared = require("./shared");
25
+ const FETCH_RE = /\bfetch\s*\(\s*([`'"])([^`'"]+?)\1(?:\s*,\s*\{([\s\S]*?)\})?/g;
26
+ const AXIOS_RE = /\baxios\s*\.\s*(get|post|put|patch|delete|head|options)\s*\(\s*([`'"])([^`'"]+?)\2/gi;
27
+ const METHOD_HINT_RE = /method\s*:\s*['"`](\w+)['"`]/i;
28
+ const typescriptCallsites = {
29
+ language: "typescript",
30
+ extract(content, _filePath) {
31
+ return extractAll(content);
32
+ }
33
+ };
34
+ const javascriptCallsites = {
35
+ language: "javascript",
36
+ extract(content, _filePath) {
37
+ return extractAll(content);
38
+ }
39
+ };
40
+ function extractAll(content) {
41
+ const callsites = [];
42
+ for (const cs of iterateFetch(content)) callsites.push(cs);
43
+ for (const cs of iterateAxios(content)) callsites.push(cs);
44
+ return callsites;
45
+ }
46
+ function* iterateFetch(content) {
47
+ FETCH_RE.lastIndex = 0;
48
+ let match;
49
+ while (match = FETCH_RE.exec(content)) {
50
+ const url = match[2];
51
+ if (!(0, import_shared.isLikelyApiPath)(url)) continue;
52
+ const optsBody = match[3] ?? "";
53
+ const methodMatch = METHOD_HINT_RE.exec(optsBody);
54
+ yield {
55
+ kind: "http_call",
56
+ protocol: "http",
57
+ line: (0, import_shared.lineOf)(content, match.index),
58
+ method: (methodMatch?.[1] || "GET").toUpperCase(),
59
+ urlPattern: (0, import_shared.normalizeUrl)(url),
60
+ ...(0, import_shared.hostField)(url),
61
+ context: "fetch"
62
+ };
63
+ }
64
+ }
65
+ function* iterateAxios(content) {
66
+ AXIOS_RE.lastIndex = 0;
67
+ let match;
68
+ while (match = AXIOS_RE.exec(content)) {
69
+ const verb = match[1].toUpperCase();
70
+ const url = match[3];
71
+ if (!(0, import_shared.isLikelyApiPath)(url)) continue;
72
+ yield {
73
+ kind: "http_call",
74
+ protocol: "http",
75
+ line: (0, import_shared.lineOf)(content, match.index),
76
+ method: verb,
77
+ urlPattern: (0, import_shared.normalizeUrl)(url),
78
+ ...(0, import_shared.hostField)(url),
79
+ context: `axios.${verb.toLowerCase()}`
80
+ };
81
+ }
82
+ }
83
+ // Annotate the CommonJS export names for ESM import in node:
84
+ 0 && (module.exports = {
85
+ javascriptCallsites,
86
+ typescriptCallsites
87
+ });
@@ -0,0 +1,108 @@
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 capability_token_exports = {};
29
+ __export(capability_token_exports, {
30
+ TOKEN_ENV_VAR: () => TOKEN_ENV_VAR,
31
+ TOKEN_HEADER: () => TOKEN_HEADER,
32
+ TOKEN_QUERY_PARAM: () => TOKEN_QUERY_PARAM,
33
+ extractToken: () => extractToken,
34
+ getCapabilityToken: () => getCapabilityToken,
35
+ getTokenFilePath: () => getTokenFilePath,
36
+ initCapabilityToken: () => initCapabilityToken,
37
+ verifyCapabilityToken: () => verifyCapabilityToken
38
+ });
39
+ module.exports = __toCommonJS(capability_token_exports);
40
+ var fs = __toESM(require("node:fs"));
41
+ var path = __toESM(require("node:path"));
42
+ var crypto = __toESM(require("node:crypto"));
43
+ var import_persistence = require("./persistence");
44
+ var import_files = require("../mcp/connector/files");
45
+ const TOKEN_HEADER = "x-codetrellis-token";
46
+ const TOKEN_QUERY_PARAM = "ct_token";
47
+ const TOKEN_ENV_VAR = "CODETRELLIS_CAPABILITY_TOKEN";
48
+ let token = null;
49
+ function getTokenFilePath() {
50
+ return path.join((0, import_persistence.getDataDir)(), import_files.TOKEN_FILE);
51
+ }
52
+ function initCapabilityToken() {
53
+ if (token) return token;
54
+ const fromEnv = process.env[TOKEN_ENV_VAR];
55
+ if (fromEnv && fromEnv.trim().length >= 16) {
56
+ token = fromEnv.trim();
57
+ } else {
58
+ token = crypto.randomBytes(32).toString("hex");
59
+ }
60
+ try {
61
+ (0, import_persistence.ensureDataDir)();
62
+ const file = getTokenFilePath();
63
+ fs.writeFileSync(file, token, { encoding: "utf-8", mode: 384 });
64
+ fs.chmodSync(file, 384);
65
+ } catch (err) {
66
+ console.warn("[Auth] Could not write the capability token file:", err);
67
+ }
68
+ return token;
69
+ }
70
+ function getCapabilityToken() {
71
+ return token ?? initCapabilityToken();
72
+ }
73
+ function verifyCapabilityToken(candidate) {
74
+ if (typeof candidate !== "string" || candidate.length === 0) return false;
75
+ const expected = getCapabilityToken();
76
+ const a = Buffer.from(candidate, "utf-8");
77
+ const b = Buffer.from(expected, "utf-8");
78
+ if (a.length !== b.length) return false;
79
+ return crypto.timingSafeEqual(a, b);
80
+ }
81
+ function extractToken(headers, url) {
82
+ const raw = headers[TOKEN_HEADER];
83
+ const direct = Array.isArray(raw) ? raw[0] : raw;
84
+ if (direct) return direct;
85
+ const authRaw = headers["authorization"];
86
+ const auth = Array.isArray(authRaw) ? authRaw[0] : authRaw;
87
+ if (auth && /^Bearer\s+/i.test(auth)) return auth.replace(/^Bearer\s+/i, "").trim();
88
+ if (url) {
89
+ try {
90
+ const parsed = new URL(url, "http://127.0.0.1");
91
+ const q = parsed.searchParams.get(TOKEN_QUERY_PARAM);
92
+ if (q) return q;
93
+ } catch {
94
+ }
95
+ }
96
+ return null;
97
+ }
98
+ // Annotate the CommonJS export names for ESM import in node:
99
+ 0 && (module.exports = {
100
+ TOKEN_ENV_VAR,
101
+ TOKEN_HEADER,
102
+ TOKEN_QUERY_PARAM,
103
+ extractToken,
104
+ getCapabilityToken,
105
+ getTokenFilePath,
106
+ initCapabilityToken,
107
+ verifyCapabilityToken
108
+ });