@telora/daemon 0.19.43 → 0.19.74

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 (542) hide show
  1. package/build-info.json +8 -3
  2. package/dist/assembly-engine.d.ts +9 -0
  3. package/dist/assembly-engine.d.ts.map +1 -1
  4. package/dist/assembly-engine.js.map +1 -1
  5. package/dist/audit-hooks.js +1 -1
  6. package/dist/audit-shape.d.ts +103 -0
  7. package/dist/audit-shape.d.ts.map +1 -0
  8. package/dist/audit-shape.js +81 -0
  9. package/dist/audit-shape.js.map +1 -0
  10. package/dist/branch-status.js +2 -2
  11. package/dist/branch-status.js.map +1 -1
  12. package/dist/ci-sensor-loop.d.ts +47 -0
  13. package/dist/ci-sensor-loop.d.ts.map +1 -0
  14. package/dist/ci-sensor-loop.js +116 -0
  15. package/dist/ci-sensor-loop.js.map +1 -0
  16. package/dist/ci-status-git.d.ts +52 -0
  17. package/dist/ci-status-git.d.ts.map +1 -0
  18. package/dist/ci-status-git.js +86 -0
  19. package/dist/ci-status-git.js.map +1 -0
  20. package/dist/ci-status.d.ts +122 -0
  21. package/dist/ci-status.d.ts.map +1 -0
  22. package/dist/ci-status.js +114 -0
  23. package/dist/ci-status.js.map +1 -0
  24. package/dist/cli/connect/agents.d.ts +24 -0
  25. package/dist/cli/connect/agents.d.ts.map +1 -0
  26. package/dist/cli/connect/agents.js +65 -0
  27. package/dist/cli/connect/agents.js.map +1 -0
  28. package/dist/cli/connect/claude.d.ts +31 -0
  29. package/dist/cli/connect/claude.d.ts.map +1 -0
  30. package/dist/cli/connect/claude.js +104 -0
  31. package/dist/cli/connect/claude.js.map +1 -0
  32. package/dist/cli/connect/cline.d.ts +37 -0
  33. package/dist/cli/connect/cline.d.ts.map +1 -0
  34. package/dist/cli/connect/cline.js +115 -0
  35. package/dist/cli/connect/cline.js.map +1 -0
  36. package/dist/cli/connect/codex.d.ts +44 -0
  37. package/dist/cli/connect/codex.d.ts.map +1 -0
  38. package/dist/cli/connect/codex.js +111 -0
  39. package/dist/cli/connect/codex.js.map +1 -0
  40. package/dist/cli/connect/ide.d.ts +69 -0
  41. package/dist/cli/connect/ide.d.ts.map +1 -0
  42. package/dist/cli/connect/ide.js +134 -0
  43. package/dist/cli/connect/ide.js.map +1 -0
  44. package/dist/cli/connect/scaffolding.d.ts +31 -0
  45. package/dist/cli/connect/scaffolding.d.ts.map +1 -0
  46. package/dist/cli/connect/scaffolding.js +52 -0
  47. package/dist/cli/connect/scaffolding.js.map +1 -0
  48. package/dist/cli/connect/shared.d.ts +30 -0
  49. package/dist/cli/connect/shared.d.ts.map +1 -0
  50. package/dist/cli/connect/shared.js +11 -0
  51. package/dist/cli/connect/shared.js.map +1 -0
  52. package/dist/cli/connect.d.ts +9 -210
  53. package/dist/cli/connect.d.ts.map +1 -1
  54. package/dist/cli/connect.js +10 -526
  55. package/dist/cli/connect.js.map +1 -1
  56. package/dist/cli/open.js +2 -2
  57. package/dist/completion/event.d.ts +3 -0
  58. package/dist/completion/event.d.ts.map +1 -1
  59. package/dist/completion/event.js +44 -9
  60. package/dist/completion/event.js.map +1 -1
  61. package/dist/completion/merge-phase.d.ts +3 -0
  62. package/dist/completion/merge-phase.d.ts.map +1 -1
  63. package/dist/completion/merge-phase.js +35 -3
  64. package/dist/completion/merge-phase.js.map +1 -1
  65. package/dist/completion/read-only-pristine.d.ts +1 -1
  66. package/dist/completion/read-only-pristine.d.ts.map +1 -1
  67. package/dist/completion/read-only-pristine.js +1 -1
  68. package/dist/completion/read-only-pristine.js.map +1 -1
  69. package/dist/completion/review-exit-phase.d.ts +30 -3
  70. package/dist/completion/review-exit-phase.d.ts.map +1 -1
  71. package/dist/completion/review-exit-phase.js +203 -15
  72. package/dist/completion/review-exit-phase.js.map +1 -1
  73. package/dist/completion/status-advance-phase.js +1 -1
  74. package/dist/completion/status-advance-phase.js.map +1 -1
  75. package/dist/completion/team-completion.d.ts.map +1 -1
  76. package/dist/completion/team-completion.js +22 -2
  77. package/dist/completion/team-completion.js.map +1 -1
  78. package/dist/completion/team-lifecycle.js +1 -1
  79. package/dist/completion/terminated-work-reconcile.js +1 -1
  80. package/dist/completion/terminated-work-reconcile.js.map +1 -1
  81. package/dist/condition-evaluators.d.ts +41 -2
  82. package/dist/condition-evaluators.d.ts.map +1 -1
  83. package/dist/condition-evaluators.js +37 -288
  84. package/dist/condition-evaluators.js.map +1 -1
  85. package/dist/context-audit.d.ts +1 -1
  86. package/dist/context-audit.d.ts.map +1 -1
  87. package/dist/context-lock.d.ts +1 -1
  88. package/dist/context-lock.d.ts.map +1 -1
  89. package/dist/control-state.d.ts +2 -2
  90. package/dist/control-state.d.ts.map +1 -1
  91. package/dist/control-state.js +4 -3
  92. package/dist/control-state.js.map +1 -1
  93. package/dist/daemon-process.d.ts +1 -1
  94. package/dist/daemon-process.d.ts.map +1 -1
  95. package/dist/delivery-advance-block.d.ts +1 -1
  96. package/dist/delivery-advance-block.d.ts.map +1 -1
  97. package/dist/delivery-advance-block.js +1 -1
  98. package/dist/delivery-advance-block.js.map +1 -1
  99. package/dist/delivery-lifecycle.js +1 -1
  100. package/dist/delivery-reconciler-shadow.d.ts +1 -1
  101. package/dist/delivery-reconciler-shadow.d.ts.map +1 -1
  102. package/dist/delivery-reconciler-shadow.js +1 -1
  103. package/dist/delivery-reconciler-shadow.js.map +1 -1
  104. package/dist/delivery-reconciler.d.ts +1 -0
  105. package/dist/delivery-reconciler.d.ts.map +1 -1
  106. package/dist/delivery-reconciler.js +6 -0
  107. package/dist/delivery-reconciler.js.map +1 -1
  108. package/dist/directive-executor.js +1 -1
  109. package/dist/directive-executor.js.map +1 -1
  110. package/dist/drift-eval-loop.d.ts.map +1 -1
  111. package/dist/drift-eval-loop.js +6 -14
  112. package/dist/drift-eval-loop.js.map +1 -1
  113. package/dist/escalations.d.ts +1 -1
  114. package/dist/escalations.d.ts.map +1 -1
  115. package/dist/escalations.js +1 -1
  116. package/dist/escalations.js.map +1 -1
  117. package/dist/evaluation-context.d.ts +2 -33
  118. package/dist/evaluation-context.d.ts.map +1 -1
  119. package/dist/evaluation-context.js +2 -56
  120. package/dist/evaluation-context.js.map +1 -1
  121. package/dist/focus-engine.d.ts +14 -5
  122. package/dist/focus-engine.d.ts.map +1 -1
  123. package/dist/focus-engine.js +35 -289
  124. package/dist/focus-engine.js.map +1 -1
  125. package/dist/focus-executor.d.ts +10 -791
  126. package/dist/focus-executor.d.ts.map +1 -1
  127. package/dist/focus-executor.js +42 -1566
  128. package/dist/focus-executor.js.map +1 -1
  129. package/dist/focus-lifecycle.js +2 -2
  130. package/dist/focus-lifecycle.js.map +1 -1
  131. package/dist/focus-loop-registry.d.ts +52 -0
  132. package/dist/focus-loop-registry.d.ts.map +1 -0
  133. package/dist/focus-loop-registry.js +328 -0
  134. package/dist/focus-loop-registry.js.map +1 -0
  135. package/dist/focus-merge.d.ts +1 -1
  136. package/dist/focus-merge.d.ts.map +1 -1
  137. package/dist/focus-merge.js +3 -3
  138. package/dist/focus-merge.js.map +1 -1
  139. package/dist/focus-phase.d.ts +4 -0
  140. package/dist/focus-phase.d.ts.map +1 -1
  141. package/dist/focus-phase.js +3 -3
  142. package/dist/focus-phase.js.map +1 -1
  143. package/dist/focus-stage-lifecycle/planning-release.d.ts +197 -0
  144. package/dist/focus-stage-lifecycle/planning-release.d.ts.map +1 -0
  145. package/dist/focus-stage-lifecycle/planning-release.js +312 -0
  146. package/dist/focus-stage-lifecycle/planning-release.js.map +1 -0
  147. package/dist/focus-stage-lifecycle/review-convergence.d.ts +133 -0
  148. package/dist/focus-stage-lifecycle/review-convergence.d.ts.map +1 -0
  149. package/dist/focus-stage-lifecycle/review-convergence.js +235 -0
  150. package/dist/focus-stage-lifecycle/review-convergence.js.map +1 -0
  151. package/dist/focus-stage-lifecycle/wedge-watchdog.d.ts +133 -0
  152. package/dist/focus-stage-lifecycle/wedge-watchdog.d.ts.map +1 -0
  153. package/dist/focus-stage-lifecycle/wedge-watchdog.js +365 -0
  154. package/dist/focus-stage-lifecycle/wedge-watchdog.js.map +1 -0
  155. package/dist/focus-stage-lifecycle.d.ts +22 -403
  156. package/dist/focus-stage-lifecycle.d.ts.map +1 -1
  157. package/dist/focus-stage-lifecycle.js +26 -798
  158. package/dist/focus-stage-lifecycle.js.map +1 -1
  159. package/dist/{git-activity.d.ts → git/activity.d.ts} +1 -1
  160. package/dist/git/activity.d.ts.map +1 -0
  161. package/dist/{git-activity.js → git/activity.js} +2 -2
  162. package/dist/git/activity.js.map +1 -0
  163. package/dist/{git-branch.d.ts → git/branch.d.ts} +2 -2
  164. package/dist/git/branch.d.ts.map +1 -0
  165. package/dist/{git-branch.js → git/branch.js} +2 -2
  166. package/dist/git/branch.js.map +1 -0
  167. package/dist/{git-fetch.d.ts → git/fetch.d.ts} +2 -2
  168. package/dist/git/fetch.d.ts.map +1 -0
  169. package/dist/{git-fetch.js → git/fetch.js} +1 -1
  170. package/dist/git/fetch.js.map +1 -0
  171. package/dist/{git-genesis.d.ts → git/genesis.d.ts} +3 -3
  172. package/dist/git/genesis.d.ts.map +1 -0
  173. package/dist/{git-genesis.js → git/genesis.js} +5 -5
  174. package/dist/git/genesis.js.map +1 -0
  175. package/dist/git/index.d.ts +36 -0
  176. package/dist/git/index.d.ts.map +1 -0
  177. package/dist/git/index.js +36 -0
  178. package/dist/git/index.js.map +1 -0
  179. package/dist/{git-integration.d.ts → git/integration.d.ts} +2 -2
  180. package/dist/git/integration.d.ts.map +1 -0
  181. package/dist/{git-integration.js → git/integration.js} +4 -4
  182. package/dist/git/integration.js.map +1 -0
  183. package/dist/{git-merge-helpers.d.ts → git/merge-helpers.d.ts} +3 -3
  184. package/dist/git/merge-helpers.d.ts.map +1 -0
  185. package/dist/{git-merge-helpers.js → git/merge-helpers.js} +3 -3
  186. package/dist/git/merge-helpers.js.map +1 -0
  187. package/dist/{git-merge-lock.d.ts → git/merge-lock.d.ts} +1 -1
  188. package/dist/git/merge-lock.d.ts.map +1 -0
  189. package/dist/{git-merge-lock.js → git/merge-lock.js} +1 -1
  190. package/dist/git/merge-lock.js.map +1 -0
  191. package/dist/{git-merge-strategies.d.ts → git/merge-strategies.d.ts} +2 -2
  192. package/dist/git/merge-strategies.d.ts.map +1 -0
  193. package/dist/{git-merge-strategies.js → git/merge-strategies.js} +3 -3
  194. package/dist/git/merge-strategies.js.map +1 -0
  195. package/dist/{git-merge.d.ts → git/merge.d.ts} +4 -4
  196. package/dist/git/merge.d.ts.map +1 -0
  197. package/dist/{git-merge.js → git/merge.js} +4 -4
  198. package/dist/git/merge.js.map +1 -0
  199. package/dist/{git-state-detector.d.ts → git/state-detector.d.ts} +2 -2
  200. package/dist/git/state-detector.d.ts.map +1 -0
  201. package/dist/{git-state-detector.js → git/state-detector.js} +7 -7
  202. package/dist/git/state-detector.js.map +1 -0
  203. package/dist/{git-types.d.ts → git/types.d.ts} +2 -2
  204. package/dist/git/types.d.ts.map +1 -0
  205. package/dist/{git-types.js → git/types.js} +1 -1
  206. package/dist/git/types.js.map +1 -0
  207. package/dist/{git-utils.d.ts → git/utils.d.ts} +1 -1
  208. package/dist/git/utils.d.ts.map +1 -0
  209. package/dist/{git-utils.js → git/utils.js} +2 -2
  210. package/dist/git/utils.js.map +1 -0
  211. package/dist/git.d.ts +5 -5
  212. package/dist/git.d.ts.map +1 -1
  213. package/dist/git.js +10 -10
  214. package/dist/git.js.map +1 -1
  215. package/dist/guard-engine.d.ts +3 -2
  216. package/dist/guard-engine.d.ts.map +1 -1
  217. package/dist/guard-engine.js +2 -2
  218. package/dist/guard-engine.js.map +1 -1
  219. package/dist/install-probe-tick.d.ts +63 -0
  220. package/dist/install-probe-tick.d.ts.map +1 -0
  221. package/dist/install-probe-tick.js +137 -0
  222. package/dist/install-probe-tick.js.map +1 -0
  223. package/dist/install-probe.d.ts +115 -0
  224. package/dist/install-probe.d.ts.map +1 -0
  225. package/dist/install-probe.js +197 -0
  226. package/dist/install-probe.js.map +1 -0
  227. package/dist/listener-auto-advance.d.ts.map +1 -1
  228. package/dist/listener-auto-advance.js +51 -9
  229. package/dist/listener-auto-advance.js.map +1 -1
  230. package/dist/listener.d.ts.map +1 -1
  231. package/dist/listener.js +15 -7
  232. package/dist/listener.js.map +1 -1
  233. package/dist/{loop-context-audit-pass.d.ts → loops/context-audit-pass.d.ts} +4 -4
  234. package/dist/loops/context-audit-pass.d.ts.map +1 -0
  235. package/dist/{loop-context-audit-pass.js → loops/context-audit-pass.js} +7 -7
  236. package/dist/loops/context-audit-pass.js.map +1 -0
  237. package/dist/{loop-engine-types.d.ts → loops/engine-types.d.ts} +1 -1
  238. package/dist/loops/engine-types.d.ts.map +1 -0
  239. package/dist/{loop-engine-types.js → loops/engine-types.js} +1 -1
  240. package/dist/loops/engine-types.js.map +1 -0
  241. package/dist/{loop-engine.d.ts → loops/engine.d.ts} +6 -6
  242. package/dist/loops/engine.d.ts.map +1 -0
  243. package/dist/{loop-engine.js → loops/engine.js} +13 -13
  244. package/dist/loops/engine.js.map +1 -0
  245. package/dist/{loop-event-bus.d.ts → loops/event-bus.d.ts} +1 -1
  246. package/dist/loops/event-bus.d.ts.map +1 -0
  247. package/dist/{loop-event-bus.js → loops/event-bus.js} +1 -1
  248. package/dist/loops/event-bus.js.map +1 -0
  249. package/dist/loops/index.d.ts +33 -0
  250. package/dist/loops/index.d.ts.map +1 -0
  251. package/dist/loops/index.js +32 -0
  252. package/dist/loops/index.js.map +1 -0
  253. package/dist/{loop-llm-client.d.ts → loops/llm-client.d.ts} +3 -3
  254. package/dist/loops/llm-client.d.ts.map +1 -0
  255. package/dist/{loop-llm-client.js → loops/llm-client.js} +3 -3
  256. package/dist/loops/llm-client.js.map +1 -0
  257. package/dist/{loop-llm-flag.d.ts → loops/llm-flag.d.ts} +1 -1
  258. package/dist/loops/llm-flag.d.ts.map +1 -0
  259. package/dist/{loop-llm-flag.js → loops/llm-flag.js} +1 -1
  260. package/dist/loops/llm-flag.js.map +1 -0
  261. package/dist/{loop-operational-block.d.ts → loops/operational-block.d.ts} +1 -1
  262. package/dist/loops/operational-block.d.ts.map +1 -0
  263. package/dist/{loop-operational-block.js → loops/operational-block.js} +1 -1
  264. package/dist/loops/operational-block.js.map +1 -0
  265. package/dist/{loop-prompt-builder.d.ts → loops/prompt-builder.d.ts} +2 -2
  266. package/dist/loops/prompt-builder.d.ts.map +1 -0
  267. package/dist/{loop-prompt-builder.js → loops/prompt-builder.js} +1 -1
  268. package/dist/loops/prompt-builder.js.map +1 -0
  269. package/dist/{loop-variance.d.ts → loops/variance.d.ts} +1 -1
  270. package/dist/loops/variance.d.ts.map +1 -0
  271. package/dist/{loop-variance.js → loops/variance.js} +1 -1
  272. package/dist/loops/variance.js.map +1 -0
  273. package/dist/merge-back-loop.d.ts.map +1 -1
  274. package/dist/merge-back-loop.js +4 -3
  275. package/dist/merge-back-loop.js.map +1 -1
  276. package/dist/merge-detector.js +2 -2
  277. package/dist/merge-detector.js.map +1 -1
  278. package/dist/{nexus-endpoint-clearance.d.ts → nexus/endpoint-clearance.d.ts} +2 -2
  279. package/dist/nexus/endpoint-clearance.d.ts.map +1 -0
  280. package/dist/{nexus-endpoint-clearance.js → nexus/endpoint-clearance.js} +2 -2
  281. package/dist/nexus/endpoint-clearance.js.map +1 -0
  282. package/dist/{nexus-escalation-bridge.d.ts → nexus/escalation-bridge.d.ts} +1 -1
  283. package/dist/nexus/escalation-bridge.d.ts.map +1 -0
  284. package/dist/{nexus-escalation-bridge.js → nexus/escalation-bridge.js} +2 -2
  285. package/dist/nexus/escalation-bridge.js.map +1 -0
  286. package/dist/{nexus-incoming.d.ts → nexus/incoming.d.ts} +2 -2
  287. package/dist/nexus/incoming.d.ts.map +1 -0
  288. package/dist/{nexus-incoming.js → nexus/incoming.js} +2 -2
  289. package/dist/nexus/incoming.js.map +1 -0
  290. package/dist/nexus/index.d.ts +20 -0
  291. package/dist/nexus/index.d.ts.map +1 -0
  292. package/dist/nexus/index.js +20 -0
  293. package/dist/nexus/index.js.map +1 -0
  294. package/dist/{nexus-intake-spawn.d.ts → nexus/intake-spawn.d.ts} +3 -3
  295. package/dist/nexus/intake-spawn.d.ts.map +1 -0
  296. package/dist/{nexus-intake-spawn.js → nexus/intake-spawn.js} +1 -1
  297. package/dist/nexus/intake-spawn.js.map +1 -0
  298. package/dist/{nexus-intake.d.ts → nexus/intake.d.ts} +2 -2
  299. package/dist/nexus/intake.d.ts.map +1 -0
  300. package/dist/{nexus-intake.js → nexus/intake.js} +4 -4
  301. package/dist/nexus/intake.js.map +1 -0
  302. package/dist/{nexus-return.d.ts → nexus/return.d.ts} +3 -3
  303. package/dist/nexus/return.d.ts.map +1 -0
  304. package/dist/{nexus-return.js → nexus/return.js} +4 -4
  305. package/dist/nexus/return.js.map +1 -0
  306. package/dist/otlp/index.d.ts +19 -0
  307. package/dist/otlp/index.d.ts.map +1 -0
  308. package/dist/otlp/index.js +19 -0
  309. package/dist/otlp/index.js.map +1 -0
  310. package/dist/{otlp-log-parser.d.ts → otlp/log-parser.d.ts} +2 -2
  311. package/dist/otlp/log-parser.d.ts.map +1 -0
  312. package/dist/{otlp-log-parser.js → otlp/log-parser.js} +5 -6
  313. package/dist/otlp/log-parser.js.map +1 -0
  314. package/dist/{otlp-metric-parser.d.ts → otlp/metric-parser.d.ts} +2 -2
  315. package/dist/otlp/metric-parser.d.ts.map +1 -0
  316. package/dist/{otlp-metric-parser.js → otlp/metric-parser.js} +4 -5
  317. package/dist/otlp/metric-parser.js.map +1 -0
  318. package/dist/{otlp-port-manager.d.ts → otlp/port-manager.d.ts} +1 -1
  319. package/dist/otlp/port-manager.d.ts.map +1 -0
  320. package/dist/{otlp-port-manager.js → otlp/port-manager.js} +1 -1
  321. package/dist/otlp/port-manager.js.map +1 -0
  322. package/dist/{otlp-receiver.d.ts → otlp/receiver.d.ts} +2 -2
  323. package/dist/otlp/receiver.d.ts.map +1 -0
  324. package/dist/{otlp-receiver.js → otlp/receiver.js} +5 -33
  325. package/dist/otlp/receiver.js.map +1 -0
  326. package/dist/{otlp-types.d.ts → otlp/types.d.ts} +1 -9
  327. package/dist/otlp/types.d.ts.map +1 -0
  328. package/dist/{otlp-types.js → otlp/types.js} +1 -27
  329. package/dist/otlp/types.js.map +1 -0
  330. package/dist/pipeline-config.d.ts +1 -1
  331. package/dist/{prd-controller.d.ts → prd/controller.d.ts} +7 -7
  332. package/dist/prd/controller.d.ts.map +1 -0
  333. package/dist/{prd-controller.js → prd/controller.js} +11 -11
  334. package/dist/prd/controller.js.map +1 -0
  335. package/dist/{prd-divergence.d.ts → prd/divergence.d.ts} +2 -2
  336. package/dist/prd/divergence.d.ts.map +1 -0
  337. package/dist/{prd-divergence.js → prd/divergence.js} +1 -1
  338. package/dist/prd/divergence.js.map +1 -0
  339. package/dist/{prd-focus-pushdown.d.ts → prd/focus-pushdown.d.ts} +2 -2
  340. package/dist/prd/focus-pushdown.d.ts.map +1 -0
  341. package/dist/{prd-focus-pushdown.js → prd/focus-pushdown.js} +3 -3
  342. package/dist/prd/focus-pushdown.js.map +1 -0
  343. package/dist/{prd-frontier.d.ts → prd/frontier.d.ts} +2 -2
  344. package/dist/prd/frontier.d.ts.map +1 -0
  345. package/dist/{prd-frontier.js → prd/frontier.js} +1 -1
  346. package/dist/prd/frontier.js.map +1 -0
  347. package/dist/prd/index.d.ts +26 -0
  348. package/dist/prd/index.d.ts.map +1 -0
  349. package/dist/prd/index.js +25 -0
  350. package/dist/prd/index.js.map +1 -0
  351. package/dist/{prd-steward.d.ts → prd/steward.d.ts} +4 -4
  352. package/dist/prd/steward.d.ts.map +1 -0
  353. package/dist/{prd-steward.js → prd/steward.js} +4 -4
  354. package/dist/prd/steward.js.map +1 -0
  355. package/dist/{prd-viability.d.ts → prd/viability.d.ts} +2 -2
  356. package/dist/prd/viability.d.ts.map +1 -0
  357. package/dist/{prd-viability.js → prd/viability.js} +1 -1
  358. package/dist/prd/viability.js.map +1 -0
  359. package/dist/product-scaffold.js +2 -2
  360. package/dist/product-scaffold.js.map +1 -1
  361. package/dist/prompt-sections/persona-sections.d.ts +32 -0
  362. package/dist/prompt-sections/persona-sections.d.ts.map +1 -1
  363. package/dist/prompt-sections/persona-sections.js +78 -2
  364. package/dist/prompt-sections/persona-sections.js.map +1 -1
  365. package/dist/queries/context-lock-queries.js +1 -1
  366. package/dist/queries/context-lock-queries.js.map +1 -1
  367. package/dist/queries/deliveries.d.ts +31 -0
  368. package/dist/queries/deliveries.d.ts.map +1 -1
  369. package/dist/queries/deliveries.js +5 -0
  370. package/dist/queries/deliveries.js.map +1 -1
  371. package/dist/queries/focuses.d.ts +17 -0
  372. package/dist/queries/focuses.d.ts.map +1 -1
  373. package/dist/queries/focuses.js +27 -0
  374. package/dist/queries/focuses.js.map +1 -1
  375. package/dist/queries/schemas.d.ts +8 -0
  376. package/dist/queries/schemas.d.ts.map +1 -1
  377. package/dist/queries/schemas.js +16 -0
  378. package/dist/queries/schemas.js.map +1 -1
  379. package/dist/reality-pole.js +1 -1
  380. package/dist/resolvers/git-diff-against-base.d.ts.map +1 -1
  381. package/dist/resolvers/git-diff-against-base.js +4 -1
  382. package/dist/resolvers/git-diff-against-base.js.map +1 -1
  383. package/dist/resolvers/prd-context.js +1 -1
  384. package/dist/sensor-sweep.js +1 -1
  385. package/dist/spawn/model-routing.d.ts +277 -0
  386. package/dist/spawn/model-routing.d.ts.map +1 -0
  387. package/dist/spawn/model-routing.js +464 -0
  388. package/dist/spawn/model-routing.js.map +1 -0
  389. package/dist/spawn/process-spawn.d.ts +128 -0
  390. package/dist/spawn/process-spawn.d.ts.map +1 -0
  391. package/dist/spawn/process-spawn.js +378 -0
  392. package/dist/spawn/process-spawn.js.map +1 -0
  393. package/dist/spawn/prompt-assembly.d.ts +143 -0
  394. package/dist/spawn/prompt-assembly.d.ts.map +1 -0
  395. package/dist/spawn/prompt-assembly.js +263 -0
  396. package/dist/spawn/prompt-assembly.js.map +1 -0
  397. package/dist/spawn/shared.d.ts +72 -0
  398. package/dist/spawn/shared.d.ts.map +1 -0
  399. package/dist/spawn/shared.js +14 -0
  400. package/dist/spawn/shared.js.map +1 -0
  401. package/dist/spawn/spawn-decision.d.ts +189 -0
  402. package/dist/spawn/spawn-decision.d.ts.map +1 -0
  403. package/dist/spawn/spawn-decision.js +361 -0
  404. package/dist/spawn/spawn-decision.js.map +1 -0
  405. package/dist/spawn/worktree-session.d.ts +105 -0
  406. package/dist/spawn/worktree-session.d.ts.map +1 -0
  407. package/dist/spawn/worktree-session.js +216 -0
  408. package/dist/spawn/worktree-session.js.map +1 -0
  409. package/dist/spawner/lifecycle.js +2 -2
  410. package/dist/spawner/lifecycle.js.map +1 -1
  411. package/dist/spawner/resolution.js +1 -1
  412. package/dist/stall-detector-config.d.ts +4 -0
  413. package/dist/stall-detector-config.d.ts.map +1 -1
  414. package/dist/stall-detector-config.js +6 -0
  415. package/dist/stall-detector-config.js.map +1 -1
  416. package/dist/state-cascade.js +1 -1
  417. package/dist/state-cascade.js.map +1 -1
  418. package/dist/team-prompt-base.d.ts +1 -1
  419. package/dist/team-prompt-base.d.ts.map +1 -1
  420. package/dist/team-prompt-base.js +1 -1
  421. package/dist/team-prompt-base.js.map +1 -1
  422. package/dist/trigger-executor.d.ts +5 -9
  423. package/dist/trigger-executor.d.ts.map +1 -1
  424. package/dist/trigger-executor.js +14 -36
  425. package/dist/trigger-executor.js.map +1 -1
  426. package/dist/types/focus.d.ts +13 -0
  427. package/dist/types/focus.d.ts.map +1 -1
  428. package/dist/types/workflow.d.ts +1 -3
  429. package/dist/types/workflow.d.ts.map +1 -1
  430. package/dist/unified-engine-lifecycle.js +1 -1
  431. package/dist/unified-init.d.ts +3 -3
  432. package/dist/unified-init.d.ts.map +1 -1
  433. package/dist/unified-init.js +9 -25
  434. package/dist/unified-init.js.map +1 -1
  435. package/dist/unified-shell.d.ts +3 -3
  436. package/dist/unified-shell.js +4 -4
  437. package/dist/unified-shell.js.map +1 -1
  438. package/dist/verification-engine.d.ts.map +1 -1
  439. package/dist/verification-engine.js +15 -0
  440. package/dist/verification-engine.js.map +1 -1
  441. package/dist/{worktree-focus.d.ts → worktree/focus.d.ts} +2 -2
  442. package/dist/worktree/focus.d.ts.map +1 -0
  443. package/dist/{worktree-focus.js → worktree/focus.js} +7 -7
  444. package/dist/worktree/focus.js.map +1 -0
  445. package/dist/worktree/index.d.ts +16 -0
  446. package/dist/worktree/index.d.ts.map +1 -0
  447. package/dist/worktree/index.js +16 -0
  448. package/dist/worktree/index.js.map +1 -0
  449. package/dist/{worktree-safety.d.ts → worktree/safety.d.ts} +1 -1
  450. package/dist/worktree/safety.d.ts.map +1 -0
  451. package/dist/{worktree-safety.js → worktree/safety.js} +2 -2
  452. package/dist/worktree/safety.js.map +1 -0
  453. package/dist/{worktree-state.d.ts → worktree/state.d.ts} +1 -1
  454. package/dist/worktree/state.d.ts.map +1 -0
  455. package/dist/{worktree-state.js → worktree/state.js} +6 -6
  456. package/dist/worktree/state.js.map +1 -0
  457. package/dist/worktree.d.ts +1 -1
  458. package/dist/worktree.js +5 -5
  459. package/dist/worktree.js.map +1 -1
  460. package/package.json +5 -4
  461. package/dist/git-activity.d.ts.map +0 -1
  462. package/dist/git-activity.js.map +0 -1
  463. package/dist/git-branch.d.ts.map +0 -1
  464. package/dist/git-branch.js.map +0 -1
  465. package/dist/git-fetch.d.ts.map +0 -1
  466. package/dist/git-fetch.js.map +0 -1
  467. package/dist/git-genesis.d.ts.map +0 -1
  468. package/dist/git-genesis.js.map +0 -1
  469. package/dist/git-integration.d.ts.map +0 -1
  470. package/dist/git-integration.js.map +0 -1
  471. package/dist/git-merge-helpers.d.ts.map +0 -1
  472. package/dist/git-merge-helpers.js.map +0 -1
  473. package/dist/git-merge-lock.d.ts.map +0 -1
  474. package/dist/git-merge-lock.js.map +0 -1
  475. package/dist/git-merge-strategies.d.ts.map +0 -1
  476. package/dist/git-merge-strategies.js.map +0 -1
  477. package/dist/git-merge.d.ts.map +0 -1
  478. package/dist/git-merge.js.map +0 -1
  479. package/dist/git-state-detector.d.ts.map +0 -1
  480. package/dist/git-state-detector.js.map +0 -1
  481. package/dist/git-types.d.ts.map +0 -1
  482. package/dist/git-types.js.map +0 -1
  483. package/dist/git-utils.d.ts.map +0 -1
  484. package/dist/git-utils.js.map +0 -1
  485. package/dist/loop-context-audit-pass.d.ts.map +0 -1
  486. package/dist/loop-context-audit-pass.js.map +0 -1
  487. package/dist/loop-engine-types.d.ts.map +0 -1
  488. package/dist/loop-engine-types.js.map +0 -1
  489. package/dist/loop-engine.d.ts.map +0 -1
  490. package/dist/loop-engine.js.map +0 -1
  491. package/dist/loop-event-bus.d.ts.map +0 -1
  492. package/dist/loop-event-bus.js.map +0 -1
  493. package/dist/loop-llm-client.d.ts.map +0 -1
  494. package/dist/loop-llm-client.js.map +0 -1
  495. package/dist/loop-llm-flag.d.ts.map +0 -1
  496. package/dist/loop-llm-flag.js.map +0 -1
  497. package/dist/loop-operational-block.d.ts.map +0 -1
  498. package/dist/loop-operational-block.js.map +0 -1
  499. package/dist/loop-prompt-builder.d.ts.map +0 -1
  500. package/dist/loop-prompt-builder.js.map +0 -1
  501. package/dist/loop-variance.d.ts.map +0 -1
  502. package/dist/loop-variance.js.map +0 -1
  503. package/dist/nexus-endpoint-clearance.d.ts.map +0 -1
  504. package/dist/nexus-endpoint-clearance.js.map +0 -1
  505. package/dist/nexus-escalation-bridge.d.ts.map +0 -1
  506. package/dist/nexus-escalation-bridge.js.map +0 -1
  507. package/dist/nexus-incoming.d.ts.map +0 -1
  508. package/dist/nexus-incoming.js.map +0 -1
  509. package/dist/nexus-intake-spawn.d.ts.map +0 -1
  510. package/dist/nexus-intake-spawn.js.map +0 -1
  511. package/dist/nexus-intake.d.ts.map +0 -1
  512. package/dist/nexus-intake.js.map +0 -1
  513. package/dist/nexus-return.d.ts.map +0 -1
  514. package/dist/nexus-return.js.map +0 -1
  515. package/dist/otlp-log-parser.d.ts.map +0 -1
  516. package/dist/otlp-log-parser.js.map +0 -1
  517. package/dist/otlp-metric-parser.d.ts.map +0 -1
  518. package/dist/otlp-metric-parser.js.map +0 -1
  519. package/dist/otlp-port-manager.d.ts.map +0 -1
  520. package/dist/otlp-port-manager.js.map +0 -1
  521. package/dist/otlp-receiver.d.ts.map +0 -1
  522. package/dist/otlp-receiver.js.map +0 -1
  523. package/dist/otlp-types.d.ts.map +0 -1
  524. package/dist/otlp-types.js.map +0 -1
  525. package/dist/prd-controller.d.ts.map +0 -1
  526. package/dist/prd-controller.js.map +0 -1
  527. package/dist/prd-divergence.d.ts.map +0 -1
  528. package/dist/prd-divergence.js.map +0 -1
  529. package/dist/prd-focus-pushdown.d.ts.map +0 -1
  530. package/dist/prd-focus-pushdown.js.map +0 -1
  531. package/dist/prd-frontier.d.ts.map +0 -1
  532. package/dist/prd-frontier.js.map +0 -1
  533. package/dist/prd-steward.d.ts.map +0 -1
  534. package/dist/prd-steward.js.map +0 -1
  535. package/dist/prd-viability.d.ts.map +0 -1
  536. package/dist/prd-viability.js.map +0 -1
  537. package/dist/worktree-focus.d.ts.map +0 -1
  538. package/dist/worktree-focus.js.map +0 -1
  539. package/dist/worktree-safety.d.ts.map +0 -1
  540. package/dist/worktree-safety.js.map +0 -1
  541. package/dist/worktree-state.d.ts.map +0 -1
  542. package/dist/worktree-state.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ci-status-git.js","sourceRoot":"","sources":["../src/ci-status-git.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,OAAO,EACL,6BAA6B,GAE9B,MAAM,gBAAgB,CAAC;AAExB,6EAA6E;AAC7E,MAAM,CAAC,MAAM,oBAAoB,GAAG,gBAAgB,CAAC;AAErD,gFAAgF;AAChF,MAAM,gBAAgB,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAU,CAAC;AAEpE;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW,EAAE,MAAoB;IAChE,MAAM,IAAI,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,oBAAoB,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9E,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC7E,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAC9B,oEAAoE;IACpE,OAAO,MAAM,CAAC,MAAM;SACjB,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SACxB,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,IAAI,CAAC,EAAE;QACV,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/B,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACtD,CAAC,CAAC;SACD,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,oBAAoB,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;AACtE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,2BAA2B,CAAC,MAAoB;IAC9D,MAAM,GAAG,GAAG,cAAc,MAAM,CAAC,iBAAiB,EAAE,CAAC;IACrD,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IACzE,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAChC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAClF,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAC5B,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7D,OAAO,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AACnD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACrE,OAAO,GAAG,CAAC,oBAAoB,KAAK,GAAG,CAAC;AAC1C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACxE,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAC/C,OAAO,6BAA6B,CAAC,gBAAgB,CAAC,CAAC;AACzD,CAAC"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * CI run-status model + merge-gate decision -- Review Gate Hardening (Reconnect
3
+ * CI to the loop).
4
+ *
5
+ * CI is the loop's only clean-environment instrument. The f1 defect merged three
6
+ * integration->main waves while `npm ci` was structurally broken because the
7
+ * daemon never waited on a green CI run. This module owns the SOURCE-AGNOSTIC
8
+ * pieces of the reconnection:
9
+ * - `CiRunStatus`: the normalized status a SHA's CI run can be in. Every
10
+ * concrete source (Gitea commit-status API, a git-notes status the CI
11
+ * workflow writes, ...) maps onto this enum, so the decision + sensor logic
12
+ * below never depend on which source is wired.
13
+ * - `resolveCiMergeGate`: the pure integration->main merge decision (green ->
14
+ * proceed, pending/red -> hold, unknown -> proceed). This is the AC's
15
+ * test-target for the green-wait.
16
+ * - `CiStatusReader`: the injected seam that READS a SHA's status. Its concrete
17
+ * implementation (the credential-dependent Gitea call) is deliberately NOT
18
+ * here -- it is provided by the caller. With no reader configured, the gate
19
+ * never activates and the merge proceeds exactly as before (safe default).
20
+ *
21
+ * Keeping this module pure + reader-injected means the decision and sensor logic
22
+ * are fully unit-testable without a live registry, and the one part that needs an
23
+ * infra/credential decision (the concrete reader) is a single, isolated seam.
24
+ *
25
+ * @module ci-status
26
+ */
27
+ import type { DaemonConfig } from './types.js';
28
+ /**
29
+ * Normalized CI run status for a SHA.
30
+ * - green -- a CI run for this SHA completed successfully.
31
+ * - pending -- a run exists but has not finished (queued / running).
32
+ * - red -- a run for this SHA finished failed.
33
+ * - unknown -- no status could be determined (no run found, no reader
34
+ * configured, or the source was unreachable). Treated as
35
+ * non-blocking so a missing/unavailable signal never wedges merges.
36
+ */
37
+ export type CiRunStatus = 'green' | 'pending' | 'red' | 'unknown';
38
+ /** The integration->main merge-gate decision derived from a SHA's CI status. */
39
+ export interface CiMergeGateDecision {
40
+ /** Whether the integration->main merge may proceed now. */
41
+ proceed: boolean;
42
+ /** The status the decision was derived from. */
43
+ status: CiRunStatus;
44
+ /** Human-readable reason (logged; surfaced in the session exit suffix). */
45
+ reason: string;
46
+ }
47
+ /**
48
+ * Pure merge-gate decision: should integration->main proceed given the merged
49
+ * SHA's CI status? FAIL-CLOSED (Jeremy decision 2026-07-05): only an explicit
50
+ * green proceeds; everything else HOLDS.
51
+ *
52
+ * green -> proceed (the clean-environment instrument is satisfied).
53
+ * pending -> HOLD (a run is in flight; wait for it to finish before merging).
54
+ * red -> HOLD (do not merge a red SHA to main).
55
+ * unknown -> HOLD (no determinable green status == not green; a missing or
56
+ * unreadable status ref must not let an unverified SHA reach main).
57
+ *
58
+ * NOTE: this fail-closed model only engages when a CI status READER is wired
59
+ * into the merge path. With no reader configured the merge path SKIPS the gate
60
+ * entirely (runCiMergeToMain), so a focus with CI enabled but no status source
61
+ * is unaffected -- the fail-closed hold applies once a reader exists and reports
62
+ * a non-green (or absent) status for the merged SHA.
63
+ */
64
+ export declare function resolveCiMergeGate(status: CiRunStatus): CiMergeGateDecision;
65
+ /**
66
+ * Classify a git-native CI status from the set of `refs/ci-status/<sha>/<state>`
67
+ * ref names published for a SHA. The STATE is encoded in the ref NAME (immutable
68
+ * per-SHA), so no object content read is needed. FAIL-CLOSED: an empty set or an
69
+ * unrecognized suffix is 'unknown' (holds). A failure ref outranks a success ref
70
+ * (a red run must win if both somehow exist). Pure -- the caller supplies the
71
+ * ref names from a scoped `git ls-remote` / fetch.
72
+ */
73
+ export declare function classifyGitNativeCiStatus(refNames: readonly string[]): CiRunStatus;
74
+ /** Parameters passed to a CI status reader. */
75
+ export interface CiStatusReadParams {
76
+ /** The SHA whose CI run status to read (the integration tip about to merge). */
77
+ sha: string;
78
+ /** The integration branch name (the ref CI runs against). */
79
+ integrationBranch: string;
80
+ /** Product-scoped daemon config (repoPath, remotes, per-product CI config). */
81
+ config: DaemonConfig;
82
+ }
83
+ /**
84
+ * Injected seam that reads a SHA's normalized CI run status. The concrete
85
+ * implementation -- a Gitea commit-status / actions-run API call, or a read of a
86
+ * status the CI workflow published over git -- is provided by the caller and is
87
+ * the ONE part gated on the infra/credential decision. A reader that cannot
88
+ * determine a status returns 'unknown' (never throws for a normal miss).
89
+ */
90
+ export type CiStatusReader = (params: CiStatusReadParams) => Promise<CiRunStatus>;
91
+ /**
92
+ * Read the published `refs/ci-status/<sha>/<state>` ref names for a SHA from the
93
+ * remote, over the daemon's existing git-over-SSH channel. Scoped + branch-sync-
94
+ * neutral BY CONSTRUCTION: it queries ONLY the disjoint `refs/ci-status/*`
95
+ * namespace (never `refs/heads/*`), writes nothing locally (ls-remote is a
96
+ * read-only remote query -- no FETCH_HEAD, no local ref update), so it cannot
97
+ * move integration/main or perturb the merge-back. Returns [] on any git error
98
+ * (fail-closed -> classifies to 'unknown' -> holds). Injected so the reader is
99
+ * unit-testable without a live remote.
100
+ */
101
+ export type CiStatusRefLister = (sha: string, config: DaemonConfig) => string[];
102
+ /**
103
+ * Build the git-native CI status reader. Composes the scoped ref lister with the
104
+ * pure classifier. FAIL-CLOSED throughout: any git failure or absent ref yields
105
+ * 'unknown', which the merge gate holds on.
106
+ */
107
+ /** The action the CI-result sensor should take for the integration branch. */
108
+ export type CiSensorAction = 'file' | 'resolve' | 'none';
109
+ /**
110
+ * Pure CI-result sensor decision: given the integration tip's CI status and
111
+ * whether an open ci_run_red escalation already exists, decide whether to file a
112
+ * new escalation, resolve the open one, or do nothing.
113
+ *
114
+ * red + no open -> 'file' (a failing run becomes signal, once).
115
+ * green + open -> 'resolve' (the branch recovered; close the escalation).
116
+ * otherwise -> 'none' (red+open: already signalled; pending/unknown:
117
+ * nothing actionable -- do NOT resolve on
118
+ * unknown, that would hide an unresolved red).
119
+ */
120
+ export declare function decideCiSensorAction(status: CiRunStatus, hasOpenRedEscalation: boolean): CiSensorAction;
121
+ export declare function createGitNativeCiStatusReader(lister: CiStatusRefLister): CiStatusReader;
122
+ //# sourceMappingURL=ci-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ci-status.d.ts","sourceRoot":"","sources":["../src/ci-status.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C;;;;;;;;GAQG;AACH,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,SAAS,GAAG,KAAK,GAAG,SAAS,CAAC;AAElE,gFAAgF;AAChF,MAAM,WAAW,mBAAmB;IAClC,2DAA2D;IAC3D,OAAO,EAAE,OAAO,CAAC;IACjB,gDAAgD;IAChD,MAAM,EAAE,WAAW,CAAC;IACpB,2EAA2E;IAC3E,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,WAAW,GAAG,mBAAmB,CAY3E;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,WAAW,CAYlF;AAED,+CAA+C;AAC/C,MAAM,WAAW,kBAAkB;IACjC,gFAAgF;IAChF,GAAG,EAAE,MAAM,CAAC;IACZ,6DAA6D;IAC7D,iBAAiB,EAAE,MAAM,CAAC;IAC1B,+EAA+E;IAC/E,MAAM,EAAE,YAAY,CAAC;CACtB;AAED;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,kBAAkB,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;AAElF;;;;;;;;;GASG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,KAAK,MAAM,EAAE,CAAC;AAEhF;;;;GAIG;AACH,8EAA8E;AAC9E,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;AAEzD;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,EAAE,oBAAoB,EAAE,OAAO,GAAG,cAAc,CAIvG;AAED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,iBAAiB,GAAG,cAAc,CAWvF"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * CI run-status model + merge-gate decision -- Review Gate Hardening (Reconnect
3
+ * CI to the loop).
4
+ *
5
+ * CI is the loop's only clean-environment instrument. The f1 defect merged three
6
+ * integration->main waves while `npm ci` was structurally broken because the
7
+ * daemon never waited on a green CI run. This module owns the SOURCE-AGNOSTIC
8
+ * pieces of the reconnection:
9
+ * - `CiRunStatus`: the normalized status a SHA's CI run can be in. Every
10
+ * concrete source (Gitea commit-status API, a git-notes status the CI
11
+ * workflow writes, ...) maps onto this enum, so the decision + sensor logic
12
+ * below never depend on which source is wired.
13
+ * - `resolveCiMergeGate`: the pure integration->main merge decision (green ->
14
+ * proceed, pending/red -> hold, unknown -> proceed). This is the AC's
15
+ * test-target for the green-wait.
16
+ * - `CiStatusReader`: the injected seam that READS a SHA's status. Its concrete
17
+ * implementation (the credential-dependent Gitea call) is deliberately NOT
18
+ * here -- it is provided by the caller. With no reader configured, the gate
19
+ * never activates and the merge proceeds exactly as before (safe default).
20
+ *
21
+ * Keeping this module pure + reader-injected means the decision and sensor logic
22
+ * are fully unit-testable without a live registry, and the one part that needs an
23
+ * infra/credential decision (the concrete reader) is a single, isolated seam.
24
+ *
25
+ * @module ci-status
26
+ */
27
+ /**
28
+ * Pure merge-gate decision: should integration->main proceed given the merged
29
+ * SHA's CI status? FAIL-CLOSED (Jeremy decision 2026-07-05): only an explicit
30
+ * green proceeds; everything else HOLDS.
31
+ *
32
+ * green -> proceed (the clean-environment instrument is satisfied).
33
+ * pending -> HOLD (a run is in flight; wait for it to finish before merging).
34
+ * red -> HOLD (do not merge a red SHA to main).
35
+ * unknown -> HOLD (no determinable green status == not green; a missing or
36
+ * unreadable status ref must not let an unverified SHA reach main).
37
+ *
38
+ * NOTE: this fail-closed model only engages when a CI status READER is wired
39
+ * into the merge path. With no reader configured the merge path SKIPS the gate
40
+ * entirely (runCiMergeToMain), so a focus with CI enabled but no status source
41
+ * is unaffected -- the fail-closed hold applies once a reader exists and reports
42
+ * a non-green (or absent) status for the merged SHA.
43
+ */
44
+ export function resolveCiMergeGate(status) {
45
+ switch (status) {
46
+ case 'green':
47
+ return { proceed: true, status, reason: 'CI green for the merged SHA' };
48
+ case 'pending':
49
+ return { proceed: false, status, reason: 'CI run pending for the merged SHA -- holding integration->main until green' };
50
+ case 'red':
51
+ return { proceed: false, status, reason: 'CI red for the merged SHA -- holding integration->main (a red run must not reach main)' };
52
+ case 'unknown':
53
+ default:
54
+ return { proceed: false, status: 'unknown', reason: 'CI status unavailable for the merged SHA -- holding (fail-closed: unknown != green)' };
55
+ }
56
+ }
57
+ /**
58
+ * Classify a git-native CI status from the set of `refs/ci-status/<sha>/<state>`
59
+ * ref names published for a SHA. The STATE is encoded in the ref NAME (immutable
60
+ * per-SHA), so no object content read is needed. FAIL-CLOSED: an empty set or an
61
+ * unrecognized suffix is 'unknown' (holds). A failure ref outranks a success ref
62
+ * (a red run must win if both somehow exist). Pure -- the caller supplies the
63
+ * ref names from a scoped `git ls-remote` / fetch.
64
+ */
65
+ export function classifyGitNativeCiStatus(refNames) {
66
+ let sawGreen = false;
67
+ let sawPending = false;
68
+ for (const raw of refNames) {
69
+ const ref = raw.trim();
70
+ if (ref.endsWith('/failure') || ref.endsWith('/error') || ref.endsWith('/red'))
71
+ return 'red';
72
+ if (ref.endsWith('/success') || ref.endsWith('/green') || ref.endsWith('/passed'))
73
+ sawGreen = true;
74
+ else if (ref.endsWith('/pending') || ref.endsWith('/running') || ref.endsWith('/queued'))
75
+ sawPending = true;
76
+ }
77
+ if (sawGreen)
78
+ return 'green';
79
+ if (sawPending)
80
+ return 'pending';
81
+ return 'unknown';
82
+ }
83
+ /**
84
+ * Pure CI-result sensor decision: given the integration tip's CI status and
85
+ * whether an open ci_run_red escalation already exists, decide whether to file a
86
+ * new escalation, resolve the open one, or do nothing.
87
+ *
88
+ * red + no open -> 'file' (a failing run becomes signal, once).
89
+ * green + open -> 'resolve' (the branch recovered; close the escalation).
90
+ * otherwise -> 'none' (red+open: already signalled; pending/unknown:
91
+ * nothing actionable -- do NOT resolve on
92
+ * unknown, that would hide an unresolved red).
93
+ */
94
+ export function decideCiSensorAction(status, hasOpenRedEscalation) {
95
+ if (status === 'red' && !hasOpenRedEscalation)
96
+ return 'file';
97
+ if (status === 'green' && hasOpenRedEscalation)
98
+ return 'resolve';
99
+ return 'none';
100
+ }
101
+ export function createGitNativeCiStatusReader(lister) {
102
+ return async ({ sha, config }) => {
103
+ let refs = [];
104
+ try {
105
+ refs = lister(sha, config);
106
+ }
107
+ catch {
108
+ // Fail-closed: an unreachable/erroring remote must not report green.
109
+ refs = [];
110
+ }
111
+ return classifyGitNativeCiStatus(refs);
112
+ };
113
+ }
114
+ //# sourceMappingURL=ci-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ci-status.js","sourceRoot":"","sources":["../src/ci-status.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAyBH;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAmB;IACpD,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,OAAO;YACV,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,6BAA6B,EAAE,CAAC;QAC1E,KAAK,SAAS;YACZ,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,4EAA4E,EAAE,CAAC;QAC1H,KAAK,KAAK;YACR,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,wFAAwF,EAAE,CAAC;QACtI,KAAK,SAAS,CAAC;QACf;YACE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,qFAAqF,EAAE,CAAC;IAChJ,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,yBAAyB,CAAC,QAA2B;IACnE,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,KAAK,CAAC;QAC7F,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC;YAAE,QAAQ,GAAG,IAAI,CAAC;aAC9F,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC;YAAE,UAAU,GAAG,IAAI,CAAC;IAC9G,CAAC;IACD,IAAI,QAAQ;QAAE,OAAO,OAAO,CAAC;IAC7B,IAAI,UAAU;QAAE,OAAO,SAAS,CAAC;IACjC,OAAO,SAAS,CAAC;AACnB,CAAC;AAyCD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAmB,EAAE,oBAA6B;IACrF,IAAI,MAAM,KAAK,KAAK,IAAI,CAAC,oBAAoB;QAAE,OAAO,MAAM,CAAC;IAC7D,IAAI,MAAM,KAAK,OAAO,IAAI,oBAAoB;QAAE,OAAO,SAAS,CAAC;IACjE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,MAAyB;IACrE,OAAO,KAAK,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE;QAC/B,IAAI,IAAI,GAAa,EAAE,CAAC;QACxB,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,qEAAqE;YACrE,IAAI,GAAG,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,yBAAyB,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Codex/IDE harness config writer: the seeded `AGENTS.md` block. Extracted
3
+ * verbatim from `../connect.ts` and re-exported from there for import
4
+ * stability.
5
+ */
6
+ import { type AgentsMdConnectionInvariant } from '../../templates/agents-md.js';
7
+ import type { ConnectIO } from './shared.js';
8
+ /**
9
+ * Write or merge a seeded `AGENTS.md` at the repo root (Codex harness).
10
+ *
11
+ * The exact analog of `writeOrMergeClaudeMd` for the Codex operator surface:
12
+ * AGENTS.md is Codex's CLAUDE.md-equivalent. Same merge semantics --
13
+ * - Fresh repo: writes the seeded block straight in.
14
+ * - Existing AGENTS.md without the Telora delimiters: appends a delimited
15
+ * block at the end; user content untouched.
16
+ * - Existing AGENTS.md WITH the delimiters: replaces only the delimited block.
17
+ *
18
+ * Idempotent at the filesystem level: when the computed content equals what is
19
+ * already on disk, NO write occurs (no spurious mtime bump, no git churn). The
20
+ * daemon re-invokes this on boot to self-heal the seed block, so the
21
+ * unchanged-common-case must not touch the file.
22
+ */
23
+ export declare function writeOrMergeAgentsMd(repoPath: string, inv: AgentsMdConnectionInvariant, io: ConnectIO): void;
24
+ //# sourceMappingURL=agents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../../src/cli/connect/agents.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAIL,KAAK,2BAA2B,EACjC,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,2BAA2B,EAChC,EAAE,EAAE,SAAS,GACZ,IAAI,CA0CN"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Codex/IDE harness config writer: the seeded `AGENTS.md` block. Extracted
3
+ * verbatim from `../connect.ts` and re-exported from there for import
4
+ * stability.
5
+ */
6
+ import { existsSync, readFileSync, writeFileSync } from 'node:fs';
7
+ import { resolve } from 'node:path';
8
+ import { TELORA_AGENTS_MD_BEGIN, TELORA_AGENTS_MD_END, renderAgentsMd, } from '../../templates/agents-md.js';
9
+ /**
10
+ * Write or merge a seeded `AGENTS.md` at the repo root (Codex harness).
11
+ *
12
+ * The exact analog of `writeOrMergeClaudeMd` for the Codex operator surface:
13
+ * AGENTS.md is Codex's CLAUDE.md-equivalent. Same merge semantics --
14
+ * - Fresh repo: writes the seeded block straight in.
15
+ * - Existing AGENTS.md without the Telora delimiters: appends a delimited
16
+ * block at the end; user content untouched.
17
+ * - Existing AGENTS.md WITH the delimiters: replaces only the delimited block.
18
+ *
19
+ * Idempotent at the filesystem level: when the computed content equals what is
20
+ * already on disk, NO write occurs (no spurious mtime bump, no git churn). The
21
+ * daemon re-invokes this on boot to self-heal the seed block, so the
22
+ * unchanged-common-case must not touch the file.
23
+ */
24
+ export function writeOrMergeAgentsMd(repoPath, inv, io) {
25
+ const path = resolve(repoPath, 'AGENTS.md');
26
+ const seedBlock = renderAgentsMd(inv);
27
+ if (!existsSync(path)) {
28
+ writeFileSync(path, seedBlock);
29
+ io.out(`Wrote ${path}.\n`);
30
+ return;
31
+ }
32
+ const existing = readFileSync(path, 'utf-8');
33
+ const beginIdx = existing.indexOf(TELORA_AGENTS_MD_BEGIN);
34
+ let newContent;
35
+ let message;
36
+ if (beginIdx === -1) {
37
+ const sep = existing.endsWith('\n') ? '\n' : '\n\n';
38
+ newContent = existing + sep + seedBlock;
39
+ message = `Appended Telora seed block to ${path}.\n`;
40
+ }
41
+ else {
42
+ const endIdx = existing.indexOf(TELORA_AGENTS_MD_END, beginIdx);
43
+ if (endIdx === -1) {
44
+ const sep = existing.endsWith('\n') ? '\n' : '\n\n';
45
+ newContent = existing + sep + seedBlock;
46
+ message = `Appended Telora seed block to ${path} (prior block was malformed).\n`;
47
+ }
48
+ else {
49
+ const after = endIdx + TELORA_AGENTS_MD_END.length;
50
+ const trailingNewline = existing[after] === '\n' ? 1 : 0;
51
+ newContent =
52
+ existing.slice(0, beginIdx) +
53
+ seedBlock.trimEnd() +
54
+ '\n' +
55
+ existing.slice(after + trailingNewline);
56
+ message = `Refreshed Telora seed block in ${path}.\n`;
57
+ }
58
+ }
59
+ // Idempotency guard: skip the write entirely when nothing would change.
60
+ if (newContent === existing)
61
+ return;
62
+ writeFileSync(path, newContent);
63
+ io.out(message);
64
+ }
65
+ //# sourceMappingURL=agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../../src/cli/connect/agents.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,cAAc,GAEf,MAAM,8BAA8B,CAAC;AAGtC;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,oBAAoB,CAClC,QAAgB,EAChB,GAAgC,EAChC,EAAa;IAEb,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IAEtC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC/B,EAAE,CAAC,GAAG,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC;QAC3B,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAE1D,IAAI,UAAkB,CAAC;IACvB,IAAI,OAAe,CAAC;IACpB,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;QACpB,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;QACpD,UAAU,GAAG,QAAQ,GAAG,GAAG,GAAG,SAAS,CAAC;QACxC,OAAO,GAAG,iCAAiC,IAAI,KAAK,CAAC;IACvD,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAC;QAChE,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;YAClB,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;YACpD,UAAU,GAAG,QAAQ,GAAG,GAAG,GAAG,SAAS,CAAC;YACxC,OAAO,GAAG,iCAAiC,IAAI,iCAAiC,CAAC;QACnF,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,GAAG,MAAM,GAAG,oBAAoB,CAAC,MAAM,CAAC;YACnD,MAAM,eAAe,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACzD,UAAU;gBACR,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC;oBAC3B,SAAS,CAAC,OAAO,EAAE;oBACnB,IAAI;oBACJ,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,eAAe,CAAC,CAAC;YAC1C,OAAO,GAAG,kCAAkC,IAAI,KAAK,CAAC;QACxD,CAAC;IACH,CAAC;IAED,wEAAwE;IACxE,IAAI,UAAU,KAAK,QAAQ;QAAE,OAAO;IAEpC,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAChC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Claude harness config writers: the seeded `CLAUDE.md` block and the
3
+ * `<repo>/.claude/settings.json` permissions/hooks merge. Extracted verbatim
4
+ * from `../connect.ts` and re-exported from there for import stability.
5
+ */
6
+ import type { ConnectIO } from './shared.js';
7
+ /**
8
+ * Write or merge a seeded `CLAUDE.md` at the repo root.
9
+ *
10
+ * - Fresh repo: writes the seeded block straight in.
11
+ * - Existing CLAUDE.md without the Telora delimiters: appends a delimited
12
+ * Telora block at the end. The user's content is untouched.
13
+ * - Existing CLAUDE.md WITH the delimiters: replaces only the delimited
14
+ * block. Re-runs are byte-identical (no churn, no duplication).
15
+ *
16
+ * Idempotent at the filesystem level: when the computed content equals what
17
+ * is already on disk, NO write occurs (no spurious mtime bump, no git churn).
18
+ * The daemon re-invokes this on every boot to self-heal the seed block, so
19
+ * the unchanged-common-case must not touch the file.
20
+ */
21
+ export declare function writeOrMergeClaudeMd(repoPath: string, productName: string | null, io: ConnectIO): void;
22
+ /**
23
+ * Write or deep-merge `<repo>/.claude/settings.json`.
24
+ *
25
+ * Fresh: writes the template directly.
26
+ * Existing: deep-merges our `permissions.allow` entries into the user's
27
+ * settings, deduplicating. All other top-level keys are untouched.
28
+ * Re-runs produce no diff.
29
+ */
30
+ export declare function writeOrMergeClaudeSettings(repoPath: string, io: ConnectIO): void;
31
+ //# sourceMappingURL=claude.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../../src/cli/connect/claude.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAaH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,EAAE,EAAE,SAAS,GACZ,IAAI,CAiDN;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,GAAG,IAAI,CA0BhF"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Claude harness config writers: the seeded `CLAUDE.md` block and the
3
+ * `<repo>/.claude/settings.json` permissions/hooks merge. Extracted verbatim
4
+ * from `../connect.ts` and re-exported from there for import stability.
5
+ */
6
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
7
+ import { resolve } from 'node:path';
8
+ import { TELORA_CLAUDE_MD_BEGIN, TELORA_CLAUDE_MD_END, renderClaudeMd, } from '../../templates/claude-md.js';
9
+ import { buildClaudeSettings, mergeClaudeSettings, } from '../../templates/claude-settings.js';
10
+ /**
11
+ * Write or merge a seeded `CLAUDE.md` at the repo root.
12
+ *
13
+ * - Fresh repo: writes the seeded block straight in.
14
+ * - Existing CLAUDE.md without the Telora delimiters: appends a delimited
15
+ * Telora block at the end. The user's content is untouched.
16
+ * - Existing CLAUDE.md WITH the delimiters: replaces only the delimited
17
+ * block. Re-runs are byte-identical (no churn, no duplication).
18
+ *
19
+ * Idempotent at the filesystem level: when the computed content equals what
20
+ * is already on disk, NO write occurs (no spurious mtime bump, no git churn).
21
+ * The daemon re-invokes this on every boot to self-heal the seed block, so
22
+ * the unchanged-common-case must not touch the file.
23
+ */
24
+ export function writeOrMergeClaudeMd(repoPath, productName, io) {
25
+ const path = resolve(repoPath, 'CLAUDE.md');
26
+ const seedBlock = renderClaudeMd(productName);
27
+ if (!existsSync(path)) {
28
+ writeFileSync(path, seedBlock);
29
+ io.out(`Wrote ${path}.\n`);
30
+ return;
31
+ }
32
+ const existing = readFileSync(path, 'utf-8');
33
+ const beginIdx = existing.indexOf(TELORA_CLAUDE_MD_BEGIN);
34
+ let newContent;
35
+ let message;
36
+ if (beginIdx === -1) {
37
+ // No prior Telora block -- append, preserving user content.
38
+ const sep = existing.endsWith('\n') ? '\n' : '\n\n';
39
+ newContent = existing + sep + seedBlock;
40
+ message = `Appended Telora seed block to ${path}.\n`;
41
+ }
42
+ else {
43
+ const endIdx = existing.indexOf(TELORA_CLAUDE_MD_END, beginIdx);
44
+ if (endIdx === -1) {
45
+ // Begin marker without end -- treat as malformed. Append a fresh block
46
+ // rather than risk corrupting whatever's there.
47
+ const sep = existing.endsWith('\n') ? '\n' : '\n\n';
48
+ newContent = existing + sep + seedBlock;
49
+ message = `Appended Telora seed block to ${path} (prior block was malformed).\n`;
50
+ }
51
+ else {
52
+ // Replace the existing Telora block in place.
53
+ const after = endIdx + TELORA_CLAUDE_MD_END.length;
54
+ // Trim a trailing newline after the end marker so we don't accumulate
55
+ // blank lines on each re-run.
56
+ const trailingNewline = existing[after] === '\n' ? 1 : 0;
57
+ newContent =
58
+ existing.slice(0, beginIdx) +
59
+ seedBlock.trimEnd() +
60
+ '\n' +
61
+ existing.slice(after + trailingNewline);
62
+ message = `Refreshed Telora seed block in ${path}.\n`;
63
+ }
64
+ }
65
+ // Idempotency guard: skip the write entirely when nothing would change.
66
+ // This keeps the boot-time self-heal a no-op for already-current repos.
67
+ if (newContent === existing)
68
+ return;
69
+ writeFileSync(path, newContent);
70
+ io.out(message);
71
+ }
72
+ /**
73
+ * Write or deep-merge `<repo>/.claude/settings.json`.
74
+ *
75
+ * Fresh: writes the template directly.
76
+ * Existing: deep-merges our `permissions.allow` entries into the user's
77
+ * settings, deduplicating. All other top-level keys are untouched.
78
+ * Re-runs produce no diff.
79
+ */
80
+ export function writeOrMergeClaudeSettings(repoPath, io) {
81
+ const dir = resolve(repoPath, '.claude');
82
+ const path = resolve(dir, 'settings.json');
83
+ const seed = buildClaudeSettings();
84
+ if (!existsSync(dir))
85
+ mkdirSync(dir, { recursive: true });
86
+ let existing = null;
87
+ if (existsSync(path)) {
88
+ try {
89
+ const parsed = JSON.parse(readFileSync(path, 'utf-8'));
90
+ if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
91
+ existing = parsed;
92
+ }
93
+ }
94
+ catch (err) {
95
+ io.err(`Warning: existing ${path} is not valid JSON; leaving it alone: ` +
96
+ `${err instanceof Error ? err.message : String(err)}\n`);
97
+ return;
98
+ }
99
+ }
100
+ const merged = mergeClaudeSettings(existing, seed);
101
+ writeFileSync(path, JSON.stringify(merged, null, 2) + '\n');
102
+ io.out(existing ? `Merged Telora entries into ${path}.\n` : `Wrote ${path}.\n`);
103
+ }
104
+ //# sourceMappingURL=claude.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../../src/cli/connect/claude.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Cline harness config writers: the project-level Cline rules file and the
3
+ * Telora MCP registration in the Cline CLI settings. Extracted verbatim from
4
+ * `../connect.ts` and re-exported from there for import stability.
5
+ */
6
+ import type { AgentsMdConnectionInvariant } from '../../templates/agents-md.js';
7
+ import type { ConnectIO } from './shared.js';
8
+ /**
9
+ * Render a project-level Cline rules file carrying the same Telora seed
10
+ * discipline as CLAUDE.md / AGENTS.md. Cline CLI reads project rules from
11
+ * `.cline/rules/`, so this is the operator-facing context equivalent for the
12
+ * Cline harness.
13
+ */
14
+ export declare function renderClineRules(inv: AgentsMdConnectionInvariant): string;
15
+ /**
16
+ * Write the Telora Cline project rules file. The file is owned by the connect
17
+ * flow, so re-runs replace it wholesale; user-authored Cline rules live beside
18
+ * it under `.cline/rules/`.
19
+ */
20
+ export declare function writeClineProjectRules(repoPath: string, inv: AgentsMdConnectionInvariant, io: ConnectIO): void;
21
+ /**
22
+ * Render the Cline CLI MCP config object. Current Cline CLI documentation
23
+ * stores MCP settings under `~/.cline/data/settings/cline_mcp_settings.json`
24
+ * with a top-level `mcpServers` map.
25
+ *
26
+ * Carries the MCP profile ONLY -- never workstation identity. Like the
27
+ * `.mcp.json` and Codex builders, identity (`TELORA_URL` / `TELORA_TRACKER_ID`)
28
+ * resolves from the single source `~/.telora/daemon.json` via the MCP server's
29
+ * `loadCredentials()` fallback; a persisted copy here would only drift.
30
+ */
31
+ export declare function renderClineMcpSettings(params: {
32
+ mcpServerPath: string;
33
+ }): Record<string, unknown>;
34
+ export declare function writeOrMergeClineMcpSettings(io: ConnectIO, params?: {
35
+ homeOverride?: string;
36
+ }): void;
37
+ //# sourceMappingURL=cline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cline.d.ts","sourceRoot":"","sources":["../../../src/cli/connect/cline.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAChF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAK7C;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,2BAA2B,GAAG,MAAM,CAczE;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,2BAA2B,EAChC,EAAE,EAAE,SAAS,GACZ,IAAI,CASN;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC7C,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAc1B;AAED,wBAAgB,4BAA4B,CAC1C,EAAE,EAAE,SAAS,EACb,MAAM,GAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAO,GACrC,IAAI,CAuDN"}