@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,434 +0,0 @@
1
- /**
2
- * Native queues carry a wake, never User words. The foreground consumer reads
3
- * the current pending inputs and claims one bounded batch immediately before
4
- * presentation. A late wake therefore cannot resurrect an acknowledged answer.
5
- */
6
- import { randomUUID } from 'node:crypto';
7
- import { isDeepStrictEqual } from 'node:util';
8
- import { markCodexOrdinaryPresentation } from './codex-question-bindings.js';
9
- import { readFileSync } from 'node:fs';
10
- import path from 'node:path';
11
- import { atomicWriteFileSync } from './atomic-file.js';
12
- import { sanitizeSessionId, stateDir } from './config.js';
13
- import { answersContext, clearAcknowledgementObligation, recordMessageAcknowledgementDue } from './hook-acknowledgements.js';
14
- import { retiringQuestion } from './hook-question-retirement.js';
15
- import { readSessionIncarnation, readSessionState, recordSessionNotified, sessionHasEnded, updateSessionState } from './hook-session-state.js';
16
- import { sessionMessageContext } from './injection-render.js';
17
- import { currentProcessIdentity, processIdentityLiveness } from './process-identity.js';
18
- import { answerWriterGone, beginHandOff, readDeliveryJournal } from './session-delivery.js';
19
- import { CodexControlNotSent } from './codex-native-control.js';
20
- import { connectCodexQueue } from './codex-queue-control.js';
21
- import { readNativeTurnSnapshot } from './codex-native-turn.js';
22
- import { admitInputWake, detachInputWakes, electInputWake, observeInputWake, readInputWakes, reconcileInputWakes, recoverUncertainInputWake } from './session-input-wakes.js';
23
- import { readAttendantLease, nativeTurnContinues } from './session-attendant-state.js';
24
- export function sessionInputWake(token) {
25
- if (token !== undefined)
26
- return `Notifai wake ${token}. Use any Notifai input supplied with this turn. Only if none was supplied, run \`notifai receive\` once; if it is empty, continue your work. This wake contains no note, answer, or approval.`;
27
- return `Notifai — user input may be waiting for this session. Run \`notifai receive\` before continuing. If no input remains, continue your work. This wake-up contains no note, answer, or approval.`;
28
- }
29
- /** Atomically coalesce native wakes until one actually reaches its consumer. */
30
- export async function wakeSessionInputs(sessionId, env, send, log) {
31
- const incarnation = readSessionIncarnation(sessionId, env)?.incarnation ?? `session:${sessionId}`;
32
- const writer = currentProcessIdentity();
33
- if (writer === null || sessionHasEnded(sessionId, env))
34
- return;
35
- const token = randomUUID();
36
- let elected = false;
37
- updateSessionState(sessionId, env, (state) => {
38
- if (state.input_wake?.incarnation === incarnation &&
39
- (state.input_wake.queued || processIdentityLiveness(state.input_wake.writer) !== 'gone'))
40
- return state;
41
- elected = true;
42
- return { ...state, input_wake: { incarnation, token, queued: false, writer } };
43
- });
44
- if (!elected) {
45
- log?.debug('delivery.handoff', { route: 'input-wake', stage: 'coalesced', session: sessionId });
46
- return;
47
- }
48
- let sent = false;
49
- try {
50
- sent = await send(sessionInputWake());
51
- log?.info('delivery.handoff', { route: 'input-wake', stage: sent ? 'queued' : 'deferred', session: sessionId });
52
- if (sent)
53
- updateSessionState(sessionId, env, (state) => state.input_wake?.token === token
54
- ? { ...state, input_wake: { ...state.input_wake, queued: true } } : state);
55
- }
56
- finally {
57
- if (!sent)
58
- updateSessionState(sessionId, env, (state) => {
59
- if (state.input_wake?.token !== token)
60
- return state;
61
- const next = { ...state };
62
- delete next.input_wake;
63
- return next;
64
- });
65
- }
66
- }
67
- export function observeSessionInputWake(sessionId, env, prompt) {
68
- if (prompt !== undefined) {
69
- const matched = /^Notifai wake ([0-9a-f-]{36})\. /.exec(prompt);
70
- if (matched !== null) {
71
- const owned = readInputWakes({ sessionId, env }).find(a => a.token === matched[1] && a.text === prompt);
72
- if (owned !== undefined)
73
- observeInputWake({ sessionId, env }, owned.token);
74
- return;
75
- }
76
- }
77
- if (prompt !== sessionInputWake())
78
- return;
79
- updateSessionState(sessionId, env, (state) => {
80
- const next = { ...state };
81
- delete next.input_wake;
82
- return next;
83
- });
84
- }
85
- export function stageSessionAnswers(sessionId, env, accepted) {
86
- updateSessionState(sessionId, env, (state) => {
87
- if (state.accepted?.recorded_at !== accepted.recorded_at)
88
- return state;
89
- const waiting = [...(state.waiting_answers ?? [])];
90
- for (const answer of accepted.answers) {
91
- if (!waiting.some((entry) => entry.pending.request_id === answer.pending.request_id))
92
- waiting.push(answer);
93
- }
94
- const next = { ...state, waiting_answers: waiting };
95
- delete next.accepted;
96
- return next;
97
- });
98
- // A reply proves submission even when its HTTP receipt was lost. Wake a
99
- // dormant resident writer without depending on that missing receipt.
100
- recordSessionNotified(sessionId, env, accepted.recorded_at);
101
- }
102
- /** The existing route wakes the exact owner, but no longer owns answer text. */
103
- export function sessionInputRoute(sessionId, env, route, log, wakeOwner = 'producer') {
104
- return { ...route, defer: async (accepted) => {
105
- stageSessionAnswers(sessionId, env, accepted);
106
- // A live resident owns scheduling; its completion probe also covers the
107
- // case where no more tool callbacks occur. Preserve return when absent.
108
- if (wakeOwner === 'attendant') {
109
- const owner = readSessionIncarnation(sessionId, env);
110
- const lease = readAttendantLease(sessionId, env);
111
- if (owner !== null && lease?.incarnation === owner.incarnation)
112
- return;
113
- }
114
- await wakeSessionInputs(sessionId, env, async (text) => {
115
- const result = await route.deliver({
116
- context: text, answers: 0, remaining: 0, request_ids: [], journal_recorded_at: accepted.recorded_at,
117
- commitDelivery: () => !sessionHasEnded(sessionId, env),
118
- });
119
- return result.acknowledgement === 'delivered';
120
- }, log);
121
- } };
122
- }
123
- function messagesPath(sessionId, env) {
124
- return path.join(stateDir(env), 'sessions', `${sanitizeSessionId(sessionId)}.inputs.json`);
125
- }
126
- /** Cache only: the service remains authoritative and claims fence stale copies. */
127
- export function stageSessionMessages(sessionId, env, lease, messages) {
128
- updateSessionState(sessionId, env, state => {
129
- atomicWriteFileSync(messagesPath(sessionId, env), JSON.stringify({ session_id: sessionId, ...lease, messages }));
130
- return state;
131
- });
132
- }
133
- export function readSessionMessages(sessionId, env, lease) {
134
- return readSessionMessageCache(sessionId, env, lease) ?? [];
135
- }
136
- function readSessionMessageCache(sessionId, env, lease) {
137
- try {
138
- const data = JSON.parse(readFileSync(messagesPath(sessionId, env), 'utf8'));
139
- if (data.session_id !== sessionId || data.incarnation !== lease.incarnation || data.generation !== lease.generation || !Array.isArray(data.messages))
140
- return null;
141
- if (!data.messages.every((m) => typeof m.message_id === 'string' && /^sm_[A-Za-z0-9_-]+$/.test(m.message_id) &&
142
- typeof m.created_at === 'string' && typeof m.agent_acknowledgement_text_required === 'boolean' &&
143
- (m.kind === 'note' ? typeof m.body === 'string' : m.kind === 'answer_edit' && typeof m.request_id === 'string' && typeof m.text === 'string' && Array.isArray(m.answers))))
144
- return null;
145
- return data.messages;
146
- }
147
- catch {
148
- return null;
149
- }
150
- }
151
- function pendingSessionInputs(sessionId, env, lease, state = readSessionState(sessionId, env), cachedMessages) {
152
- const written = new Set(readDeliveryJournal(sessionId, env)
153
- .filter((entry) => ['writing', 'written', 'failed'].includes(entry.stage))
154
- .map((entry) => entry.subject.type === 'answer' ? entry.subject.request_id : entry.subject.message_id));
155
- const owed = new Set(state.acknowledgement_due?.map((entry) => entry.request_id));
156
- const answers = (state.waiting_answers ?? []).filter((answer) => answer.pending.request_id !== undefined && !written.has(answer.pending.request_id) &&
157
- owed.has(answer.pending.request_id)).slice(0, 20);
158
- // Answers precede their edits; notes retain the service's immutable order.
159
- const messages = (cachedMessages ?? (lease === null ? [] : readSessionMessages(sessionId, env, lease)))
160
- .filter((message) => !written.has(message.message_id)).slice(0, 20 - answers.length);
161
- return { answers, messages };
162
- }
163
- export function hasSessionInputs(sessionId, env, lease) {
164
- const { answers, messages } = pendingSessionInputs(sessionId, env, lease);
165
- return answers.length + messages.length > 0;
166
- }
167
- /** Read-only under the state lock. Unknown cache state is not an empty inbox. */
168
- export function pendingInputRevisionIds(sessionId, env, lease, state) {
169
- const cached = lease === null ? [] : readSessionMessageCache(sessionId, env, lease);
170
- if (cached === null)
171
- return null;
172
- const { answers, messages } = pendingSessionInputs(sessionId, env, lease, state, cached);
173
- return [
174
- ...answers.map(a => `answer:${a.pending.request_id}:${a.replies.map(r => r.seq).join(',')}`),
175
- ...messages.map(m => `message:${m.message_id}`),
176
- ];
177
- }
178
- /** Optional exact queue integration. False means capability was unavailable
179
- * before election, so the existing supported CLI wake remains the fallback. */
180
- export async function wakeCodexSessionInputs(input) {
181
- const owner = readSessionIncarnation(input.sessionId, input.env);
182
- if (owner === null || owner.incarnation !== input.lease.incarnation || !input.mayWrite())
183
- return true;
184
- const generic = readSessionState(input.sessionId, input.env).input_wake;
185
- if (generic?.incarnation === owner.incarnation && (generic.queued || processIdentityLiveness(generic.writer) !== 'gone'))
186
- return true;
187
- const initial = pendingInputRevisionIds(input.sessionId, input.env, input.lease);
188
- if (initial === null || (initial.length === 0 && !readInputWakes(input).some(a => !['consumed', 'cancelled'].includes(a.phase))))
189
- return true;
190
- const control = await (input.connect ?? connectCodexQueue)(input.sessionId, input.env, performance.now() + 2_000);
191
- if (control === null) {
192
- const pending = pendingInputRevisionIds(input.sessionId, input.env, input.lease);
193
- return pending === null || readInputWakes(input).some(a => a.incarnation === owner.incarnation &&
194
- !['consumed', 'cancelled'].includes(a.phase) && a.inputIds.some(id => pending.includes(id)));
195
- }
196
- try {
197
- // Mutating lifecycle/attendant observers run outside the wake-state lock.
198
- const allowed = input.mayWrite() && input.mayWake();
199
- const native = () => {
200
- const proof = readSessionState(input.sessionId, input.env).codex_native_turn;
201
- return proof?.key === owner.key ? readNativeTurnSnapshot(proof.transcript_path, input.sessionId, input.env) : null;
202
- };
203
- const gate = { ...input, owner: { key: owner.key, incarnation: owner.incarnation, generation: input.lease.generation },
204
- namespace: control.namespace, control, native,
205
- pendingIds: () => {
206
- const lease = readAttendantLease(input.sessionId, input.env);
207
- return lease?.incarnation === input.lease.incarnation && lease.generation === input.lease.generation
208
- ? pendingInputRevisionIds(input.sessionId, input.env, lease) : null;
209
- },
210
- mayWake: () => { const observed = native(); return allowed && (observed === null ? input.unknownAllowed?.() === true : observed.latest.ended && nativeTurnContinues(input.sessionId, input.env, owner.key, observed)); },
211
- text: (token) => sessionInputWake(token) };
212
- detachInputWakes(gate);
213
- await reconcileInputWakes(input, control);
214
- if (!allowed || !input.mayWrite())
215
- return true;
216
- const elected = electInputWake(gate) ?? await recoverUncertainInputWake(gate);
217
- if (elected !== null)
218
- await admitInputWake({ ...gate, token: elected.token, control: {
219
- ...control, add: async (token, text) => {
220
- // Recovery may have awaited a native lookup. Refresh in-process lease
221
- // authority at the actual byte boundary, outside every state lock.
222
- if (!input.mayWrite() || !input.mayWake())
223
- throw new CodexControlNotSent('Wake authorization changed before send');
224
- return control.add(token, text);
225
- },
226
- } });
227
- return true;
228
- }
229
- finally {
230
- control.close();
231
- }
232
- }
233
- /** Hook drains and the resident observer both call this bounded cleanup path.
234
- * It never elects a wake, claims input, or acquires the delivery sequencer. */
235
- export async function reconcileSessionInputWakes(sessionId, env, connect = connectCodexQueue) {
236
- const scope = { sessionId, env };
237
- const attempts = readInputWakes(scope);
238
- if (!attempts.some(a => !['consumed', 'cancelled'].includes(a.phase)))
239
- return;
240
- const lease = readAttendantLease(sessionId, env);
241
- // Losing the lease does not prove cached Session Messages disappeared.
242
- if (lease !== null || attempts.every(a => a.generation === null)) {
243
- detachInputWakes({ ...scope, pendingIds: () => {
244
- const current = readAttendantLease(sessionId, env);
245
- if (current?.incarnation !== lease?.incarnation || current?.generation !== lease?.generation)
246
- return null;
247
- return pendingInputRevisionIds(sessionId, env, current);
248
- } });
249
- }
250
- if (!readInputWakes(scope).some(a => a.detached && !['consumed', 'cancelled'].includes(a.phase) && (a.nextCheckAt ?? 0) <= Date.now()))
251
- return;
252
- const control = await connect(sessionId, env, performance.now() + 750);
253
- if (control === null)
254
- return;
255
- try {
256
- await reconcileInputWakes(scope, control);
257
- }
258
- finally {
259
- control.close();
260
- }
261
- }
262
- function samePendingAnswer(state, answer) {
263
- return state.acknowledgement_due?.some(entry => entry.request_id === answer.pending.request_id) === true &&
264
- state.waiting_answers?.some(entry => isDeepStrictEqual(entry, answer)) === true;
265
- }
266
- /** One ordered prefix, at most 20 inputs, with ownership checked at the byte. */
267
- async function drainSessionInputsOnce(input) {
268
- const { sequencer: deps, lease } = input;
269
- const initial = readSessionState(deps.sessionId, deps.env);
270
- const batch = pendingSessionInputs(deps.sessionId, deps.env, lease, initial);
271
- const nativeAt = input.nativeAnswers === undefined ? -1 : batch.answers.findIndex(answer => answer.delivery_claim === true && input.nativeAnswers.eligible(answer, initial));
272
- const answers = nativeAt < 0 ? batch.answers : batch.answers.slice(0, nativeAt === 0 ? 1 : nativeAt);
273
- const messages = nativeAt < 0 ? batch.messages : [];
274
- if (answers.length + messages.length === 0 || !input.mayWrite())
275
- return false;
276
- // An unfenced answer has no server claim to reject a stale local copy.
277
- // Reconcile it before presentation; inability to check must defer it.
278
- for (const answer of answers.filter((entry) => entry.delivery_claim !== true)) {
279
- try {
280
- const result = await deps.client.agentAcknowledgement(answer.pending.request_id, { waitSeconds: 0 });
281
- if (result.agent_acknowledgement !== null)
282
- clearAcknowledgementObligation(deps.sessionId, deps.env, answer.pending.request_id);
283
- }
284
- catch {
285
- return false;
286
- }
287
- }
288
- const claimUntil = deps.monotonic() + 750;
289
- const handOff = await beginHandOff(deps, {
290
- lease, lockWaitMs: 0, stopAtRefusal: true, mayWrite: input.mayWrite,
291
- mayClaim: () => deps.monotonic() < claimUntil,
292
- subjects: [
293
- ...answers.filter((answer) => answer.delivery_claim === true).map((answer) => ({ type: 'answer', request_id: answer.pending.request_id })),
294
- ...messages.map((message) => ({ type: 'session_message', message_id: message.message_id })),
295
- ],
296
- earlierAnswerWriterGone: (subject) => {
297
- const message = subject.type === 'session_message' ? messages.find((entry) => entry.message_id === subject.message_id) : undefined;
298
- return message?.kind === 'answer_edit' && answerWriterGone(deps.sessionId, deps.env, message.request_id);
299
- },
300
- });
301
- if (handOff === null)
302
- return false;
303
- const terminal = new Set(handOff.refused.filter((entry) => entry.reason === 'not_claimable' || entry.reason === 'not_found')
304
- .flatMap((entry) => entry.subject.type === 'answer' ? [entry.subject.request_id] : []));
305
- if (terminal.size > 0)
306
- updateSessionState(deps.sessionId, deps.env, (latest) => ({
307
- ...latest, waiting_answers: (latest.waiting_answers ?? []).filter((answer) => !terminal.has(answer.pending.request_id)),
308
- }));
309
- const ids = new Set(handOff.claimed.map((claim) => claim.subject.type === 'answer' ? claim.subject.request_id : claim.subject.message_id));
310
- // A concurrent consumer may have drained an unclaimed answer while this
311
- // reader waited for the delivery lock. Re-read while holding that lock.
312
- const current = readSessionState(deps.sessionId, deps.env);
313
- if (answers.some(answer => current.waiting_answers?.some(entry => entry.pending.request_id === answer.pending.request_id && !isDeepStrictEqual(entry, answer)))) {
314
- await handOff.finish('not-written');
315
- return false;
316
- }
317
- const readyAnswers = answers.filter((answer) => samePendingAnswer(current, answer) &&
318
- (answer.delivery_claim !== true || ids.has(answer.pending.request_id)));
319
- const readyMessages = messages.filter((message) => ids.has(message.message_id));
320
- if (readyAnswers.length + readyMessages.length === 0 || !input.mayWrite() || !handOff.writable()) {
321
- await handOff.finish('not-written');
322
- return false;
323
- }
324
- const text = [
325
- ...(readyAnswers.length === 0 ? [] : [answersContext(readyAnswers, current.pending?.length ?? 0)]),
326
- ...readyMessages.map(sessionMessageContext),
327
- ].join('\n\n');
328
- let began = false;
329
- let outputAttempted = false;
330
- let consumedState = false;
331
- let prepared = null;
332
- const restoreUnwritten = () => {
333
- updateSessionState(deps.sessionId, deps.env, (latest) => ({
334
- ...latest, waiting_answers: [
335
- ...readyAnswers.filter((answer) => latest.acknowledgement_due?.some((owed) => owed.request_id === answer.pending.request_id) &&
336
- !latest.waiting_answers?.some((entry) => entry.pending.request_id === answer.pending.request_id)),
337
- ...(latest.waiting_answers ?? []),
338
- ],
339
- }));
340
- for (const message of readyMessages) {
341
- if (!current.message_acknowledgement_due?.some((entry) => entry.message_id === message.message_id)) {
342
- clearAcknowledgementObligation(deps.sessionId, deps.env, message.message_id);
343
- }
344
- }
345
- };
346
- try {
347
- if (nativeAt === 0 && readyAnswers.length === 1 && input.nativeAnswers !== undefined) {
348
- prepared = await input.nativeAnswers.prepare(readyAnswers[0], current, deps.monotonic() + handOff.remainingMs());
349
- }
350
- if (!handOff.begin(() => !sessionHasEnded(deps.sessionId, deps.env), prepared === null ? {} : { presentation: prepared.presentation })) {
351
- await handOff.finish('not-written');
352
- return false;
353
- }
354
- began = true;
355
- // Persist the selected revision and consumption before bytes. A changed
356
- // revision remains pending for a fresh handoff, never this prepared write.
357
- const consumed = new Set(readyAnswers.map((answer) => answer.pending.request_id));
358
- updateSessionState(deps.sessionId, deps.env, (latest) => {
359
- if (prepared !== null) {
360
- const checked = prepared.validate(latest);
361
- latest = checked.state;
362
- if (!checked.valid)
363
- return latest;
364
- }
365
- if (!input.mayWrite() || !handOff.writable() || !readyAnswers.every(answer => samePendingAnswer(latest, answer)))
366
- return latest;
367
- if (prepared === null)
368
- latest = markCodexOrdinaryPresentation(latest, new Set(readyAnswers.flatMap(answer => answer.pending.question_id === undefined ? [] : [answer.pending.question_id])));
369
- const retiring = [...(latest.retiring ?? [])];
370
- for (const answer of readyAnswers) {
371
- const entry = retiringQuestion(answer.pending, 'answered');
372
- if (entry !== null && !retiring.some((item) => item.request_id === entry.request_id))
373
- retiring.push(entry);
374
- }
375
- consumedState = true;
376
- return { ...latest, waiting_answers: (latest.waiting_answers ?? []).filter((answer) => !consumed.has(answer.pending.request_id)), retiring };
377
- });
378
- if (!consumedState) {
379
- await handOff.finish('aborted');
380
- return false;
381
- }
382
- for (const message of readyMessages)
383
- recordMessageAcknowledgementDue(deps.sessionId, deps.env, {
384
- message_id: message.message_id, recorded_at: deps.wall(), text_required: message.agent_acknowledgement_text_required,
385
- });
386
- if (!input.mayWrite() || !handOff.writable()) {
387
- restoreUnwritten();
388
- await handOff.finish('aborted');
389
- return false;
390
- }
391
- outputAttempted = true;
392
- if (prepared === null)
393
- input.write(text);
394
- else
395
- await prepared.write(() => input.mayWrite() && handOff.writable());
396
- if (readyAnswers.length > 0)
397
- updateSessionState(deps.sessionId, deps.env, (latest) => ({
398
- ...latest, continuation: { answered_at: deps.wall(), count: (latest.continuation?.count ?? 0) + 1 },
399
- }));
400
- await handOff.finish('written');
401
- deps.log?.info('delivery.handoff', {
402
- route: prepared === null ? 'input-drain' : 'native-answer', stage: 'presented', answers: readyAnswers.length, messages: readyMessages.length,
403
- request_ids: readyAnswers.map((answer) => answer.pending.request_id), message_ids: readyMessages.map((message) => message.message_id),
404
- oldest_message_age_ms: Math.max(0, ...readyMessages.map((message) => deps.wall() - Date.parse(message.created_at))),
405
- });
406
- return true;
407
- }
408
- catch (error) {
409
- // Only the native transport can positively prove that no bytes left. Do
410
- // not echo now: a new handoff must reacquire claims and recheck revisions.
411
- if (prepared !== null && error instanceof CodexControlNotSent)
412
- outputAttempted = false;
413
- if (consumedState && !outputAttempted)
414
- restoreUnwritten();
415
- await handOff.finish(outputAttempted ? 'failed' : began ? 'aborted' : 'not-written');
416
- if (prepared !== null && error instanceof CodexControlNotSent)
417
- return false;
418
- throw error;
419
- }
420
- finally {
421
- prepared?.close();
422
- }
423
- }
424
- export async function drainSessionInputs(input) {
425
- try {
426
- return await drainSessionInputsOnce(input);
427
- }
428
- finally {
429
- // Delivery bookkeeping has released its sequencer before native cleanup.
430
- await reconcileSessionInputWakes(input.sequencer.sessionId, input.sequencer.env)
431
- .catch(() => undefined);
432
- }
433
- }
434
- //# sourceMappingURL=session-inputs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-inputs.js","sourceRoot":"","sources":["../src/session-inputs.ts"],"names":[],"mappings":"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"}
@@ -1,56 +0,0 @@
1
- import { type SourceContextHarness } from './harnesses.js';
2
- type SessionLabelSource = 'explicit' | 'harness' | 'fallback';
3
- export interface SessionLabelInput {
4
- env: NodeJS.ProcessEnv;
5
- sessionId: string;
6
- harness?: SourceContextHarness;
7
- explicitLabel?: string;
8
- harnessLabel?: string;
9
- harnessLabelPending?: boolean;
10
- now?: number;
11
- }
12
- export interface SessionLabelRenameInput {
13
- env: NodeJS.ProcessEnv;
14
- sessionId: string;
15
- label: string;
16
- harness?: SourceContextHarness;
17
- now?: number;
18
- }
19
- export type SessionLabelResolution = {
20
- ok: true;
21
- label: string;
22
- source: SessionLabelSource;
23
- /** Durable proof that this stored semantic label replaced a fallback. */
24
- previousSource?: 'fallback';
25
- /** An ordinary send cannot rename an existing semantic label. */
26
- ignoredExplicitLabel?: true;
27
- } | {
28
- ok: false;
29
- error: string;
30
- };
31
- export declare function normalizeExplicitSessionLabel(input: Pick<SessionLabelRenameInput, 'env' | 'sessionId' | 'label'>): {
32
- ok: true;
33
- label: string;
34
- } | {
35
- ok: false;
36
- error: string;
37
- };
38
- /** Stable English shape using the machine's local calendar and clock. */
39
- export declare function formatSessionFirstSeen(now: number): string;
40
- /**
41
- * Freeze the first accepted human name for one immutable session.
42
- *
43
- * A title supplied by a trusted harness adapter wins, then explicit
44
- * agent/User input, then a generated fallback. The environment-first order is
45
- * what makes `--session-label` safe to pass unconditionally: an agent never
46
- * needs to know which environments name their own sessions, because where one
47
- * does, the explicit label is simply not used. A frozen generated fallback is
48
- * the one exception to permanence: it names nothing, so the first semantic
49
- * candidate to arrive later — a trusted harness title first, then explicit —
50
- * replaces it once. Semantic names then stay frozen even when their branch,
51
- * worktree, title candidate, or notification changes.
52
- */
53
- export declare function resolveSessionLabel(input: SessionLabelInput): SessionLabelResolution;
54
- /** Replace the local frozen label only after the Account-authoritative rename succeeds. */
55
- export declare function renameStoredSessionLabel(input: SessionLabelRenameInput): SessionLabelResolution;
56
- export {};