@telora/daemon 0.16.27 → 0.16.42

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 (331) hide show
  1. package/build-info.json +4 -3
  2. package/dist/assembly-resolvers.d.ts +13 -65
  3. package/dist/assembly-resolvers.d.ts.map +1 -1
  4. package/dist/assembly-resolvers.js +15 -1915
  5. package/dist/assembly-resolvers.js.map +1 -1
  6. package/dist/audit-phase.d.ts +2 -2
  7. package/dist/audit-phase.d.ts.map +1 -1
  8. package/dist/audit-phase.js +1 -1
  9. package/dist/audit-phase.js.map +1 -1
  10. package/dist/circuit-wedge-watcher.d.ts +48 -0
  11. package/dist/circuit-wedge-watcher.d.ts.map +1 -0
  12. package/dist/circuit-wedge-watcher.js +94 -0
  13. package/dist/circuit-wedge-watcher.js.map +1 -0
  14. package/dist/{completion-handler.d.ts → completion/agent-completion.d.ts} +3 -3
  15. package/dist/completion/agent-completion.d.ts.map +1 -0
  16. package/dist/{completion-handler.js → completion/agent-completion.js} +7 -7
  17. package/dist/completion/agent-completion.js.map +1 -0
  18. package/dist/{completion-detector.d.ts → completion/detector.d.ts} +1 -1
  19. package/dist/completion/detector.d.ts.map +1 -0
  20. package/dist/{completion-detector.js → completion/detector.js} +1 -1
  21. package/dist/completion/detector.js.map +1 -0
  22. package/dist/{focus-completion-event.d.ts → completion/event.d.ts} +21 -3
  23. package/dist/completion/event.d.ts.map +1 -0
  24. package/dist/{focus-completion-event.js → completion/event.js} +55 -9
  25. package/dist/completion/event.js.map +1 -0
  26. package/dist/completion/index.d.ts +24 -0
  27. package/dist/completion/index.d.ts.map +1 -0
  28. package/dist/completion/index.js +25 -0
  29. package/dist/completion/index.js.map +1 -0
  30. package/dist/{focus-completion.d.ts → completion/team-completion.d.ts} +11 -11
  31. package/dist/completion/team-completion.d.ts.map +1 -0
  32. package/dist/{focus-completion.js → completion/team-completion.js} +37 -26
  33. package/dist/completion/team-completion.js.map +1 -0
  34. package/dist/{focus-team-lifecycle.d.ts → completion/team-lifecycle.d.ts} +2 -2
  35. package/dist/completion/team-lifecycle.d.ts.map +1 -0
  36. package/dist/{focus-team-lifecycle.js → completion/team-lifecycle.js} +12 -12
  37. package/dist/completion/team-lifecycle.js.map +1 -0
  38. package/dist/directive-executor.d.ts +30 -0
  39. package/dist/directive-executor.d.ts.map +1 -1
  40. package/dist/directive-executor.js +46 -0
  41. package/dist/directive-executor.js.map +1 -1
  42. package/dist/focus-engine.d.ts.map +1 -1
  43. package/dist/focus-engine.js +1 -2
  44. package/dist/focus-engine.js.map +1 -1
  45. package/dist/focus-executor.d.ts +4 -4
  46. package/dist/focus-executor.d.ts.map +1 -1
  47. package/dist/focus-executor.js +11 -5
  48. package/dist/focus-executor.js.map +1 -1
  49. package/dist/focus-merge.js +1 -1
  50. package/dist/focus-merge.js.map +1 -1
  51. package/dist/focus-prompt-builder.d.ts.map +1 -1
  52. package/dist/focus-prompt-builder.js +5 -39
  53. package/dist/focus-prompt-builder.js.map +1 -1
  54. package/dist/listener.js +1 -1
  55. package/dist/listener.js.map +1 -1
  56. package/dist/output-monitor.d.ts +1 -1
  57. package/dist/output-monitor.d.ts.map +1 -1
  58. package/dist/output-monitor.js +1 -1
  59. package/dist/output-monitor.js.map +1 -1
  60. package/dist/prompt-listing.d.ts +26 -0
  61. package/dist/prompt-listing.d.ts.map +1 -0
  62. package/dist/prompt-listing.js +55 -0
  63. package/dist/prompt-listing.js.map +1 -0
  64. package/dist/queries/index.d.ts +13 -0
  65. package/dist/queries/index.d.ts.map +1 -1
  66. package/dist/queries/index.js +9 -0
  67. package/dist/queries/index.js.map +1 -1
  68. package/dist/queries/shared.d.ts +35 -0
  69. package/dist/queries/shared.d.ts.map +1 -1
  70. package/dist/queries/shared.js +64 -7
  71. package/dist/queries/shared.js.map +1 -1
  72. package/dist/resolvers/agent-escalations.d.ts +2 -0
  73. package/dist/resolvers/agent-escalations.d.ts.map +1 -0
  74. package/dist/resolvers/agent-escalations.js +33 -0
  75. package/dist/resolvers/agent-escalations.js.map +1 -0
  76. package/dist/resolvers/agent-session-summaries.d.ts +2 -0
  77. package/dist/resolvers/agent-session-summaries.d.ts.map +1 -0
  78. package/dist/resolvers/agent-session-summaries.js +28 -0
  79. package/dist/resolvers/agent-session-summaries.js.map +1 -0
  80. package/dist/resolvers/delivery-acceptance-criteria.d.ts +2 -0
  81. package/dist/resolvers/delivery-acceptance-criteria.d.ts.map +1 -0
  82. package/dist/resolvers/delivery-acceptance-criteria.js +19 -0
  83. package/dist/resolvers/delivery-acceptance-criteria.js.map +1 -0
  84. package/dist/resolvers/delivery-description.d.ts +2 -0
  85. package/dist/resolvers/delivery-description.d.ts.map +1 -0
  86. package/dist/resolvers/delivery-description.js +19 -0
  87. package/dist/resolvers/delivery-description.js.map +1 -0
  88. package/dist/resolvers/delivery-issues.d.ts +2 -0
  89. package/dist/resolvers/delivery-issues.d.ts.map +1 -0
  90. package/dist/resolvers/delivery-issues.js +58 -0
  91. package/dist/resolvers/delivery-issues.js.map +1 -0
  92. package/dist/resolvers/delivery-listing.d.ts +2 -0
  93. package/dist/resolvers/delivery-listing.d.ts.map +1 -0
  94. package/dist/resolvers/delivery-listing.js +54 -0
  95. package/dist/resolvers/delivery-listing.js.map +1 -0
  96. package/dist/resolvers/delivery-tech-context.d.ts +2 -0
  97. package/dist/resolvers/delivery-tech-context.d.ts.map +1 -0
  98. package/dist/resolvers/delivery-tech-context.js +19 -0
  99. package/dist/resolvers/delivery-tech-context.js.map +1 -0
  100. package/dist/resolvers/deployment-profile.d.ts +2 -0
  101. package/dist/resolvers/deployment-profile.d.ts.map +1 -0
  102. package/dist/resolvers/deployment-profile.js +28 -0
  103. package/dist/resolvers/deployment-profile.js.map +1 -0
  104. package/dist/resolvers/focus-anchoring-injections.d.ts +2 -0
  105. package/dist/resolvers/focus-anchoring-injections.d.ts.map +1 -0
  106. package/dist/resolvers/focus-anchoring-injections.js +123 -0
  107. package/dist/resolvers/focus-anchoring-injections.js.map +1 -0
  108. package/dist/resolvers/focus-context.d.ts +2 -0
  109. package/dist/resolvers/focus-context.d.ts.map +1 -0
  110. package/dist/resolvers/focus-context.js +47 -0
  111. package/dist/resolvers/focus-context.js.map +1 -0
  112. package/dist/resolvers/focus-injections.d.ts +2 -0
  113. package/dist/resolvers/focus-injections.d.ts.map +1 -0
  114. package/dist/resolvers/focus-injections.js +75 -0
  115. package/dist/resolvers/focus-injections.js.map +1 -0
  116. package/dist/resolvers/focus-last-review-report.d.ts +2 -0
  117. package/dist/resolvers/focus-last-review-report.d.ts.map +1 -0
  118. package/dist/resolvers/focus-last-review-report.js +46 -0
  119. package/dist/resolvers/focus-last-review-report.js.map +1 -0
  120. package/dist/resolvers/focus-reality-tree.d.ts +2 -0
  121. package/dist/resolvers/focus-reality-tree.d.ts.map +1 -0
  122. package/dist/resolvers/focus-reality-tree.js +50 -0
  123. package/dist/resolvers/focus-reality-tree.js.map +1 -0
  124. package/dist/resolvers/git-diff-against-base.d.ts +2 -0
  125. package/dist/resolvers/git-diff-against-base.d.ts.map +1 -0
  126. package/dist/resolvers/git-diff-against-base.js +39 -0
  127. package/dist/resolvers/git-diff-against-base.js.map +1 -0
  128. package/dist/resolvers/guards-evaluation-results.d.ts +2 -0
  129. package/dist/resolvers/guards-evaluation-results.d.ts.map +1 -0
  130. package/dist/resolvers/guards-evaluation-results.js +31 -0
  131. package/dist/resolvers/guards-evaluation-results.js.map +1 -0
  132. package/dist/resolvers/index.d.ts +50 -0
  133. package/dist/resolvers/index.d.ts.map +1 -0
  134. package/dist/resolvers/index.js +51 -0
  135. package/dist/resolvers/index.js.map +1 -0
  136. package/dist/resolvers/loop-context.d.ts +2 -0
  137. package/dist/resolvers/loop-context.d.ts.map +1 -0
  138. package/dist/resolvers/loop-context.js +113 -0
  139. package/dist/resolvers/loop-context.js.map +1 -0
  140. package/dist/resolvers/loop-delivery-index.d.ts +2 -0
  141. package/dist/resolvers/loop-delivery-index.d.ts.map +1 -0
  142. package/dist/resolvers/loop-delivery-index.js +69 -0
  143. package/dist/resolvers/loop-delivery-index.js.map +1 -0
  144. package/dist/resolvers/loop-documents.d.ts +2 -0
  145. package/dist/resolvers/loop-documents.d.ts.map +1 -0
  146. package/dist/resolvers/loop-documents.js +30 -0
  147. package/dist/resolvers/loop-documents.js.map +1 -0
  148. package/dist/resolvers/loop-expected-effects.d.ts +2 -0
  149. package/dist/resolvers/loop-expected-effects.d.ts.map +1 -0
  150. package/dist/resolvers/loop-expected-effects.js +68 -0
  151. package/dist/resolvers/loop-expected-effects.js.map +1 -0
  152. package/dist/resolvers/loop-frt-statement.d.ts +2 -0
  153. package/dist/resolvers/loop-frt-statement.d.ts.map +1 -0
  154. package/dist/resolvers/loop-frt-statement.js +39 -0
  155. package/dist/resolvers/loop-frt-statement.js.map +1 -0
  156. package/dist/resolvers/loop-injection.d.ts +2 -0
  157. package/dist/resolvers/loop-injection.d.ts.map +1 -0
  158. package/dist/resolvers/loop-injection.js +48 -0
  159. package/dist/resolvers/loop-injection.js.map +1 -0
  160. package/dist/resolvers/loop-persona.d.ts +2 -0
  161. package/dist/resolvers/loop-persona.d.ts.map +1 -0
  162. package/dist/resolvers/loop-persona.js +40 -0
  163. package/dist/resolvers/loop-persona.js.map +1 -0
  164. package/dist/resolvers/loop-questions.d.ts +2 -0
  165. package/dist/resolvers/loop-questions.d.ts.map +1 -0
  166. package/dist/resolvers/loop-questions.js +49 -0
  167. package/dist/resolvers/loop-questions.js.map +1 -0
  168. package/dist/resolvers/loop-upstream-udes.d.ts +2 -0
  169. package/dist/resolvers/loop-upstream-udes.d.ts.map +1 -0
  170. package/dist/resolvers/loop-upstream-udes.js +88 -0
  171. package/dist/resolvers/loop-upstream-udes.js.map +1 -0
  172. package/dist/resolvers/reality-metrics.d.ts +2 -0
  173. package/dist/resolvers/reality-metrics.d.ts.map +1 -0
  174. package/dist/resolvers/reality-metrics.js +86 -0
  175. package/dist/resolvers/reality-metrics.js.map +1 -0
  176. package/dist/resolvers/reality-projections.d.ts +2 -0
  177. package/dist/resolvers/reality-projections.d.ts.map +1 -0
  178. package/dist/resolvers/reality-projections.js +44 -0
  179. package/dist/resolvers/reality-projections.js.map +1 -0
  180. package/dist/resolvers/reality-tree-snapshot.d.ts +2 -0
  181. package/dist/resolvers/reality-tree-snapshot.d.ts.map +1 -0
  182. package/dist/resolvers/reality-tree-snapshot.js +45 -0
  183. package/dist/resolvers/reality-tree-snapshot.js.map +1 -0
  184. package/dist/resolvers/retired-injections.d.ts +2 -0
  185. package/dist/resolvers/retired-injections.d.ts.map +1 -0
  186. package/dist/resolvers/retired-injections.js +83 -0
  187. package/dist/resolvers/retired-injections.js.map +1 -0
  188. package/dist/resolvers/review-outcomes.d.ts +2 -0
  189. package/dist/resolvers/review-outcomes.d.ts.map +1 -0
  190. package/dist/resolvers/review-outcomes.js +38 -0
  191. package/dist/resolvers/review-outcomes.js.map +1 -0
  192. package/dist/resolvers/security-advisory.d.ts +2 -0
  193. package/dist/resolvers/security-advisory.d.ts.map +1 -0
  194. package/dist/resolvers/security-advisory.js +97 -0
  195. package/dist/resolvers/security-advisory.js.map +1 -0
  196. package/dist/resolvers/shared/audit.d.ts +19 -0
  197. package/dist/resolvers/shared/audit.d.ts.map +1 -0
  198. package/dist/resolvers/shared/audit.js +28 -0
  199. package/dist/resolvers/shared/audit.js.map +1 -0
  200. package/dist/resolvers/shared/format.d.ts +6 -0
  201. package/dist/resolvers/shared/format.d.ts.map +1 -0
  202. package/dist/resolvers/shared/format.js +17 -0
  203. package/dist/resolvers/shared/format.js.map +1 -0
  204. package/dist/resolvers/shared/git-diff.d.ts +14 -0
  205. package/dist/resolvers/shared/git-diff.d.ts.map +1 -0
  206. package/dist/resolvers/shared/git-diff.js +30 -0
  207. package/dist/resolvers/shared/git-diff.js.map +1 -0
  208. package/dist/resolvers/shared/loop-items.d.ts +30 -0
  209. package/dist/resolvers/shared/loop-items.d.ts.map +1 -0
  210. package/dist/resolvers/shared/loop-items.js +7 -0
  211. package/dist/resolvers/shared/loop-items.js.map +1 -0
  212. package/dist/resolvers/shared/loop.d.ts +48 -0
  213. package/dist/resolvers/shared/loop.d.ts.map +1 -0
  214. package/dist/resolvers/shared/loop.js +38 -0
  215. package/dist/resolvers/shared/loop.js.map +1 -0
  216. package/dist/resolvers/shared/reality-metrics.d.ts +63 -0
  217. package/dist/resolvers/shared/reality-metrics.d.ts.map +1 -0
  218. package/dist/resolvers/shared/reality-metrics.js +6 -0
  219. package/dist/resolvers/shared/reality-metrics.js.map +1 -0
  220. package/dist/resolvers/shared/reality-tree.d.ts +51 -0
  221. package/dist/resolvers/shared/reality-tree.d.ts.map +1 -0
  222. package/dist/resolvers/shared/reality-tree.js +125 -0
  223. package/dist/resolvers/shared/reality-tree.js.map +1 -0
  224. package/dist/resolvers/shared/wiki.d.ts +60 -0
  225. package/dist/resolvers/shared/wiki.d.ts.map +1 -0
  226. package/dist/resolvers/shared/wiki.js +122 -0
  227. package/dist/resolvers/shared/wiki.js.map +1 -0
  228. package/dist/resolvers/wiki-search.d.ts +2 -0
  229. package/dist/resolvers/wiki-search.d.ts.map +1 -0
  230. package/dist/resolvers/wiki-search.js +23 -0
  231. package/dist/resolvers/wiki-search.js.map +1 -0
  232. package/dist/resolvers/wiki-topic.d.ts +2 -0
  233. package/dist/resolvers/wiki-topic.d.ts.map +1 -0
  234. package/dist/resolvers/wiki-topic.js +29 -0
  235. package/dist/resolvers/wiki-topic.js.map +1 -0
  236. package/dist/resolvers/workflow-stages.d.ts +2 -0
  237. package/dist/resolvers/workflow-stages.d.ts.map +1 -0
  238. package/dist/resolvers/workflow-stages.js +26 -0
  239. package/dist/resolvers/workflow-stages.js.map +1 -0
  240. package/dist/session-lifecycle.d.ts +2 -2
  241. package/dist/session-lifecycle.d.ts.map +1 -1
  242. package/dist/session-lifecycle.js +3 -3
  243. package/dist/session-lifecycle.js.map +1 -1
  244. package/dist/{pending-spawn-guard.d.ts → spawner/guards.d.ts} +1 -1
  245. package/dist/spawner/guards.d.ts.map +1 -0
  246. package/dist/{pending-spawn-guard.js → spawner/guards.js} +2 -2
  247. package/dist/spawner/guards.js.map +1 -0
  248. package/dist/{focus-spawn-helpers.d.ts → spawner/helpers.d.ts} +6 -6
  249. package/dist/spawner/helpers.d.ts.map +1 -0
  250. package/dist/{focus-spawn-helpers.js → spawner/helpers.js} +8 -8
  251. package/dist/spawner/helpers.js.map +1 -0
  252. package/dist/spawner/index.d.ts +30 -0
  253. package/dist/spawner/index.d.ts.map +1 -0
  254. package/dist/spawner/index.js +32 -0
  255. package/dist/spawner/index.js.map +1 -0
  256. package/dist/{spawner-lifecycle.d.ts → spawner/lifecycle.d.ts} +3 -3
  257. package/dist/spawner/lifecycle.d.ts.map +1 -0
  258. package/dist/{spawner-lifecycle.js → spawner/lifecycle.js} +6 -6
  259. package/dist/spawner/lifecycle.js.map +1 -0
  260. package/dist/{spawner-liveness.d.ts → spawner/liveness.d.ts} +2 -2
  261. package/dist/spawner/liveness.d.ts.map +1 -0
  262. package/dist/{spawner-liveness.js → spawner/liveness.js} +4 -4
  263. package/dist/spawner/liveness.js.map +1 -0
  264. package/dist/{spawner-resolution.d.ts → spawner/resolution.d.ts} +2 -2
  265. package/dist/spawner/resolution.d.ts.map +1 -0
  266. package/dist/{spawner-resolution.js → spawner/resolution.js} +2 -2
  267. package/dist/spawner/resolution.js.map +1 -0
  268. package/dist/{team-spawner.d.ts → spawner/spawn-team.d.ts} +4 -4
  269. package/dist/spawner/spawn-team.d.ts.map +1 -0
  270. package/dist/{team-spawner.js → spawner/spawn-team.js} +24 -18
  271. package/dist/spawner/spawn-team.js.map +1 -0
  272. package/dist/{spawner.d.ts → spawner/state.d.ts} +8 -8
  273. package/dist/spawner/state.d.ts.map +1 -0
  274. package/dist/{spawner.js → spawner/state.js} +8 -8
  275. package/dist/spawner/state.js.map +1 -0
  276. package/dist/{spawner-stream-handlers.d.ts → spawner/stream-handlers.d.ts} +4 -4
  277. package/dist/spawner/stream-handlers.d.ts.map +1 -0
  278. package/dist/{spawner-stream-handlers.js → spawner/stream-handlers.js} +7 -7
  279. package/dist/spawner/stream-handlers.js.map +1 -0
  280. package/dist/{spawner-timeout.d.ts → spawner/timeout.d.ts} +2 -2
  281. package/dist/spawner/timeout.d.ts.map +1 -0
  282. package/dist/{spawner-timeout.js → spawner/timeout.js} +1 -1
  283. package/dist/spawner/timeout.js.map +1 -0
  284. package/dist/team-prompt-base.d.ts.map +1 -1
  285. package/dist/team-prompt-base.js +4 -27
  286. package/dist/team-prompt-base.js.map +1 -1
  287. package/dist/telemetry-writer.d.ts +20 -1
  288. package/dist/telemetry-writer.d.ts.map +1 -1
  289. package/dist/telemetry-writer.js +121 -7
  290. package/dist/telemetry-writer.js.map +1 -1
  291. package/dist/trigger-executor.d.ts.map +1 -1
  292. package/dist/trigger-executor.js +6 -0
  293. package/dist/trigger-executor.js.map +1 -1
  294. package/dist/types/focus.d.ts +1 -1
  295. package/dist/types/focus.d.ts.map +1 -1
  296. package/dist/unified-shell.d.ts.map +1 -1
  297. package/dist/unified-shell.js +8 -0
  298. package/dist/unified-shell.js.map +1 -1
  299. package/package.json +1 -1
  300. package/dist/completion-detector.d.ts.map +0 -1
  301. package/dist/completion-detector.js.map +0 -1
  302. package/dist/completion-handler.d.ts.map +0 -1
  303. package/dist/completion-handler.js.map +0 -1
  304. package/dist/focus-completion-event.d.ts.map +0 -1
  305. package/dist/focus-completion-event.js.map +0 -1
  306. package/dist/focus-completion.d.ts.map +0 -1
  307. package/dist/focus-completion.js.map +0 -1
  308. package/dist/focus-spawn-helpers.d.ts.map +0 -1
  309. package/dist/focus-spawn-helpers.js.map +0 -1
  310. package/dist/focus-team-lifecycle.d.ts.map +0 -1
  311. package/dist/focus-team-lifecycle.js.map +0 -1
  312. package/dist/pending-spawn-guard.d.ts.map +0 -1
  313. package/dist/pending-spawn-guard.js.map +0 -1
  314. package/dist/prompt-builder.d.ts +0 -14
  315. package/dist/prompt-builder.d.ts.map +0 -1
  316. package/dist/prompt-builder.js +0 -174
  317. package/dist/prompt-builder.js.map +0 -1
  318. package/dist/spawner-lifecycle.d.ts.map +0 -1
  319. package/dist/spawner-lifecycle.js.map +0 -1
  320. package/dist/spawner-liveness.d.ts.map +0 -1
  321. package/dist/spawner-liveness.js.map +0 -1
  322. package/dist/spawner-resolution.d.ts.map +0 -1
  323. package/dist/spawner-resolution.js.map +0 -1
  324. package/dist/spawner-stream-handlers.d.ts.map +0 -1
  325. package/dist/spawner-stream-handlers.js.map +0 -1
  326. package/dist/spawner-timeout.d.ts.map +0 -1
  327. package/dist/spawner-timeout.js.map +0 -1
  328. package/dist/spawner.d.ts.map +0 -1
  329. package/dist/spawner.js.map +0 -1
  330. package/dist/team-spawner.d.ts.map +0 -1
  331. package/dist/team-spawner.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delivery-issues.d.ts","sourceRoot":"","sources":["../../src/resolvers/delivery-issues.ts"],"names":[],"mappings":""}
@@ -0,0 +1,58 @@
1
+ import { registerSourceResolver } from '../assembly-engine.js';
2
+ import { getFocusIssues } from '../queries/focuses.js';
3
+ import { statusCheckbox } from './shared/format.js';
4
+ /**
5
+ * delivery.issues
6
+ *
7
+ * Fetches all issues across deliveries and formats as a checklist.
8
+ * Optional param: status (filter by issue status, e.g. "done").
9
+ */
10
+ registerSourceResolver('delivery.issues', async (context, params) => {
11
+ const issues = await getFocusIssues(context.focusId);
12
+ if (issues.length === 0)
13
+ return '';
14
+ const statusFilter = params.status?.toLowerCase();
15
+ // When filtering by 'done', also include 'Verified' issues — they are
16
+ // semantically closed (confirmed-addressed by a review agent) and should
17
+ // appear in review-context done-lists so the agent knows they were handled.
18
+ const filtered = statusFilter
19
+ ? issues.filter((i) => {
20
+ const s = i.status.toLowerCase();
21
+ return s === statusFilter || (statusFilter === 'done' && s === 'verified');
22
+ })
23
+ : issues;
24
+ if (filtered.length === 0)
25
+ return '';
26
+ // Group issues by delivery
27
+ const byDelivery = {};
28
+ for (const issue of filtered) {
29
+ const group = byDelivery[issue.deliveryId] ?? [];
30
+ group.push(issue);
31
+ byDelivery[issue.deliveryId] = group;
32
+ }
33
+ const sections = [];
34
+ for (const deliveryId of Object.keys(byDelivery)) {
35
+ const deliveryIssues = byDelivery[deliveryId];
36
+ const lines = deliveryIssues.map((i) => {
37
+ const check = statusCheckbox(i.status);
38
+ const typeTag = i.issueType !== 'task' ? ` [${i.issueType}]` : '';
39
+ return `- ${check} ${i.title}${typeTag} (${i.status})`;
40
+ });
41
+ sections.push(`### Delivery ${deliveryId.slice(0, 8)}\n\n${lines.join('\n')}`);
42
+ }
43
+ const header = statusFilter
44
+ ? `## Issues (${statusFilter})`
45
+ : '## Issues';
46
+ const hasVerified = filtered.some((i) => i.status.toLowerCase() === 'verified');
47
+ const hasInReview = filtered.some((i) => i.status.toLowerCase() === 'in review');
48
+ const legendLines = [];
49
+ if (hasVerified)
50
+ legendLines.push('`[v]` = Verified — confirmed-addressed in a prior review pass. Skip on re-review.');
51
+ if (hasInReview)
52
+ legendLines.push('`[?]` = In Review — dev-complete, awaiting review-agent confirmation. **This is the review agent\'s working set.**');
53
+ const legend = legendLines.length > 0
54
+ ? '\n\n' + legendLines.map(l => `> ${l}`).join('\n>\n> ')
55
+ : '';
56
+ return `${header}${legend}\n\n${sections.join('\n\n')}`;
57
+ });
58
+ //# sourceMappingURL=delivery-issues.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delivery-issues.js","sourceRoot":"","sources":["../../src/resolvers/delivery-issues.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=delivery-listing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delivery-listing.d.ts","sourceRoot":"","sources":["../../src/resolvers/delivery-listing.ts"],"names":[],"mappings":""}
@@ -0,0 +1,54 @@
1
+ import { registerSourceResolver } from '../assembly-engine.js';
2
+ import { getFocusDeliveries, getFocusIssues } from '../queries/focuses.js';
3
+ import { buildDeliveryListingSection } from '../team-prompt-base.js';
4
+ import { getAuditCycleLowerBound } from './shared/audit.js';
5
+ /**
6
+ * delivery.listing
7
+ *
8
+ * Fetches deliveries and issues for the focus and formats as a
9
+ * detailed listing using the same format as the team prompt builder.
10
+ *
11
+ * Optional param: scope
12
+ * - "team" (default): queued + coding deliveries only (building phase)
13
+ * - "all": all deliveries with status
14
+ * - "verify": only verify deliveries (review phase)
15
+ * - "done_since_last_audit": deliveries with executionStatus=done whose
16
+ * updatedAt is at or after the previous audit cycle's completed_at.
17
+ * When no prior audit exists, returns all done deliveries.
18
+ */
19
+ registerSourceResolver('delivery.listing', async (context, params) => {
20
+ const deliveries = await getFocusDeliveries(context.focusId);
21
+ if (deliveries.length === 0)
22
+ return '';
23
+ const issues = await getFocusIssues(context.focusId);
24
+ const scope = params.scope ?? 'team';
25
+ if (scope === 'verify') {
26
+ // Filter to only verify deliveries for review context
27
+ const verifyDeliveries = deliveries.filter(d => d.executionStatus === 'verify');
28
+ if (verifyDeliveries.length === 0)
29
+ return '';
30
+ const lines = buildDeliveryListingSection(verifyDeliveries, issues);
31
+ return lines.join('\n');
32
+ }
33
+ if (scope === 'done_since_last_audit') {
34
+ const since = await getAuditCycleLowerBound(context.focusId);
35
+ const doneDeliveries = deliveries.filter(d => {
36
+ if (d.executionStatus !== 'done')
37
+ return false;
38
+ if (!since)
39
+ return true;
40
+ // updatedAt is the closest proxy for "moved to done at" -- when the
41
+ // daemon advances a delivery to done, that bumps updated_at. Missing
42
+ // timestamps are included so we don't silently drop a real completion.
43
+ return !d.updatedAt || d.updatedAt >= since;
44
+ });
45
+ if (doneDeliveries.length === 0)
46
+ return '';
47
+ const lines = buildDeliveryListingSection(doneDeliveries, issues);
48
+ return lines.join('\n');
49
+ }
50
+ // Default: use buildDeliveryListingSection which partitions into team/other
51
+ const lines = buildDeliveryListingSection(deliveries, issues);
52
+ return lines.join('\n');
53
+ });
54
+ //# sourceMappingURL=delivery-listing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delivery-listing.js","sourceRoot":"","sources":["../../src/resolvers/delivery-listing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE5D;;;;;;;;;;;;;GAaG;AACH,sBAAsB,CAAC,kBAAkB,EAAE,KAAK,EAAE,OAAwB,EAAE,MAA8B,EAAmB,EAAE;IAC7H,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7D,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEvC,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC;IAErC,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvB,sDAAsD;QACtD,MAAM,gBAAgB,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,KAAK,QAAQ,CAAC,CAAC;QAChF,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAC7C,MAAM,KAAK,GAAG,2BAA2B,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;QACpE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI,KAAK,KAAK,uBAAuB,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,MAAM,uBAAuB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC7D,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;YAC3C,IAAI,CAAC,CAAC,eAAe,KAAK,MAAM;gBAAE,OAAO,KAAK,CAAC;YAC/C,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC;YACxB,oEAAoE;YACpE,qEAAqE;YACrE,uEAAuE;YACvE,OAAO,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,IAAI,KAAK,CAAC;QAC9C,CAAC,CAAC,CAAC;QACH,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,2BAA2B,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;QAClE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,4EAA4E;IAC5E,MAAM,KAAK,GAAG,2BAA2B,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC9D,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=delivery-tech-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delivery-tech-context.d.ts","sourceRoot":"","sources":["../../src/resolvers/delivery-tech-context.ts"],"names":[],"mappings":""}
@@ -0,0 +1,19 @@
1
+ import { registerSourceResolver } from '../assembly-engine.js';
2
+ import { getFocusDeliveries } from '../queries/focuses.js';
3
+ /**
4
+ * delivery.tech_context
5
+ *
6
+ * Concatenates the techContext field of every delivery in the focus.
7
+ */
8
+ registerSourceResolver('delivery.tech_context', async (context) => {
9
+ const deliveries = await getFocusDeliveries(context.focusId);
10
+ if (deliveries.length === 0)
11
+ return '';
12
+ const sections = deliveries
13
+ .filter((d) => d.techContext)
14
+ .map((d) => `### ${d.name}\n\n${d.techContext}`);
15
+ if (sections.length === 0)
16
+ return '';
17
+ return `## Technical Context\n\n${sections.join('\n\n')}`;
18
+ });
19
+ //# sourceMappingURL=delivery-tech-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delivery-tech-context.js","sourceRoot":"","sources":["../../src/resolvers/delivery-tech-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAG3D;;;;GAIG;AACH,sBAAsB,CAAC,uBAAuB,EAAE,KAAK,EAAE,OAAwB,EAAmB,EAAE;IAClG,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7D,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEvC,MAAM,QAAQ,GAAG,UAAU;SACxB,MAAM,CAAC,CAAC,CAAoB,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;SAC/C,GAAG,CAAC,CAAC,CAAoB,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAEtE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,OAAO,2BAA2B,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;AAC5D,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=deployment-profile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployment-profile.d.ts","sourceRoot":"","sources":["../../src/resolvers/deployment-profile.ts"],"names":[],"mappings":""}
@@ -0,0 +1,28 @@
1
+ import { registerSourceResolver } from '../assembly-engine.js';
2
+ import { getProductDeploymentProfileSnapshot } from '../queries/focuses.js';
3
+ /**
4
+ * deployment.profile
5
+ *
6
+ * Fetches the deployment profile snapshot for the product and formats
7
+ * the inception prompt and guidelines as markdown.
8
+ */
9
+ registerSourceResolver('deployment.profile', async (context) => {
10
+ try {
11
+ const snapshot = await getProductDeploymentProfileSnapshot(context.productId);
12
+ if (!snapshot)
13
+ return '';
14
+ const parts = [];
15
+ if (snapshot.inceptionPrompt) {
16
+ parts.push(`## Deployment Profile: Operational Context\n\n${snapshot.inceptionPrompt}`);
17
+ }
18
+ if (snapshot.guidelines) {
19
+ parts.push(`## Deployment Constraints\n\n${snapshot.guidelines}`);
20
+ }
21
+ return parts.join('\n\n');
22
+ }
23
+ catch (err) {
24
+ console.warn(`[assembly-engine] deployment.profile: failed: ${err.message}`);
25
+ return '';
26
+ }
27
+ });
28
+ //# sourceMappingURL=deployment-profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployment-profile.js","sourceRoot":"","sources":["../../src/resolvers/deployment-profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,OAAO,EAAE,mCAAmC,EAAE,MAAM,uBAAuB,CAAC;AAE5E;;;;;GAKG;AACH,sBAAsB,CAAC,oBAAoB,EAAE,KAAK,EAAE,OAAwB,EAAmB,EAAE;IAC/F,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,mCAAmC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC9E,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,CAAC;QAEzB,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,IAAI,QAAQ,CAAC,eAAe,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,iDAAiD,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC;QAC1F,CAAC;QACD,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,gCAAgC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QACpE,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,iDAAkD,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACxF,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=focus-anchoring-injections.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"focus-anchoring-injections.d.ts","sourceRoot":"","sources":["../../src/resolvers/focus-anchoring-injections.ts"],"names":[],"mappings":""}
@@ -0,0 +1,123 @@
1
+ import { registerSourceResolver } from '../assembly-engine.js';
2
+ import { getFocusDeliveries } from '../queries/focuses.js';
3
+ import { callApi } from '../queries/shared.js';
4
+ import { fetchInjectionBundles } from './shared/loop.js';
5
+ /**
6
+ * focus.anchoring_injections
7
+ *
8
+ * Per-delivery report of every injection anchored to a delivery in the
9
+ * focus. Used by the close_loop stage assembly so the bookkeeper team
10
+ * lead can sweep each injection on its own merits:
11
+ *
12
+ * - the delivery the injection is anchored to (name + id)
13
+ * - the injection statement, lifecycle status, and seq number
14
+ * - the UDE(s) the injection targets (via `targets` edges)
15
+ * - the FRT overlay statement on each UDE (what it becomes once verified)
16
+ * - the FRT overlay node type (e.g., UDE -> DE flip)
17
+ * - "expected reality change" -- diff between current statement and FRT
18
+ * overlay statement, surfaced per target so the agent can check whether
19
+ * the worktree evidence supports the flip
20
+ *
21
+ * Query path:
22
+ * org_nodes (type=delivery, focus_id=X) -> injection_id ->
23
+ * reality_tree_nodes (injection) -> reality_tree_edges (targets) ->
24
+ * reality_tree_nodes (UDE / target)
25
+ *
26
+ * Returns empty string when the focus has no deliveries with injection
27
+ * anchors. Fails soft on API errors.
28
+ */
29
+ registerSourceResolver('focus.anchoring_injections', async (context) => {
30
+ try {
31
+ const deliveries = await getFocusDeliveries(context.focusId);
32
+ const anchored = deliveries.filter((d) => typeof d.injectionId === 'string' && d.injectionId.length > 0);
33
+ if (anchored.length === 0)
34
+ return '';
35
+ const injectionIds = anchored.map((d) => d.injectionId);
36
+ const bundles = await fetchInjectionBundles(injectionIds);
37
+ if (bundles.size === 0)
38
+ return '';
39
+ // Cache nodes+edges per tree so we don't fetch them once per delivery
40
+ // when multiple injections share a tree.
41
+ const treeNodesCache = new Map();
42
+ const treeEdgesCache = new Map();
43
+ async function loadTree(treeId) {
44
+ let nodes = treeNodesCache.get(treeId);
45
+ let edges = treeEdgesCache.get(treeId);
46
+ if (!nodes || !edges) {
47
+ const [nodesResp, edgesResp] = await Promise.all([
48
+ callApi('reality_tree_node_list', { treeId, status: 'active' }),
49
+ callApi('reality_tree_edge_list', { treeId }),
50
+ ]);
51
+ nodes = nodesResp.items ?? [];
52
+ edges = edgesResp.items ?? [];
53
+ treeNodesCache.set(treeId, nodes);
54
+ treeEdgesCache.set(treeId, edges);
55
+ }
56
+ return { nodes, edges };
57
+ }
58
+ const sections = [];
59
+ for (const delivery of anchored) {
60
+ const injectionId = delivery.injectionId;
61
+ const bundle = bundles.get(injectionId);
62
+ if (!bundle)
63
+ continue;
64
+ const inj = bundle.injection;
65
+ const treeId = inj.realityTreeId;
66
+ const { nodes, edges } = await loadTree(treeId);
67
+ const nodeById = new Map();
68
+ for (const n of nodes)
69
+ nodeById.set(n.id, n);
70
+ const statusTag = inj.injectionStatus ? ` [${inj.injectionStatus}]` : '';
71
+ const lines = [
72
+ `### ${delivery.name}`,
73
+ '',
74
+ `- **Anchored delivery:** ${delivery.name} (\`${delivery.id}\`)`,
75
+ `- **Injection:** #${inj.seq} ${inj.statement}${statusTag}`,
76
+ `- **Tree:** ${bundle.treeName}`,
77
+ ];
78
+ if (inj.dissolvesObstacle) {
79
+ lines.push(`- **Dissolves obstacle:** ${inj.dissolvesObstacle}`);
80
+ }
81
+ // Walk targets edges from this injection -> target UDE/entity nodes.
82
+ const targetIds = edges
83
+ .filter((e) => e.edgeType === 'targets' && e.fromNodeId === injectionId)
84
+ .map((e) => e.toNodeId);
85
+ if (targetIds.length === 0) {
86
+ lines.push('', '_No target UDEs declared. Injection has no `targets` edges._');
87
+ }
88
+ else {
89
+ lines.push('', '**Target UDEs and expected reality change:**');
90
+ for (const targetId of targetIds) {
91
+ const target = nodeById.get(targetId);
92
+ if (!target)
93
+ continue;
94
+ const currentType = target.nodeType;
95
+ const frtStatement = target.frtStatement?.trim() ?? '';
96
+ const frtType = target.frtNodeType?.trim() ?? '';
97
+ const targetHeader = `- **#${target.seq} Target UDE (${currentType}):** ${target.statement}`;
98
+ lines.push(targetHeader);
99
+ if (frtStatement.length > 0) {
100
+ const overlayType = frtType.length > 0 ? frtType : currentType;
101
+ lines.push(` - **FRT overlay (${overlayType}):** ${frtStatement}`);
102
+ lines.push(` - **Expected reality change:** "${target.statement}" -> "${frtStatement}"`);
103
+ }
104
+ else if (frtType.length > 0) {
105
+ lines.push(` - **FRT overlay (${frtType}):** _(type flip only, no statement rewrite)_`);
106
+ }
107
+ else {
108
+ lines.push(' - _No FRT overlay set on this target._');
109
+ }
110
+ }
111
+ }
112
+ sections.push(lines.join('\n'));
113
+ }
114
+ if (sections.length === 0)
115
+ return '';
116
+ return `## Anchoring Injections (close-loop sweep)\n\n${sections.join('\n\n')}`;
117
+ }
118
+ catch (err) {
119
+ console.warn(`[assembly-engine] focus.anchoring_injections: failed: ${err.message}`);
120
+ return '';
121
+ }
122
+ });
123
+ //# sourceMappingURL=focus-anchoring-injections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"focus-anchoring-injections.js","sourceRoot":"","sources":["../../src/resolvers/focus-anchoring-injections.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=focus-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"focus-context.d.ts","sourceRoot":"","sources":["../../src/resolvers/focus-context.ts"],"names":[],"mappings":""}
@@ -0,0 +1,47 @@
1
+ import { registerSourceResolver } from '../assembly-engine.js';
2
+ import { getFocusDeliveries } from '../queries/focuses.js';
3
+ import { searchWiki, fetchAncestorsForHits, fetchPageBodies, renderWikiSection, WIKI_RETRIEVAL_BUDGET_CHARS, } from './shared/wiki.js';
4
+ /**
5
+ * focus.context
6
+ *
7
+ * Pulls wiki pages relevant to the focus via wiki_search. Queries are
8
+ * derived from the focus name + the first sentence of its description;
9
+ * deliveries below the focus contribute additional queries when present.
10
+ */
11
+ registerSourceResolver('focus.context', async (context) => {
12
+ const deliveries = await getFocusDeliveries(context.focusId);
13
+ const queries = [];
14
+ const seen = new Set();
15
+ const addQuery = (q) => {
16
+ const trimmed = (q ?? '').trim();
17
+ if (!trimmed || seen.has(trimmed))
18
+ return;
19
+ seen.add(trimmed);
20
+ queries.push(trimmed);
21
+ };
22
+ // Use the first delivery's name+description plus subsequent delivery
23
+ // names to seed the search. This keeps queries focused on the work in
24
+ // flight rather than dumping every delivery description.
25
+ for (const d of deliveries) {
26
+ addQuery(d.name);
27
+ }
28
+ if (queries.length === 0) {
29
+ addQuery(''); // recently-edited fallback
30
+ }
31
+ const aggregated = new Map();
32
+ for (const q of queries.slice(0, 4)) {
33
+ const hits = await searchWiki(context.productId, q, 4);
34
+ for (const hit of hits) {
35
+ const existing = aggregated.get(hit.id);
36
+ if (!existing || hit.rank > existing.rank)
37
+ aggregated.set(hit.id, hit);
38
+ }
39
+ }
40
+ const sorted = Array.from(aggregated.values()).sort((a, b) => b.rank - a.rank).slice(0, 8);
41
+ const [bodies, ancestors] = await Promise.all([
42
+ fetchPageBodies(context.productId, sorted.map((h) => h.id)),
43
+ fetchAncestorsForHits(context.productId, sorted.map((h) => h.id)),
44
+ ]);
45
+ return renderWikiSection('Wiki', sorted, bodies, WIKI_RETRIEVAL_BUDGET_CHARS, ancestors);
46
+ });
47
+ //# sourceMappingURL=focus-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"focus-context.js","sourceRoot":"","sources":["../../src/resolvers/focus-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EACL,UAAU,EACV,qBAAqB,EACrB,eAAe,EACf,iBAAiB,EACjB,2BAA2B,GAE5B,MAAM,kBAAkB,CAAC;AAE1B;;;;;;GAMG;AACH,sBAAsB,CAAC,eAAe,EAAE,KAAK,EAAE,OAAwB,EAAmB,EAAE;IAC1F,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAE7D,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,QAAQ,GAAG,CAAC,CAA4B,EAAE,EAAE;QAChD,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACjC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,OAAO;QAC1C,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC,CAAC;IAEF,qEAAqE;IACrE,sEAAsE;IACtE,yDAAyD;IACzD,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,2BAA2B;IAC3C,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,GAAG,EAAyB,CAAC;IACpD,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACvD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACxC,IAAI,CAAC,QAAQ,IAAI,GAAG,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI;gBAAE,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3F,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC5C,eAAe,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC3D,qBAAqB,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;KAClE,CAAC,CAAC;IACH,OAAO,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,2BAA2B,EAAE,SAAS,CAAC,CAAC;AAC3F,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=focus-injections.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"focus-injections.d.ts","sourceRoot":"","sources":["../../src/resolvers/focus-injections.ts"],"names":[],"mappings":""}
@@ -0,0 +1,75 @@
1
+ import { registerSourceResolver } from '../assembly-engine.js';
2
+ import { callApi } from '../queries/shared.js';
3
+ /**
4
+ * focus.injections
5
+ *
6
+ * Renders the focus's reality-tree structure as the LEAD COORDINATION MAP --
7
+ * the lead's planning surface. It is structure, not per-delivery detail: for
8
+ * the whole focus it shows, per injection, a one-line Now->Target (the current
9
+ * UDE and the desired effect it becomes); the dependency order to sequence
10
+ * deliveries; shared-target collisions to avoid two workers changing the same
11
+ * node; and the root-cause clusters. Per-delivery full differentials are pulled
12
+ * on demand via telora_reality_tree_injection_context(seq).
13
+ */
14
+ registerSourceResolver('focus.injections', async (context) => {
15
+ try {
16
+ const result = await callApi('reality_tree_focus_injections', {
17
+ focusId: context.focusId,
18
+ });
19
+ if (!result.items || result.items.length === 0)
20
+ return '';
21
+ const structure = result.structure ?? {
22
+ dependencyOrder: [],
23
+ sharedTargetCollisions: [],
24
+ rootCauseClusters: [],
25
+ };
26
+ const lines = [
27
+ '## Focus Coordination Map',
28
+ '',
29
+ 'The focus reality-tree structure -- your planning surface. Each injection moves a',
30
+ 'Now (a current UDE) to a Target (its future desired effect). Use the dependency',
31
+ 'order to sequence deliveries, the collisions to avoid two workers changing the same',
32
+ 'node, and the clusters to see which root causes drive which problems. Pull a',
33
+ "delivery's full differential on demand with telora_reality_tree_injection_context",
34
+ '(by injection seq).',
35
+ '',
36
+ '### Injections (Now -> Target)',
37
+ '',
38
+ ];
39
+ for (const item of result.items) {
40
+ const inj = item.injection;
41
+ const statusTag = inj.injectionStatus ? ` [${inj.injectionStatus}]` : '';
42
+ lines.push(`- #${inj.seq} ${inj.statement}${statusTag}`);
43
+ for (const nt of item.nowTargets ?? []) {
44
+ const target = nt.target && nt.target.trim().length > 0 ? nt.target : '(no FRT overlay yet)';
45
+ lines.push(` - Now: #${nt.seq} ${nt.now} -> Target: ${target}`);
46
+ }
47
+ }
48
+ if (structure.dependencyOrder.length > 0) {
49
+ lines.push('', '### Dependency Order (sequence deliveries this way)', '');
50
+ structure.dependencyOrder.forEach((d, i) => {
51
+ lines.push(`${i + 1}. #${d.seq} ${d.statement}`);
52
+ });
53
+ }
54
+ if (structure.sharedTargetCollisions.length > 0) {
55
+ lines.push('', '### Shared-Target Collisions (avoid two workers changing the same node)', '');
56
+ for (const c of structure.sharedTargetCollisions) {
57
+ const injList = c.injectionSeqs.map((s) => `#${s}`).join(', ');
58
+ lines.push(`- #${c.targetSeq} "${c.targetStatement}" <- injections ${injList}`);
59
+ }
60
+ }
61
+ if (structure.rootCauseClusters.length > 0) {
62
+ lines.push('', '### Root-Cause Clusters (which roots drive which UDEs)', '');
63
+ for (const cl of structure.rootCauseClusters) {
64
+ const udeList = cl.udeSeqs.map((s) => `#${s}`).join(', ');
65
+ lines.push(`- #${cl.rootSeq} ${cl.rootStatement} (${cl.rootNodeType}) drives UDEs: ${udeList}`);
66
+ }
67
+ }
68
+ return lines.join('\n');
69
+ }
70
+ catch (err) {
71
+ console.warn(`[assembly-engine] focus.injections: failed: ${err.message}`);
72
+ return '';
73
+ }
74
+ });
75
+ //# sourceMappingURL=focus-injections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"focus-injections.js","sourceRoot":"","sources":["../../src/resolvers/focus-injections.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=focus-last-review-report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"focus-last-review-report.d.ts","sourceRoot":"","sources":["../../src/resolvers/focus-last-review-report.ts"],"names":[],"mappings":""}
@@ -0,0 +1,46 @@
1
+ import { registerSourceResolver } from '../assembly-engine.js';
2
+ import { getLatestCompletedFocusReview } from '../queries/focuses.js';
3
+ /**
4
+ * focus.last_review_report
5
+ *
6
+ * Read the most recent completed review report for the focus and render it
7
+ * as a markdown section. Returns an empty string when no completed report
8
+ * exists yet.
9
+ *
10
+ * The dev-stage assembly directive (see migration
11
+ * 20260512_*_add_last_review_report_to_dev_stage_assembly.sql) inserts this
12
+ * resolver immediately after focus.context so remediation work is informed
13
+ * by the reviewer's narrative, not just by individual issue descriptions.
14
+ */
15
+ const FOCUS_LAST_REVIEW_REPORT_BUDGET_CHARS = 10_000;
16
+ registerSourceResolver('focus.last_review_report', async (context) => {
17
+ let review;
18
+ try {
19
+ review = await getLatestCompletedFocusReview(context.focusId);
20
+ }
21
+ catch (err) {
22
+ console.warn(`[assembly-engine] focus.last_review_report failed: ${err.message}`);
23
+ return '';
24
+ }
25
+ if (!review || !review.completedAt)
26
+ return '';
27
+ const heading = '## Last Review Report';
28
+ const outcomeLine = `**Outcome:** ${review.outcome ?? 'unknown'}`;
29
+ const completedLine = `**Completed:** ${review.completedAt}`;
30
+ const fixedPrefix = `${heading}\n\n${outcomeLine}\n${completedLine}\n\n`;
31
+ const summary = (review.summary ?? '').trim();
32
+ if (!summary) {
33
+ return `${fixedPrefix}_No summary provided._`;
34
+ }
35
+ const remaining = FOCUS_LAST_REVIEW_REPORT_BUDGET_CHARS - fixedPrefix.length;
36
+ if (remaining <= 0) {
37
+ // Prefix alone exceeds the budget (unlikely with a fixed-size heading +
38
+ // outcome + ISO timestamp). Drop the summary to stay under the cap.
39
+ return fixedPrefix.trimEnd();
40
+ }
41
+ const body = summary.length > remaining
42
+ ? `${summary.slice(0, remaining)}\n\n_[truncated]_`
43
+ : summary;
44
+ return `${fixedPrefix}${body}`;
45
+ });
46
+ //# sourceMappingURL=focus-last-review-report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"focus-last-review-report.js","sourceRoot":"","sources":["../../src/resolvers/focus-last-review-report.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,OAAO,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AAEtE;;;;;;;;;;;GAWG;AACH,MAAM,qCAAqC,GAAG,MAAM,CAAC;AAErD,sBAAsB,CAAC,0BAA0B,EAAE,KAAK,EAAE,OAAwB,EAAmB,EAAE;IACrG,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,6BAA6B,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAChE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,sDAAuD,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7F,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW;QAAE,OAAO,EAAE,CAAC;IAE9C,MAAM,OAAO,GAAG,uBAAuB,CAAC;IACxC,MAAM,WAAW,GAAG,gBAAgB,MAAM,CAAC,OAAO,IAAI,SAAS,EAAE,CAAC;IAClE,MAAM,aAAa,GAAG,kBAAkB,MAAM,CAAC,WAAW,EAAE,CAAC;IAC7D,MAAM,WAAW,GAAG,GAAG,OAAO,OAAO,WAAW,KAAK,aAAa,MAAM,CAAC;IAEzE,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,GAAG,WAAW,wBAAwB,CAAC;IAChD,CAAC;IAED,MAAM,SAAS,GAAG,qCAAqC,GAAG,WAAW,CAAC,MAAM,CAAC;IAC7E,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QACnB,wEAAwE;QACxE,oEAAoE;QACpE,OAAO,WAAW,CAAC,OAAO,EAAE,CAAC;IAC/B,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS;QACrC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,mBAAmB;QACnD,CAAC,CAAC,OAAO,CAAC;IACZ,OAAO,GAAG,WAAW,GAAG,IAAI,EAAE,CAAC;AACjC,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=focus-reality-tree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"focus-reality-tree.d.ts","sourceRoot":"","sources":["../../src/resolvers/focus-reality-tree.ts"],"names":[],"mappings":""}
@@ -0,0 +1,50 @@
1
+ import { registerSourceResolver } from '../assembly-engine.js';
2
+ import { callApi } from '../queries/shared.js';
3
+ import { CRT_DUMP_BUDGET_CHARS, FOCUS_REALITY_TREE_EMPTY_STATE, renderRealityTreeDump, } from './shared/reality-tree.js';
4
+ /**
5
+ * focus.reality_tree
6
+ *
7
+ * Renders the focus's reality tree(s) as markdown for static-inspection
8
+ * agents (ai_inspection verification, drift detectors). Groups nodes by
9
+ * type, lists causal edges, surfaces injection lifecycle status. Token
10
+ * budget ~10k chars; truncates with a marker if exceeded.
11
+ *
12
+ * This is the CRT dump the ai_inspection runner consumes alongside the
13
+ * injection's frt_statement and the delivery diff. It is intentionally
14
+ * verbose so the runner can reason about which CRT statements are at
15
+ * stake without re-querying.
16
+ */
17
+ registerSourceResolver('focus.reality_tree', async (context) => {
18
+ try {
19
+ const treesResp = await callApi('reality_tree_list', {
20
+ focusId: context.focusId,
21
+ });
22
+ const trees = (treesResp.items ?? []).filter((t) => t.status === 'active');
23
+ if (trees.length === 0)
24
+ return FOCUS_REALITY_TREE_EMPTY_STATE;
25
+ const sections = [];
26
+ let used = 0;
27
+ for (const tree of trees) {
28
+ if (used >= CRT_DUMP_BUDGET_CHARS)
29
+ break;
30
+ const remaining = CRT_DUMP_BUDGET_CHARS - used;
31
+ const [nodesResp, edgesResp] = await Promise.all([
32
+ callApi('reality_tree_node_list', { treeId: tree.id, status: 'active' }),
33
+ callApi('reality_tree_edge_list', { treeId: tree.id }),
34
+ ]);
35
+ const dump = renderRealityTreeDump(tree, nodesResp.items ?? [], edgesResp.items ?? [], remaining);
36
+ if (dump.length === 0)
37
+ continue;
38
+ sections.push(dump);
39
+ used += dump.length;
40
+ }
41
+ if (sections.length === 0)
42
+ return FOCUS_REALITY_TREE_EMPTY_STATE;
43
+ return `## Focus Reality Tree (CRT + FRT overlays)\n\n${sections.join('\n\n')}`;
44
+ }
45
+ catch (err) {
46
+ console.warn(`[assembly-engine] focus.reality_tree: failed: ${err.message}`);
47
+ return '';
48
+ }
49
+ });
50
+ //# sourceMappingURL=focus-reality-tree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"focus-reality-tree.js","sourceRoot":"","sources":["../../src/resolvers/focus-reality-tree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EACL,qBAAqB,EACrB,8BAA8B,EAC9B,qBAAqB,GAItB,MAAM,0BAA0B,CAAC;AAElC;;;;;;;;;;;;GAYG;AACH,sBAAsB,CAAC,oBAAoB,EAAE,KAAK,EAAE,OAAwB,EAAmB,EAAE;IAC/F,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,OAAO,CAA0B,mBAAmB,EAAE;YAC5E,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;QAC3E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,8BAA8B,CAAC;QAE9D,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,IAAI,qBAAqB;gBAAE,MAAM;YACzC,MAAM,SAAS,GAAG,qBAAqB,GAAG,IAAI,CAAC;YAC/C,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAC/C,OAAO,CAAmB,wBAAwB,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;gBAC1F,OAAO,CAAmB,wBAAwB,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;aACzE,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,qBAAqB,CAChC,IAAI,EACJ,SAAS,CAAC,KAAK,IAAI,EAAE,EACrB,SAAS,CAAC,KAAK,IAAI,EAAE,EACrB,SAAS,CACV,CAAC;YACF,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAChC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpB,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC;QACtB,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,8BAA8B,CAAC;QACjE,OAAO,iDAAiD,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;IAClF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,iDAAkD,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACxF,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC,CAAC,CAAC"}