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,450 @@
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 peer_connection_service_exports = {};
19
+ __export(peer_connection_service_exports, {
20
+ broadcastAgentSessions: () => import_remote_interaction_service2.broadcastAgentSessions,
21
+ broadcastAudioStatus: () => import_remote_audio_service2.broadcastAudioStatus,
22
+ broadcastAudioStopped: () => import_remote_audio_service2.broadcastAudioStopped,
23
+ broadcastChannelEvent: () => import_remote_interaction_service2.broadcastChannelEvent,
24
+ broadcastChannelResolved: () => import_remote_interaction_service2.broadcastChannelResolved,
25
+ broadcastInputRequest: () => import_remote_interaction_service2.broadcastInputRequest,
26
+ broadcastToAllPeers: () => import_webrtc_service.broadcastToAllPeers,
27
+ cancelActivePairing: () => cancelActivePairing,
28
+ collectSnapshot: () => import_state_sync_service2.collectSnapshot,
29
+ completePairing: () => completePairing,
30
+ completeReconnection: () => completeReconnection,
31
+ disconnect: () => disconnect,
32
+ forwardAudioChunk: () => import_remote_audio_service2.forwardAudioChunk,
33
+ getAllRemoteStates: () => import_state_sync_service2.getAllRemoteStates,
34
+ getConnectedCount: () => getConnectedCount,
35
+ getConnection: () => getConnection,
36
+ getConnections: () => getConnections,
37
+ getDevice: () => getDevice,
38
+ getDevices: () => getDevices,
39
+ getDiscoveredDevices: () => getDiscoveredDevices,
40
+ getPairingConfirmCode: () => getPairingConfirmCode,
41
+ getPeerManagerStatus: () => getPeerManagerStatus,
42
+ getPendingInputRequest: () => import_remote_interaction_service2.getPendingInputRequest,
43
+ getPendingInputRequests: () => import_remote_interaction_service2.getPendingInputRequests,
44
+ getRemoteAudioStatus: () => import_remote_audio_service2.getRemoteAudioStatus,
45
+ getRemoteAudioStatuses: () => import_remote_audio_service2.getRemoteAudioStatuses,
46
+ getRemoteState: () => import_state_sync_service2.getRemoteState,
47
+ getRemoteTerminals: () => import_remote_terminal_service2.getRemoteTerminals,
48
+ getRemoteTerminalsForPeer: () => import_remote_terminal_service2.getRemoteTerminalsForPeer,
49
+ getThisInstanceId: () => getThisInstanceId,
50
+ isDiscoveryActive: () => isDiscoveryActive,
51
+ isPairingActive: () => import_pairing_service2.isPairingActive,
52
+ isPushNotificationsRunning: () => import_push_notification_service2.isPushNotificationsRunning,
53
+ isRemoteAudioRunning: () => import_remote_audio_service2.isRemoteAudioRunning,
54
+ isRemoteInteractionRunning: () => import_remote_interaction_service2.isRemoteInteractionRunning,
55
+ isRemoteTerminalRunning: () => import_remote_terminal_service2.isRemoteTerminalRunning,
56
+ isStateSyncRunning: () => import_state_sync_service2.isStateSyncRunning,
57
+ issueReconnectChallenge: () => issueReconnectChallenge,
58
+ listPushTokens: () => import_push_notification_service2.listPushTokens,
59
+ onChannelMessage: () => import_webrtc_service.onChannelMessage,
60
+ onConnectionStateChange: () => import_webrtc_service.onConnectionStateChange,
61
+ onRemoteAudioEvent: () => import_remote_audio_service2.onRemoteAudioEvent,
62
+ onRemoteChannelEvent: () => import_remote_interaction_service2.onRemoteChannelEvent,
63
+ onRemoteInteractionEvent: () => import_remote_interaction_service2.onRemoteInteractionEvent,
64
+ onRemoteStateChange: () => import_state_sync_service2.onRemoteStateChange,
65
+ onRemoteTerminalEvent: () => import_remote_terminal_service2.onRemoteTerminalEvent,
66
+ pushForChannelEvent: () => import_push_notification_service2.pushForChannelEvent,
67
+ pushForInputRequest: () => import_push_notification_service2.pushForInputRequest,
68
+ registerPushToken: () => import_push_notification_service2.registerPushToken,
69
+ renameDevice: () => renameDevice,
70
+ resizeRemoteTerminal: () => import_remote_terminal_service2.resizeRemoteTerminal,
71
+ respondToInputRequest: () => import_remote_interaction_service2.respondToInputRequest,
72
+ sendToPeer: () => import_webrtc_service.sendToPeer,
73
+ startPairing: () => startPairing,
74
+ startPeerManager: () => startPeerManager,
75
+ startReconnection: () => startReconnection,
76
+ stopPeerManager: () => stopPeerManager,
77
+ unpairDevice: () => unpairDevice,
78
+ unregisterPushToken: () => import_push_notification_service2.unregisterPushToken,
79
+ writeRemoteTerminal: () => import_remote_terminal_service2.writeRemoteTerminal
80
+ });
81
+ module.exports = __toCommonJS(peer_connection_service_exports);
82
+ var import_mdns_service = require("./mdns-service");
83
+ var import_paired_device_service = require("./paired-device-service");
84
+ var import_pairing_service = require("./pairing-service");
85
+ var import_webrtc_service = require("./webrtc-service");
86
+ var import_settings_service = require("./settings-service");
87
+ var import_sdp_fingerprint = require("../../shared/lib/sdp-fingerprint");
88
+ var import_peer_auth = require("./peer-auth");
89
+ var import_node_crypto = require("node:crypto");
90
+ var import_state_sync_service = require("./state-sync-service");
91
+ var import_remote_terminal_service = require("./remote-terminal-service");
92
+ var import_remote_audio_service = require("./remote-audio-service");
93
+ var import_remote_interaction_service = require("./remote-interaction-service");
94
+ var import_push_notification_service = require("./push-notification-service");
95
+ var import_mobile_rpc_service = require("./mobile-rpc-service");
96
+ var import_mobile_api_server = require("./mobile-api-server");
97
+ var import_pairing_service2 = require("./pairing-service");
98
+ var import_state_sync_service2 = require("./state-sync-service");
99
+ var import_remote_terminal_service2 = require("./remote-terminal-service");
100
+ var import_remote_audio_service2 = require("./remote-audio-service");
101
+ var import_remote_interaction_service2 = require("./remote-interaction-service");
102
+ var import_push_notification_service2 = require("./push-notification-service");
103
+ let started = false;
104
+ async function startPeerManager() {
105
+ if (started) return;
106
+ started = true;
107
+ const settings = (0, import_settings_service.getSettings)();
108
+ const deviceName = settings.device.deviceName || void 0;
109
+ let mobilePort = 0;
110
+ if (settings.device.exposeMobileApi) {
111
+ try {
112
+ mobilePort = await (0, import_mobile_api_server.startMobileApiServer)();
113
+ console.log("[PeerManager] Mobile API exposed on the local network (user-enabled)");
114
+ } catch (err) {
115
+ console.warn("[PeerManager] Mobile API server failed to start:", err);
116
+ }
117
+ } else {
118
+ console.log("[PeerManager] Mobile API NOT exposed \u2014 enable it in Settings \u2192 Devices to pair a phone");
119
+ }
120
+ if (settings.device.advertise) {
121
+ (0, import_mdns_service.startMdns)(deviceName, void 0, mobilePort);
122
+ }
123
+ (0, import_mdns_service.onPeerDiscovered)((peer) => {
124
+ const paired = (0, import_paired_device_service.listPairedDevices)().find(
125
+ (d) => d.fingerprint === peer.fingerprint
126
+ );
127
+ if (paired) {
128
+ console.log(`[PeerManager] Discovered known device "${peer.name}" \u2014 will attempt auto-reconnect`);
129
+ (0, import_paired_device_service.linkInstanceId)(paired.fingerprint, peer.instanceId);
130
+ }
131
+ });
132
+ (0, import_webrtc_service.onConnectionStateChange)((fingerprint, state) => {
133
+ if (state === "connected") {
134
+ (0, import_paired_device_service.touchPairedDevice)(fingerprint);
135
+ }
136
+ console.log(`[PeerManager] Peer ${fingerprint.slice(0, 12)}\u2026 \u2192 ${state}`);
137
+ });
138
+ const myInstanceId = (0, import_mdns_service.getInstanceId)();
139
+ (0, import_state_sync_service.startStateSync)(myInstanceId);
140
+ (0, import_remote_terminal_service.startRemoteTerminals)();
141
+ (0, import_remote_audio_service.startRemoteAudio)();
142
+ (0, import_remote_interaction_service.startRemoteInteraction)(myInstanceId);
143
+ (0, import_push_notification_service.startPushNotifications)();
144
+ (0, import_mobile_rpc_service.startMobileRpc)();
145
+ console.log(`[PeerManager] Started (mobileApiPort=${mobilePort || "none"})`);
146
+ }
147
+ async function stopPeerManager() {
148
+ if (!started) return;
149
+ started = false;
150
+ (0, import_mobile_rpc_service.stopMobileRpc)();
151
+ (0, import_push_notification_service.stopPushNotifications)();
152
+ (0, import_remote_interaction_service.stopRemoteInteraction)();
153
+ (0, import_remote_audio_service.stopRemoteAudio)();
154
+ (0, import_remote_terminal_service.stopRemoteTerminals)();
155
+ (0, import_state_sync_service.stopStateSync)();
156
+ (0, import_mobile_api_server.stopMobileApiServer)();
157
+ (0, import_pairing_service.cancelPairing)();
158
+ await (0, import_webrtc_service.discardPendingOffer)();
159
+ await (0, import_webrtc_service.disconnectAllPeers)();
160
+ (0, import_mdns_service.stopMdns)();
161
+ console.log("[PeerManager] Stopped");
162
+ }
163
+ function getDiscoveredDevices() {
164
+ return (0, import_mdns_service.getDiscoveredPeers)();
165
+ }
166
+ function getThisInstanceId() {
167
+ return (0, import_mdns_service.getInstanceId)();
168
+ }
169
+ function isDiscoveryActive() {
170
+ return (0, import_mdns_service.isMdnsRunning)();
171
+ }
172
+ async function startPairing() {
173
+ const { offer, iceCandidates, fingerprint } = await (0, import_webrtc_service.createOffer)();
174
+ const { qrPayload, waitForAnswer: waitRaw } = await (0, import_pairing_service.initiatePairing)(
175
+ offer,
176
+ iceCandidates,
177
+ fingerprint
178
+ );
179
+ const waitForAnswer = async () => {
180
+ const answer = await waitRaw();
181
+ const offerSdp = (0, import_pairing_service.getStoredOfferSdp)();
182
+ if (!offerSdp) throw new Error("Offer SDP lost");
183
+ await (0, import_webrtc_service.connectWithAnswer)(
184
+ offerSdp,
185
+ answer.answerSdp,
186
+ answer.iceCandidates,
187
+ answer.fingerprint,
188
+ "Pending\u2026",
189
+ // alias set on confirm
190
+ "mobile"
191
+ );
192
+ };
193
+ return { qrPayload, waitForAnswer };
194
+ }
195
+ function getPairingConfirmCode() {
196
+ return (0, import_pairing_service.getConfirmationCode)();
197
+ }
198
+ function completePairing(userEnteredCode, deviceAlias, deviceType = "mobile") {
199
+ const device = (0, import_pairing_service.confirmPairing)(userEnteredCode, deviceAlias, deviceType);
200
+ if (!device) {
201
+ return { success: false, error: "Confirmation code mismatch or no active session" };
202
+ }
203
+ if (!(0, import_settings_service.getSettings)().device.exposeMobileApi) {
204
+ (0, import_settings_service.updateSettings)({ device: { exposeMobileApi: true } });
205
+ console.log(
206
+ `[PeerManager] Enabled the mobile API for "${deviceAlias}" \u2014 a paired phone needs it to reconnect. Turn it off in Settings \u2192 Devices to stop accepting connections.`
207
+ );
208
+ (0, import_mobile_api_server.startMobileApiServer)().then((port) => console.log(`[PeerManager] Mobile API now listening on 0.0.0.0:${port}`)).catch((err) => console.warn("[PeerManager] Mobile API failed to start after pairing:", err));
209
+ }
210
+ return { success: true, device };
211
+ }
212
+ function cancelActivePairing() {
213
+ (0, import_pairing_service.cancelPairing)();
214
+ (0, import_webrtc_service.discardPendingOffer)().catch(() => {
215
+ });
216
+ }
217
+ function getDevices() {
218
+ return (0, import_paired_device_service.listPairedDevices)().map(redactSecret);
219
+ }
220
+ function redactSecret(device) {
221
+ const { sharedSecret, ...rest } = device;
222
+ return { ...rest, hasSecret: (0, import_peer_auth.isUsableSecret)(sharedSecret) };
223
+ }
224
+ function getDevice(fingerprint) {
225
+ const device = (0, import_paired_device_service.getPairedDevice)(fingerprint);
226
+ return device ? redactSecret(device) : void 0;
227
+ }
228
+ async function unpairDevice(fingerprint) {
229
+ await (0, import_webrtc_service.disconnectPeer)(fingerprint);
230
+ return (0, import_paired_device_service.removePairedDevice)(fingerprint);
231
+ }
232
+ function renameDevice(fingerprint, alias) {
233
+ return (0, import_paired_device_service.renamePairedDevice)(fingerprint, alias);
234
+ }
235
+ function getConnections() {
236
+ return (0, import_webrtc_service.getPeerConnections)().map(withDeviceName);
237
+ }
238
+ function getConnection(fingerprint) {
239
+ const c = (0, import_webrtc_service.getPeerConnection)(fingerprint);
240
+ return c ? withDeviceName(c) : void 0;
241
+ }
242
+ function withDeviceName(c) {
243
+ const device = (0, import_paired_device_service.getPairedDevice)(c.fingerprint);
244
+ return device ? { ...c, alias: device.alias, deviceType: device.deviceType } : c;
245
+ }
246
+ async function disconnect(fingerprint) {
247
+ await (0, import_webrtc_service.disconnectPeer)(fingerprint);
248
+ }
249
+ function getConnectedCount() {
250
+ return (0, import_webrtc_service.connectedPeerCount)();
251
+ }
252
+ const reconnectOffers = /* @__PURE__ */ new Map();
253
+ function purgeStaleOffers() {
254
+ const now = Date.now();
255
+ for (const [fp, entry] of reconnectOffers) {
256
+ if (now - entry.createdAt > 6e4) {
257
+ reconnectOffers.delete(fp);
258
+ }
259
+ }
260
+ }
261
+ function findByPairingId(pairingId) {
262
+ return (0, import_paired_device_service.listPairedDevices)().find((d) => d.pairingId === pairingId);
263
+ }
264
+ function issueReconnectChallenge(pairingId) {
265
+ return (0, import_peer_auth.issueChallenge)(pairingId);
266
+ }
267
+ async function startReconnection(pairingId, proof) {
268
+ purgeStaleOffers();
269
+ const paired = pairingId ? findByPairingId(pairingId) : void 0;
270
+ if (!paired) {
271
+ console.warn(`[PeerManager] Reconnect rejected \u2014 no device for pairingId=${pairingId?.slice(0, 8) ?? "none"}`);
272
+ return null;
273
+ }
274
+ if (!(0, import_peer_auth.isUsableSecret)(paired.sharedSecret)) {
275
+ console.warn(
276
+ `[PeerManager] Reconnect rejected \u2014 "${paired.alias}" was paired before reconnect authentication existed and has no secret. It must be paired again.`
277
+ );
278
+ return null;
279
+ }
280
+ const verdict = (0, import_peer_auth.verifyChallengeResponse)({
281
+ pairingId,
282
+ nonce: proof.nonce,
283
+ expiresAt: proof.expiresAt,
284
+ mac: proof.mac,
285
+ secret: paired.sharedSecret
286
+ });
287
+ if (!verdict.ok) {
288
+ console.warn(`[PeerManager] Reconnect REFUSED for "${paired.alias}" \u2014 ${verdict.reason}`);
289
+ return null;
290
+ }
291
+ const devicePairingId = paired.pairingId;
292
+ console.log(`[PeerManager] Creating reconnect offer for "${paired.alias}" (pairingId=${devicePairingId.slice(0, 8)}\u2026)`);
293
+ const { offer, iceCandidates, fingerprint: desktopFp } = await (0, import_webrtc_service.createOffer)();
294
+ const answerNonce = (0, import_node_crypto.randomBytes)(16).toString("hex");
295
+ reconnectOffers.set(devicePairingId, {
296
+ offerSdp: offer,
297
+ iceCandidates,
298
+ desktopFingerprint: desktopFp,
299
+ createdAt: Date.now(),
300
+ answerNonce
301
+ });
302
+ return {
303
+ offer,
304
+ iceCandidates,
305
+ fingerprint: desktopFp,
306
+ pairingId: devicePairingId,
307
+ answerNonce,
308
+ // Prove this certificate is ours. The phone cannot recognise us by the
309
+ // fingerprint it stored at pairing — werift mints a fresh one on every
310
+ // process start, so restarting the desktop would otherwise make every
311
+ // paired device refuse it.
312
+ offerMac: (0, import_peer_auth.computeReconnectOfferMac)(paired.sharedSecret, devicePairingId, proof.nonce, desktopFp)
313
+ };
314
+ }
315
+ async function completeReconnection(pairingId, answerSdp, answerIceCandidates, mobileFingerprint, answerMac = "") {
316
+ const stored = reconnectOffers.get(pairingId);
317
+ if (!stored) {
318
+ console.warn(`[PeerManager] No pending reconnect offer for pairingId=${pairingId.slice(0, 8)}\u2026`);
319
+ return false;
320
+ }
321
+ reconnectOffers.delete(pairingId);
322
+ const paired = findByPairingId(pairingId);
323
+ if (!paired) return false;
324
+ let assertedFingerprint;
325
+ try {
326
+ assertedFingerprint = (0, import_sdp_fingerprint.extractSingleFingerprint)(answerSdp);
327
+ } catch (err) {
328
+ console.warn(
329
+ `[PeerManager] Reconnect refused \u2014 unusable answer SDP for pairingId=${pairingId.slice(0, 8)}\u2026: ${err.message}`
330
+ );
331
+ return false;
332
+ }
333
+ if (mobileFingerprint && !(0, import_sdp_fingerprint.fingerprintsEqual)(mobileFingerprint, assertedFingerprint)) {
334
+ console.warn("[PeerManager] Reconnect refused \u2014 claimed fingerprint disagrees with the certificate presented");
335
+ return false;
336
+ }
337
+ if (!(0, import_peer_auth.isUsableSecret)(paired.sharedSecret)) {
338
+ console.warn(`[PeerManager] Reconnect refused \u2014 "${paired.alias}" has no pairing secret`);
339
+ return false;
340
+ }
341
+ const expectedMac = (0, import_peer_auth.computeReconnectAnswerMac)(
342
+ paired.sharedSecret,
343
+ pairingId,
344
+ stored.answerNonce,
345
+ assertedFingerprint
346
+ );
347
+ if (!(0, import_peer_auth.macsEqual)(expectedMac, answerMac)) {
348
+ console.warn(
349
+ `[PeerManager] Reconnect REFUSED \u2014 the answer for "${paired.alias}" is not signed by the paired device`
350
+ );
351
+ return false;
352
+ }
353
+ (0, import_paired_device_service.refreshDeviceFingerprint)(pairingId, assertedFingerprint);
354
+ try {
355
+ await (0, import_webrtc_service.connectWithAnswer)(
356
+ stored.offerSdp,
357
+ answerSdp,
358
+ answerIceCandidates,
359
+ assertedFingerprint,
360
+ paired.alias,
361
+ paired.deviceType
362
+ );
363
+ console.log(`[PeerManager] Reconnection established with "${paired.alias}"`);
364
+ return true;
365
+ } catch (err) {
366
+ console.error(`[PeerManager] Reconnection failed:`, err);
367
+ return false;
368
+ }
369
+ }
370
+ function getPeerManagerStatus() {
371
+ return {
372
+ running: started,
373
+ instanceId: (0, import_mdns_service.getInstanceId)(),
374
+ discoveryActive: isDiscoveryActive(),
375
+ discoveredPeers: (0, import_mdns_service.getDiscoveredPeers)().length,
376
+ pairedDevices: (0, import_paired_device_service.listPairedDevices)().length,
377
+ connectedPeers: (0, import_webrtc_service.connectedPeerCount)(),
378
+ pairingActive: (0, import_pairing_service.isPairingActive)(),
379
+ mobileApi: (0, import_mobile_api_server.isMobileApiRunning)(),
380
+ mobileApiPort: (0, import_mobile_api_server.getMobileApiPort)(),
381
+ stateSync: (0, import_state_sync_service.isStateSyncRunning)(),
382
+ remoteTerminals: (0, import_remote_terminal_service.isRemoteTerminalRunning)(),
383
+ remoteAudio: (0, import_remote_audio_service.isRemoteAudioRunning)(),
384
+ remoteInteraction: (0, import_remote_interaction_service.isRemoteInteractionRunning)(),
385
+ pushNotifications: (0, import_push_notification_service.isPushNotificationsRunning)()
386
+ };
387
+ }
388
+ // Annotate the CommonJS export names for ESM import in node:
389
+ 0 && (module.exports = {
390
+ broadcastAgentSessions,
391
+ broadcastAudioStatus,
392
+ broadcastAudioStopped,
393
+ broadcastChannelEvent,
394
+ broadcastChannelResolved,
395
+ broadcastInputRequest,
396
+ broadcastToAllPeers,
397
+ cancelActivePairing,
398
+ collectSnapshot,
399
+ completePairing,
400
+ completeReconnection,
401
+ disconnect,
402
+ forwardAudioChunk,
403
+ getAllRemoteStates,
404
+ getConnectedCount,
405
+ getConnection,
406
+ getConnections,
407
+ getDevice,
408
+ getDevices,
409
+ getDiscoveredDevices,
410
+ getPairingConfirmCode,
411
+ getPeerManagerStatus,
412
+ getPendingInputRequest,
413
+ getPendingInputRequests,
414
+ getRemoteAudioStatus,
415
+ getRemoteAudioStatuses,
416
+ getRemoteState,
417
+ getRemoteTerminals,
418
+ getRemoteTerminalsForPeer,
419
+ getThisInstanceId,
420
+ isDiscoveryActive,
421
+ isPairingActive,
422
+ isPushNotificationsRunning,
423
+ isRemoteAudioRunning,
424
+ isRemoteInteractionRunning,
425
+ isRemoteTerminalRunning,
426
+ isStateSyncRunning,
427
+ issueReconnectChallenge,
428
+ listPushTokens,
429
+ onChannelMessage,
430
+ onConnectionStateChange,
431
+ onRemoteAudioEvent,
432
+ onRemoteChannelEvent,
433
+ onRemoteInteractionEvent,
434
+ onRemoteStateChange,
435
+ onRemoteTerminalEvent,
436
+ pushForChannelEvent,
437
+ pushForInputRequest,
438
+ registerPushToken,
439
+ renameDevice,
440
+ resizeRemoteTerminal,
441
+ respondToInputRequest,
442
+ sendToPeer,
443
+ startPairing,
444
+ startPeerManager,
445
+ startReconnection,
446
+ stopPeerManager,
447
+ unpairDevice,
448
+ unregisterPushToken,
449
+ writeRemoteTerminal
450
+ });
@@ -0,0 +1,33 @@
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 peer_grants_exports = {};
19
+ __export(peer_grants_exports, {
20
+ peerHolds: () => peerHolds
21
+ });
22
+ module.exports = __toCommonJS(peer_grants_exports);
23
+ var import_paired_device_service = require("./paired-device-service");
24
+ var import_peer_capabilities = require("./peer-capabilities");
25
+ function peerHolds(fingerprint, capability) {
26
+ const device = (0, import_paired_device_service.getPairedDevice)(fingerprint);
27
+ if (!device?.confirmedAt) return false;
28
+ return (device.capabilities ?? import_peer_capabilities.DEFAULT_GRANTS).includes(capability);
29
+ }
30
+ // Annotate the CommonJS export names for ESM import in node:
31
+ 0 && (module.exports = {
32
+ peerHolds
33
+ });
@@ -0,0 +1,116 @@
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 persistence_exports = {};
29
+ __export(persistence_exports, {
30
+ ensureDataDir: () => ensureDataDir,
31
+ getDataDir: () => getDataDir,
32
+ getSettingsDir: () => getSettingsDir,
33
+ loadFromDisk: () => loadFromDisk,
34
+ markDirty: () => markDirty,
35
+ saveNow: () => saveNow,
36
+ saveToDisk: () => saveToDisk,
37
+ startAutoSave: () => startAutoSave,
38
+ stopAutoSave: () => stopAutoSave
39
+ });
40
+ module.exports = __toCommonJS(persistence_exports);
41
+ var _lazy___settings_service = __toESM(require("./settings-service"));
42
+ var import_node_fs = __toESM(require("node:fs"));
43
+ var import_node_path = __toESM(require("node:path"));
44
+ var import_node_os = __toESM(require("node:os"));
45
+ const DEFAULT_DATA_DIR = import_node_path.default.join(import_node_os.default.homedir(), ".codetrellis");
46
+ function getSettingsDir() {
47
+ const fromEnv = process.env.CODETRELLIS_DATA_DIR;
48
+ if (fromEnv && fromEnv.trim()) return fromEnv;
49
+ return DEFAULT_DATA_DIR;
50
+ }
51
+ function resolveDataDir() {
52
+ const fromEnv = process.env.CODETRELLIS_DATA_DIR;
53
+ if (fromEnv && fromEnv.trim()) return fromEnv;
54
+ try {
55
+ const { getSettings } = _lazy___settings_service;
56
+ const override = getSettings().data.dataDirOverride;
57
+ if (override && typeof override === "string" && override.trim()) return override;
58
+ } catch {
59
+ }
60
+ return DEFAULT_DATA_DIR;
61
+ }
62
+ function getDbPath() {
63
+ return import_node_path.default.join(resolveDataDir(), "data.db");
64
+ }
65
+ let autoSaveInterval = null;
66
+ function ensureDataDir() {
67
+ const dir = resolveDataDir();
68
+ if (!import_node_fs.default.existsSync(dir)) {
69
+ import_node_fs.default.mkdirSync(dir, { recursive: true });
70
+ console.log(`[Persistence] Created data directory: ${dir}`);
71
+ }
72
+ }
73
+ function loadFromDisk() {
74
+ ensureDataDir();
75
+ if (!import_node_fs.default.existsSync(getDbPath())) {
76
+ console.log("[Persistence] No saved database found, starting fresh");
77
+ return null;
78
+ }
79
+ try {
80
+ const buffer = import_node_fs.default.readFileSync(getDbPath());
81
+ console.log(`[Persistence] Loaded database from ${getDbPath()} (${(buffer.length / 1024).toFixed(1)} KB)`);
82
+ return new Uint8Array(buffer);
83
+ } catch (err) {
84
+ console.error("[Persistence] Failed to load database:", err);
85
+ return null;
86
+ }
87
+ }
88
+ function saveToDisk(_data) {
89
+ }
90
+ function markDirty() {
91
+ }
92
+ function startAutoSave(_exportFn, _intervalMs = 3e4) {
93
+ }
94
+ function saveNow(_exportFn) {
95
+ }
96
+ function stopAutoSave() {
97
+ if (autoSaveInterval) {
98
+ clearInterval(autoSaveInterval);
99
+ autoSaveInterval = null;
100
+ }
101
+ }
102
+ function getDataDir() {
103
+ return resolveDataDir();
104
+ }
105
+ // Annotate the CommonJS export names for ESM import in node:
106
+ 0 && (module.exports = {
107
+ ensureDataDir,
108
+ getDataDir,
109
+ getSettingsDir,
110
+ loadFromDisk,
111
+ markDirty,
112
+ saveNow,
113
+ saveToDisk,
114
+ startAutoSave,
115
+ stopAutoSave
116
+ });