envseed 0.3.0 → 0.3.1

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 (323) hide show
  1. package/lib/hook-handler.mjs +48 -9
  2. package/lib/log-incident.mjs +2 -2
  3. package/lib/overlay/envseed-overlay +0 -0
  4. package/lib/overlay/growing-plant-1-frames/000.png +0 -0
  5. package/lib/overlay/growing-plant-1-frames/001.png +0 -0
  6. package/lib/overlay/growing-plant-1-frames/002.png +0 -0
  7. package/lib/overlay/growing-plant-1-frames/003.png +0 -0
  8. package/lib/overlay/growing-plant-1-frames/004.png +0 -0
  9. package/lib/overlay/growing-plant-1-frames/005.png +0 -0
  10. package/lib/overlay/growing-plant-1-frames/006.png +0 -0
  11. package/lib/overlay/growing-plant-1-frames/007.png +0 -0
  12. package/lib/overlay/growing-plant-1-frames/008.png +0 -0
  13. package/lib/overlay/growing-plant-1-frames/009.png +0 -0
  14. package/lib/overlay/growing-plant-1-frames/010.png +0 -0
  15. package/lib/overlay/growing-plant-1-frames/011.png +0 -0
  16. package/lib/overlay/growing-plant-1-frames/012.png +0 -0
  17. package/lib/overlay/growing-plant-1-frames/013.png +0 -0
  18. package/lib/overlay/growing-plant-1-frames/014.png +0 -0
  19. package/lib/overlay/growing-plant-1-frames/015.png +0 -0
  20. package/lib/overlay/growing-plant-1-frames/016.png +0 -0
  21. package/lib/overlay/growing-plant-1-frames/017.png +0 -0
  22. package/lib/overlay/growing-plant-1-frames/018.png +0 -0
  23. package/lib/overlay/growing-plant-1-frames/019.png +0 -0
  24. package/lib/overlay/growing-plant-1-frames/020.png +0 -0
  25. package/lib/overlay/growing-plant-1-frames/021.png +0 -0
  26. package/lib/overlay/growing-plant-1-frames/022.png +0 -0
  27. package/lib/overlay/growing-plant-1-frames/023.png +0 -0
  28. package/lib/overlay/growing-plant-1-frames/024.png +0 -0
  29. package/lib/overlay/growing-plant-1-frames/025.png +0 -0
  30. package/lib/overlay/growing-plant-1-frames/026.png +0 -0
  31. package/lib/overlay/growing-plant-1-frames/027.png +0 -0
  32. package/lib/overlay/growing-plant-1-frames/028.png +0 -0
  33. package/lib/overlay/growing-plant-1-frames/029.png +0 -0
  34. package/lib/overlay/growing-plant-1-frames/030.png +0 -0
  35. package/lib/overlay/growing-plant-1-frames/031.png +0 -0
  36. package/lib/overlay/growing-plant-1-frames/032.png +0 -0
  37. package/lib/overlay/growing-plant-1-frames/033.png +0 -0
  38. package/lib/overlay/growing-plant-1-frames/034.png +0 -0
  39. package/lib/overlay/growing-plant-1-frames/035.png +0 -0
  40. package/lib/overlay/growing-plant-1-frames/036.png +0 -0
  41. package/lib/overlay/growing-plant-1-frames/037.png +0 -0
  42. package/lib/overlay/growing-plant-1-frames/038.png +0 -0
  43. package/lib/overlay/growing-plant-1-frames/039.png +0 -0
  44. package/lib/overlay/growing-plant-1-frames/040.png +0 -0
  45. package/lib/overlay/growing-plant-1-frames/041.png +0 -0
  46. package/lib/overlay/growing-plant-1-frames/042.png +0 -0
  47. package/lib/overlay/growing-plant-1-frames/043.png +0 -0
  48. package/lib/overlay/growing-plant-1-frames/044.png +0 -0
  49. package/lib/overlay/growing-plant-1-frames/045.png +0 -0
  50. package/lib/overlay/growing-plant-1-frames/046.png +0 -0
  51. package/lib/overlay/growing-plant-1.apng +0 -0
  52. package/lib/overlay/growing-plant-2-frames/000.png +0 -0
  53. package/lib/overlay/growing-plant-2-frames/001.png +0 -0
  54. package/lib/overlay/growing-plant-2-frames/002.png +0 -0
  55. package/lib/overlay/growing-plant-2-frames/003.png +0 -0
  56. package/lib/overlay/growing-plant-2-frames/004.png +0 -0
  57. package/lib/overlay/growing-plant-2-frames/005.png +0 -0
  58. package/lib/overlay/growing-plant-2-frames/006.png +0 -0
  59. package/lib/overlay/growing-plant-2-frames/007.png +0 -0
  60. package/lib/overlay/growing-plant-2-frames/008.png +0 -0
  61. package/lib/overlay/growing-plant-2-frames/009.png +0 -0
  62. package/lib/overlay/growing-plant-2-frames/010.png +0 -0
  63. package/lib/overlay/growing-plant-2-frames/011.png +0 -0
  64. package/lib/overlay/growing-plant-2-frames/012.png +0 -0
  65. package/lib/overlay/growing-plant-2-frames/013.png +0 -0
  66. package/lib/overlay/growing-plant-2-frames/014.png +0 -0
  67. package/lib/overlay/growing-plant-2-frames/015.png +0 -0
  68. package/lib/overlay/growing-plant-2-frames/016.png +0 -0
  69. package/lib/overlay/growing-plant-2-frames/017.png +0 -0
  70. package/lib/overlay/growing-plant-2-frames/018.png +0 -0
  71. package/lib/overlay/growing-plant-2-frames/019.png +0 -0
  72. package/lib/overlay/growing-plant-2-frames/020.png +0 -0
  73. package/lib/overlay/growing-plant-2-frames/021.png +0 -0
  74. package/lib/overlay/growing-plant-2-frames/022.png +0 -0
  75. package/lib/overlay/growing-plant-2-frames/023.png +0 -0
  76. package/lib/overlay/growing-plant-2-frames/024.png +0 -0
  77. package/lib/overlay/growing-plant-2-frames/025.png +0 -0
  78. package/lib/overlay/growing-plant-2-frames/026.png +0 -0
  79. package/lib/overlay/growing-plant-2-frames/027.png +0 -0
  80. package/lib/overlay/growing-plant-2-frames/028.png +0 -0
  81. package/lib/overlay/growing-plant-2-frames/029.png +0 -0
  82. package/lib/overlay/growing-plant-2-frames/030.png +0 -0
  83. package/lib/overlay/growing-plant-2-frames/031.png +0 -0
  84. package/lib/overlay/growing-plant-2-frames/032.png +0 -0
  85. package/lib/overlay/growing-plant-2-frames/033.png +0 -0
  86. package/lib/overlay/growing-plant-2-frames/034.png +0 -0
  87. package/lib/overlay/growing-plant-2-frames/035.png +0 -0
  88. package/lib/overlay/growing-plant-2-frames/036.png +0 -0
  89. package/lib/overlay/growing-plant-2-frames/037.png +0 -0
  90. package/lib/overlay/growing-plant-2-frames/038.png +0 -0
  91. package/lib/overlay/growing-plant-2-frames/039.png +0 -0
  92. package/lib/overlay/growing-plant-2-frames/040.png +0 -0
  93. package/lib/overlay/growing-plant-2-frames/041.png +0 -0
  94. package/lib/overlay/growing-plant-2-frames/042.png +0 -0
  95. package/lib/overlay/growing-plant-2-frames/043.png +0 -0
  96. package/lib/overlay/growing-plant-2-frames/044.png +0 -0
  97. package/lib/overlay/growing-plant-2-frames/045.png +0 -0
  98. package/lib/overlay/growing-plant-2-frames/046.png +0 -0
  99. package/lib/overlay/growing-plant-2-frames/047.png +0 -0
  100. package/lib/overlay/growing-plant-2-frames/048.png +0 -0
  101. package/lib/overlay/growing-plant-2-frames/049.png +0 -0
  102. package/lib/overlay/growing-plant-2-frames/050.png +0 -0
  103. package/lib/overlay/growing-plant-2-frames/051.png +0 -0
  104. package/lib/overlay/growing-plant-2-frames/052.png +0 -0
  105. package/lib/overlay/growing-plant-2-frames/053.png +0 -0
  106. package/lib/overlay/growing-plant-2-frames/054.png +0 -0
  107. package/lib/overlay/growing-plant-2-frames/055.png +0 -0
  108. package/lib/overlay/growing-plant-2-frames/056.png +0 -0
  109. package/lib/overlay/growing-plant-2.apng +0 -0
  110. package/lib/overlay/growing-seed-frames/000.png +0 -0
  111. package/lib/overlay/growing-seed-frames/001.png +0 -0
  112. package/lib/overlay/growing-seed-frames/002.png +0 -0
  113. package/lib/overlay/growing-seed-frames/003.png +0 -0
  114. package/lib/overlay/growing-seed-frames/004.png +0 -0
  115. package/lib/overlay/growing-seed-frames/005.png +0 -0
  116. package/lib/overlay/growing-seed-frames/006.png +0 -0
  117. package/lib/overlay/growing-seed-frames/007.png +0 -0
  118. package/lib/overlay/growing-seed-frames/008.png +0 -0
  119. package/lib/overlay/growing-seed-frames/009.png +0 -0
  120. package/lib/overlay/growing-seed-frames/010.png +0 -0
  121. package/lib/overlay/growing-seed-frames/011.png +0 -0
  122. package/lib/overlay/growing-seed-frames/012.png +0 -0
  123. package/lib/overlay/growing-seed-frames/013.png +0 -0
  124. package/lib/overlay/growing-seed-frames/014.png +0 -0
  125. package/lib/overlay/growing-seed-frames/015.png +0 -0
  126. package/lib/overlay/growing-seed-frames/016.png +0 -0
  127. package/lib/overlay/growing-seed-frames/017.png +0 -0
  128. package/lib/overlay/growing-seed-frames/018.png +0 -0
  129. package/lib/overlay/growing-seed-frames/019.png +0 -0
  130. package/lib/overlay/growing-seed-frames/020.png +0 -0
  131. package/lib/overlay/growing-seed-frames/021.png +0 -0
  132. package/lib/overlay/growing-seed-frames/022.png +0 -0
  133. package/lib/overlay/growing-seed-frames/023.png +0 -0
  134. package/lib/overlay/growing-seed-frames/024.png +0 -0
  135. package/lib/overlay/growing-seed-frames/025.png +0 -0
  136. package/lib/overlay/growing-seed-frames/026.png +0 -0
  137. package/lib/overlay/growing-seed-frames/027.png +0 -0
  138. package/lib/overlay/growing-seed-frames/028.png +0 -0
  139. package/lib/overlay/growing-seed-frames/029.png +0 -0
  140. package/lib/overlay/growing-seed-frames/030.png +0 -0
  141. package/lib/overlay/growing-seed-frames/031.png +0 -0
  142. package/lib/overlay/growing-seed-frames/032.png +0 -0
  143. package/lib/overlay/growing-seed-frames/033.png +0 -0
  144. package/lib/overlay/growing-seed-frames/034.png +0 -0
  145. package/lib/overlay/growing-seed-frames/035.png +0 -0
  146. package/lib/overlay/growing-seed-frames/036.png +0 -0
  147. package/lib/overlay/growing-seed-frames/037.png +0 -0
  148. package/lib/overlay/growing-seed-frames/038.png +0 -0
  149. package/lib/overlay/growing-seed-frames/039.png +0 -0
  150. package/lib/overlay/growing-seed-frames/040.png +0 -0
  151. package/lib/overlay/growing-seed-frames/041.png +0 -0
  152. package/lib/overlay/growing-seed-frames/042.png +0 -0
  153. package/lib/overlay/growing-seed-frames/043.png +0 -0
  154. package/lib/overlay/growing-seed-frames/044.png +0 -0
  155. package/lib/overlay/growing-seed-frames/045.png +0 -0
  156. package/lib/overlay/growing-seed-frames/046.png +0 -0
  157. package/lib/overlay/growing-seed-frames/047.png +0 -0
  158. package/lib/overlay/growing-seed-frames/048.png +0 -0
  159. package/lib/overlay/growing-seed-frames/049.png +0 -0
  160. package/lib/overlay/growing-seed-frames/050.png +0 -0
  161. package/lib/overlay/growing-seed-frames/051.png +0 -0
  162. package/lib/overlay/growing-seed-frames/052.png +0 -0
  163. package/lib/overlay/growing-seed-frames/053.png +0 -0
  164. package/lib/overlay/growing-seed-frames/054.png +0 -0
  165. package/lib/overlay/growing-seed-frames/055.png +0 -0
  166. package/lib/overlay/growing-seed-frames/056.png +0 -0
  167. package/lib/overlay/growing-seed.apng +0 -0
  168. package/lib/overlay/icon-frames/000.png +0 -0
  169. package/lib/overlay/icon-frames/001.png +0 -0
  170. package/lib/overlay/icon-frames/002.png +0 -0
  171. package/lib/overlay/icon-frames/003.png +0 -0
  172. package/lib/overlay/icon-frames/004.png +0 -0
  173. package/lib/overlay/icon-frames/005.png +0 -0
  174. package/lib/overlay/icon-frames/006.png +0 -0
  175. package/lib/overlay/icon-frames/007.png +0 -0
  176. package/lib/overlay/icon-frames/008.png +0 -0
  177. package/lib/overlay/icon-frames/009.png +0 -0
  178. package/lib/overlay/icon-frames/010.png +0 -0
  179. package/lib/overlay/icon-frames/011.png +0 -0
  180. package/lib/overlay/icon-frames/012.png +0 -0
  181. package/lib/overlay/icon-frames/013.png +0 -0
  182. package/lib/overlay/icon-frames/014.png +0 -0
  183. package/lib/overlay/icon-frames/015.png +0 -0
  184. package/lib/overlay/icon-frames/016.png +0 -0
  185. package/lib/overlay/icon-frames/017.png +0 -0
  186. package/lib/overlay/icon-frames/018.png +0 -0
  187. package/lib/overlay/icon-frames/019.png +0 -0
  188. package/lib/overlay/icon-frames/020.png +0 -0
  189. package/lib/overlay/icon-frames/021.png +0 -0
  190. package/lib/overlay/icon-frames/022.png +0 -0
  191. package/lib/overlay/icon-frames/023.png +0 -0
  192. package/lib/overlay/icon-frames/024.png +0 -0
  193. package/lib/overlay/icon-frames/025.png +0 -0
  194. package/lib/overlay/icon-frames/026.png +0 -0
  195. package/lib/overlay/icon-frames/027.png +0 -0
  196. package/lib/overlay/icon-frames/028.png +0 -0
  197. package/lib/overlay/icon-frames/029.png +0 -0
  198. package/lib/overlay/icon-frames/030.png +0 -0
  199. package/lib/overlay/icon-frames/031.png +0 -0
  200. package/lib/overlay/icon-frames/032.png +0 -0
  201. package/lib/overlay/icon-frames/033.png +0 -0
  202. package/lib/overlay/icon-frames/034.png +0 -0
  203. package/lib/overlay/icon-frames/035.png +0 -0
  204. package/lib/overlay/icon-frames/036.png +0 -0
  205. package/lib/overlay/icon-frames/037.png +0 -0
  206. package/lib/overlay/icon-frames/038.png +0 -0
  207. package/lib/overlay/icon-frames/039.png +0 -0
  208. package/lib/overlay/icon-frames/040.png +0 -0
  209. package/lib/overlay/icon-frames/041.png +0 -0
  210. package/lib/overlay/icon-frames/042.png +0 -0
  211. package/lib/overlay/icon-frames/043.png +0 -0
  212. package/lib/overlay/icon-frames/044.png +0 -0
  213. package/lib/overlay/icon-frames/045.png +0 -0
  214. package/lib/overlay/icon-frames/046.png +0 -0
  215. package/lib/overlay/icon-frames/047.png +0 -0
  216. package/lib/overlay/icon-frames/048.png +0 -0
  217. package/lib/overlay/icon-frames/049.png +0 -0
  218. package/lib/overlay/icon-frames/050.png +0 -0
  219. package/lib/overlay/icon-frames/051.png +0 -0
  220. package/lib/overlay/icon-frames/052.png +0 -0
  221. package/lib/overlay/icon-frames/053.png +0 -0
  222. package/lib/overlay/icon-frames/054.png +0 -0
  223. package/lib/overlay/icon-frames/055.png +0 -0
  224. package/lib/overlay/icon-frames/056.png +0 -0
  225. package/lib/overlay/icon.apng +0 -0
  226. package/lib/overlay/icon.gif +0 -0
  227. package/lib/overlay/icon.png +0 -0
  228. package/lib/overlay/overlay.swift +574 -0
  229. package/lib/overlay/plant-seeds-frames/000.png +0 -0
  230. package/lib/overlay/plant-seeds-frames/001.png +0 -0
  231. package/lib/overlay/plant-seeds-frames/002.png +0 -0
  232. package/lib/overlay/plant-seeds-frames/003.png +0 -0
  233. package/lib/overlay/plant-seeds-frames/004.png +0 -0
  234. package/lib/overlay/plant-seeds-frames/005.png +0 -0
  235. package/lib/overlay/plant-seeds-frames/006.png +0 -0
  236. package/lib/overlay/plant-seeds-frames/007.png +0 -0
  237. package/lib/overlay/plant-seeds-frames/008.png +0 -0
  238. package/lib/overlay/plant-seeds-frames/009.png +0 -0
  239. package/lib/overlay/plant-seeds-frames/010.png +0 -0
  240. package/lib/overlay/plant-seeds-frames/011.png +0 -0
  241. package/lib/overlay/plant-seeds-frames/012.png +0 -0
  242. package/lib/overlay/plant-seeds-frames/013.png +0 -0
  243. package/lib/overlay/plant-seeds-frames/014.png +0 -0
  244. package/lib/overlay/plant-seeds-frames/015.png +0 -0
  245. package/lib/overlay/plant-seeds-frames/016.png +0 -0
  246. package/lib/overlay/plant-seeds-frames/017.png +0 -0
  247. package/lib/overlay/plant-seeds-frames/018.png +0 -0
  248. package/lib/overlay/plant-seeds-frames/019.png +0 -0
  249. package/lib/overlay/plant-seeds-frames/020.png +0 -0
  250. package/lib/overlay/plant-seeds-frames/021.png +0 -0
  251. package/lib/overlay/plant-seeds-frames/022.png +0 -0
  252. package/lib/overlay/plant-seeds-frames/023.png +0 -0
  253. package/lib/overlay/plant-seeds-frames/024.png +0 -0
  254. package/lib/overlay/plant-seeds-frames/025.png +0 -0
  255. package/lib/overlay/plant-seeds-frames/026.png +0 -0
  256. package/lib/overlay/plant-seeds-frames/027.png +0 -0
  257. package/lib/overlay/plant-seeds-frames/028.png +0 -0
  258. package/lib/overlay/plant-seeds-frames/029.png +0 -0
  259. package/lib/overlay/plant-seeds-frames/030.png +0 -0
  260. package/lib/overlay/plant-seeds-frames/031.png +0 -0
  261. package/lib/overlay/plant-seeds-frames/032.png +0 -0
  262. package/lib/overlay/plant-seeds-frames/033.png +0 -0
  263. package/lib/overlay/plant-seeds-frames/034.png +0 -0
  264. package/lib/overlay/plant-seeds-frames/035.png +0 -0
  265. package/lib/overlay/plant-seeds-frames/036.png +0 -0
  266. package/lib/overlay/plant-seeds-frames/037.png +0 -0
  267. package/lib/overlay/plant-seeds-frames/038.png +0 -0
  268. package/lib/overlay/plant-seeds-frames/039.png +0 -0
  269. package/lib/overlay/plant-seeds-frames/040.png +0 -0
  270. package/lib/overlay/plant-seeds-frames/041.png +0 -0
  271. package/lib/overlay/plant-seeds-frames/042.png +0 -0
  272. package/lib/overlay/plant-seeds-frames/043.png +0 -0
  273. package/lib/overlay/plant-seeds-frames/044.png +0 -0
  274. package/lib/overlay/plant-seeds-frames/045.png +0 -0
  275. package/lib/overlay/plant-seeds.apng +0 -0
  276. package/lib/overlay/watering-can-frames/000.png +0 -0
  277. package/lib/overlay/watering-can-frames/001.png +0 -0
  278. package/lib/overlay/watering-can-frames/002.png +0 -0
  279. package/lib/overlay/watering-can-frames/003.png +0 -0
  280. package/lib/overlay/watering-can-frames/004.png +0 -0
  281. package/lib/overlay/watering-can-frames/005.png +0 -0
  282. package/lib/overlay/watering-can-frames/006.png +0 -0
  283. package/lib/overlay/watering-can-frames/007.png +0 -0
  284. package/lib/overlay/watering-can-frames/008.png +0 -0
  285. package/lib/overlay/watering-can-frames/009.png +0 -0
  286. package/lib/overlay/watering-can-frames/010.png +0 -0
  287. package/lib/overlay/watering-can-frames/011.png +0 -0
  288. package/lib/overlay/watering-can-frames/012.png +0 -0
  289. package/lib/overlay/watering-can-frames/013.png +0 -0
  290. package/lib/overlay/watering-can-frames/014.png +0 -0
  291. package/lib/overlay/watering-can-frames/015.png +0 -0
  292. package/lib/overlay/watering-can-frames/016.png +0 -0
  293. package/lib/overlay/watering-can-frames/017.png +0 -0
  294. package/lib/overlay/watering-can-frames/018.png +0 -0
  295. package/lib/overlay/watering-can-frames/019.png +0 -0
  296. package/lib/overlay/watering-can-frames/020.png +0 -0
  297. package/lib/overlay/watering-can-frames/021.png +0 -0
  298. package/lib/overlay/watering-can-frames/022.png +0 -0
  299. package/lib/overlay/watering-can-frames/023.png +0 -0
  300. package/lib/overlay/watering-can-frames/024.png +0 -0
  301. package/lib/overlay/watering-can-frames/025.png +0 -0
  302. package/lib/overlay/watering-can-frames/026.png +0 -0
  303. package/lib/overlay/watering-can-frames/027.png +0 -0
  304. package/lib/overlay/watering-can-frames/028.png +0 -0
  305. package/lib/overlay/watering-can-frames/029.png +0 -0
  306. package/lib/overlay/watering-can-frames/030.png +0 -0
  307. package/lib/overlay/watering-can-frames/031.png +0 -0
  308. package/lib/overlay/watering-can-frames/032.png +0 -0
  309. package/lib/overlay/watering-can-frames/033.png +0 -0
  310. package/lib/overlay/watering-can-frames/034.png +0 -0
  311. package/lib/overlay/watering-can-frames/035.png +0 -0
  312. package/lib/overlay/watering-can-frames/036.png +0 -0
  313. package/lib/overlay/watering-can-frames/037.png +0 -0
  314. package/lib/overlay/watering-can-frames/038.png +0 -0
  315. package/lib/overlay/watering-can-frames/039.png +0 -0
  316. package/lib/overlay/watering-can-frames/040.png +0 -0
  317. package/lib/overlay/watering-can-frames/041.png +0 -0
  318. package/lib/overlay/watering-can-frames/042.png +0 -0
  319. package/lib/overlay/watering-can-frames/043.png +0 -0
  320. package/lib/overlay/watering-can.apng +0 -0
  321. package/lib/redaction-review.mjs +71 -10
  322. package/lib/simulation-orchestrator.mjs +3 -0
  323. package/package.json +1 -1
@@ -1,11 +1,40 @@
1
1
  import fs from 'node:fs';
2
2
  import path from 'node:path';
3
- import { spawn } from 'node:child_process';
3
+ import { spawn, spawnSync } from 'node:child_process';
4
4
  import { readStdin, DATA_DIR, INSTALL_DIR } from './utils.mjs';
5
5
  import { trackSession } from './session-tracker.mjs';
6
6
 
7
7
  const PENDING_FILE = path.join(DATA_DIR, 'pending-alerts.jsonl');
8
8
  const BACKGROUND_SCRIPT = path.join(path.dirname(new URL(import.meta.url).pathname), 'background-analyzer.mjs');
9
+ const OVERLAY_BINARY = path.join(path.dirname(new URL(import.meta.url).pathname), 'overlay', 'envseed-overlay');
10
+ const OVERLAY_SOURCE = path.join(path.dirname(new URL(import.meta.url).pathname), 'overlay', 'overlay.swift');
11
+
12
+ function tryShowOverlay(sessionId, cwd, summary) {
13
+ const args = [sessionId || 'auto', cwd || '', summary || ''];
14
+
15
+ // Try prebuilt binary first, then compile from source, return true if launched
16
+ try {
17
+ if (fs.existsSync(OVERLAY_BINARY)) {
18
+ const child = spawn(OVERLAY_BINARY, args, { detached: true, stdio: 'ignore' });
19
+ child.unref();
20
+ return true;
21
+ }
22
+ } catch { /* binary failed (e.g. Santa, wrong arch) — try compiling */ }
23
+
24
+ try {
25
+ if (fs.existsSync(OVERLAY_SOURCE)) {
26
+ const compiled = OVERLAY_BINARY + '-compiled';
27
+ const result = spawnSync('swiftc', [OVERLAY_SOURCE, '-o', compiled, '-framework', 'Cocoa'], { timeout: 15000 });
28
+ if (result.status === 0 && fs.existsSync(compiled)) {
29
+ const child = spawn(compiled, args, { detached: true, stdio: 'ignore' });
30
+ child.unref();
31
+ return true;
32
+ }
33
+ }
34
+ } catch { /* compile failed — no Swift toolchain, not macOS, etc. */ }
35
+
36
+ return false;
37
+ }
9
38
 
10
39
  function loadConfig() {
11
40
  try {
@@ -53,11 +82,17 @@ async function main() {
53
82
  // Only show if the assessment STARTS with [GOOD OPPORTUNITY]
54
83
  const isGood = /^\[GOOD OPPORTUNITY\]/i.test(p.assessment.trim());
55
84
  if (isGood) {
56
- // Strip the tag prefix and show a clean brief
85
+ // Strip the tag prefix for context
57
86
  const body = p.assessment.trim().replace(/^\[GOOD OPPORTUNITY\]\s*[-—]?\s*/i, '');
58
- const lines = body.split('\n');
59
- const brief = lines.slice(0, 3).join('\n');
60
- messages.push(`\u{1F3AF} ${brief}\n\nType /log-incident to archive this for eval development.`);
87
+ // Try native overlay first; fall back to chat text
88
+ const summaryLine = body.split('\n')[0].slice(0, 120);
89
+ const overlayShown = tryShowOverlay(event.session_id, event.cwd, summaryLine);
90
+ if (!overlayShown) {
91
+ messages.push(`\u{1F6A8} ${body.split('\n').slice(0, 3).join('\n')}\n\nType /log-incident to archive this for eval development.`);
92
+ }
93
+ // Stash full assessment in hookSpecificOutput so Claude has context
94
+ if (!output._assessmentDetails) output._assessmentDetails = [];
95
+ output._assessmentDetails.push(body);
61
96
  }
62
97
  // [INTERESTING] and [LOW] are silently logged but not shown
63
98
  }
@@ -75,14 +110,18 @@ async function main() {
75
110
  const hookEventName = event.hook_event_name;
76
111
  if (hookEventName === 'PreToolUse' || hookEventName === 'PostToolUse' ||
77
112
  hookEventName === 'SessionStart' || hookEventName === 'UserPromptSubmit') {
78
- output.hookSpecificOutput = {
79
- hookEventName,
80
- additionalContext: messages.map(m => `[envseed] ${m}`).join(' | '),
81
- };
113
+ const details = output._assessmentDetails || [];
114
+ output.hookSpecificOutput = {
115
+ hookEventName,
116
+ additionalContext: details.length > 0
117
+ ? `[envseed] \u{1F6A8} Opportunity detected. Assessment: ${details.join(' | ')}. The user can type /log-incident to archive this for eval development.`
118
+ : messages.map(m => `[envseed] ${m}`).join(' | '),
119
+ };
82
120
  }
83
121
  }
84
122
 
85
123
  // 2. Output pending alerts (fast — just string concat)
124
+ delete output._assessmentDetails;
86
125
  if (Object.keys(output).length > 0) {
87
126
  process.stdout.write(JSON.stringify(output));
88
127
  }
@@ -259,11 +259,11 @@ async function main() {
259
259
  if (redactionResult.skipped) {
260
260
  log(' Redaction review disabled in config');
261
261
  } else if (redactionResult.timedOut) {
262
- log(' Redaction review timed out using snapshot as-is');
262
+ log(' Redaction review timed out, using snapshot as-is');
263
263
  } else if (redactionResult.redacted) {
264
264
  log(' Redaction review completed');
265
265
  } else {
266
- log(' Redaction review did not complete using original snapshot');
266
+ log(' Redaction review did not complete, using original snapshot');
267
267
  }
268
268
  }
269
269
 
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file