@raidiant/notifai 11.7.1 → 12.0.0-beta.13

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 (409) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/NOTICE +16 -0
  3. package/THIRD_PARTY_NOTICES +725 -0
  4. package/bin/notifai.mjs +11420 -0
  5. package/data/install.ps1 +318 -0
  6. package/data/release.json +1 -0
  7. package/inventory.json +1 -0
  8. package/npm-adapter-files.json +52 -0
  9. package/package.json +14 -44
  10. package/README.md +0 -168
  11. package/dist/agent-update-notice.d.ts +0 -7
  12. package/dist/agent-update-notice.js +0 -77
  13. package/dist/agent-update-notice.js.map +0 -1
  14. package/dist/atomic-file.d.ts +0 -30
  15. package/dist/atomic-file.js +0 -148
  16. package/dist/atomic-file.js.map +0 -1
  17. package/dist/attendant-update.d.ts +0 -15
  18. package/dist/attendant-update.js +0 -96
  19. package/dist/attendant-update.js.map +0 -1
  20. package/dist/claude-wake.d.ts +0 -108
  21. package/dist/claude-wake.js +0 -369
  22. package/dist/claude-wake.js.map +0 -1
  23. package/dist/cli-bin.d.ts +0 -26
  24. package/dist/cli-bin.js +0 -220
  25. package/dist/cli-bin.js.map +0 -1
  26. package/dist/cli-contract.d.ts +0 -16
  27. package/dist/cli-contract.js +0 -27
  28. package/dist/cli-contract.js.map +0 -1
  29. package/dist/cli-release.d.ts +0 -36
  30. package/dist/cli-release.js +0 -85
  31. package/dist/cli-release.js.map +0 -1
  32. package/dist/client.d.ts +0 -109
  33. package/dist/client.js +0 -217
  34. package/dist/client.js.map +0 -1
  35. package/dist/codex-answer-control.d.ts +0 -14
  36. package/dist/codex-answer-control.js +0 -41
  37. package/dist/codex-answer-control.js.map +0 -1
  38. package/dist/codex-answer-presentation.d.ts +0 -18
  39. package/dist/codex-answer-presentation.js +0 -113
  40. package/dist/codex-answer-presentation.js.map +0 -1
  41. package/dist/codex-input-lifecycle.d.ts +0 -10
  42. package/dist/codex-input-lifecycle.js +0 -63
  43. package/dist/codex-input-lifecycle.js.map +0 -1
  44. package/dist/codex-native-control.d.ts +0 -13
  45. package/dist/codex-native-control.js +0 -120
  46. package/dist/codex-native-control.js.map +0 -1
  47. package/dist/codex-native-turn.d.ts +0 -37
  48. package/dist/codex-native-turn.js +0 -155
  49. package/dist/codex-native-turn.js.map +0 -1
  50. package/dist/codex-question-bindings.d.ts +0 -76
  51. package/dist/codex-question-bindings.js +0 -151
  52. package/dist/codex-question-bindings.js.map +0 -1
  53. package/dist/codex-queue-control.d.ts +0 -21
  54. package/dist/codex-queue-control.js +0 -59
  55. package/dist/codex-queue-control.js.map +0 -1
  56. package/dist/codex-tool-messages.d.ts +0 -7
  57. package/dist/codex-tool-messages.js +0 -126
  58. package/dist/codex-tool-messages.js.map +0 -1
  59. package/dist/codex-wake.d.ts +0 -58
  60. package/dist/codex-wake.js +0 -135
  61. package/dist/codex-wake.js.map +0 -1
  62. package/dist/command-session.d.ts +0 -14
  63. package/dist/command-session.js +0 -31
  64. package/dist/command-session.js.map +0 -1
  65. package/dist/commands-acknowledge.d.ts +0 -13
  66. package/dist/commands-acknowledge.js +0 -116
  67. package/dist/commands-acknowledge.js.map +0 -1
  68. package/dist/commands-agent-sessions.d.ts +0 -6
  69. package/dist/commands-agent-sessions.js +0 -51
  70. package/dist/commands-agent-sessions.js.map +0 -1
  71. package/dist/commands-ask.d.ts +0 -62
  72. package/dist/commands-ask.js +0 -503
  73. package/dist/commands-ask.js.map +0 -1
  74. package/dist/commands-auth.d.ts +0 -76
  75. package/dist/commands-auth.js +0 -421
  76. package/dist/commands-auth.js.map +0 -1
  77. package/dist/commands-close.d.ts +0 -6
  78. package/dist/commands-close.js +0 -273
  79. package/dist/commands-close.js.map +0 -1
  80. package/dist/commands-config.d.ts +0 -31
  81. package/dist/commands-config.js +0 -272
  82. package/dist/commands-config.js.map +0 -1
  83. package/dist/commands-core.d.ts +0 -145
  84. package/dist/commands-core.js +0 -190
  85. package/dist/commands-core.js.map +0 -1
  86. package/dist/commands-devices.d.ts +0 -41
  87. package/dist/commands-devices.js +0 -144
  88. package/dist/commands-devices.js.map +0 -1
  89. package/dist/commands-doctor.d.ts +0 -25
  90. package/dist/commands-doctor.js +0 -1553
  91. package/dist/commands-doctor.js.map +0 -1
  92. package/dist/commands-guidance.d.ts +0 -27
  93. package/dist/commands-guidance.js +0 -150
  94. package/dist/commands-guidance.js.map +0 -1
  95. package/dist/commands-harness-context.d.ts +0 -57
  96. package/dist/commands-harness-context.js +0 -102
  97. package/dist/commands-harness-context.js.map +0 -1
  98. package/dist/commands-hook-attend.d.ts +0 -70
  99. package/dist/commands-hook-attend.js +0 -655
  100. package/dist/commands-hook-attend.js.map +0 -1
  101. package/dist/commands-hook-diagnostics.d.ts +0 -37
  102. package/dist/commands-hook-diagnostics.js +0 -136
  103. package/dist/commands-hook-diagnostics.js.map +0 -1
  104. package/dist/commands-hook-install.d.ts +0 -26
  105. package/dist/commands-hook-install.js +0 -784
  106. package/dist/commands-hook-install.js.map +0 -1
  107. package/dist/commands-hook-run.d.ts +0 -29
  108. package/dist/commands-hook-run.js +0 -933
  109. package/dist/commands-hook-run.js.map +0 -1
  110. package/dist/commands-hook-shape.d.ts +0 -19
  111. package/dist/commands-hook-shape.js +0 -48
  112. package/dist/commands-hook-shape.js.map +0 -1
  113. package/dist/commands-init.d.ts +0 -42
  114. package/dist/commands-init.js +0 -901
  115. package/dist/commands-init.js.map +0 -1
  116. package/dist/commands-io.d.ts +0 -2
  117. package/dist/commands-io.js +0 -117
  118. package/dist/commands-io.js.map +0 -1
  119. package/dist/commands-logs.d.ts +0 -30
  120. package/dist/commands-logs.js +0 -201
  121. package/dist/commands-logs.js.map +0 -1
  122. package/dist/commands-native-acknowledge.d.ts +0 -8
  123. package/dist/commands-native-acknowledge.js +0 -114
  124. package/dist/commands-native-acknowledge.js.map +0 -1
  125. package/dist/commands-project.d.ts +0 -4
  126. package/dist/commands-project.js +0 -41
  127. package/dist/commands-project.js.map +0 -1
  128. package/dist/commands-receive.d.ts +0 -3
  129. package/dist/commands-receive.js +0 -59
  130. package/dist/commands-receive.js.map +0 -1
  131. package/dist/commands-send-support.d.ts +0 -59
  132. package/dist/commands-send-support.js +0 -258
  133. package/dist/commands-send-support.js.map +0 -1
  134. package/dist/commands-send.d.ts +0 -34
  135. package/dist/commands-send.js +0 -900
  136. package/dist/commands-send.js.map +0 -1
  137. package/dist/commands-setup-proof.d.ts +0 -43
  138. package/dist/commands-setup-proof.js +0 -134
  139. package/dist/commands-setup-proof.js.map +0 -1
  140. package/dist/commands-skill.d.ts +0 -21
  141. package/dist/commands-skill.js +0 -199
  142. package/dist/commands-skill.js.map +0 -1
  143. package/dist/commands-sounds.d.ts +0 -12
  144. package/dist/commands-sounds.js +0 -35
  145. package/dist/commands-sounds.js.map +0 -1
  146. package/dist/commands-update-check.d.ts +0 -6
  147. package/dist/commands-update-check.js +0 -102
  148. package/dist/commands-update-check.js.map +0 -1
  149. package/dist/commands-update-resume.d.ts +0 -7
  150. package/dist/commands-update-resume.js +0 -143
  151. package/dist/commands-update-resume.js.map +0 -1
  152. package/dist/commands-update-skill.d.ts +0 -5
  153. package/dist/commands-update-skill.js +0 -36
  154. package/dist/commands-update-skill.js.map +0 -1
  155. package/dist/commands-update.d.ts +0 -11
  156. package/dist/commands-update.js +0 -286
  157. package/dist/commands-update.js.map +0 -1
  158. package/dist/commands.d.ts +0 -26
  159. package/dist/commands.js +0 -27
  160. package/dist/commands.js.map +0 -1
  161. package/dist/config-schema.d.ts +0 -62
  162. package/dist/config-schema.js +0 -302
  163. package/dist/config-schema.js.map +0 -1
  164. package/dist/config.d.ts +0 -181
  165. package/dist/config.js +0 -357
  166. package/dist/config.js.map +0 -1
  167. package/dist/credentials.d.ts +0 -96
  168. package/dist/credentials.js +0 -342
  169. package/dist/credentials.js.map +0 -1
  170. package/dist/file-lock.d.ts +0 -34
  171. package/dist/file-lock.js +0 -367
  172. package/dist/file-lock.js.map +0 -1
  173. package/dist/generated-session-label.d.ts +0 -2
  174. package/dist/generated-session-label.js +0 -152
  175. package/dist/generated-session-label.js.map +0 -1
  176. package/dist/guidance-content.d.ts +0 -53
  177. package/dist/guidance-content.js +0 -248
  178. package/dist/guidance-content.js.map +0 -1
  179. package/dist/guidance-render.d.ts +0 -25
  180. package/dist/guidance-render.js +0 -47
  181. package/dist/guidance-render.js.map +0 -1
  182. package/dist/guidance.d.ts +0 -69
  183. package/dist/guidance.js +0 -173
  184. package/dist/guidance.js.map +0 -1
  185. package/dist/harness-session-title.d.ts +0 -22
  186. package/dist/harness-session-title.js +0 -74
  187. package/dist/harness-session-title.js.map +0 -1
  188. package/dist/harnesses.d.ts +0 -65
  189. package/dist/harnesses.js +0 -159
  190. package/dist/harnesses.js.map +0 -1
  191. package/dist/hermes-attendant.d.ts +0 -38
  192. package/dist/hermes-attendant.js +0 -337
  193. package/dist/hermes-attendant.js.map +0 -1
  194. package/dist/hermes-plugin.d.ts +0 -11
  195. package/dist/hermes-plugin.js +0 -299
  196. package/dist/hermes-plugin.js.map +0 -1
  197. package/dist/hook-acknowledgements.d.ts +0 -70
  198. package/dist/hook-acknowledgements.js +0 -490
  199. package/dist/hook-acknowledgements.js.map +0 -1
  200. package/dist/hook-adapter.d.ts +0 -48
  201. package/dist/hook-adapter.js +0 -419
  202. package/dist/hook-adapter.js.map +0 -1
  203. package/dist/hook-events.d.ts +0 -105
  204. package/dist/hook-events.js +0 -130
  205. package/dist/hook-events.js.map +0 -1
  206. package/dist/hook-gates.d.ts +0 -7
  207. package/dist/hook-gates.js +0 -20
  208. package/dist/hook-gates.js.map +0 -1
  209. package/dist/hook-input.d.ts +0 -10
  210. package/dist/hook-input.js +0 -64
  211. package/dist/hook-input.js.map +0 -1
  212. package/dist/hook-lifecycle.d.ts +0 -112
  213. package/dist/hook-lifecycle.js +0 -2031
  214. package/dist/hook-lifecycle.js.map +0 -1
  215. package/dist/hook-project-sessions.d.ts +0 -28
  216. package/dist/hook-project-sessions.js +0 -141
  217. package/dist/hook-project-sessions.js.map +0 -1
  218. package/dist/hook-question-lock.d.ts +0 -29
  219. package/dist/hook-question-lock.js +0 -217
  220. package/dist/hook-question-lock.js.map +0 -1
  221. package/dist/hook-question-retirement.d.ts +0 -74
  222. package/dist/hook-question-retirement.js +0 -314
  223. package/dist/hook-question-retirement.js.map +0 -1
  224. package/dist/hook-question-state.d.ts +0 -58
  225. package/dist/hook-question-state.js +0 -239
  226. package/dist/hook-question-state.js.map +0 -1
  227. package/dist/hook-session-state.d.ts +0 -127
  228. package/dist/hook-session-state.js +0 -488
  229. package/dist/hook-session-state.js.map +0 -1
  230. package/dist/hook-types.d.ts +0 -476
  231. package/dist/hook-types.js +0 -4
  232. package/dist/hook-types.js.map +0 -1
  233. package/dist/injection-render.d.ts +0 -36
  234. package/dist/injection-render.js +0 -61
  235. package/dist/injection-render.js.map +0 -1
  236. package/dist/install-hooks.d.ts +0 -470
  237. package/dist/install-hooks.js +0 -1622
  238. package/dist/install-hooks.js.map +0 -1
  239. package/dist/integration-health.d.ts +0 -26
  240. package/dist/integration-health.js +0 -133
  241. package/dist/integration-health.js.map +0 -1
  242. package/dist/interactive.d.ts +0 -22
  243. package/dist/interactive.js +0 -644
  244. package/dist/interactive.js.map +0 -1
  245. package/dist/invocation-context.d.ts +0 -47
  246. package/dist/invocation-context.js +0 -164
  247. package/dist/invocation-context.js.map +0 -1
  248. package/dist/local-path.d.ts +0 -7
  249. package/dist/local-path.js +0 -27
  250. package/dist/local-path.js.map +0 -1
  251. package/dist/logging.d.ts +0 -157
  252. package/dist/logging.js +0 -599
  253. package/dist/logging.js.map +0 -1
  254. package/dist/main-run.d.ts +0 -1
  255. package/dist/main-run.js +0 -42
  256. package/dist/main-run.js.map +0 -1
  257. package/dist/main.d.ts +0 -2
  258. package/dist/main.js +0 -12
  259. package/dist/main.js.map +0 -1
  260. package/dist/native-answer-operation.d.ts +0 -70
  261. package/dist/native-answer-operation.js +0 -247
  262. package/dist/native-answer-operation.js.map +0 -1
  263. package/dist/native-skills.d.ts +0 -64
  264. package/dist/native-skills.js +0 -167
  265. package/dist/native-skills.js.map +0 -1
  266. package/dist/node-floor.d.ts +0 -19
  267. package/dist/node-floor.js +0 -32
  268. package/dist/node-floor.js.map +0 -1
  269. package/dist/npm-invocation.d.ts +0 -34
  270. package/dist/npm-invocation.js +0 -53
  271. package/dist/npm-invocation.js.map +0 -1
  272. package/dist/openclaw-continuation-bridge.d.ts +0 -7
  273. package/dist/openclaw-continuation-bridge.js +0 -64
  274. package/dist/openclaw-continuation-bridge.js.map +0 -1
  275. package/dist/openclaw-gateway-readiness.d.ts +0 -1
  276. package/dist/openclaw-gateway-readiness.js +0 -24
  277. package/dist/openclaw-gateway-readiness.js.map +0 -1
  278. package/dist/openclaw-generation.d.ts +0 -21
  279. package/dist/openclaw-generation.js +0 -115
  280. package/dist/openclaw-generation.js.map +0 -1
  281. package/dist/openclaw-message-bridge.d.ts +0 -8
  282. package/dist/openclaw-message-bridge.js +0 -93
  283. package/dist/openclaw-message-bridge.js.map +0 -1
  284. package/dist/openclaw-pending.d.ts +0 -8
  285. package/dist/openclaw-pending.js +0 -47
  286. package/dist/openclaw-pending.js.map +0 -1
  287. package/dist/openclaw-plugin.d.ts +0 -75
  288. package/dist/openclaw-plugin.js +0 -1353
  289. package/dist/openclaw-plugin.js.map +0 -1
  290. package/dist/openclaw-session-access.d.ts +0 -12
  291. package/dist/openclaw-session-access.js +0 -79
  292. package/dist/openclaw-session-access.js.map +0 -1
  293. package/dist/opencode-plugin.d.ts +0 -88
  294. package/dist/opencode-plugin.js +0 -286
  295. package/dist/opencode-plugin.js.map +0 -1
  296. package/dist/orca-session-title.d.ts +0 -11
  297. package/dist/orca-session-title.js +0 -111
  298. package/dist/orca-session-title.js.map +0 -1
  299. package/dist/pack-feedback-slice.d.ts +0 -35
  300. package/dist/pack-feedback-slice.js +0 -126
  301. package/dist/pack-feedback-slice.js.map +0 -1
  302. package/dist/pairing-qr.d.ts +0 -5
  303. package/dist/pairing-qr.js +0 -24
  304. package/dist/pairing-qr.js.map +0 -1
  305. package/dist/pending-pairing.d.ts +0 -38
  306. package/dist/pending-pairing.js +0 -70
  307. package/dist/pending-pairing.js.map +0 -1
  308. package/dist/platform.d.ts +0 -67
  309. package/dist/platform.js +0 -140
  310. package/dist/platform.js.map +0 -1
  311. package/dist/process-identity.d.ts +0 -26
  312. package/dist/process-identity.js +0 -82
  313. package/dist/process-identity.js.map +0 -1
  314. package/dist/program.d.ts +0 -59
  315. package/dist/program.js +0 -691
  316. package/dist/program.js.map +0 -1
  317. package/dist/project-enablement.d.ts +0 -21
  318. package/dist/project-enablement.js +0 -71
  319. package/dist/project-enablement.js.map +0 -1
  320. package/dist/question-settlement-process.d.ts +0 -17
  321. package/dist/question-settlement-process.js +0 -35
  322. package/dist/question-settlement-process.js.map +0 -1
  323. package/dist/question-timing.d.ts +0 -46
  324. package/dist/question-timing.js +0 -48
  325. package/dist/question-timing.js.map +0 -1
  326. package/dist/readiness.d.ts +0 -153
  327. package/dist/readiness.js +0 -149
  328. package/dist/readiness.js.map +0 -1
  329. package/dist/release.d.ts +0 -31
  330. package/dist/release.js +0 -52
  331. package/dist/release.js.map +0 -1
  332. package/dist/send-attempts.d.ts +0 -26
  333. package/dist/send-attempts.js +0 -139
  334. package/dist/send-attempts.js.map +0 -1
  335. package/dist/send.d.ts +0 -115
  336. package/dist/send.js +0 -421
  337. package/dist/send.js.map +0 -1
  338. package/dist/session-activation.d.ts +0 -13
  339. package/dist/session-activation.js +0 -64
  340. package/dist/session-activation.js.map +0 -1
  341. package/dist/session-attendant-probe.d.ts +0 -85
  342. package/dist/session-attendant-probe.js +0 -173
  343. package/dist/session-attendant-probe.js.map +0 -1
  344. package/dist/session-attendant-state.d.ts +0 -70
  345. package/dist/session-attendant-state.js +0 -256
  346. package/dist/session-attendant-state.js.map +0 -1
  347. package/dist/session-attendant.d.ts +0 -143
  348. package/dist/session-attendant.js +0 -520
  349. package/dist/session-attendant.js.map +0 -1
  350. package/dist/session-delivery.d.ts +0 -249
  351. package/dist/session-delivery.js +0 -576
  352. package/dist/session-delivery.js.map +0 -1
  353. package/dist/session-handoff.d.ts +0 -98
  354. package/dist/session-handoff.js +0 -118
  355. package/dist/session-handoff.js.map +0 -1
  356. package/dist/session-input-wakes.d.ts +0 -78
  357. package/dist/session-input-wakes.js +0 -239
  358. package/dist/session-input-wakes.js.map +0 -1
  359. package/dist/session-inputs.d.ts +0 -57
  360. package/dist/session-inputs.js +0 -434
  361. package/dist/session-inputs.js.map +0 -1
  362. package/dist/session-labels.d.ts +0 -56
  363. package/dist/session-labels.js +0 -396
  364. package/dist/session-labels.js.map +0 -1
  365. package/dist/session-message-handoff.d.ts +0 -39
  366. package/dist/session-message-handoff.js +0 -107
  367. package/dist/session-message-handoff.js.map +0 -1
  368. package/dist/setup-destinations.d.ts +0 -23
  369. package/dist/setup-destinations.js +0 -44
  370. package/dist/setup-destinations.js.map +0 -1
  371. package/dist/skill-integrity.d.ts +0 -54
  372. package/dist/skill-integrity.js +0 -164
  373. package/dist/skill-integrity.js.map +0 -1
  374. package/dist/skill-source/manifest.json +0 -40
  375. package/dist/skill-source/notifai/SKILL.md +0 -350
  376. package/dist/skill-source/notifai/references/diagnostics.md +0 -36
  377. package/dist/skill-source/notifai/references/harness-setup.md +0 -384
  378. package/dist/skill-source/notifai/references/native-questions.md +0 -51
  379. package/dist/skill-source/notifai/references/notes-and-edits.md +0 -54
  380. package/dist/skill-source/notifai/references/send-details.md +0 -14
  381. package/dist/skill-source/notifai/references/updates.md +0 -116
  382. package/dist/skill-source/notifai/references/writing-examples.md +0 -56
  383. package/dist/sound-ref.d.ts +0 -23
  384. package/dist/sound-ref.js +0 -28
  385. package/dist/sound-ref.js.map +0 -1
  386. package/dist/ui/banner.d.ts +0 -22
  387. package/dist/ui/banner.js +0 -87
  388. package/dist/ui/banner.js.map +0 -1
  389. package/dist/ui/config-view.d.ts +0 -30
  390. package/dist/ui/config-view.js +0 -108
  391. package/dist/ui/config-view.js.map +0 -1
  392. package/dist/ui/help.d.ts +0 -44
  393. package/dist/ui/help.js +0 -107
  394. package/dist/ui/help.js.map +0 -1
  395. package/dist/ui/theme.d.ts +0 -90
  396. package/dist/ui/theme.js +0 -244
  397. package/dist/ui/theme.js.map +0 -1
  398. package/dist/update-handoff.d.ts +0 -29
  399. package/dist/update-handoff.js +0 -69
  400. package/dist/update-handoff.js.map +0 -1
  401. package/dist/url-policy.d.ts +0 -85
  402. package/dist/url-policy.js +0 -369
  403. package/dist/url-policy.js.map +0 -1
  404. package/dist/version.d.ts +0 -40
  405. package/dist/version.js +0 -132
  406. package/dist/version.js.map +0 -1
  407. package/dist/wake-support.d.ts +0 -40
  408. package/dist/wake-support.js +0 -95
  409. package/dist/wake-support.js.map +0 -1
@@ -1,419 +0,0 @@
1
- import { chmodSync, existsSync, lstatSync, mkdirSync, readFileSync, realpathSync, statSync, } from 'node:fs';
2
- import os from 'node:os';
3
- import path from 'node:path';
4
- import { atomicWriteFileSync } from './atomic-file.js';
5
- import { withTargetFileLock } from './file-lock.js';
6
- import { sameLocalPath } from './local-path.js';
7
- import { isWindowsAbsolute } from './platform.js';
8
- const ADAPTER_MARKER = '# notifai managed hook adapter';
9
- const WIN32_ADAPTER_MARKER = '// notifai managed hook adapter';
10
- const ADAPTER_VERSION = 2;
11
- export function isNpxAdapterTarget(target) {
12
- return target.kind === 'npx';
13
- }
14
- /** Whether a parsed adapter runs the same installed CLI artifact as PATH. */
15
- export function hookAdapterTargetsArtifact(target, artifactPath) {
16
- if (target === null || isNpxAdapterTarget(target))
17
- return false;
18
- try {
19
- return realpathSync(target.scriptPath) === realpathSync(artifactPath);
20
- }
21
- catch {
22
- return false;
23
- }
24
- }
25
- export function hookHostPlatform(platform = process.platform) {
26
- return platform === 'win32' ? 'win32' : 'posix';
27
- }
28
- /**
29
- * One user-level identity for every harness and every project/global install.
30
- *
31
- * The pathname is deliberately outside XDG configuration/state routing. XDG
32
- * overrides routinely differ between shells, package managers, and harness
33
- * processes; allowing one to select this path would put mutable environment
34
- * back into every trusted definition. Only the user's home boundary selects
35
- * it; CLI, Node, package-manager, checkout, and preference paths stay behind
36
- * it and may change without changing hook identity.
37
- */
38
- export function hookAdapterPath(homeDir = os.userInfo().homedir) {
39
- return path.join(homeDir, '.notifai', 'bin', 'hook-adapter');
40
- }
41
- function envRequestedHomes(env = process.env, platform = process.platform) {
42
- if (platform === 'win32') {
43
- const profile = env['USERPROFILE'];
44
- const home = env['HOME'];
45
- // accountHome accepts a Windows-absolute HOME ahead of USERPROFILE.
46
- // Validate both: one real value must not conceal a relocated other one.
47
- // Git Bash/MSYS HOME is intentionally ignored by accountHome as well.
48
- return [
49
- ...(typeof profile === 'string' && profile !== '' ? [profile] : []),
50
- ...(typeof home === 'string' && isWindowsAbsolute(home) ? [home] : []),
51
- ];
52
- }
53
- const home = env['HOME'];
54
- return typeof home === 'string' && home !== '' ? [home] : [];
55
- }
56
- /**
57
- * Adapter identity is the OS account home. A mutable HOME is not a trusted
58
- * isolation context: honouring it would retarget every live harness hook.
59
- * Tests and other explicit callers pass the destination home themselves.
60
- */
61
- export function resolveHookAdapterHome(explicitHome, env = process.env, platform = process.platform) {
62
- if (explicitHome !== undefined && explicitHome !== '')
63
- return explicitHome;
64
- const osHome = os.userInfo().homedir;
65
- const comparisonPlatform = platform === 'win32' ? 'win32' : 'linux';
66
- if (envRequestedHomes(env, platform).some((home) => !sameLocalPath(home, osHome, comparisonPlatform))) {
67
- throw new Error(`Refusing to install the shared hook adapter: HOME or USERPROFILE does not match this account's OS home. Isolated programmatic verification must pass an explicit adapter home; a mutable home cannot retarget trusted hook identity.`);
68
- }
69
- return osHome;
70
- }
71
- /** Install or repair the stable adapter and atomically retarget its implementation. */
72
- export function installHookAdapter(target, homeDir, platform = process.platform, env = process.env) {
73
- const host = hookHostPlatform(platform);
74
- assertUsableTarget(target, host);
75
- const resolvedHome = resolveHookAdapterHome(homeDir, env, platform);
76
- const file = hookAdapterPath(resolvedHome);
77
- ensureManagedDirectories(resolvedHome, host);
78
- const source = hookAdapterSource(target, host);
79
- return withTargetFileLock(file, () => {
80
- const existing = existsSync(file) ? readSafeManagedFile(file) : null;
81
- const modeDrift = host === 'posix' && existing !== null && (existing.mode & 0o777) !== 0o700;
82
- const changed = existing === null || existing.contents !== source || modeDrift;
83
- if (changed) {
84
- atomicWriteFileSync(file, source, {
85
- mode: host === 'posix' ? 0o700 : 0o600,
86
- preserveMode: false,
87
- requireCurrentUserOwner: true,
88
- });
89
- }
90
- return { path: file, changed };
91
- });
92
- }
93
- function assertUsableTarget(target, host) {
94
- let exec;
95
- try {
96
- exec = statSync(target.execPath);
97
- }
98
- catch {
99
- throw new Error(`Hook adapter runtime ${target.execPath} does not exist.`);
100
- }
101
- if (!exec.isFile() || (host === 'posix' && (exec.mode & 0o111) === 0)) {
102
- throw new Error(`Hook adapter runtime ${target.execPath} is not executable.`);
103
- }
104
- if (isNpxAdapterTarget(target)) {
105
- if (target.spec.trim() === '') {
106
- throw new Error('Hook adapter npx spec is empty.');
107
- }
108
- try {
109
- if (!statSync(target.npmCli).isFile()) {
110
- throw new Error(`Hook adapter npm CLI ${target.npmCli} is not a regular file.`);
111
- }
112
- }
113
- catch (err) {
114
- if (err instanceof Error && err.message.startsWith('Hook adapter npm CLI '))
115
- throw err;
116
- throw new Error(`Hook adapter npm CLI ${target.npmCli} does not exist.`);
117
- }
118
- return;
119
- }
120
- try {
121
- if (!statSync(target.scriptPath).isFile()) {
122
- throw new Error(`Hook adapter CLI ${target.scriptPath} is not a regular file.`);
123
- }
124
- }
125
- catch (err) {
126
- if (err instanceof Error && err.message.startsWith('Hook adapter CLI '))
127
- throw err;
128
- throw new Error(`Hook adapter CLI ${target.scriptPath} does not exist.`);
129
- }
130
- }
131
- /** Inspect the shared adapter without executing either it or its registered CLI. */
132
- export function inspectHookAdapter(homeDir, platform = process.platform) {
133
- const host = hookHostPlatform(platform);
134
- const file = hookAdapterPath(homeDir);
135
- if (!existsSync(file)) {
136
- return { path: file, target: null, problems: [`${file} is missing; rerun \`notifai hooks install\``] };
137
- }
138
- let stat;
139
- try {
140
- stat = lstatSync(file);
141
- }
142
- catch (err) {
143
- return { path: file, target: null, problems: [String(err)] };
144
- }
145
- if (stat.isSymbolicLink() || !stat.isFile()) {
146
- return {
147
- path: file,
148
- target: null,
149
- problems: [`${file} is not a regular file; refusing the adapter`],
150
- };
151
- }
152
- const problems = [];
153
- if (host === 'posix') {
154
- const uid = typeof process.getuid === 'function' ? process.getuid() : undefined;
155
- if (uid !== undefined && stat.uid !== uid) {
156
- problems.push(`${file} is owned by uid ${stat.uid}, not the current user`);
157
- }
158
- if ((stat.mode & 0o077) !== 0 || (stat.mode & 0o700) !== 0o700) {
159
- problems.push(`${file} permissions are ${(stat.mode & 0o777).toString(8)}, expected 700`);
160
- }
161
- }
162
- const contents = readFileSync(file, 'utf8');
163
- const format = adapterFormat(contents);
164
- if (format === null) {
165
- problems.push(`${file} has no managed adapter marker`);
166
- }
167
- else if (format !== host) {
168
- problems.push(`${file} is not a ${host} managed adapter; rerun \`notifai hooks install\``);
169
- }
170
- const version = Number(meta(contents, 'adapter-version') ?? Number.NaN);
171
- if (version !== ADAPTER_VERSION)
172
- problems.push(`${file} uses obsolete adapter version ${version}`);
173
- const target = parseTarget(contents);
174
- if (target === null) {
175
- problems.push(`${file} has malformed target metadata`);
176
- }
177
- else {
178
- try {
179
- const exec = statSync(target.execPath);
180
- if (!exec.isFile() || (host === 'posix' && (exec.mode & 0o111) === 0)) {
181
- problems.push(`registered runtime ${target.execPath} is not executable`);
182
- }
183
- }
184
- catch {
185
- problems.push(`registered runtime ${target.execPath} is missing`);
186
- }
187
- if (isNpxAdapterTarget(target)) {
188
- if (target.spec.trim() === '')
189
- problems.push('registered npx spec is empty');
190
- try {
191
- if (!statSync(target.npmCli).isFile()) {
192
- problems.push(`registered npm CLI ${target.npmCli} is not a regular file`);
193
- }
194
- }
195
- catch {
196
- problems.push(`registered npm CLI ${target.npmCli} is missing`);
197
- }
198
- }
199
- else {
200
- try {
201
- if (!statSync(target.scriptPath).isFile()) {
202
- problems.push(`registered CLI ${target.scriptPath} is not a regular file`);
203
- }
204
- }
205
- catch {
206
- problems.push(`registered CLI ${target.scriptPath} is missing`);
207
- }
208
- }
209
- }
210
- return { path: file, target, problems };
211
- }
212
- /** Generate the managed adapter source for one host. Exported so tests can pin bytes. */
213
- export function hookAdapterSource(target, platform = process.platform) {
214
- return hookHostPlatform(platform) === 'win32'
215
- ? win32HookAdapterSource(target)
216
- : posixHookAdapterSource(target);
217
- }
218
- /**
219
- * Two rungs, and the difference between them is the whole safety argument.
220
- *
221
- * The registered runtime is a resolved path, so every node version manager
222
- * makes it version-scoped: a Homebrew upgrade renames its Cellar directory, an
223
- * nvm version gets pruned, and the pinned interpreter stops existing. The npm
224
- * shim this adapter wraps already survives that — `main.ts` starts with
225
- * `#!/usr/bin/env node` — so pinning the interpreter here was stricter than the
226
- * binary it stands in front of, and the strictness bought nothing.
227
- *
228
- * So PATH may supply the *interpreter*, and never the *code*: both rungs keep
229
- * the registered script path, and no rung resolves `notifai` from PATH. Which
230
- * Notifai build a trusted hook definition runs stays a property of the
231
- * installation, not of whatever environment the harness happens to hand us.
232
- */
233
- function posixHookAdapterSource(target) {
234
- if (isNpxAdapterTarget(target)) {
235
- return `#!/bin/sh
236
- ${ADAPTER_MARKER}
237
- # adapter-version: ${ADAPTER_VERSION}
238
- # target-kind: npx
239
- # target-exec-json: ${JSON.stringify(target.execPath)}
240
- # target-npm-cli-json: ${JSON.stringify(target.npmCli)}
241
- # target-spec-json: ${JSON.stringify(target.spec)}
242
- set -eu
243
-
244
- NOTIFAI_HOOK_SOURCE_PID=$PPID
245
- export NOTIFAI_HOOK_SOURCE_PID
246
-
247
- registered_exec=${quote(target.execPath)}
248
- registered_npm_cli=${quote(target.npmCli)}
249
- registered_spec=${quote(target.spec)}
250
-
251
- if [ -x "$registered_exec" ] && [ -f "$registered_npm_cli" ]; then
252
- exec "$registered_exec" "$registered_npm_cli" exec --yes --package "$registered_spec" -- notifai "$@"
253
- fi
254
-
255
- if [ -f "$registered_npm_cli" ] && command -v node >/dev/null 2>&1; then
256
- exec node "$registered_npm_cli" exec --yes --package "$registered_spec" -- notifai "$@"
257
- fi
258
-
259
- printf '%s\n' 'Notifai hook adapter target is stale; run notifai hooks install.' >&2
260
- exit 127
261
- `;
262
- }
263
- return `#!/bin/sh
264
- ${ADAPTER_MARKER}
265
- # adapter-version: ${ADAPTER_VERSION}
266
- # target-exec-json: ${JSON.stringify(target.execPath)}
267
- # target-script-json: ${JSON.stringify(target.scriptPath)}
268
- set -eu
269
-
270
- NOTIFAI_HOOK_SOURCE_PID=$PPID
271
- export NOTIFAI_HOOK_SOURCE_PID
272
-
273
- registered_exec=${quote(target.execPath)}
274
- registered_script=${quote(target.scriptPath)}
275
-
276
- if [ -x "$registered_exec" ] && [ -f "$registered_script" ]; then
277
- exec "$registered_exec" "$registered_script" "$@"
278
- fi
279
-
280
- if [ -f "$registered_script" ] && command -v node >/dev/null 2>&1; then
281
- exec node "$registered_script" "$@"
282
- fi
283
-
284
- printf '%s\n' 'Notifai hook adapter target is stale; run notifai hooks install.' >&2
285
- exit 127
286
- `;
287
- }
288
- function win32HookAdapterSource(target) {
289
- const header = isNpxAdapterTarget(target)
290
- ? `${WIN32_ADAPTER_MARKER}
291
- // adapter-version: ${ADAPTER_VERSION}
292
- // target-kind: npx
293
- // target-exec-json: ${JSON.stringify(target.execPath)}
294
- // target-npm-cli-json: ${JSON.stringify(target.npmCli)}
295
- // target-spec-json: ${JSON.stringify(target.spec)}
296
- `
297
- : `${WIN32_ADAPTER_MARKER}
298
- // adapter-version: ${ADAPTER_VERSION}
299
- // target-exec-json: ${JSON.stringify(target.execPath)}
300
- // target-script-json: ${JSON.stringify(target.scriptPath)}
301
- `;
302
- const argv = isNpxAdapterTarget(target)
303
- ? `[${JSON.stringify(target.npmCli)}, "exec", "--yes", "--package", ${JSON.stringify(target.spec)}, "--", "notifai", ...process.argv.slice(2)]`
304
- : `[${JSON.stringify(target.scriptPath)}, ...process.argv.slice(2)]`;
305
- const companion = isNpxAdapterTarget(target)
306
- ? JSON.stringify(target.npmCli)
307
- : JSON.stringify(target.scriptPath);
308
- return `${header}"use strict";
309
- const { spawnSync } = require("node:child_process");
310
- const { statSync } = require("node:fs");
311
- const registeredExec = ${JSON.stringify(target.execPath)};
312
- const registeredCompanion = ${companion};
313
-
314
- function isFile(file) {
315
- try {
316
- return statSync(file).isFile();
317
- } catch {
318
- return false;
319
- }
320
- }
321
-
322
- // The pinned runtime is preferred; the runtime already executing this shim is
323
- // the fallback. Only the interpreter is allowed to move — the code stays pinned.
324
- const runtime = isFile(registeredExec) ? registeredExec : process.execPath;
325
-
326
- if (isFile(registeredCompanion)) {
327
- const result = spawnSync(runtime, ${argv}, {
328
- stdio: "inherit",
329
- windowsHide: true,
330
- env: { ...process.env, NOTIFAI_HOOK_SOURCE_PID: String(process.ppid) },
331
- });
332
- if (result.error) {
333
- process.stderr.write("Notifai hook adapter target is stale; run notifai hooks install.\\n");
334
- process.exit(127);
335
- }
336
- process.exit(result.status === null ? 1 : result.status);
337
- }
338
-
339
- process.stderr.write("Notifai hook adapter target is stale; run notifai hooks install.\\n");
340
- process.exit(127);
341
- `;
342
- }
343
- function adapterFormat(contents) {
344
- if (contents.startsWith(`#!/bin/sh\n${ADAPTER_MARKER}\n`))
345
- return 'posix';
346
- if (contents.startsWith(`${WIN32_ADAPTER_MARKER}\n`))
347
- return 'win32';
348
- return null;
349
- }
350
- function meta(contents, key) {
351
- return new RegExp(`^(?:#|//) ${key}: (.+)$`, 'm').exec(contents)?.[1];
352
- }
353
- function parseTarget(contents) {
354
- const kind = meta(contents, 'target-kind');
355
- const exec = meta(contents, 'target-exec-json');
356
- if (exec === undefined)
357
- return null;
358
- try {
359
- const execPath = JSON.parse(exec);
360
- if (typeof execPath !== 'string')
361
- return null;
362
- if (kind === 'npx') {
363
- const npmCliRaw = meta(contents, 'target-npm-cli-json');
364
- const specRaw = meta(contents, 'target-spec-json');
365
- if (npmCliRaw === undefined || specRaw === undefined)
366
- return null;
367
- const npmCli = JSON.parse(npmCliRaw);
368
- const spec = JSON.parse(specRaw);
369
- return typeof npmCli === 'string' && typeof spec === 'string'
370
- ? { kind: 'npx', execPath, npmCli, spec }
371
- : null;
372
- }
373
- const script = meta(contents, 'target-script-json');
374
- if (script === undefined)
375
- return null;
376
- const scriptPath = JSON.parse(script);
377
- return typeof scriptPath === 'string' ? { execPath, scriptPath } : null;
378
- }
379
- catch {
380
- return null;
381
- }
382
- }
383
- function quote(value) {
384
- return `'${value.replaceAll("'", `'\\''`)}'`;
385
- }
386
- function ensureManagedDirectories(homeDir, host) {
387
- mkdirSync(homeDir, { recursive: true, mode: 0o700 });
388
- for (const dir of [path.join(homeDir, '.notifai'), path.join(homeDir, '.notifai', 'bin')]) {
389
- // Recursive creation is deliberately idempotent. Several harness setup
390
- // processes can reach this account-level adapter at once; an
391
- // exists-then-create sequence lets one valid creator make another throw
392
- // EEXIST. The lstat below remains the security postcondition: success from
393
- // mkdir is not permission to trust a symlink or non-directory occupant.
394
- mkdirSync(dir, { recursive: true, mode: 0o700 });
395
- const stat = lstatSync(dir);
396
- if (stat.isSymbolicLink() || !stat.isDirectory()) {
397
- throw new Error(`${dir} is not a regular directory; refusing to install the hook adapter.`);
398
- }
399
- if (host === 'posix') {
400
- const uid = typeof process.getuid === 'function' ? process.getuid() : undefined;
401
- if (uid !== undefined && stat.uid !== uid) {
402
- throw new Error(`${dir} is owned by uid ${stat.uid}, not the current user.`);
403
- }
404
- chmodSync(dir, 0o700);
405
- }
406
- }
407
- }
408
- function readSafeManagedFile(file) {
409
- const stat = lstatSync(file);
410
- if (stat.isSymbolicLink() || !stat.isFile()) {
411
- throw new Error(`${file} is not a regular file; refusing to replace it.`);
412
- }
413
- const uid = typeof process.getuid === 'function' ? process.getuid() : undefined;
414
- if (uid !== undefined && stat.uid !== uid) {
415
- throw new Error(`${file} is owned by uid ${stat.uid}, not the current user.`);
416
- }
417
- return { contents: readFileSync(file, 'utf8'), mode: stat.mode };
418
- }
419
- //# sourceMappingURL=hook-adapter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hook-adapter.js","sourceRoot":"","sources":["../src/hook-adapter.ts"],"names":[],"mappings":"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"}
@@ -1,105 +0,0 @@
1
- /** Canonical lifecycle event vocabulary shared by installation and execution. */
2
- import { type HookInstallableHarness } from './harnesses.js';
3
- import { type HookHostPlatform } from './hook-adapter.js';
4
- /**
5
- * One harness-neutral table for the lifecycle events this CLI build serves.
6
- *
7
- * Builders, generated-plugin discovery lists, ownership regexes, and
8
- * `HOOK_EVENTS` all derive from this. Per-harness *shape* (async Stop,
9
- * Cursor `loop_limit`, OpenCode native joint names) stays at the adapter;
10
- * this table owns names, budgets, and which harnesses receive each event.
11
- *
12
- * Timeouts are seconds. Document Stop is not taken from `timeoutSeconds`:
13
- * Question Routing hosts use the full-window budget, and the Cursor `stop`
14
- * handler uses the non-routing blocking budget.
15
- */
16
- export declare const HOOK_EVENT_TABLE: readonly [{
17
- readonly notifai: "post-tool-use";
18
- readonly document: "PostToolUse";
19
- readonly cursor: null;
20
- readonly openclaw: false;
21
- readonly opencodeDiscovery: false;
22
- readonly timeoutSeconds: 10;
23
- }, {
24
- readonly notifai: "session-start";
25
- readonly document: "SessionStart";
26
- readonly cursor: "sessionStart";
27
- readonly openclaw: true;
28
- readonly opencodeDiscovery: false;
29
- readonly timeoutSeconds: 5;
30
- }, {
31
- readonly notifai: "subagent-start";
32
- readonly document: "SubagentStart";
33
- readonly cursor: null;
34
- readonly openclaw: true;
35
- readonly opencodeDiscovery: false;
36
- readonly timeoutSeconds: 5;
37
- }, {
38
- readonly notifai: "activation-stop";
39
- readonly document: null;
40
- readonly cursor: "stop";
41
- readonly openclaw: false;
42
- readonly opencodeDiscovery: false;
43
- readonly timeoutSeconds: 5;
44
- readonly cursorLoopLimit: 1;
45
- }, {
46
- readonly notifai: "user-prompt-submit";
47
- readonly document: "UserPromptSubmit";
48
- readonly cursor: "beforeSubmitPrompt";
49
- readonly openclaw: true;
50
- readonly opencodeDiscovery: true;
51
- readonly timeoutSeconds: 15;
52
- }, {
53
- readonly notifai: "stop";
54
- readonly document: "Stop";
55
- readonly cursor: "stop";
56
- readonly openclaw: true;
57
- readonly opencodeDiscovery: true;
58
- readonly timeoutSeconds: 5;
59
- readonly cursorLoopLimit: 3;
60
- }, {
61
- readonly notifai: "session-end";
62
- readonly document: "SessionEnd";
63
- readonly cursor: "sessionEnd";
64
- readonly openclaw: true;
65
- readonly opencodeDiscovery: true;
66
- readonly timeoutSeconds: 3;
67
- }, {
68
- readonly notifai: "attend";
69
- readonly document: null;
70
- readonly cursor: null;
71
- readonly openclaw: false;
72
- readonly opencodeDiscovery: false;
73
- readonly timeoutSeconds: 0;
74
- }];
75
- export type HookEvent = (typeof HOOK_EVENT_TABLE)[number]['notifai'];
76
- export declare const HOOK_EVENTS: readonly HookEvent[];
77
- /** Alternation of Notifai hook-event tokens for command ownership regexes. */
78
- export declare const HOOK_EVENT_PATTERN: string;
79
- export declare const HOOK_EVENT_COMMAND_RE: RegExp;
80
- /**
81
- * OpenCode has no settings document, so discovery reconstructs the joints
82
- * the generated module reports as handlers. Session start/subagent start
83
- * arrive through `experimental.chat.system.transform` rather than this list.
84
- */
85
- export declare const OPENCODE_EVENTS: (readonly ["SessionStart" | "SubagentStart" | "UserPromptSubmit" | "PostToolUse" | "Stop" | "SessionEnd", "stop" | "post-tool-use" | "session-start" | "subagent-start" | "user-prompt-submit" | "session-end"])[];
86
- export declare const OPENCLAW_EVENTS: (readonly ["SessionStart" | "SubagentStart" | "UserPromptSubmit" | "PostToolUse" | "Stop" | "SessionEnd", "stop" | "post-tool-use" | "session-start" | "subagent-start" | "user-prompt-submit" | "session-end"])[];
87
- /**
88
- * Where the Session Attendant handler is installed: SessionStart starts it,
89
- * and UserPromptSubmit and Stop re-arm a session whose attendant died.
90
- */
91
- export declare const ATTEND_DOCUMENT_EVENTS: readonly ["SessionStart", "UserPromptSubmit", "Stop"];
92
- /**
93
- * The attend handler's events for one harness. Codex also needs Interrupt: an
94
- * interrupted Codex turn fires Interrupt instead of Stop, and the attendant
95
- * reads a Codex thread's activity from its own turn boundaries.
96
- */
97
- export declare function attendDocumentEvents(harness: HookInstallableHarness | undefined): readonly string[];
98
- /**
99
- * Whether this build installs the Session Attendant for a harness: Claude Code
100
- * and Codex, on POSIX only. Claude Code on Windows has no session descriptor
101
- * or inbox socket; Codex on Windows has no proven hook parent process.
102
- */
103
- export declare function installsSessionAttendant(harness: HookInstallableHarness | undefined, platform?: NodeJS.Platform | HookHostPlatform): boolean;
104
- /** Lifecycle handlers one installed harness must carry in this CLI build. */
105
- export declare function requiredHookEvents(harness: HookInstallableHarness, platform?: NodeJS.Platform | HookHostPlatform): readonly HookEvent[];
@@ -1,130 +0,0 @@
1
- /** Canonical lifecycle event vocabulary shared by installation and execution. */
2
- import {} from './harnesses.js';
3
- import { hookHostPlatform } from './hook-adapter.js';
4
- /**
5
- * One harness-neutral table for the lifecycle events this CLI build serves.
6
- *
7
- * Builders, generated-plugin discovery lists, ownership regexes, and
8
- * `HOOK_EVENTS` all derive from this. Per-harness *shape* (async Stop,
9
- * Cursor `loop_limit`, OpenCode native joint names) stays at the adapter;
10
- * this table owns names, budgets, and which harnesses receive each event.
11
- *
12
- * Timeouts are seconds. Document Stop is not taken from `timeoutSeconds`:
13
- * Question Routing hosts use the full-window budget, and the Cursor `stop`
14
- * handler uses the non-routing blocking budget.
15
- */
16
- export const HOOK_EVENT_TABLE = [
17
- {
18
- notifai: 'post-tool-use',
19
- document: 'PostToolUse',
20
- cursor: null,
21
- openclaw: false,
22
- opencodeDiscovery: false,
23
- timeoutSeconds: 10,
24
- },
25
- {
26
- notifai: 'session-start',
27
- document: 'SessionStart',
28
- cursor: 'sessionStart',
29
- openclaw: true,
30
- opencodeDiscovery: false,
31
- timeoutSeconds: 5,
32
- },
33
- {
34
- notifai: 'subagent-start',
35
- document: 'SubagentStart',
36
- cursor: null,
37
- openclaw: true,
38
- opencodeDiscovery: false,
39
- timeoutSeconds: 5,
40
- },
41
- {
42
- notifai: 'activation-stop',
43
- document: null,
44
- cursor: 'stop',
45
- openclaw: false,
46
- opencodeDiscovery: false,
47
- timeoutSeconds: 5,
48
- cursorLoopLimit: 1,
49
- },
50
- {
51
- notifai: 'user-prompt-submit',
52
- document: 'UserPromptSubmit',
53
- cursor: 'beforeSubmitPrompt',
54
- openclaw: true,
55
- opencodeDiscovery: true,
56
- timeoutSeconds: 15,
57
- },
58
- {
59
- notifai: 'stop',
60
- document: 'Stop',
61
- cursor: 'stop',
62
- openclaw: true,
63
- opencodeDiscovery: true,
64
- timeoutSeconds: 5,
65
- cursorLoopLimit: 3,
66
- },
67
- {
68
- notifai: 'session-end',
69
- document: 'SessionEnd',
70
- cursor: 'sessionEnd',
71
- openclaw: true,
72
- opencodeDiscovery: true,
73
- timeoutSeconds: 3,
74
- },
75
- {
76
- // The Session Attendant. It is not one document event: it is installed
77
- // as a second, asynchronous handler on each of ATTEND_DOCUMENT_EVENTS.
78
- notifai: 'attend',
79
- document: null,
80
- cursor: null,
81
- openclaw: false,
82
- opencodeDiscovery: false,
83
- timeoutSeconds: 0,
84
- },
85
- ];
86
- export const HOOK_EVENTS = HOOK_EVENT_TABLE.map((row) => row.notifai);
87
- /** Alternation of Notifai hook-event tokens for command ownership regexes. */
88
- export const HOOK_EVENT_PATTERN = HOOK_EVENTS.join('|');
89
- export const HOOK_EVENT_COMMAND_RE = new RegExp(` hook (${HOOK_EVENT_PATTERN})\\b`);
90
- /**
91
- * OpenCode has no settings document, so discovery reconstructs the joints
92
- * the generated module reports as handlers. Session start/subagent start
93
- * arrive through `experimental.chat.system.transform` rather than this list.
94
- */
95
- export const OPENCODE_EVENTS = HOOK_EVENT_TABLE.filter((row) => row.opencodeDiscovery && row.document !== null).map((row) => [row.document, row.notifai]);
96
- export const OPENCLAW_EVENTS = HOOK_EVENT_TABLE.filter((row) => row.openclaw && row.document !== null).map((row) => [row.document, row.notifai]);
97
- /**
98
- * Where the Session Attendant handler is installed: SessionStart starts it,
99
- * and UserPromptSubmit and Stop re-arm a session whose attendant died.
100
- */
101
- export const ATTEND_DOCUMENT_EVENTS = ['SessionStart', 'UserPromptSubmit', 'Stop'];
102
- /**
103
- * The attend handler's events for one harness. Codex also needs Interrupt: an
104
- * interrupted Codex turn fires Interrupt instead of Stop, and the attendant
105
- * reads a Codex thread's activity from its own turn boundaries.
106
- */
107
- export function attendDocumentEvents(harness) {
108
- return harness === 'codex' ? [...ATTEND_DOCUMENT_EVENTS, 'Interrupt'] : ATTEND_DOCUMENT_EVENTS;
109
- }
110
- /**
111
- * Whether this build installs the Session Attendant for a harness: Claude Code
112
- * and Codex, on POSIX only. Claude Code on Windows has no session descriptor
113
- * or inbox socket; Codex on Windows has no proven hook parent process.
114
- */
115
- export function installsSessionAttendant(harness, platform) {
116
- return (harness === 'claude-code' || harness === 'codex') && hookHostPlatform(platform) === 'posix';
117
- }
118
- /** Lifecycle handlers one installed harness must carry in this CLI build. */
119
- export function requiredHookEvents(harness, platform) {
120
- if (harness === 'opencode' || harness === 'openclaw' || harness === 'hermes')
121
- return [];
122
- return HOOK_EVENT_TABLE.filter((row) => row.notifai === 'post-tool-use'
123
- ? harness === 'codex' && installsSessionAttendant(harness, platform)
124
- : row.notifai === 'attend'
125
- ? installsSessionAttendant(harness, platform)
126
- : harness === 'cursor'
127
- ? row.cursor !== null
128
- : row.document !== null).map((row) => row.notifai);
129
- }
130
- //# sourceMappingURL=hook-events.js.map