@telora/daemon 0.19.47 → 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 (529) hide show
  1. package/build-info.json +6 -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/branch-status.js +2 -2
  7. package/dist/branch-status.js.map +1 -1
  8. package/dist/ci-sensor-loop.d.ts +47 -0
  9. package/dist/ci-sensor-loop.d.ts.map +1 -0
  10. package/dist/ci-sensor-loop.js +116 -0
  11. package/dist/ci-sensor-loop.js.map +1 -0
  12. package/dist/ci-status-git.d.ts +52 -0
  13. package/dist/ci-status-git.d.ts.map +1 -0
  14. package/dist/ci-status-git.js +86 -0
  15. package/dist/ci-status-git.js.map +1 -0
  16. package/dist/ci-status.d.ts +122 -0
  17. package/dist/ci-status.d.ts.map +1 -0
  18. package/dist/ci-status.js +114 -0
  19. package/dist/ci-status.js.map +1 -0
  20. package/dist/cli/connect/agents.d.ts +24 -0
  21. package/dist/cli/connect/agents.d.ts.map +1 -0
  22. package/dist/cli/connect/agents.js +65 -0
  23. package/dist/cli/connect/agents.js.map +1 -0
  24. package/dist/cli/connect/claude.d.ts +31 -0
  25. package/dist/cli/connect/claude.d.ts.map +1 -0
  26. package/dist/cli/connect/claude.js +104 -0
  27. package/dist/cli/connect/claude.js.map +1 -0
  28. package/dist/cli/connect/cline.d.ts +37 -0
  29. package/dist/cli/connect/cline.d.ts.map +1 -0
  30. package/dist/cli/connect/cline.js +115 -0
  31. package/dist/cli/connect/cline.js.map +1 -0
  32. package/dist/cli/connect/codex.d.ts +44 -0
  33. package/dist/cli/connect/codex.d.ts.map +1 -0
  34. package/dist/cli/connect/codex.js +111 -0
  35. package/dist/cli/connect/codex.js.map +1 -0
  36. package/dist/cli/connect/ide.d.ts +69 -0
  37. package/dist/cli/connect/ide.d.ts.map +1 -0
  38. package/dist/cli/connect/ide.js +134 -0
  39. package/dist/cli/connect/ide.js.map +1 -0
  40. package/dist/cli/connect/scaffolding.d.ts +31 -0
  41. package/dist/cli/connect/scaffolding.d.ts.map +1 -0
  42. package/dist/cli/connect/scaffolding.js +52 -0
  43. package/dist/cli/connect/scaffolding.js.map +1 -0
  44. package/dist/cli/connect/shared.d.ts +30 -0
  45. package/dist/cli/connect/shared.d.ts.map +1 -0
  46. package/dist/cli/connect/shared.js +11 -0
  47. package/dist/cli/connect/shared.js.map +1 -0
  48. package/dist/cli/connect.d.ts +9 -210
  49. package/dist/cli/connect.d.ts.map +1 -1
  50. package/dist/cli/connect.js +10 -526
  51. package/dist/cli/connect.js.map +1 -1
  52. package/dist/cli/open.js +2 -2
  53. package/dist/completion/event.d.ts +2 -0
  54. package/dist/completion/event.d.ts.map +1 -1
  55. package/dist/completion/event.js +19 -2
  56. package/dist/completion/event.js.map +1 -1
  57. package/dist/completion/merge-phase.d.ts +3 -0
  58. package/dist/completion/merge-phase.d.ts.map +1 -1
  59. package/dist/completion/merge-phase.js +35 -3
  60. package/dist/completion/merge-phase.js.map +1 -1
  61. package/dist/completion/read-only-pristine.d.ts +1 -1
  62. package/dist/completion/read-only-pristine.d.ts.map +1 -1
  63. package/dist/completion/read-only-pristine.js +1 -1
  64. package/dist/completion/read-only-pristine.js.map +1 -1
  65. package/dist/completion/review-exit-phase.d.ts +30 -3
  66. package/dist/completion/review-exit-phase.d.ts.map +1 -1
  67. package/dist/completion/review-exit-phase.js +203 -15
  68. package/dist/completion/review-exit-phase.js.map +1 -1
  69. package/dist/completion/status-advance-phase.js +1 -1
  70. package/dist/completion/status-advance-phase.js.map +1 -1
  71. package/dist/completion/team-completion.d.ts.map +1 -1
  72. package/dist/completion/team-completion.js +22 -2
  73. package/dist/completion/team-completion.js.map +1 -1
  74. package/dist/completion/team-lifecycle.js +1 -1
  75. package/dist/completion/terminated-work-reconcile.js +1 -1
  76. package/dist/completion/terminated-work-reconcile.js.map +1 -1
  77. package/dist/condition-evaluators.d.ts +41 -2
  78. package/dist/condition-evaluators.d.ts.map +1 -1
  79. package/dist/condition-evaluators.js +37 -288
  80. package/dist/condition-evaluators.js.map +1 -1
  81. package/dist/context-audit.d.ts +1 -1
  82. package/dist/context-audit.d.ts.map +1 -1
  83. package/dist/context-lock.d.ts +1 -1
  84. package/dist/context-lock.d.ts.map +1 -1
  85. package/dist/control-state.d.ts +2 -2
  86. package/dist/control-state.d.ts.map +1 -1
  87. package/dist/control-state.js +4 -3
  88. package/dist/control-state.js.map +1 -1
  89. package/dist/daemon-process.d.ts +1 -1
  90. package/dist/daemon-process.d.ts.map +1 -1
  91. package/dist/delivery-advance-block.d.ts +1 -1
  92. package/dist/delivery-advance-block.d.ts.map +1 -1
  93. package/dist/delivery-advance-block.js +1 -1
  94. package/dist/delivery-advance-block.js.map +1 -1
  95. package/dist/delivery-lifecycle.js +1 -1
  96. package/dist/delivery-reconciler-shadow.d.ts +1 -1
  97. package/dist/delivery-reconciler-shadow.d.ts.map +1 -1
  98. package/dist/delivery-reconciler-shadow.js +1 -1
  99. package/dist/delivery-reconciler-shadow.js.map +1 -1
  100. package/dist/directive-executor.js +1 -1
  101. package/dist/directive-executor.js.map +1 -1
  102. package/dist/drift-eval-loop.d.ts.map +1 -1
  103. package/dist/drift-eval-loop.js +6 -14
  104. package/dist/drift-eval-loop.js.map +1 -1
  105. package/dist/escalations.d.ts +1 -1
  106. package/dist/escalations.d.ts.map +1 -1
  107. package/dist/escalations.js +1 -1
  108. package/dist/escalations.js.map +1 -1
  109. package/dist/evaluation-context.d.ts +2 -33
  110. package/dist/evaluation-context.d.ts.map +1 -1
  111. package/dist/evaluation-context.js +2 -56
  112. package/dist/evaluation-context.js.map +1 -1
  113. package/dist/focus-engine.d.ts +14 -5
  114. package/dist/focus-engine.d.ts.map +1 -1
  115. package/dist/focus-engine.js +35 -289
  116. package/dist/focus-engine.js.map +1 -1
  117. package/dist/focus-executor.d.ts +10 -791
  118. package/dist/focus-executor.d.ts.map +1 -1
  119. package/dist/focus-executor.js +42 -1568
  120. package/dist/focus-executor.js.map +1 -1
  121. package/dist/focus-lifecycle.js +2 -2
  122. package/dist/focus-lifecycle.js.map +1 -1
  123. package/dist/focus-loop-registry.d.ts +52 -0
  124. package/dist/focus-loop-registry.d.ts.map +1 -0
  125. package/dist/focus-loop-registry.js +328 -0
  126. package/dist/focus-loop-registry.js.map +1 -0
  127. package/dist/focus-merge.d.ts +1 -1
  128. package/dist/focus-merge.d.ts.map +1 -1
  129. package/dist/focus-merge.js +3 -3
  130. package/dist/focus-merge.js.map +1 -1
  131. package/dist/focus-phase.d.ts +4 -0
  132. package/dist/focus-phase.d.ts.map +1 -1
  133. package/dist/focus-phase.js +3 -3
  134. package/dist/focus-phase.js.map +1 -1
  135. package/dist/focus-stage-lifecycle/planning-release.d.ts +197 -0
  136. package/dist/focus-stage-lifecycle/planning-release.d.ts.map +1 -0
  137. package/dist/focus-stage-lifecycle/planning-release.js +312 -0
  138. package/dist/focus-stage-lifecycle/planning-release.js.map +1 -0
  139. package/dist/focus-stage-lifecycle/review-convergence.d.ts +133 -0
  140. package/dist/focus-stage-lifecycle/review-convergence.d.ts.map +1 -0
  141. package/dist/focus-stage-lifecycle/review-convergence.js +235 -0
  142. package/dist/focus-stage-lifecycle/review-convergence.js.map +1 -0
  143. package/dist/focus-stage-lifecycle/wedge-watchdog.d.ts +133 -0
  144. package/dist/focus-stage-lifecycle/wedge-watchdog.d.ts.map +1 -0
  145. package/dist/focus-stage-lifecycle/wedge-watchdog.js +365 -0
  146. package/dist/focus-stage-lifecycle/wedge-watchdog.js.map +1 -0
  147. package/dist/focus-stage-lifecycle.d.ts +22 -421
  148. package/dist/focus-stage-lifecycle.d.ts.map +1 -1
  149. package/dist/focus-stage-lifecycle.js +24 -832
  150. package/dist/focus-stage-lifecycle.js.map +1 -1
  151. package/dist/{git-activity.d.ts → git/activity.d.ts} +1 -1
  152. package/dist/git/activity.d.ts.map +1 -0
  153. package/dist/{git-activity.js → git/activity.js} +2 -2
  154. package/dist/git/activity.js.map +1 -0
  155. package/dist/{git-branch.d.ts → git/branch.d.ts} +2 -2
  156. package/dist/git/branch.d.ts.map +1 -0
  157. package/dist/{git-branch.js → git/branch.js} +2 -2
  158. package/dist/git/branch.js.map +1 -0
  159. package/dist/{git-fetch.d.ts → git/fetch.d.ts} +2 -2
  160. package/dist/git/fetch.d.ts.map +1 -0
  161. package/dist/{git-fetch.js → git/fetch.js} +1 -1
  162. package/dist/git/fetch.js.map +1 -0
  163. package/dist/{git-genesis.d.ts → git/genesis.d.ts} +3 -3
  164. package/dist/git/genesis.d.ts.map +1 -0
  165. package/dist/{git-genesis.js → git/genesis.js} +5 -5
  166. package/dist/git/genesis.js.map +1 -0
  167. package/dist/git/index.d.ts +36 -0
  168. package/dist/git/index.d.ts.map +1 -0
  169. package/dist/git/index.js +36 -0
  170. package/dist/git/index.js.map +1 -0
  171. package/dist/{git-integration.d.ts → git/integration.d.ts} +2 -2
  172. package/dist/git/integration.d.ts.map +1 -0
  173. package/dist/{git-integration.js → git/integration.js} +4 -4
  174. package/dist/git/integration.js.map +1 -0
  175. package/dist/{git-merge-helpers.d.ts → git/merge-helpers.d.ts} +3 -3
  176. package/dist/git/merge-helpers.d.ts.map +1 -0
  177. package/dist/{git-merge-helpers.js → git/merge-helpers.js} +3 -3
  178. package/dist/git/merge-helpers.js.map +1 -0
  179. package/dist/{git-merge-lock.d.ts → git/merge-lock.d.ts} +1 -1
  180. package/dist/git/merge-lock.d.ts.map +1 -0
  181. package/dist/{git-merge-lock.js → git/merge-lock.js} +1 -1
  182. package/dist/git/merge-lock.js.map +1 -0
  183. package/dist/{git-merge-strategies.d.ts → git/merge-strategies.d.ts} +2 -2
  184. package/dist/git/merge-strategies.d.ts.map +1 -0
  185. package/dist/{git-merge-strategies.js → git/merge-strategies.js} +3 -3
  186. package/dist/git/merge-strategies.js.map +1 -0
  187. package/dist/{git-merge.d.ts → git/merge.d.ts} +4 -4
  188. package/dist/git/merge.d.ts.map +1 -0
  189. package/dist/{git-merge.js → git/merge.js} +4 -4
  190. package/dist/git/merge.js.map +1 -0
  191. package/dist/{git-state-detector.d.ts → git/state-detector.d.ts} +2 -2
  192. package/dist/git/state-detector.d.ts.map +1 -0
  193. package/dist/{git-state-detector.js → git/state-detector.js} +7 -7
  194. package/dist/git/state-detector.js.map +1 -0
  195. package/dist/{git-types.d.ts → git/types.d.ts} +2 -2
  196. package/dist/git/types.d.ts.map +1 -0
  197. package/dist/{git-types.js → git/types.js} +1 -1
  198. package/dist/git/types.js.map +1 -0
  199. package/dist/{git-utils.d.ts → git/utils.d.ts} +1 -1
  200. package/dist/git/utils.d.ts.map +1 -0
  201. package/dist/{git-utils.js → git/utils.js} +2 -2
  202. package/dist/git/utils.js.map +1 -0
  203. package/dist/git.d.ts +5 -5
  204. package/dist/git.d.ts.map +1 -1
  205. package/dist/git.js +10 -10
  206. package/dist/git.js.map +1 -1
  207. package/dist/guard-engine.d.ts +3 -2
  208. package/dist/guard-engine.d.ts.map +1 -1
  209. package/dist/guard-engine.js +2 -2
  210. package/dist/guard-engine.js.map +1 -1
  211. package/dist/install-probe-tick.d.ts +63 -0
  212. package/dist/install-probe-tick.d.ts.map +1 -0
  213. package/dist/install-probe-tick.js +137 -0
  214. package/dist/install-probe-tick.js.map +1 -0
  215. package/dist/install-probe.d.ts +115 -0
  216. package/dist/install-probe.d.ts.map +1 -0
  217. package/dist/install-probe.js +197 -0
  218. package/dist/install-probe.js.map +1 -0
  219. package/dist/listener-auto-advance.d.ts.map +1 -1
  220. package/dist/listener-auto-advance.js +31 -0
  221. package/dist/listener-auto-advance.js.map +1 -1
  222. package/dist/listener.js +5 -5
  223. package/dist/listener.js.map +1 -1
  224. package/dist/{loop-context-audit-pass.d.ts → loops/context-audit-pass.d.ts} +4 -4
  225. package/dist/loops/context-audit-pass.d.ts.map +1 -0
  226. package/dist/{loop-context-audit-pass.js → loops/context-audit-pass.js} +7 -7
  227. package/dist/loops/context-audit-pass.js.map +1 -0
  228. package/dist/{loop-engine-types.d.ts → loops/engine-types.d.ts} +1 -1
  229. package/dist/loops/engine-types.d.ts.map +1 -0
  230. package/dist/{loop-engine-types.js → loops/engine-types.js} +1 -1
  231. package/dist/loops/engine-types.js.map +1 -0
  232. package/dist/{loop-engine.d.ts → loops/engine.d.ts} +6 -6
  233. package/dist/loops/engine.d.ts.map +1 -0
  234. package/dist/{loop-engine.js → loops/engine.js} +13 -13
  235. package/dist/loops/engine.js.map +1 -0
  236. package/dist/{loop-event-bus.d.ts → loops/event-bus.d.ts} +1 -1
  237. package/dist/loops/event-bus.d.ts.map +1 -0
  238. package/dist/{loop-event-bus.js → loops/event-bus.js} +1 -1
  239. package/dist/loops/event-bus.js.map +1 -0
  240. package/dist/loops/index.d.ts +33 -0
  241. package/dist/loops/index.d.ts.map +1 -0
  242. package/dist/loops/index.js +32 -0
  243. package/dist/loops/index.js.map +1 -0
  244. package/dist/{loop-llm-client.d.ts → loops/llm-client.d.ts} +3 -3
  245. package/dist/loops/llm-client.d.ts.map +1 -0
  246. package/dist/{loop-llm-client.js → loops/llm-client.js} +3 -3
  247. package/dist/loops/llm-client.js.map +1 -0
  248. package/dist/{loop-llm-flag.d.ts → loops/llm-flag.d.ts} +1 -1
  249. package/dist/loops/llm-flag.d.ts.map +1 -0
  250. package/dist/{loop-llm-flag.js → loops/llm-flag.js} +1 -1
  251. package/dist/loops/llm-flag.js.map +1 -0
  252. package/dist/{loop-operational-block.d.ts → loops/operational-block.d.ts} +1 -1
  253. package/dist/loops/operational-block.d.ts.map +1 -0
  254. package/dist/{loop-operational-block.js → loops/operational-block.js} +1 -1
  255. package/dist/loops/operational-block.js.map +1 -0
  256. package/dist/{loop-prompt-builder.d.ts → loops/prompt-builder.d.ts} +2 -2
  257. package/dist/loops/prompt-builder.d.ts.map +1 -0
  258. package/dist/{loop-prompt-builder.js → loops/prompt-builder.js} +1 -1
  259. package/dist/loops/prompt-builder.js.map +1 -0
  260. package/dist/{loop-variance.d.ts → loops/variance.d.ts} +1 -1
  261. package/dist/loops/variance.d.ts.map +1 -0
  262. package/dist/{loop-variance.js → loops/variance.js} +1 -1
  263. package/dist/loops/variance.js.map +1 -0
  264. package/dist/merge-back-loop.d.ts.map +1 -1
  265. package/dist/merge-back-loop.js +4 -3
  266. package/dist/merge-back-loop.js.map +1 -1
  267. package/dist/merge-detector.js +2 -2
  268. package/dist/merge-detector.js.map +1 -1
  269. package/dist/{nexus-endpoint-clearance.d.ts → nexus/endpoint-clearance.d.ts} +2 -2
  270. package/dist/nexus/endpoint-clearance.d.ts.map +1 -0
  271. package/dist/{nexus-endpoint-clearance.js → nexus/endpoint-clearance.js} +2 -2
  272. package/dist/nexus/endpoint-clearance.js.map +1 -0
  273. package/dist/{nexus-escalation-bridge.d.ts → nexus/escalation-bridge.d.ts} +1 -1
  274. package/dist/nexus/escalation-bridge.d.ts.map +1 -0
  275. package/dist/{nexus-escalation-bridge.js → nexus/escalation-bridge.js} +2 -2
  276. package/dist/nexus/escalation-bridge.js.map +1 -0
  277. package/dist/{nexus-incoming.d.ts → nexus/incoming.d.ts} +2 -2
  278. package/dist/nexus/incoming.d.ts.map +1 -0
  279. package/dist/{nexus-incoming.js → nexus/incoming.js} +2 -2
  280. package/dist/nexus/incoming.js.map +1 -0
  281. package/dist/nexus/index.d.ts +20 -0
  282. package/dist/nexus/index.d.ts.map +1 -0
  283. package/dist/nexus/index.js +20 -0
  284. package/dist/nexus/index.js.map +1 -0
  285. package/dist/{nexus-intake-spawn.d.ts → nexus/intake-spawn.d.ts} +3 -3
  286. package/dist/nexus/intake-spawn.d.ts.map +1 -0
  287. package/dist/{nexus-intake-spawn.js → nexus/intake-spawn.js} +1 -1
  288. package/dist/nexus/intake-spawn.js.map +1 -0
  289. package/dist/{nexus-intake.d.ts → nexus/intake.d.ts} +2 -2
  290. package/dist/nexus/intake.d.ts.map +1 -0
  291. package/dist/{nexus-intake.js → nexus/intake.js} +4 -4
  292. package/dist/nexus/intake.js.map +1 -0
  293. package/dist/{nexus-return.d.ts → nexus/return.d.ts} +3 -3
  294. package/dist/nexus/return.d.ts.map +1 -0
  295. package/dist/{nexus-return.js → nexus/return.js} +4 -4
  296. package/dist/nexus/return.js.map +1 -0
  297. package/dist/otlp/index.d.ts +19 -0
  298. package/dist/otlp/index.d.ts.map +1 -0
  299. package/dist/otlp/index.js +19 -0
  300. package/dist/otlp/index.js.map +1 -0
  301. package/dist/{otlp-log-parser.d.ts → otlp/log-parser.d.ts} +2 -2
  302. package/dist/otlp/log-parser.d.ts.map +1 -0
  303. package/dist/{otlp-log-parser.js → otlp/log-parser.js} +5 -6
  304. package/dist/otlp/log-parser.js.map +1 -0
  305. package/dist/{otlp-metric-parser.d.ts → otlp/metric-parser.d.ts} +2 -2
  306. package/dist/otlp/metric-parser.d.ts.map +1 -0
  307. package/dist/{otlp-metric-parser.js → otlp/metric-parser.js} +4 -5
  308. package/dist/otlp/metric-parser.js.map +1 -0
  309. package/dist/{otlp-port-manager.d.ts → otlp/port-manager.d.ts} +1 -1
  310. package/dist/otlp/port-manager.d.ts.map +1 -0
  311. package/dist/{otlp-port-manager.js → otlp/port-manager.js} +1 -1
  312. package/dist/otlp/port-manager.js.map +1 -0
  313. package/dist/{otlp-receiver.d.ts → otlp/receiver.d.ts} +2 -2
  314. package/dist/otlp/receiver.d.ts.map +1 -0
  315. package/dist/{otlp-receiver.js → otlp/receiver.js} +5 -33
  316. package/dist/otlp/receiver.js.map +1 -0
  317. package/dist/{otlp-types.d.ts → otlp/types.d.ts} +1 -9
  318. package/dist/otlp/types.d.ts.map +1 -0
  319. package/dist/{otlp-types.js → otlp/types.js} +1 -27
  320. package/dist/otlp/types.js.map +1 -0
  321. package/dist/pipeline-config.d.ts +1 -1
  322. package/dist/{prd-controller.d.ts → prd/controller.d.ts} +7 -7
  323. package/dist/prd/controller.d.ts.map +1 -0
  324. package/dist/{prd-controller.js → prd/controller.js} +11 -11
  325. package/dist/prd/controller.js.map +1 -0
  326. package/dist/{prd-divergence.d.ts → prd/divergence.d.ts} +2 -2
  327. package/dist/prd/divergence.d.ts.map +1 -0
  328. package/dist/{prd-divergence.js → prd/divergence.js} +1 -1
  329. package/dist/prd/divergence.js.map +1 -0
  330. package/dist/{prd-focus-pushdown.d.ts → prd/focus-pushdown.d.ts} +2 -2
  331. package/dist/prd/focus-pushdown.d.ts.map +1 -0
  332. package/dist/{prd-focus-pushdown.js → prd/focus-pushdown.js} +3 -3
  333. package/dist/prd/focus-pushdown.js.map +1 -0
  334. package/dist/{prd-frontier.d.ts → prd/frontier.d.ts} +2 -2
  335. package/dist/prd/frontier.d.ts.map +1 -0
  336. package/dist/{prd-frontier.js → prd/frontier.js} +1 -1
  337. package/dist/prd/frontier.js.map +1 -0
  338. package/dist/prd/index.d.ts +26 -0
  339. package/dist/prd/index.d.ts.map +1 -0
  340. package/dist/prd/index.js +25 -0
  341. package/dist/prd/index.js.map +1 -0
  342. package/dist/{prd-steward.d.ts → prd/steward.d.ts} +4 -4
  343. package/dist/prd/steward.d.ts.map +1 -0
  344. package/dist/{prd-steward.js → prd/steward.js} +4 -4
  345. package/dist/prd/steward.js.map +1 -0
  346. package/dist/{prd-viability.d.ts → prd/viability.d.ts} +2 -2
  347. package/dist/prd/viability.d.ts.map +1 -0
  348. package/dist/{prd-viability.js → prd/viability.js} +1 -1
  349. package/dist/prd/viability.js.map +1 -0
  350. package/dist/product-scaffold.js +2 -2
  351. package/dist/product-scaffold.js.map +1 -1
  352. package/dist/prompt-sections/persona-sections.d.ts +12 -0
  353. package/dist/prompt-sections/persona-sections.d.ts.map +1 -1
  354. package/dist/prompt-sections/persona-sections.js +29 -2
  355. package/dist/prompt-sections/persona-sections.js.map +1 -1
  356. package/dist/queries/context-lock-queries.js +1 -1
  357. package/dist/queries/context-lock-queries.js.map +1 -1
  358. package/dist/queries/deliveries.d.ts +15 -0
  359. package/dist/queries/deliveries.d.ts.map +1 -1
  360. package/dist/queries/deliveries.js +2 -0
  361. package/dist/queries/deliveries.js.map +1 -1
  362. package/dist/queries/focuses.d.ts +17 -0
  363. package/dist/queries/focuses.d.ts.map +1 -1
  364. package/dist/queries/focuses.js +27 -0
  365. package/dist/queries/focuses.js.map +1 -1
  366. package/dist/queries/schemas.d.ts +4 -0
  367. package/dist/queries/schemas.d.ts.map +1 -1
  368. package/dist/queries/schemas.js +8 -0
  369. package/dist/queries/schemas.js.map +1 -1
  370. package/dist/reality-pole.js +1 -1
  371. package/dist/resolvers/git-diff-against-base.d.ts.map +1 -1
  372. package/dist/resolvers/git-diff-against-base.js +4 -1
  373. package/dist/resolvers/git-diff-against-base.js.map +1 -1
  374. package/dist/resolvers/prd-context.js +1 -1
  375. package/dist/sensor-sweep.js +1 -1
  376. package/dist/spawn/model-routing.d.ts +277 -0
  377. package/dist/spawn/model-routing.d.ts.map +1 -0
  378. package/dist/spawn/model-routing.js +464 -0
  379. package/dist/spawn/model-routing.js.map +1 -0
  380. package/dist/spawn/process-spawn.d.ts +128 -0
  381. package/dist/spawn/process-spawn.d.ts.map +1 -0
  382. package/dist/spawn/process-spawn.js +378 -0
  383. package/dist/spawn/process-spawn.js.map +1 -0
  384. package/dist/spawn/prompt-assembly.d.ts +143 -0
  385. package/dist/spawn/prompt-assembly.d.ts.map +1 -0
  386. package/dist/spawn/prompt-assembly.js +263 -0
  387. package/dist/spawn/prompt-assembly.js.map +1 -0
  388. package/dist/spawn/shared.d.ts +72 -0
  389. package/dist/spawn/shared.d.ts.map +1 -0
  390. package/dist/spawn/shared.js +14 -0
  391. package/dist/spawn/shared.js.map +1 -0
  392. package/dist/spawn/spawn-decision.d.ts +189 -0
  393. package/dist/spawn/spawn-decision.d.ts.map +1 -0
  394. package/dist/spawn/spawn-decision.js +361 -0
  395. package/dist/spawn/spawn-decision.js.map +1 -0
  396. package/dist/spawn/worktree-session.d.ts +105 -0
  397. package/dist/spawn/worktree-session.d.ts.map +1 -0
  398. package/dist/spawn/worktree-session.js +216 -0
  399. package/dist/spawn/worktree-session.js.map +1 -0
  400. package/dist/spawner/lifecycle.js +2 -2
  401. package/dist/spawner/lifecycle.js.map +1 -1
  402. package/dist/spawner/resolution.js +1 -1
  403. package/dist/stall-detector-config.d.ts +4 -0
  404. package/dist/stall-detector-config.d.ts.map +1 -1
  405. package/dist/stall-detector-config.js +6 -0
  406. package/dist/stall-detector-config.js.map +1 -1
  407. package/dist/state-cascade.js +1 -1
  408. package/dist/state-cascade.js.map +1 -1
  409. package/dist/trigger-executor.d.ts +5 -9
  410. package/dist/trigger-executor.d.ts.map +1 -1
  411. package/dist/trigger-executor.js +14 -36
  412. package/dist/trigger-executor.js.map +1 -1
  413. package/dist/types/focus.d.ts +13 -0
  414. package/dist/types/focus.d.ts.map +1 -1
  415. package/dist/types/workflow.d.ts +1 -3
  416. package/dist/types/workflow.d.ts.map +1 -1
  417. package/dist/unified-engine-lifecycle.js +1 -1
  418. package/dist/unified-init.d.ts +3 -3
  419. package/dist/unified-init.d.ts.map +1 -1
  420. package/dist/unified-init.js +9 -25
  421. package/dist/unified-init.js.map +1 -1
  422. package/dist/unified-shell.d.ts +3 -3
  423. package/dist/unified-shell.js +4 -4
  424. package/dist/unified-shell.js.map +1 -1
  425. package/dist/verification-engine.d.ts.map +1 -1
  426. package/dist/verification-engine.js +15 -0
  427. package/dist/verification-engine.js.map +1 -1
  428. package/dist/{worktree-focus.d.ts → worktree/focus.d.ts} +2 -2
  429. package/dist/worktree/focus.d.ts.map +1 -0
  430. package/dist/{worktree-focus.js → worktree/focus.js} +7 -7
  431. package/dist/worktree/focus.js.map +1 -0
  432. package/dist/worktree/index.d.ts +16 -0
  433. package/dist/worktree/index.d.ts.map +1 -0
  434. package/dist/worktree/index.js +16 -0
  435. package/dist/worktree/index.js.map +1 -0
  436. package/dist/{worktree-safety.d.ts → worktree/safety.d.ts} +1 -1
  437. package/dist/worktree/safety.d.ts.map +1 -0
  438. package/dist/{worktree-safety.js → worktree/safety.js} +2 -2
  439. package/dist/worktree/safety.js.map +1 -0
  440. package/dist/{worktree-state.d.ts → worktree/state.d.ts} +1 -1
  441. package/dist/worktree/state.d.ts.map +1 -0
  442. package/dist/{worktree-state.js → worktree/state.js} +6 -6
  443. package/dist/worktree/state.js.map +1 -0
  444. package/dist/worktree.d.ts +1 -1
  445. package/dist/worktree.js +5 -5
  446. package/dist/worktree.js.map +1 -1
  447. package/package.json +5 -4
  448. package/dist/git-activity.d.ts.map +0 -1
  449. package/dist/git-activity.js.map +0 -1
  450. package/dist/git-branch.d.ts.map +0 -1
  451. package/dist/git-branch.js.map +0 -1
  452. package/dist/git-fetch.d.ts.map +0 -1
  453. package/dist/git-fetch.js.map +0 -1
  454. package/dist/git-genesis.d.ts.map +0 -1
  455. package/dist/git-genesis.js.map +0 -1
  456. package/dist/git-integration.d.ts.map +0 -1
  457. package/dist/git-integration.js.map +0 -1
  458. package/dist/git-merge-helpers.d.ts.map +0 -1
  459. package/dist/git-merge-helpers.js.map +0 -1
  460. package/dist/git-merge-lock.d.ts.map +0 -1
  461. package/dist/git-merge-lock.js.map +0 -1
  462. package/dist/git-merge-strategies.d.ts.map +0 -1
  463. package/dist/git-merge-strategies.js.map +0 -1
  464. package/dist/git-merge.d.ts.map +0 -1
  465. package/dist/git-merge.js.map +0 -1
  466. package/dist/git-state-detector.d.ts.map +0 -1
  467. package/dist/git-state-detector.js.map +0 -1
  468. package/dist/git-types.d.ts.map +0 -1
  469. package/dist/git-types.js.map +0 -1
  470. package/dist/git-utils.d.ts.map +0 -1
  471. package/dist/git-utils.js.map +0 -1
  472. package/dist/loop-context-audit-pass.d.ts.map +0 -1
  473. package/dist/loop-context-audit-pass.js.map +0 -1
  474. package/dist/loop-engine-types.d.ts.map +0 -1
  475. package/dist/loop-engine-types.js.map +0 -1
  476. package/dist/loop-engine.d.ts.map +0 -1
  477. package/dist/loop-engine.js.map +0 -1
  478. package/dist/loop-event-bus.d.ts.map +0 -1
  479. package/dist/loop-event-bus.js.map +0 -1
  480. package/dist/loop-llm-client.d.ts.map +0 -1
  481. package/dist/loop-llm-client.js.map +0 -1
  482. package/dist/loop-llm-flag.d.ts.map +0 -1
  483. package/dist/loop-llm-flag.js.map +0 -1
  484. package/dist/loop-operational-block.d.ts.map +0 -1
  485. package/dist/loop-operational-block.js.map +0 -1
  486. package/dist/loop-prompt-builder.d.ts.map +0 -1
  487. package/dist/loop-prompt-builder.js.map +0 -1
  488. package/dist/loop-variance.d.ts.map +0 -1
  489. package/dist/loop-variance.js.map +0 -1
  490. package/dist/nexus-endpoint-clearance.d.ts.map +0 -1
  491. package/dist/nexus-endpoint-clearance.js.map +0 -1
  492. package/dist/nexus-escalation-bridge.d.ts.map +0 -1
  493. package/dist/nexus-escalation-bridge.js.map +0 -1
  494. package/dist/nexus-incoming.d.ts.map +0 -1
  495. package/dist/nexus-incoming.js.map +0 -1
  496. package/dist/nexus-intake-spawn.d.ts.map +0 -1
  497. package/dist/nexus-intake-spawn.js.map +0 -1
  498. package/dist/nexus-intake.d.ts.map +0 -1
  499. package/dist/nexus-intake.js.map +0 -1
  500. package/dist/nexus-return.d.ts.map +0 -1
  501. package/dist/nexus-return.js.map +0 -1
  502. package/dist/otlp-log-parser.d.ts.map +0 -1
  503. package/dist/otlp-log-parser.js.map +0 -1
  504. package/dist/otlp-metric-parser.d.ts.map +0 -1
  505. package/dist/otlp-metric-parser.js.map +0 -1
  506. package/dist/otlp-port-manager.d.ts.map +0 -1
  507. package/dist/otlp-port-manager.js.map +0 -1
  508. package/dist/otlp-receiver.d.ts.map +0 -1
  509. package/dist/otlp-receiver.js.map +0 -1
  510. package/dist/otlp-types.d.ts.map +0 -1
  511. package/dist/otlp-types.js.map +0 -1
  512. package/dist/prd-controller.d.ts.map +0 -1
  513. package/dist/prd-controller.js.map +0 -1
  514. package/dist/prd-divergence.d.ts.map +0 -1
  515. package/dist/prd-divergence.js.map +0 -1
  516. package/dist/prd-focus-pushdown.d.ts.map +0 -1
  517. package/dist/prd-focus-pushdown.js.map +0 -1
  518. package/dist/prd-frontier.d.ts.map +0 -1
  519. package/dist/prd-frontier.js.map +0 -1
  520. package/dist/prd-steward.d.ts.map +0 -1
  521. package/dist/prd-steward.js.map +0 -1
  522. package/dist/prd-viability.d.ts.map +0 -1
  523. package/dist/prd-viability.js.map +0 -1
  524. package/dist/worktree-focus.d.ts.map +0 -1
  525. package/dist/worktree-focus.js.map +0 -1
  526. package/dist/worktree-safety.d.ts.map +0 -1
  527. package/dist/worktree-safety.js.map +0 -1
  528. package/dist/worktree-state.d.ts.map +0 -1
  529. package/dist/worktree-state.js.map +0 -1
@@ -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"}
@@ -0,0 +1,115 @@
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 { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
7
+ import { resolve } from 'node:path';
8
+ import { homedir } from 'node:os';
9
+ import { resolveMcpServerPath } from '../../mcp-resolution.js';
10
+ import { SEED_BODY, SEED_MCP_REGISTRATION_SENTENCE } from '../../templates/claude-md.js';
11
+ const CLINE_MCP_REGISTRATION_SENTENCE = 'The Telora MCP server is registered in `~/.cline/data/settings/cline_mcp_settings.json`.';
12
+ /**
13
+ * Render a project-level Cline rules file carrying the same Telora seed
14
+ * discipline as CLAUDE.md / AGENTS.md. Cline CLI reads project rules from
15
+ * `.cline/rules/`, so this is the operator-facing context equivalent for the
16
+ * Cline harness.
17
+ */
18
+ export function renderClineRules(inv) {
19
+ const productLabel = inv.productName ? `${inv.productName} (${inv.productId})` : inv.productId;
20
+ const body = SEED_BODY.replace(SEED_MCP_REGISTRATION_SENTENCE, CLINE_MCP_REGISTRATION_SENTENCE);
21
+ return (`# Telora Workstation\n\n` +
22
+ `This workstation is connected to Telora. The connection invariant is recorded here for Cline CLI sessions:\n\n` +
23
+ `- Telora URL: ${inv.teloraUrl}\n` +
24
+ `- Organization: ${inv.organizationId}\n` +
25
+ `- Product: ${productLabel}\n\n` +
26
+ body);
27
+ }
28
+ /**
29
+ * Write the Telora Cline project rules file. The file is owned by the connect
30
+ * flow, so re-runs replace it wholesale; user-authored Cline rules live beside
31
+ * it under `.cline/rules/`.
32
+ */
33
+ export function writeClineProjectRules(repoPath, inv, io) {
34
+ const dir = resolve(repoPath, '.cline', 'rules');
35
+ const path = resolve(dir, 'telora.md');
36
+ const content = renderClineRules(inv);
37
+ if (!existsSync(dir))
38
+ mkdirSync(dir, { recursive: true });
39
+ if (existsSync(path) && readFileSync(path, 'utf-8') === content)
40
+ return;
41
+ writeFileSync(path, content);
42
+ io.out(`Wrote ${path}.\n`);
43
+ }
44
+ /**
45
+ * Render the Cline CLI MCP config object. Current Cline CLI documentation
46
+ * stores MCP settings under `~/.cline/data/settings/cline_mcp_settings.json`
47
+ * with a top-level `mcpServers` map.
48
+ *
49
+ * Carries the MCP profile ONLY -- never workstation identity. Like the
50
+ * `.mcp.json` and Codex builders, identity (`TELORA_URL` / `TELORA_TRACKER_ID`)
51
+ * resolves from the single source `~/.telora/daemon.json` via the MCP server's
52
+ * `loadCredentials()` fallback; a persisted copy here would only drift.
53
+ */
54
+ export function renderClineMcpSettings(params) {
55
+ return {
56
+ mcpServers: {
57
+ telora: {
58
+ command: 'node',
59
+ args: [params.mcpServerPath],
60
+ env: {
61
+ TELORA_MCP_PROFILE: 'human',
62
+ },
63
+ disabled: false,
64
+ autoApprove: [],
65
+ },
66
+ },
67
+ };
68
+ }
69
+ export function writeOrMergeClineMcpSettings(io, params = {}) {
70
+ let mcpServerPath;
71
+ try {
72
+ mcpServerPath = resolveMcpServerPath();
73
+ }
74
+ catch (err) {
75
+ io.err(`Warning: could not resolve @telora/mcp-products; skipping Cline MCP registration: ${err instanceof Error ? err.message : String(err)}\n`);
76
+ return;
77
+ }
78
+ const home = params.homeOverride ?? homedir();
79
+ const dir = resolve(home, '.cline', 'data', 'settings');
80
+ const path = resolve(dir, 'cline_mcp_settings.json');
81
+ const desired = renderClineMcpSettings({ mcpServerPath });
82
+ if (!existsSync(dir))
83
+ mkdirSync(dir, { recursive: true, mode: 0o700 });
84
+ let parsed = {};
85
+ if (existsSync(path)) {
86
+ try {
87
+ const raw = readFileSync(path, 'utf-8');
88
+ const candidate = JSON.parse(raw);
89
+ if (candidate && typeof candidate === 'object' && !Array.isArray(candidate)) {
90
+ parsed = candidate;
91
+ }
92
+ }
93
+ catch (err) {
94
+ io.err(`Warning: ${path} is not valid JSON; leaving it alone: ${err instanceof Error ? err.message : String(err)}\n`);
95
+ return;
96
+ }
97
+ }
98
+ const existingServers = parsed.mcpServers && typeof parsed.mcpServers === 'object' && !Array.isArray(parsed.mcpServers)
99
+ ? parsed.mcpServers
100
+ : {};
101
+ const desiredServers = desired.mcpServers;
102
+ const next = {
103
+ ...parsed,
104
+ mcpServers: {
105
+ ...existingServers,
106
+ telora: desiredServers.telora,
107
+ },
108
+ };
109
+ const content = JSON.stringify(next, null, 2) + '\n';
110
+ if (existsSync(path) && readFileSync(path, 'utf-8') === content)
111
+ return;
112
+ writeFileSync(path, content, { mode: 0o600 });
113
+ io.out(`Registered Telora MCP server in ${path}.\n`);
114
+ }
115
+ //# sourceMappingURL=cline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cline.js","sourceRoot":"","sources":["../../../src/cli/connect/cline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Codex harness config writer: registration of the Telora MCP server in the
3
+ * operator's personal `~/.codex/config.toml`. Extracted verbatim from
4
+ * `../connect.ts` and re-exported from there for import stability.
5
+ */
6
+ import type { ConnectIO } from './shared.js';
7
+ /**
8
+ * Render the delimited Telora MCP block for the operator's personal
9
+ * `~/.codex/config.toml`. Mirrors the `.mcp.json` shape (command=node + the
10
+ * resolved abs path to @telora/mcp-products) but as a TOML `[mcp_servers.telora]`
11
+ * table, the form Codex reads. Profile is `human` (operator-interactive),
12
+ * matching the `.mcp.json` the Claude path writes.
13
+ *
14
+ * Carries the MCP profile ONLY -- never workstation identity. Identity
15
+ * (`TELORA_URL` / `TELORA_TRACKER_ID`) resolves from the single source
16
+ * `~/.telora/daemon.json` via the MCP server's `loadCredentials()` fallback,
17
+ * so a persisted copy here would only be a drift hazard. Keeping it out is the
18
+ * single-source invariant (the `.mcp.json` builder omits it for the same
19
+ * reason).
20
+ *
21
+ * Values are emitted as JSON-encoded TOML string literals, which is valid TOML
22
+ * for the path value we control here.
23
+ */
24
+ export declare function renderCodexMcpBlock(params: {
25
+ mcpServerPath: string;
26
+ }): string;
27
+ /**
28
+ * Register the Telora MCP server in the operator's personal
29
+ * `~/.codex/config.toml` (NOT the per-product execution CODEX_HOME -- that is
30
+ * `codex-provision.ts`, a separate concern). This is what makes the Telora
31
+ * tool surface reachable from the operator's interactive Codex chat.
32
+ *
33
+ * Idempotent delimited merge, mirroring `writeOrMergeClaudeMd`: replace the
34
+ * `# BEGIN/END TELORA MCP` block in place if present, append it if absent,
35
+ * never duplicate. When the computed content equals what is on disk, NO write
36
+ * occurs. `homeOverride` lets tests target a temp HOME.
37
+ *
38
+ * Best-effort: if the MCP package cannot be resolved, prints a warning and
39
+ * returns without touching the file (the connect flow must not abort).
40
+ */
41
+ export declare function writeOrMergeCodexMcpToml(io: ConnectIO, params?: {
42
+ homeOverride?: string;
43
+ }): void;
44
+ //# sourceMappingURL=codex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../../src/cli/connect/codex.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAQ7C;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE;IAC1C,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,MAAM,CAWT;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,wBAAwB,CACtC,EAAE,EAAE,SAAS,EACb,MAAM,GAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAO,GACrC,IAAI,CA0DN"}