@raidiant/notifai 11.7.1-beta.2 → 12.0.0-beta.5

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 +56 -4
  2. package/NOTICE +16 -0
  3. package/THIRD_PARTY_NOTICES +725 -0
  4. package/bin/notifai.mjs +11387 -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,273 +0,0 @@
1
- import { resolveCommandSession } from './command-session.js';
2
- import { terminateCodexQuestions } from './codex-question-bindings.js';
3
- import { EXIT, authedClient, loadLoggedConfig, reportError, } from './commands-core.js';
4
- import { acknowledgementCommand, printAcknowledgementStatus } from './commands-send-support.js';
5
- import { parkForRetirement, retireQueuedQuestions } from './hook-question-retirement.js';
6
- import { dropPendingQuestion, inspectQuestionState } from './hook-question-state.js';
7
- import { readSessionState, updateSessionState } from './hook-session-state.js';
8
- import {} from './hook-types.js';
9
- /**
10
- * An explicit close is a retirement: whatever replies it returns go to the
11
- * command's caller, never through a claimed hand-off, so they are not selected
12
- * for delivery. The printed response keeps its released shape.
13
- */
14
- async function retireReplies(client, requestId) {
15
- const response = {
16
- ...(await client.closeReplies(requestId, 'retire')),
17
- };
18
- delete response.close_disposition;
19
- delete response.delivered_reply_seq;
20
- return response;
21
- }
22
- /** Retire a question so a late answer is rejected rather than silently lost. */
23
- export async function closeCommand(deps, requestId, flags = {}) {
24
- if (flags.pending === true && requestId !== undefined) {
25
- deps.io.err('Pass a question or request id or --pending, not both.');
26
- return EXIT.usage;
27
- }
28
- if (flags.pending !== true && requestId === undefined) {
29
- deps.io.err('Pass a question or request id or --pending.');
30
- return EXIT.usage;
31
- }
32
- if (flags.pending === true) {
33
- return closePendingQuestions(deps, flags.json === true);
34
- }
35
- const questionId = requestId.startsWith('q_') ? requestId : undefined;
36
- if (questionId !== undefined) {
37
- const lookup = inspectQuestionState(questionId, deps.env);
38
- if (!lookup.found) {
39
- deps.io.err(lookup.ambiguous
40
- ? `Question ${questionId} appears in more than one local Agent Session; refusing to guess.`
41
- : `No local registration state exists for ${questionId}. Use the original request id if available.`);
42
- return EXIT.failed;
43
- }
44
- }
45
- const bindingOwner = resolveCommandSession(deps, requestId);
46
- if (bindingOwner !== null)
47
- revokeNativeBindings(bindingOwner.sessionId, deps.env, new Set([requestId]));
48
- const local = await closeLocalQuestion(deps, requestId, flags.json === true);
49
- if (local !== null)
50
- return local;
51
- // Answer delivery removes the pending entry but retains its stable identity.
52
- // Re-read after local retirement: promotion or delivery may have raced it.
53
- if (questionId !== undefined) {
54
- const lookup = inspectQuestionState(questionId, deps.env);
55
- if (!lookup.found) {
56
- deps.io.err(`Cannot resolve question ${questionId} uniquely; use the original request id if available.`);
57
- return EXIT.failed;
58
- }
59
- const question = lookup.question;
60
- if (question.state === 'withdrawn' && question.submitted === false) {
61
- if (flags.json)
62
- deps.io.out(JSON.stringify(question, null, 2));
63
- else
64
- deps.io.out(`Question ${questionId} was already withdrawn without submission.`);
65
- return EXIT.ok;
66
- }
67
- const resolved = question.request_id ?? question.frozen_request_id;
68
- if (resolved === null) {
69
- deps.io.err(`Question ${questionId} has no remote request identity; inspect its status before retrying.`);
70
- return EXIT.failed;
71
- }
72
- requestId = resolved;
73
- }
74
- const lifecycleSession = resolveCommandSession(deps, requestId);
75
- const config = loadLoggedConfig(deps, {
76
- cwd: deps.cwd,
77
- env: deps.env,
78
- ...(lifecycleSession === null ? {} : { sessionId: lifecycleSession.sessionId }),
79
- });
80
- const authed = authedClient(deps, config);
81
- if (!authed)
82
- return EXIT.auth;
83
- try {
84
- const response = await retireReplies(authed.client, requestId);
85
- forgetClosedQuestion(deps, requestId);
86
- if (flags.json) {
87
- deps.io.out(JSON.stringify({
88
- ...response,
89
- ...(questionId === undefined ? {} : { question_id: questionId }),
90
- agent_acknowledgement_required: response.replies.length > 0 || response.agent_acknowledgement_required,
91
- acknowledgement_command: acknowledgementCommand(response.request_id, response.agent_acknowledgement_text_required, response.agent_acknowledgement, response.replies.length > 0),
92
- }, null, 2));
93
- }
94
- else {
95
- deps.io.out(`Closed the reply window for ${requestId}.`);
96
- if (response.replies.length > 0)
97
- printAcknowledgementStatus(deps, response);
98
- }
99
- return EXIT.ok;
100
- }
101
- catch (err) {
102
- return reportError(deps, err);
103
- }
104
- }
105
- /**
106
- * Retire this session's outstanding questions, including registrations the
107
- * Stop hook has not pushed yet. Preparations are withdrawn locally; admitted
108
- * attempts keep retirement debt. Live ones need their reply window closed.
109
- */
110
- async function closePendingQuestions(deps, json) {
111
- const lifecycleSession = resolveCommandSession(deps);
112
- if (lifecycleSession === null) {
113
- deps.io.err('No active session pointer is available in this directory.');
114
- return EXIT.noReply;
115
- }
116
- const sessionId = lifecycleSession.sessionId;
117
- const pending = readSessionState(sessionId, deps.env).pending ?? [];
118
- if (pending.length === 0) {
119
- if (json) {
120
- deps.io.out(JSON.stringify({ session_id: sessionId, withdrawn: [], closed: [] }, null, 2));
121
- }
122
- else {
123
- deps.io.err(`Session ${sessionId} has no registered question pending.`);
124
- }
125
- return EXIT.noReply;
126
- }
127
- const { withdrawn, retiring } = retireQueuedQuestions(sessionId, deps.env);
128
- let live = [];
129
- updateSessionState(sessionId, deps.env, state => {
130
- live = (state.pending ?? []).filter((entry) => entry.request_id !== undefined);
131
- return terminateCodexQuestions(state, new Set(live.flatMap(entry => entry.question_id === undefined ? [entry.request_id] : [entry.question_id, entry.request_id])));
132
- });
133
- const closed = [];
134
- if (live.length > 0) {
135
- const config = loadLoggedConfig(deps, { cwd: deps.cwd, env: deps.env, sessionId });
136
- const authed = authedClient(deps, config);
137
- if (!authed)
138
- return EXIT.auth;
139
- for (const entry of live) {
140
- try {
141
- await retireReplies(authed.client, entry.request_id);
142
- parkClosedQuestion(sessionId, deps.env, entry);
143
- dropPendingQuestion(sessionId, deps.env, entry);
144
- closed.push(entry.request_id);
145
- }
146
- catch (err) {
147
- return reportError(deps, err, { operation: 'close', request_id: entry.request_id });
148
- }
149
- }
150
- }
151
- const output = {
152
- session_id: sessionId,
153
- withdrawn: withdrawn.map((entry) => ({
154
- question: entry.question,
155
- ...(entry.question_id === undefined ? {} : { question_id: entry.question_id }),
156
- })),
157
- closed,
158
- ...(retiring.length === 0 ? {} : { retiring: retiring.map((entry) => entry.request_id) }),
159
- };
160
- if (json)
161
- deps.io.out(JSON.stringify(output, null, 2));
162
- else {
163
- if (withdrawn.length > 0) {
164
- deps.io.out(withdrawn.length === 1
165
- ? 'Withdrew 1 unpushed question so a later Stop will not send it.'
166
- : `Withdrew ${withdrawn.length} unpushed questions so a later Stop will not send them.`);
167
- }
168
- for (const requestId of closed) {
169
- deps.io.out(`Closed the reply window for ${requestId}.`);
170
- }
171
- if (retiring.length > 0) {
172
- deps.io.out('Submission had already started; stopped local retries and queued retirement of the reserved request identities.');
173
- }
174
- }
175
- return EXIT.ok;
176
- }
177
- /** Explicit cancellation revokes association locally even if the remote close
178
- * needs retry. Natural expiry only ends the app window, not the native form.
179
- */
180
- function revokeNativeBindings(sessionId, env, ids) {
181
- updateSessionState(sessionId, env, state => terminateCodexQuestions(state, ids));
182
- }
183
- /**
184
- * Close one outstanding question by the stable id `notifai ask` returned, or
185
- * by a request id already on a device. Admission decides whether a queued
186
- * entry can be withdrawn silently or needs its reserved remote id retired.
187
- * Returns null when this directory's session has no matching registration, so
188
- * the caller can still close a live request id against the service.
189
- */
190
- async function closeLocalQuestion(deps, id, json) {
191
- const lifecycleSession = resolveCommandSession(deps, id);
192
- if (lifecycleSession === null)
193
- return null;
194
- const sessionId = lifecycleSession.sessionId;
195
- const entry = (readSessionState(sessionId, deps.env).pending ?? []).find((candidate) => candidate.question_id === id || candidate.request_id === id);
196
- if (entry === undefined)
197
- return null;
198
- if (entry.request_id === undefined) {
199
- const { withdrawn, retiring } = retireQueuedQuestions(sessionId, deps.env, entry.question_id);
200
- // Admission may have completed and promoted this entry after the first
201
- // read. Re-resolve it so the live close path owns that ordering.
202
- if (withdrawn.length === 0 && retiring.length === 0) {
203
- const current = (readSessionState(sessionId, deps.env).pending ?? []).find((candidate) => candidate.question_id === id || candidate.request_id === id);
204
- if (current?.request_id !== undefined)
205
- return closeLocalQuestion(deps, current.request_id, json);
206
- return EXIT.noReply;
207
- }
208
- const output = {
209
- session_id: sessionId,
210
- withdrawn: withdrawn.map((item) => ({
211
- question: item.question,
212
- ...(item.question_id === undefined ? {} : { question_id: item.question_id }),
213
- })),
214
- closed: [],
215
- ...(retiring.length === 0 ? {} : { retiring: retiring.map((item) => item.request_id) }),
216
- };
217
- if (json)
218
- deps.io.out(JSON.stringify(output, null, 2));
219
- else {
220
- deps.io.out(retiring.length > 0
221
- ? 'Submission had already started; stopped local retries and queued retirement of the reserved request identity.'
222
- : `Withdrew unpushed question ${entry.question_id ?? id} so a later Stop will not send it.`);
223
- }
224
- return EXIT.ok;
225
- }
226
- const config = loadLoggedConfig(deps, { cwd: deps.cwd, env: deps.env, sessionId });
227
- const authed = authedClient(deps, config);
228
- if (!authed)
229
- return EXIT.auth;
230
- try {
231
- const response = await retireReplies(authed.client, entry.request_id);
232
- parkClosedQuestion(sessionId, deps.env, entry);
233
- dropPendingQuestion(sessionId, deps.env, entry);
234
- if (json) {
235
- deps.io.out(JSON.stringify({
236
- ...response,
237
- agent_acknowledgement_required: response.replies.length > 0 || response.agent_acknowledgement_required,
238
- question_id: entry.question_id,
239
- acknowledgement_command: acknowledgementCommand(response.request_id, response.agent_acknowledgement_text_required, response.agent_acknowledgement, response.replies.length > 0),
240
- }, null, 2));
241
- }
242
- else {
243
- deps.io.out(`Closed the reply window for ${entry.request_id}.`);
244
- if (response.replies.length > 0)
245
- printAcknowledgementStatus(deps, response);
246
- }
247
- return EXIT.ok;
248
- }
249
- catch (err) {
250
- return reportError(deps, err, { operation: 'close', request_id: entry.request_id });
251
- }
252
- }
253
- function forgetClosedQuestion(deps, requestId) {
254
- const lifecycleSession = resolveCommandSession(deps, requestId);
255
- if (lifecycleSession === null)
256
- return;
257
- const sessionId = lifecycleSession.sessionId;
258
- const entry = (readSessionState(sessionId, deps.env).pending ?? []).find((candidate) => candidate.request_id === requestId);
259
- if (entry === undefined)
260
- return;
261
- parkClosedQuestion(sessionId, deps.env, entry);
262
- dropPendingQuestion(sessionId, deps.env, entry);
263
- }
264
- function parkClosedQuestion(sessionId, env, entry) {
265
- try {
266
- parkForRetirement(sessionId, env, entry, 'expired');
267
- }
268
- catch {
269
- // Incomplete identifiers cannot be retired on a device; dropping the
270
- // local record is still the right way to stop a later Stop from waiting.
271
- }
272
- }
273
- //# sourceMappingURL=commands-close.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"commands-close.js","sourceRoot":"","sources":["../src/commands-close.ts"],"names":[],"mappings":"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"}
@@ -1,31 +0,0 @@
1
- import { type CommandDeps } from './commands-core.js';
2
- export declare function configShowCommand(deps: CommandDeps, flags: {
3
- json?: boolean;
4
- explain?: boolean;
5
- plain?: boolean;
6
- }): number;
7
- /**
8
- * One setting, explained in full.
9
- *
10
- * The gap this closes: `config show` prints a value and provenance but that is
11
- * not enough to explain the setting's consequences. Every key already had a
12
- * careful explanation — in a TypeScript comment, read by everyone except the
13
- * person who needed it.
14
- */
15
- export declare function configExplainCommand(deps: CommandDeps, key: string, flags?: {
16
- json?: boolean;
17
- }): number;
18
- export declare function configSetCommand(deps: CommandDeps, key: string, rawValue: string, flags: {
19
- project?: boolean;
20
- local?: boolean;
21
- session?: string;
22
- yes?: boolean;
23
- }): Promise<number>;
24
- type ConfigMutationFlags = {
25
- project?: boolean;
26
- local?: boolean;
27
- session?: string;
28
- yes?: boolean;
29
- };
30
- export declare function configUnsetCommand(deps: CommandDeps, key: string, flags: ConfigMutationFlags): Promise<number>;
31
- export {};
@@ -1,272 +0,0 @@
1
- import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync, } from 'node:fs';
2
- import path from 'node:path';
3
- import { parse as parseToml, stringify as stringifyToml } from 'smol-toml';
4
- import { ensurePrivateDirectory } from './atomic-file.js';
5
- import { acceptedValues, configInfo } from './config-schema.js';
6
- import { BOOLEAN_CONFIG_KEYS, CONFIG_KEYS, NUMERIC_CONFIG_KEYS, ORIGIN_LIST_CONFIG_KEYS, USER_OWNED_CONFIG_KEYS, configBounds, configDefaultValue, globalConfigPath, personalProjectConfigPath, sharedProjectConfigPath, sessionConfigPath, } from './config.js';
7
- import { normalizeOrigin } from './url-policy.js';
8
- import { renderConfigExplain, renderConfigList, renderConfigPlain } from './ui/config-view.js';
9
- import { EXIT, loadLoggedConfig } from './commands-core.js';
10
- import { isCliSoundRef } from './sound-ref.js';
11
- // ---------------------------------------------------------------------------
12
- // config show / set / unset
13
- // ---------------------------------------------------------------------------
14
- export function configShowCommand(deps, flags) {
15
- const config = loadLoggedConfig(deps, { cwd: deps.cwd, env: deps.env });
16
- if (flags.json) {
17
- const output = Object.fromEntries(CONFIG_KEYS.map((key) => [
18
- key,
19
- {
20
- value: config[key].value,
21
- source: config[key].source,
22
- summary: configInfo(key).summary,
23
- },
24
- ]));
25
- deps.io.out(JSON.stringify(output, null, 2));
26
- return EXIT.ok;
27
- }
28
- // Anything that is not a person at a terminal keeps the flat `key = value`
29
- // form it has always had. Scripts parse this, and a prettier layout for an
30
- // audience that cannot see it would only be a breaking change.
31
- if (deps.io.interactive !== true || flags.plain === true) {
32
- for (const line of renderConfigPlain(config, flags.explain === true))
33
- deps.io.out(line);
34
- return EXIT.ok;
35
- }
36
- for (const line of renderConfigList(config, { showAdvanced: flags.explain === true })) {
37
- deps.io.out(line);
38
- }
39
- return EXIT.ok;
40
- }
41
- /**
42
- * One setting, explained in full.
43
- *
44
- * The gap this closes: `config show` prints a value and provenance but that is
45
- * not enough to explain the setting's consequences. Every key already had a
46
- * careful explanation — in a TypeScript comment, read by everyone except the
47
- * person who needed it.
48
- */
49
- export function configExplainCommand(deps, key, flags = {}) {
50
- if (!CONFIG_KEYS.includes(key)) {
51
- deps.io.err(`Unknown setting "${key}".`);
52
- deps.io.err(`Valid settings: ${CONFIG_KEYS.join(', ')}`);
53
- return EXIT.usage;
54
- }
55
- const configKey = key;
56
- const config = loadLoggedConfig(deps, { cwd: deps.cwd, env: deps.env });
57
- const info = configInfo(configKey);
58
- const entry = config[configKey];
59
- if (flags.json) {
60
- deps.io.out(JSON.stringify({
61
- key: configKey,
62
- label: info.label,
63
- group: info.group,
64
- kind: info.kind,
65
- summary: info.summary,
66
- detail: info.detail,
67
- accepts: acceptedValues(configKey),
68
- ...(info.choices !== undefined ? { choices: info.choices } : {}),
69
- value: entry.value,
70
- source: entry.source,
71
- }, null, 2));
72
- return EXIT.ok;
73
- }
74
- if (deps.io.interactive !== true) {
75
- deps.io.out(`${configKey} = ${JSON.stringify(entry.value)} [${entry.source}]`);
76
- deps.io.out(info.detail.replace(/\n\n/g, '\n'));
77
- deps.io.out(`accepts: ${acceptedValues(configKey)}`);
78
- return EXIT.ok;
79
- }
80
- for (const line of renderConfigExplain(configKey, config))
81
- deps.io.out(line);
82
- return EXIT.ok;
83
- }
84
- /**
85
- * Closest config key by edit distance, or null when nothing is close.
86
- *
87
- * The threshold matters more than the algorithm: suggesting a key that shares
88
- * three letters with the typo sends the reader to the wrong setting with
89
- * confidence, which is worse than listing all fourteen and letting them look.
90
- */
91
- function nearestKey(input) {
92
- let best = null;
93
- let bestDistance = Number.POSITIVE_INFINITY;
94
- for (const candidate of CONFIG_KEYS) {
95
- const distance = editDistance(input.toLowerCase(), candidate);
96
- if (distance < bestDistance) {
97
- bestDistance = distance;
98
- best = candidate;
99
- }
100
- }
101
- return best !== null && bestDistance <= Math.max(2, Math.floor(best.length / 3)) ? best : null;
102
- }
103
- function editDistance(a, b) {
104
- const previous = Array.from({ length: b.length + 1 }, (_, i) => i);
105
- for (let i = 1; i <= a.length; i += 1) {
106
- let diagonal = previous[0];
107
- previous[0] = i;
108
- for (let j = 1; j <= b.length; j += 1) {
109
- const above = previous[j];
110
- previous[j] = Math.min(previous[j] + 1, previous[j - 1] + 1, diagonal + (a[i - 1] === b[j - 1] ? 0 : 1));
111
- diagonal = above;
112
- }
113
- }
114
- return previous[b.length];
115
- }
116
- export async function configSetCommand(deps, key, rawValue, flags) {
117
- const configKey = configMutationKey(deps, key);
118
- if (configKey === null)
119
- return EXIT.usage;
120
- const info = configInfo(configKey);
121
- let value = rawValue;
122
- if (NUMERIC_CONFIG_KEYS.includes(configKey)) {
123
- const numeric = Number(rawValue);
124
- if (!Number.isInteger(numeric)) {
125
- deps.io.err(`${key} takes ${acceptedValues(configKey)}, not "${rawValue}".`);
126
- return EXIT.usage;
127
- }
128
- const bounds = configBounds(configKey);
129
- if (bounds !== undefined && (numeric < bounds.min || numeric > bounds.max)) {
130
- deps.io.err(`${key} must be between ${bounds.min} and ${bounds.max}.`);
131
- return EXIT.usage;
132
- }
133
- value = numeric;
134
- }
135
- if (BOOLEAN_CONFIG_KEYS.includes(configKey)) {
136
- if (rawValue !== 'true' && rawValue !== 'false') {
137
- deps.io.err(`${key} is a toggle — pass "true" or "false", not "${rawValue}".`);
138
- return EXIT.usage;
139
- }
140
- value = rawValue === 'true';
141
- }
142
- // Sound is listed as an enum of shipped names so the interactive picker has
143
- // choices, but it also accepts an Account custom name or id. Other enum keys
144
- // stay closed: an unrecognised value used to be written and only fail at send.
145
- if (configKey === 'sound') {
146
- if (!isCliSoundRef(rawValue)) {
147
- deps.io.err(`${key} takes ${acceptedValues(configKey)} — not "${rawValue}".`);
148
- return EXIT.usage;
149
- }
150
- }
151
- else if (info.kind === 'enum' && info.choices !== undefined && !info.choices.includes(rawValue)) {
152
- deps.io.err(`${key} takes one of: ${info.choices.join(', ')} — not "${rawValue}".`);
153
- return EXIT.usage;
154
- }
155
- if (info.kind === 'list')
156
- value = rawValue.split(',').map((s) => s.trim()).filter(Boolean);
157
- if (ORIGIN_LIST_CONFIG_KEYS.includes(configKey)) {
158
- const origins = value.map((entry) => normalizeOrigin(entry));
159
- const rejected = value.filter((_, index) => origins[index] === null);
160
- if (rejected.length > 0) {
161
- deps.io.err(`${key} entries must be bare http(s) origins like "https://host" or "http://host:8080" — not ${rejected.map((entry) => `"${entry}"`).join(', ')}.`);
162
- return EXIT.usage;
163
- }
164
- value = origins;
165
- }
166
- const target = await configMutationTarget(deps, flags);
167
- if (target === null)
168
- return EXIT.usage;
169
- if (target.layer === 'project' && USER_OWNED_CONFIG_KEYS.includes(configKey)) {
170
- deps.io.err(`${key} widens which origins this machine trusts, so it is never read from the repository's shared config — a cloned repository must not be able to set it.`);
171
- deps.io.err('Store it on this machine (no flag) or for this project personally (--local).');
172
- return EXIT.usage;
173
- }
174
- if (target.layer === 'global' && Object.is(value, configDefaultValue(configKey))) {
175
- deps.io.err(`${key} is already the shipped default (${JSON.stringify(value)}).`);
176
- deps.io.err(`Run \`notifai config unset ${key} --yes\` to remove a redundant override instead of creating one.`);
177
- return EXIT.usage;
178
- }
179
- if (!flags.yes) {
180
- const confirmed = await deps.io.confirm(`Set ${key} = ${JSON.stringify(value)} in ${target.path}?`);
181
- if (!confirmed) {
182
- deps.io.err('Not confirmed. Pass --yes to skip the confirmation gate.');
183
- return EXIT.usage;
184
- }
185
- }
186
- const existing = existsSync(target.path)
187
- ? parseToml(readFileSync(target.path, 'utf8'))
188
- : {};
189
- existing[key] = value;
190
- if (target.layer === 'project')
191
- mkdirSync(path.dirname(target.path), { recursive: true });
192
- else
193
- ensurePrivateDirectory(path.dirname(target.path));
194
- writeFileSync(target.path, `${stringifyToml(existing)}\n`);
195
- deps.io.out(`Wrote ${key} to ${target.path}`);
196
- return EXIT.ok;
197
- }
198
- function configMutationKey(deps, key) {
199
- if (!CONFIG_KEYS.includes(key)) {
200
- deps.io.err(`Unknown setting "${key}".`);
201
- const near = nearestKey(key);
202
- if (near !== null)
203
- deps.io.err(`Did you mean "${near}"?`);
204
- deps.io.err(`Valid settings: ${CONFIG_KEYS.join(', ')}`);
205
- deps.io.err('Run `notifai config explain <key>` to see what one of them does.');
206
- return null;
207
- }
208
- return key;
209
- }
210
- async function configMutationTarget(deps, flags) {
211
- let layer = flags.local ? 'local' : flags.project ? 'project' : 'global';
212
- if (flags.session === undefined &&
213
- flags.local !== true &&
214
- flags.project !== true &&
215
- flags.yes !== true &&
216
- deps.io.interactive === true &&
217
- deps.io.select) {
218
- const selected = await deps.io.select('Where should this setting live?', [
219
- { value: 'global', label: 'This machine', hint: 'applies across projects' },
220
- { value: 'project', label: 'This project (shared)', hint: '.notifai/config.toml' },
221
- { value: 'local', label: 'This project (personal)', hint: 'stored on this machine, not in the repo' },
222
- ]);
223
- if (selected === null) {
224
- deps.io.err('No configuration layer selected.');
225
- return null;
226
- }
227
- layer = selected;
228
- }
229
- const targetPath = flags.session
230
- ? sessionConfigPath(flags.session, deps.env)
231
- : layer === 'local'
232
- ? personalProjectConfigPath(deps.cwd, deps.env)
233
- : layer === 'project'
234
- ? sharedProjectConfigPath(deps.cwd)
235
- : globalConfigPath(deps.env);
236
- return {
237
- path: targetPath,
238
- layer: flags.session ? 'session' : layer,
239
- };
240
- }
241
- export async function configUnsetCommand(deps, key, flags) {
242
- const configKey = configMutationKey(deps, key);
243
- if (configKey === null)
244
- return EXIT.usage;
245
- const target = await configMutationTarget(deps, flags);
246
- if (target === null)
247
- return EXIT.usage;
248
- const existing = existsSync(target.path)
249
- ? parseToml(readFileSync(target.path, 'utf8'))
250
- : {};
251
- if (!Object.prototype.hasOwnProperty.call(existing, configKey)) {
252
- deps.io.out(`${configKey} is not set in ${target.path}`);
253
- return EXIT.ok;
254
- }
255
- if (!flags.yes) {
256
- const confirmed = await deps.io.confirm(`Remove ${configKey} from ${target.path}?`);
257
- if (!confirmed) {
258
- deps.io.err('Not confirmed. Pass --yes to skip the confirmation gate.');
259
- return EXIT.usage;
260
- }
261
- }
262
- delete existing[configKey];
263
- if (Object.keys(existing).length === 0) {
264
- rmSync(target.path, { force: true });
265
- }
266
- else {
267
- writeFileSync(target.path, `${stringifyToml(existing)}\n`);
268
- }
269
- deps.io.out(`Removed ${configKey} from ${target.path}; the inherited value now applies.`);
270
- return EXIT.ok;
271
- }
272
- //# sourceMappingURL=commands-config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"commands-config.js","sourceRoot":"","sources":["../src/commands-config.ts"],"names":[],"mappings":"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"}