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,338 @@
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 tool_phrasing_exports = {};
19
+ __export(tool_phrasing_exports, {
20
+ phraseEvent: () => phraseEvent,
21
+ rawPayloadText: () => rawPayloadText
22
+ });
23
+ module.exports = __toCommonJS(tool_phrasing_exports);
24
+ function subject(args, ...keys) {
25
+ for (const key of keys) {
26
+ const v = args[key];
27
+ if (typeof v === "string" && v.trim() && !/^(itm|pln|doc|evt)_/.test(v) && !/^[0-9a-f]{8}-[0-9a-f]{4}-/i.test(v)) {
28
+ return `"${v.length > 60 ? `${v.slice(0, 57)}\u2026` : v}"`;
29
+ }
30
+ }
31
+ for (const key of keys) {
32
+ const v = args[key];
33
+ if (typeof v === "string" && v.trim()) return `${v.slice(0, 12)}\u2026`;
34
+ }
35
+ return "an item";
36
+ }
37
+ const STATUS_VERB = {
38
+ in_progress: "Started",
39
+ done: "Finished",
40
+ blocked: "Blocked",
41
+ pending: "Reset",
42
+ cancelled: "Cancelled"
43
+ };
44
+ const TOOL_PHRASINGS = {
45
+ // ── Plan items: the ones that describe intent ──────────────────────
46
+ update_item: {
47
+ intent: "write",
48
+ mutating: true,
49
+ phrase: (a) => {
50
+ const status = typeof a.status === "string" ? a.status : null;
51
+ const verb = status ? STATUS_VERB[status] ?? `Set ${status} on` : "Updated";
52
+ return `${verb} ${subject(a, "title", "uid", "item_uid")}`;
53
+ }
54
+ },
55
+ add_item: {
56
+ intent: "write",
57
+ mutating: true,
58
+ phrase: (a) => `Added ${subject(a, "title", "uid")}`
59
+ },
60
+ bulk_add_items: {
61
+ intent: "write",
62
+ mutating: true,
63
+ phrase: (a) => {
64
+ const items = Array.isArray(a.items) ? a.items.length : null;
65
+ return items ? `Added ${items} items` : "Added several items";
66
+ }
67
+ },
68
+ delete_item: { intent: "write", mutating: true, phrase: (a) => `Deleted ${subject(a, "title", "uid")}` },
69
+ move_item: { intent: "write", mutating: true, phrase: (a) => `Moved ${subject(a, "title", "uid")}` },
70
+ claim_item: { intent: "write", mutating: true, phrase: (a) => `Claimed ${subject(a, "title", "uid")}` },
71
+ set_item_blocked: { intent: "write", mutating: true, phrase: (a) => `Blocked ${subject(a, "title", "uid")}` },
72
+ update_item_progress: {
73
+ intent: "write",
74
+ mutating: true,
75
+ phrase: (a) => {
76
+ const pct = typeof a.progress === "number" ? ` to ${a.progress}%` : "";
77
+ return `Moved ${subject(a, "title", "uid")}${pct}`;
78
+ }
79
+ },
80
+ add_item_comment: { intent: "write", mutating: true, phrase: (a) => `Commented on ${subject(a, "title", "uid")}` },
81
+ // ── Plans ─────────────────────────────────────────────────────────
82
+ create_plan: { intent: "write", mutating: true, phrase: (a) => `Created plan ${subject(a, "title")}` },
83
+ create_plan_from_template: {
84
+ intent: "write",
85
+ mutating: true,
86
+ phrase: (a) => `Created plan ${subject(a, "title")} from the ${String(a.template_id ?? "a")} template`
87
+ },
88
+ update_plan: { intent: "write", mutating: true, phrase: (a) => `Updated plan ${subject(a, "title", "plan_uid")}` },
89
+ set_active_plan: { intent: "session", mutating: false, phrase: (a) => `Switched to plan ${subject(a, "title", "plan_uid")}` },
90
+ export_plan_to_files: { intent: "write", mutating: true, phrase: (a) => `Exported plan ${subject(a, "plan_uid")} to disk` },
91
+ // ── Asking the human ──────────────────────────────────────────────
92
+ request_plan_deletion: {
93
+ intent: "ask",
94
+ mutating: false,
95
+ phrase: (a) => {
96
+ const n = Array.isArray(a.plan_uids) ? a.plan_uids.length : 1;
97
+ return n === 1 ? "Asked you to confirm deleting a plan" : `Asked you to confirm deleting ${n} plans`;
98
+ }
99
+ },
100
+ post_channel_event: {
101
+ intent: "ask",
102
+ mutating: true,
103
+ phrase: (a) => {
104
+ const type = typeof a.event_type === "string" ? a.event_type : "note";
105
+ const what = {
106
+ stuck: "Reported being stuck",
107
+ "need-decision": "Asked for a decision",
108
+ "need-context": "Asked for context",
109
+ "handing-off": "Handed off",
110
+ steer: "Gave direction",
111
+ "weigh-in": "Asked for a second opinion"
112
+ };
113
+ const msg = typeof a.message === "string" && a.message ? `: ${a.message.slice(0, 60)}` : "";
114
+ return `${what[type] ?? "Posted a note"}${msg}`;
115
+ }
116
+ },
117
+ await_user_input: { intent: "ask", mutating: false, phrase: () => "Waiting for your answer" },
118
+ await_ack: { intent: "ask", mutating: false, phrase: () => "Waiting for acknowledgement" },
119
+ await_decision: { intent: "ask", mutating: false, phrase: () => "Waiting for a decision at a breakpoint" },
120
+ check_breakpoint: { intent: "read", mutating: false, phrase: (a) => typeof a.path === "string" ? `Checked for a breakpoint on \`${a.path}\`` : "Checked for a breakpoint" },
121
+ approve_gate: { intent: "error", mutating: false, phrase: (a) => `Tried to clear the approval gate on ${subject(a, "uid")} \u2014 refused, sign-off is yours` },
122
+ record_artefact: { intent: "write", mutating: true, phrase: (a) => `Recorded ${{ material: "a material", output: "an output", evidence: "evidence" }[String(a.role)] ?? "a file"}: ${subject(a, "path")}` },
123
+ list_criteria: { intent: "read", mutating: false, phrase: (a) => `Read the criteria for ${subject(a, "item_uid")}` },
124
+ add_criterion: { intent: "write", mutating: true, phrase: (a) => `Added a criterion: ${subject(a, "text")}` },
125
+ submit_criterion: { intent: "ask", mutating: true, phrase: (a, summary) => summary ?? `Submitted evidence for ${subject(a, "criterion_uid")}` },
126
+ check_criterion: { intent: "read", mutating: false, phrase: (a, summary) => summary ?? `Checked evidence for ${subject(a, "criterion_uid")}` },
127
+ get_worklist: { intent: "read", mutating: false, phrase: () => "Read the worklist" },
128
+ run_checks: { intent: "read", mutating: false, phrase: () => "Re-ran every check on the plan" },
129
+ get_brief: { intent: "read", mutating: false, phrase: (a) => `Read the brief for ${subject(a, "item_uid")}` },
130
+ list_materials: { intent: "read", mutating: false, phrase: () => "Listed the materials" },
131
+ read_material: { intent: "read", mutating: false, phrase: (a, summary) => summary ?? `Read material ${subject(a, "attachment_uid")}` },
132
+ // ── Reading ───────────────────────────────────────────────────────
133
+ search_symbols: { intent: "read", mutating: false, phrase: (a) => `Looked for \`${String(a.query ?? "")}\`` },
134
+ search_items: { intent: "read", mutating: false, phrase: (a) => `Searched the plan for \`${String(a.query ?? "")}\`` },
135
+ get_dependencies: { intent: "read", mutating: false, phrase: (a) => `Checked what depends on ${String(a.file_path ?? a.path ?? "a file")}` },
136
+ check_architecture: { intent: "read", mutating: false, phrase: () => "Checked the architecture" },
137
+ check_conformity: { intent: "read", mutating: false, phrase: () => "Checked conformity" },
138
+ get_drift_report: { intent: "read", mutating: false, phrase: () => "Checked for drift" },
139
+ get_next_item: { intent: "read", mutating: false, phrase: () => "Asked what to work on next" },
140
+ get_item: { intent: "read", mutating: false, phrase: (a) => `Read ${subject(a, "title", "uid")}` },
141
+ resolve_reference: { intent: "read", mutating: false, phrase: (a) => `Looked up ${subject(a, "ref")}` },
142
+ read_item_full: { intent: "read", mutating: false, phrase: (a) => `Read ${subject(a, "title", "uid")} in full` },
143
+ get_plan: { intent: "read", mutating: false, phrase: (a) => `Read plan ${subject(a, "title", "plan_uid")}` },
144
+ list_items: { intent: "read", mutating: false, phrase: () => "Listed plan items" },
145
+ list_plans: { intent: "read", mutating: false, phrase: () => "Listed plans" },
146
+ read_system_doc: { intent: "read", mutating: false, phrase: (a) => `Read the ${String(a.doc_type ?? "system")} doc` },
147
+ list_cross_system_edges: { intent: "read", mutating: false, phrase: () => "Checked cross-system links" },
148
+ // ── Session ───────────────────────────────────────────────────────
149
+ register_session: { intent: "session", mutating: false, phrase: (a) => `${String(a.agent_type ?? "An agent")} connected` },
150
+ open_project: { intent: "session", mutating: false, phrase: (a) => `Opened ${String(a.path ?? "a project")}` },
151
+ rescan_project: { intent: "session", mutating: false, phrase: () => "Rescanned the project" },
152
+ // ── System docs + git ─────────────────────────────────────────────
153
+ write_system_doc: { intent: "write", mutating: true, phrase: (a) => `Wrote the ${String(a.doc_type ?? "system")} doc` },
154
+ commit_manifest_changes: { intent: "write", mutating: true, phrase: () => "Committed plan changes" },
155
+ set_freeze: {
156
+ intent: "write",
157
+ mutating: true,
158
+ phrase: (a) => a.active === false ? "Lifted the freeze" : "Started a freeze"
159
+ }
160
+ };
161
+ function fileName(args, key) {
162
+ const v = args[key];
163
+ return typeof v === "string" && v.trim() ? v.split(/[\\/]/).pop() : "a file";
164
+ }
165
+ const BRIEF_PHRASINGS = {
166
+ get_brief: { intent: "read", mutating: false, phrase: () => "Read the brief" },
167
+ list_materials: { intent: "read", mutating: false, phrase: () => "Looked through the materials" },
168
+ read_material: { intent: "read", mutating: false, phrase: (_a, summary) => summary ?? "Read a material" },
169
+ record_artefact: {
170
+ intent: "write",
171
+ mutating: true,
172
+ phrase: (a) => {
173
+ const name = fileName(a, "path");
174
+ if (a.role === "output") return `Wrote ${name}`;
175
+ if (a.role === "evidence") return `Saved ${name} as evidence`;
176
+ return `Added ${name} to the materials`;
177
+ }
178
+ },
179
+ list_criteria: { intent: "read", mutating: false, phrase: () => "Read what good looks like" },
180
+ add_criterion: { intent: "write", mutating: true, phrase: (a) => `Suggested what good looks like: ${subject(a, "text")}` },
181
+ check_criterion: { intent: "read", mutating: false, phrase: (_a, summary) => summary ?? "Checked its work before offering it" },
182
+ submit_criterion: { intent: "ask", mutating: true, phrase: (a, summary) => summary ?? `Offered evidence for ${subject(a, "criterion_uid")}` },
183
+ get_worklist: { intent: "read", mutating: false, phrase: () => "Checked what it still owes you" },
184
+ run_checks: { intent: "read", mutating: false, phrase: () => "Re-checked the whole brief" },
185
+ get_next_item: { intent: "read", mutating: false, phrase: () => "Asked which task is next" },
186
+ claim_item: { intent: "write", mutating: true, phrase: (a) => `Took on ${subject(a, "title", "uid")}` },
187
+ add_item_comment: { intent: "write", mutating: true, phrase: (a) => `Left a note on ${subject(a, "title", "uid")}` }
188
+ };
189
+ function parseArgs(raw) {
190
+ if (raw && typeof raw === "object" && !Array.isArray(raw)) return raw;
191
+ if (typeof raw === "string") {
192
+ try {
193
+ const parsed = JSON.parse(raw);
194
+ if (parsed && typeof parsed === "object") return parsed;
195
+ } catch {
196
+ }
197
+ }
198
+ return {};
199
+ }
200
+ function humaniseToolName(tool) {
201
+ const words = tool.replace(/_/g, " ").trim();
202
+ return words.charAt(0).toUpperCase() + words.slice(1);
203
+ }
204
+ function decidedBy(actorType) {
205
+ return actorType === "human" ? "You" : actorType === "unverified" ? "Someone over the local API" : "Someone";
206
+ }
207
+ function phraseEvent(event, vocabulary = "code") {
208
+ const payload = event.payload ?? {};
209
+ const tool = typeof payload.tool === "string" ? payload.tool : null;
210
+ if (tool && (event.type === "tool_call" || event.type === "tool_error")) {
211
+ const args = parseArgs(payload.args);
212
+ const phrasing = (vocabulary === "brief" ? BRIEF_PHRASINGS[tool] : void 0) ?? TOOL_PHRASINGS[tool];
213
+ const summary = typeof payload.summary === "string" && payload.summary.trim() ? payload.summary : null;
214
+ if (event.type === "tool_error") {
215
+ const err = typeof payload.error === "string" ? `: ${payload.error.slice(0, 80)}` : "";
216
+ return {
217
+ text: `${humaniseToolName(tool)} failed${err}`,
218
+ intent: "error",
219
+ tool,
220
+ mutating: false
221
+ };
222
+ }
223
+ if (phrasing) {
224
+ return { text: phrasing.phrase(args, summary), intent: phrasing.intent, tool, mutating: phrasing.mutating };
225
+ }
226
+ return { text: humaniseToolName(tool), intent: "read", tool, mutating: false };
227
+ }
228
+ if (event.type === "spec_edited") {
229
+ const title = typeof payload.title === "string" && payload.title.trim() ? payload.title : "untitled";
230
+ const what = payload.kind === "item" ? `the description of \u201C${title}\u201D` : `the spec \u201C${title}\u201D`;
231
+ const version = typeof payload.version === "number" ? ` (v${payload.version})` : "";
232
+ const from = payload.authorType === "file" ? ", from the plan file" : "";
233
+ return { text: `Edited ${what}${version}${from}`, intent: "write", tool: null, mutating: true };
234
+ }
235
+ if (event.type === "skill_used") {
236
+ const skill = typeof payload.skill === "string" && payload.skill ? payload.skill.slice(0, 80) : null;
237
+ return { text: skill ? `Used the ${skill} skill` : "Used a skill", intent: "read", tool: null, mutating: false };
238
+ }
239
+ if (event.type === "breakpoint_hit" || event.type === "breakpoint_answered") {
240
+ const title = typeof payload.path === "string" && payload.path ? payload.path.slice(0, 120) : typeof payload.itemTitle === "string" && payload.itemTitle.trim() ? payload.itemTitle.slice(0, 80) : "an item";
241
+ const doing = { claim: "claiming", done: "marking done", edit: "changing", delete: "deleting", edit_code: "changing", breach: "changing" };
242
+ const what = `${doing[String(payload.action)] ?? "acting on"} \u201C${title}\u201D`;
243
+ if (event.type === "breakpoint_hit") {
244
+ if (payload.breach === true) return { text: `Changed \u201C${title}\u201D past a breakpoint: a breach, it could not be paused`, intent: "error", tool: null, mutating: true };
245
+ if (typeof payload.signalKind === "string") return { text: `Paused at a breakpoint on a serious ${payload.signalKind} signal, before ${what}`, intent: "ask", tool: null, mutating: false };
246
+ return { text: `Paused at a breakpoint before ${what}`, intent: "ask", tool: null, mutating: false };
247
+ }
248
+ if (payload.byType === "system") {
249
+ const why = typeof payload.note === "string" && payload.note ? `: ${payload.note.slice(0, 120)}` : "";
250
+ return { text: `CodeTrellis let ${what} through${why}`, intent: "write", tool: null, mutating: false };
251
+ }
252
+ const who = payload.byType === "human" ? "You" : payload.byType === "phone" ? "You, from the phone," : "Someone";
253
+ const note = typeof payload.note === "string" && payload.note ? `: \u201C${payload.note.slice(0, 120)}\u201D` : "";
254
+ const words = payload.decision === "stop" ? `said stop to ${what}${note}` : payload.decision === "steer" ? `said continue ${what}, with a steer${note}` : `said continue ${what}`;
255
+ return { text: `${who} ${words}`, intent: payload.decision === "stop" ? "error" : "write", tool: null, mutating: false };
256
+ }
257
+ if (event.type === "criterion_decided") {
258
+ const text = typeof payload.text === "string" ? payload.text : "a criterion";
259
+ const approved = payload.decision === "approved";
260
+ const who = decidedBy(payload.actorType);
261
+ const from = payload.channel === "phone" ? ", from the phone" : "";
262
+ return { text: `${who} ${approved ? "approved" : "sent back"} \u201C${text.slice(0, 80)}\u201D${from}`, intent: approved ? "write" : "error", tool: null, mutating: true };
263
+ }
264
+ if (event.type === "check_run") {
265
+ const passed = Number(payload.passed) || 0;
266
+ const failed = Number(payload.failed) || 0;
267
+ const words = failed ? `${failed} failing, ${passed} passing` : `all ${passed} passing`;
268
+ return { text: `Checked criteria: ${words}`, intent: failed ? "error" : "read", tool: null, mutating: false };
269
+ }
270
+ const whoDid = decidedBy;
271
+ if (event.type === "signal_answered") {
272
+ const kind = typeof payload.kind === "string" ? payload.kind.replace(/-/g, " ") : "a";
273
+ const signal = `a ${kind} signal`;
274
+ const said = { acknowledged: `acknowledged ${signal}`, intended: `marked ${signal} intended`, dismissed: `dismissed ${signal}`, open: `reopened ${signal}` };
275
+ const from = payload.channel === "phone" ? ", from the phone" : "";
276
+ return { text: `${whoDid(payload.actorType)} ${said[String(payload.state)] ?? `answered ${signal}`}${from}`, intent: "write", tool: null, mutating: false };
277
+ }
278
+ if (event.type === "spec_decided") {
279
+ const said = { accept: "accepted", amend: "accepted", reject: "rejected" };
280
+ const section = typeof payload.section === "string" && payload.section ? ` to \u201C${payload.section.slice(0, 80)}\u201D` : "";
281
+ const amended = payload.decision === "amend" ? ", with changes" : "";
282
+ return { text: `${whoDid(payload.authorType)} ${said[String(payload.decision)] ?? "decided"} a proposed spec change${section}${amended}`, intent: payload.decision === "reject" ? "error" : "write", tool: null, mutating: true };
283
+ }
284
+ if (event.type === "retention_changed") {
285
+ const words = (v) => typeof v === "string" && v ? v : "another window";
286
+ const shorter = typeof payload.to === "number" && (payload.from === null || typeof payload.from === "number" && payload.to < payload.from);
287
+ return { text: `${whoDid(payload.authorType)} changed how long the record is kept, from ${words(payload.fromWords)} to ${words(payload.toWords)}`, intent: shorter ? "error" : "write", tool: null, mutating: true };
288
+ }
289
+ if (event.type === "rule_changed") {
290
+ const rule = typeof payload.from === "string" && typeof payload.mayNotImport === "string" ? ` \u201C${payload.from} may not import ${payload.mayNotImport}\u201D` : ` ${String(payload.ruleId ?? "")}`;
291
+ return { text: `${whoDid(payload.authorType)} ${payload.change === "stopped" ? "stopped" : "set"} the architecture rule${rule}`, intent: "write", tool: null, mutating: true };
292
+ }
293
+ const file = typeof payload.file === "string" ? payload.file.split("/").pop() : null;
294
+ switch (payload.action) {
295
+ case "read":
296
+ return { text: `Read ${file ?? "a file"}`, intent: "read", tool: null, mutating: false };
297
+ case "write":
298
+ return { text: `Wrote ${file ?? "a file"}`, intent: "write", tool: null, mutating: true };
299
+ case "edit":
300
+ return { text: `Edited ${file ?? "a file"}`, intent: "write", tool: null, mutating: true };
301
+ case "bash":
302
+ return {
303
+ text: `Ran \`${String(payload.command ?? "").slice(0, 60)}\``,
304
+ intent: "write",
305
+ tool: null,
306
+ mutating: true
307
+ };
308
+ default:
309
+ break;
310
+ }
311
+ if (typeof payload.tool === "string" && payload.pattern) {
312
+ return {
313
+ text: `${payload.tool === "Grep" ? "Searched for" : "Looked for files matching"} \`${String(payload.pattern)}\``,
314
+ intent: "read",
315
+ tool: null,
316
+ mutating: false
317
+ };
318
+ }
319
+ if (event.type === "session_start") return { text: "Session started", intent: "session", tool: null, mutating: false };
320
+ if (event.type === "session_end") return { text: "Session ended", intent: "session", tool: null, mutating: false };
321
+ const message = payload.message ?? payload.text;
322
+ if (typeof message === "string" && message.trim()) {
323
+ return { text: message.slice(0, 120), intent: "read", tool: null, mutating: false };
324
+ }
325
+ return { text: humaniseToolName(event.type), intent: "read", tool: null, mutating: false };
326
+ }
327
+ function rawPayloadText(event) {
328
+ try {
329
+ return JSON.stringify(event.payload, null, 2);
330
+ } catch {
331
+ return String(event.payload);
332
+ }
333
+ }
334
+ // Annotate the CommonJS export names for ESM import in node:
335
+ 0 && (module.exports = {
336
+ phraseEvent,
337
+ rawPayloadText
338
+ });
@@ -0,0 +1,27 @@
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 turn_gap_exports = {};
19
+ __export(turn_gap_exports, {
20
+ TURN_GAP_MS: () => TURN_GAP_MS
21
+ });
22
+ module.exports = __toCommonJS(turn_gap_exports);
23
+ const TURN_GAP_MS = 3e4;
24
+ // Annotate the CommonJS export names for ESM import in node:
25
+ 0 && (module.exports = {
26
+ TURN_GAP_MS
27
+ });
@@ -0,0 +1,38 @@
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 workstream_words_exports = {};
19
+ __export(workstream_words_exports, {
20
+ chipLabel: () => chipLabel,
21
+ sideLabel: () => sideLabel
22
+ });
23
+ module.exports = __toCommonJS(workstream_words_exports);
24
+ function chipLabel(w) {
25
+ if (w.branch) return w.branch;
26
+ return w.head ? `detached ${w.head.slice(0, 7)}` : "detached";
27
+ }
28
+ function sideLabel(root, workstreams) {
29
+ const ws = workstreams.find((w) => w.root === root);
30
+ if (ws) return chipLabel(ws);
31
+ if (root.startsWith("branch:")) return root.slice("branch:".length);
32
+ return root.split(/[\\/]/).filter(Boolean).pop() ?? root;
33
+ }
34
+ // Annotate the CommonJS export names for ESM import in node:
35
+ 0 && (module.exports = {
36
+ chipLabel,
37
+ sideLabel
38
+ });
@@ -0,0 +1,144 @@
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 xlsx_xml_exports = {};
19
+ __export(xlsx_xml_exports, {
20
+ colLetters: () => colLetters,
21
+ colNumber: () => colNumber,
22
+ decodeXml: () => decodeXml,
23
+ parseDateStyles: () => parseDateStyles,
24
+ parseSharedStrings: () => parseSharedStrings,
25
+ parseSheetGrid: () => parseSheetGrid,
26
+ parseWorkbookSheets: () => parseWorkbookSheets,
27
+ serialToDate: () => serialToDate,
28
+ sheetDimension: () => sheetDimension
29
+ });
30
+ module.exports = __toCommonJS(xlsx_xml_exports);
31
+ function decodeXml(s) {
32
+ return s.replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&quot;/g, '"').replace(/&apos;/g, "'").replace(/&#(\d+);/g, (_, n) => String.fromCodePoint(Number(n))).replace(/&#x([0-9a-f]+);/gi, (_, n) => String.fromCodePoint(parseInt(n, 16))).replace(/&amp;/g, "&");
33
+ }
34
+ function parseWorkbookSheets(workbookXml, relsXml) {
35
+ const targets = /* @__PURE__ */ new Map();
36
+ for (const m of relsXml.matchAll(/<Relationship\b[^>]*>/g)) {
37
+ const id = m[0].match(/\bId="([^"]+)"/)?.[1];
38
+ const target = m[0].match(/\bTarget="([^"]+)"/)?.[1];
39
+ if (id && target) targets.set(id, target.replace(/^\/?(xl\/)?/, "xl/"));
40
+ }
41
+ const sheets = [];
42
+ for (const m of workbookXml.matchAll(/<sheet\b[^>]*>/g)) {
43
+ const name = m[0].match(/\bname="([^"]*)"/)?.[1];
44
+ if (name === void 0) continue;
45
+ const rid = m[0].match(/\br:id="([^"]+)"/)?.[1];
46
+ sheets.push({ name: decodeXml(name), part: rid && targets.get(rid) || null });
47
+ }
48
+ return sheets;
49
+ }
50
+ function sheetDimension(sheetXml) {
51
+ return sheetXml.match(/<dimension\b[^>]*\bref="([^"]+)"/)?.[1] ?? null;
52
+ }
53
+ function parseSharedStrings(xml) {
54
+ const out = [];
55
+ for (const si of xml.matchAll(/<si\b[^>]*>([\s\S]*?)<\/si>/g)) {
56
+ let text = "";
57
+ for (const t of si[1].matchAll(/<t\b[^>]*>([\s\S]*?)<\/t>/g)) text += t[1];
58
+ out.push(decodeXml(text));
59
+ }
60
+ return out;
61
+ }
62
+ function parseDateStyles(stylesXml) {
63
+ const custom = /* @__PURE__ */ new Map();
64
+ for (const m of stylesXml.matchAll(/<numFmt\b[^>]*>/g)) {
65
+ const id = Number(m[0].match(/\bnumFmtId="(\d+)"/)?.[1]);
66
+ const code = decodeXml(m[0].match(/\bformatCode="([^"]*)"/)?.[1] ?? "");
67
+ if (Number.isFinite(id)) custom.set(id, code);
68
+ }
69
+ const isDateFmt = (id) => id >= 14 && id <= 22 || id >= 45 && id <= 47 || custom.has(id) && /(^|[^"\\])[dy]/i.test(custom.get(id).replace(/"[^"]*"/g, ""));
70
+ const dates = /* @__PURE__ */ new Set();
71
+ const xfs = stylesXml.match(/<cellXfs\b[^>]*>([\s\S]*?)<\/cellXfs>/)?.[1] ?? "";
72
+ let i = 0;
73
+ for (const m of xfs.matchAll(/<xf\b[^>]*>/g)) {
74
+ if (isDateFmt(Number(m[0].match(/\bnumFmtId="(\d+)"/)?.[1] ?? -1))) dates.add(i);
75
+ i++;
76
+ }
77
+ return dates;
78
+ }
79
+ function colNumber(letters) {
80
+ let n = 0;
81
+ for (const ch of letters.toUpperCase()) n = n * 26 + (ch.charCodeAt(0) - 64);
82
+ return n;
83
+ }
84
+ function colLetters(n) {
85
+ let s = "";
86
+ for (let x = n; x > 0; x = Math.floor((x - 1) / 26)) s = String.fromCharCode(65 + (x - 1) % 26) + s;
87
+ return s;
88
+ }
89
+ function serialToDate(serial) {
90
+ const ms = Math.round((serial - 25569) * 86400 * 1e3);
91
+ const iso = new Date(ms).toISOString();
92
+ return serial % 1 === 0 ? iso.slice(0, 10) : iso.slice(0, 16).replace("T", " ");
93
+ }
94
+ function parseSheetGrid(sheetXml, shared, dateStyles, caps) {
95
+ const rows = [];
96
+ let truncated = false;
97
+ let cells = 0;
98
+ for (const c of sheetXml.matchAll(/<c\b([^>]*?)(?:\/>|>([\s\S]*?)<\/c>)/g)) {
99
+ const attrs = c[1];
100
+ const ref = attrs.match(/\br="([A-Z]{1,3})(\d+)"/);
101
+ if (!ref) continue;
102
+ const col = colNumber(ref[1]);
103
+ const row = Number(ref[2]);
104
+ if (row > caps.maxRows || col > caps.maxCols) {
105
+ truncated = true;
106
+ continue;
107
+ }
108
+ if (cells >= caps.maxCells) {
109
+ truncated = true;
110
+ break;
111
+ }
112
+ const inner = c[2] ?? "";
113
+ const type = attrs.match(/\bt="([^"]+)"/)?.[1] ?? "n";
114
+ const style = Number(attrs.match(/\bs="(\d+)"/)?.[1] ?? -1);
115
+ const v = inner.match(/<v>([\s\S]*?)<\/v>/)?.[1];
116
+ let text = "";
117
+ if (type === "s") text = v !== void 0 ? shared[Number(v)] ?? "" : "";
118
+ else if (type === "inlineStr") text = decodeXml([...inner.matchAll(/<t\b[^>]*>([\s\S]*?)<\/t>/g)].map((t) => t[1]).join(""));
119
+ else if (type === "b") text = v === "1" ? "TRUE" : v === "0" ? "FALSE" : "";
120
+ else if (v !== void 0) {
121
+ const raw = decodeXml(v);
122
+ const n = Number(raw);
123
+ text = type === "n" && dateStyles.has(style) && Number.isFinite(n) ? serialToDate(n) : raw;
124
+ }
125
+ while (rows.length < row) rows.push([]);
126
+ const r = rows[row - 1];
127
+ while (r.length < col - 1) r.push("");
128
+ r[col - 1] = text;
129
+ cells++;
130
+ }
131
+ return { rows, truncated, cells };
132
+ }
133
+ // Annotate the CommonJS export names for ESM import in node:
134
+ 0 && (module.exports = {
135
+ colLetters,
136
+ colNumber,
137
+ decodeXml,
138
+ parseDateStyles,
139
+ parseSharedStrings,
140
+ parseSheetGrid,
141
+ parseWorkbookSheets,
142
+ serialToDate,
143
+ sheetDimension
144
+ });
@@ -0,0 +1,99 @@
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 zip_reader_exports = {};
19
+ __export(zip_reader_exports, {
20
+ CapError: () => CapError,
21
+ listEntries: () => listEntries,
22
+ readEntry: () => readEntry,
23
+ readText: () => readText
24
+ });
25
+ module.exports = __toCommonJS(zip_reader_exports);
26
+ class CapError extends Error {
27
+ }
28
+ function listEntries(view) {
29
+ const floor = Math.max(0, view.byteLength - 22 - 65535);
30
+ let eocd = -1;
31
+ for (let i = view.byteLength - 22; i >= floor; i--) {
32
+ if (view.getUint32(i, true) === 101010256) {
33
+ eocd = i;
34
+ break;
35
+ }
36
+ }
37
+ if (eocd < 0) throw new Error("not a zip archive");
38
+ const count = view.getUint16(eocd + 10, true);
39
+ let p = view.getUint32(eocd + 16, true);
40
+ const decoder = new TextDecoder();
41
+ const out = [];
42
+ for (let n = 0; n < count; n++) {
43
+ if (p + 46 > view.byteLength || view.getUint32(p, true) !== 33639248) throw new Error("corrupt central directory");
44
+ const nameLen = view.getUint16(p + 28, true);
45
+ out.push({
46
+ method: view.getUint16(p + 10, true),
47
+ compressedSize: view.getUint32(p + 20, true),
48
+ offset: view.getUint32(p + 42, true),
49
+ name: decoder.decode(new Uint8Array(view.buffer, view.byteOffset + p + 46, nameLen))
50
+ });
51
+ p += 46 + nameLen + view.getUint16(p + 30, true) + view.getUint16(p + 32, true);
52
+ }
53
+ return out;
54
+ }
55
+ async function readEntry(view, e, budget) {
56
+ if (view.getUint32(e.offset, true) !== 67324752) throw new Error("corrupt local header");
57
+ const start = e.offset + 30 + view.getUint16(e.offset + 26, true) + view.getUint16(e.offset + 28, true);
58
+ const raw = new Uint8Array(view.buffer, view.byteOffset + start, e.compressedSize);
59
+ if (e.method === 0) {
60
+ budget.used += raw.byteLength;
61
+ if (raw.byteLength > budget.maxPart || budget.used > budget.maxTotal) {
62
+ throw new CapError(`${e.name} is larger than CodeTrellis will read`);
63
+ }
64
+ return raw;
65
+ }
66
+ if (e.method !== 8) throw new Error(`${e.name} uses a compression CodeTrellis does not read`);
67
+ const reader = new Blob([raw]).stream().pipeThrough(new DecompressionStream("deflate-raw")).getReader();
68
+ const chunks = [];
69
+ let size = 0;
70
+ for (; ; ) {
71
+ const { done, value } = await reader.read();
72
+ if (done) break;
73
+ size += value.byteLength;
74
+ budget.used += value.byteLength;
75
+ if (size > budget.maxPart || budget.used > budget.maxTotal) {
76
+ await reader.cancel();
77
+ throw new CapError(`${e.name} expands past what CodeTrellis will read`);
78
+ }
79
+ chunks.push(value);
80
+ }
81
+ const bytes = new Uint8Array(size);
82
+ let at = 0;
83
+ for (const c of chunks) {
84
+ bytes.set(c, at);
85
+ at += c.byteLength;
86
+ }
87
+ return bytes;
88
+ }
89
+ async function readText(view, entries, name, budget) {
90
+ const e = entries.find((x) => x.name === name);
91
+ return e ? new TextDecoder().decode(await readEntry(view, e, budget)) : null;
92
+ }
93
+ // Annotate the CommonJS export names for ESM import in node:
94
+ 0 && (module.exports = {
95
+ CapError,
96
+ listEntries,
97
+ readEntry,
98
+ readText
99
+ });