@jungjaehoon/mama-os 0.77.0 → 0.79.0

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 (338) hide show
  1. package/CHANGELOG.md +446 -0
  2. package/README.md +59 -30
  3. package/db/migrations/002-model-runs-parent-index.sql +11 -0
  4. package/db/migrations/003-upkeep-settled.sql +15 -0
  5. package/dist/api/google-read-actions.d.ts +30 -0
  6. package/dist/api/google-read-actions.d.ts.map +1 -0
  7. package/dist/api/google-read-actions.js +256 -0
  8. package/dist/api/google-read-actions.js.map +1 -0
  9. package/dist/api/record-actions.d.ts.map +1 -1
  10. package/dist/api/record-actions.js +23 -5
  11. package/dist/api/record-actions.js.map +1 -1
  12. package/dist/api/report-handler.d.ts +0 -6
  13. package/dist/api/report-handler.d.ts.map +1 -1
  14. package/dist/api/report-handler.js +0 -54
  15. package/dist/api/report-handler.js.map +1 -1
  16. package/dist/api/security-events.d.ts +1 -1
  17. package/dist/api/security-events.d.ts.map +1 -1
  18. package/dist/api/security-events.js +10 -1
  19. package/dist/api/security-events.js.map +1 -1
  20. package/dist/api/source-actions.d.ts +9 -0
  21. package/dist/api/source-actions.d.ts.map +1 -1
  22. package/dist/api/source-actions.js +49 -0
  23. package/dist/api/source-actions.js.map +1 -1
  24. package/dist/api/viewer-request-security.d.ts +14 -1
  25. package/dist/api/viewer-request-security.d.ts.map +1 -1
  26. package/dist/api/viewer-request-security.js +26 -3
  27. package/dist/api/viewer-request-security.js.map +1 -1
  28. package/dist/api/viewer-server.d.ts +8 -0
  29. package/dist/api/viewer-server.d.ts.map +1 -1
  30. package/dist/api/viewer-server.js +66 -0
  31. package/dist/api/viewer-server.js.map +1 -1
  32. package/dist/api/work-actions.d.ts +19 -2
  33. package/dist/api/work-actions.d.ts.map +1 -1
  34. package/dist/api/work-actions.js +42 -2
  35. package/dist/api/work-actions.js.map +1 -1
  36. package/dist/cli/commands/backfill.d.ts.map +1 -1
  37. package/dist/cli/commands/backfill.js +1 -0
  38. package/dist/cli/commands/backfill.js.map +1 -1
  39. package/dist/cli/commands/backup.d.ts +14 -0
  40. package/dist/cli/commands/backup.d.ts.map +1 -0
  41. package/dist/cli/commands/backup.js +174 -0
  42. package/dist/cli/commands/backup.js.map +1 -0
  43. package/dist/cli/commands/control.d.ts +44 -0
  44. package/dist/cli/commands/control.d.ts.map +1 -0
  45. package/dist/cli/commands/control.js +354 -0
  46. package/dist/cli/commands/control.js.map +1 -0
  47. package/dist/cli/commands/daemon.d.ts +60 -3
  48. package/dist/cli/commands/daemon.d.ts.map +1 -1
  49. package/dist/cli/commands/daemon.js +454 -78
  50. package/dist/cli/commands/daemon.js.map +1 -1
  51. package/dist/cli/commands/doctor.d.ts +13 -0
  52. package/dist/cli/commands/doctor.d.ts.map +1 -0
  53. package/dist/cli/commands/doctor.js +216 -0
  54. package/dist/cli/commands/doctor.js.map +1 -0
  55. package/dist/cli/commands/init-questions.d.ts +98 -0
  56. package/dist/cli/commands/init-questions.d.ts.map +1 -0
  57. package/dist/cli/commands/init-questions.js +420 -0
  58. package/dist/cli/commands/init-questions.js.map +1 -0
  59. package/dist/cli/commands/init-section.d.ts +13 -0
  60. package/dist/cli/commands/init-section.d.ts.map +1 -0
  61. package/dist/cli/commands/init-section.js +375 -0
  62. package/dist/cli/commands/init-section.js.map +1 -0
  63. package/dist/cli/commands/init.d.ts +56 -2
  64. package/dist/cli/commands/init.d.ts.map +1 -1
  65. package/dist/cli/commands/init.js +562 -350
  66. package/dist/cli/commands/init.js.map +1 -1
  67. package/dist/cli/commands/logs.d.ts +9 -0
  68. package/dist/cli/commands/logs.d.ts.map +1 -0
  69. package/dist/cli/commands/logs.js +109 -0
  70. package/dist/cli/commands/logs.js.map +1 -0
  71. package/dist/cli/commands/node-move.d.ts +20 -0
  72. package/dist/cli/commands/node-move.d.ts.map +1 -0
  73. package/dist/cli/commands/node-move.js +289 -0
  74. package/dist/cli/commands/node-move.js.map +1 -0
  75. package/dist/cli/commands/register-owner.d.ts +3 -0
  76. package/dist/cli/commands/register-owner.d.ts.map +1 -1
  77. package/dist/cli/commands/register-owner.js +14 -0
  78. package/dist/cli/commands/register-owner.js.map +1 -1
  79. package/dist/cli/commands/restore.d.ts +16 -0
  80. package/dist/cli/commands/restore.d.ts.map +1 -0
  81. package/dist/cli/commands/restore.js +137 -0
  82. package/dist/cli/commands/restore.js.map +1 -0
  83. package/dist/cli/commands/service.d.ts +44 -0
  84. package/dist/cli/commands/service.d.ts.map +1 -0
  85. package/dist/cli/commands/service.js +306 -0
  86. package/dist/cli/commands/service.js.map +1 -0
  87. package/dist/cli/commands/tools.d.ts +1 -1
  88. package/dist/cli/commands/tools.d.ts.map +1 -1
  89. package/dist/cli/commands/tools.js +8 -3
  90. package/dist/cli/commands/tools.js.map +1 -1
  91. package/dist/cli/commands/uninstall.d.ts +7 -0
  92. package/dist/cli/commands/uninstall.d.ts.map +1 -0
  93. package/dist/cli/commands/uninstall.js +335 -0
  94. package/dist/cli/commands/uninstall.js.map +1 -0
  95. package/dist/cli/commands/update.d.ts +59 -0
  96. package/dist/cli/commands/update.d.ts.map +1 -0
  97. package/dist/cli/commands/update.js +948 -0
  98. package/dist/cli/commands/update.js.map +1 -0
  99. package/dist/cli/index.js +74 -23
  100. package/dist/cli/index.js.map +1 -1
  101. package/dist/cli/launch-files.d.ts +119 -0
  102. package/dist/cli/launch-files.d.ts.map +1 -1
  103. package/dist/cli/launch-files.js +324 -15
  104. package/dist/cli/launch-files.js.map +1 -1
  105. package/dist/cli/prompt.d.ts +2 -1
  106. package/dist/cli/prompt.d.ts.map +1 -1
  107. package/dist/cli/prompt.js +5 -2
  108. package/dist/cli/prompt.js.map +1 -1
  109. package/dist/cli/runtime/backend-probe.d.ts +34 -0
  110. package/dist/cli/runtime/backend-probe.d.ts.map +1 -0
  111. package/dist/cli/runtime/backend-probe.js +83 -0
  112. package/dist/cli/runtime/backend-probe.js.map +1 -0
  113. package/dist/cli/runtime/backup.d.ts +130 -0
  114. package/dist/cli/runtime/backup.d.ts.map +1 -0
  115. package/dist/cli/runtime/backup.js +592 -0
  116. package/dist/cli/runtime/backup.js.map +1 -0
  117. package/dist/cli/runtime/daemon-control.d.ts +169 -0
  118. package/dist/cli/runtime/daemon-control.d.ts.map +1 -0
  119. package/dist/cli/runtime/daemon-control.js +441 -0
  120. package/dist/cli/runtime/daemon-control.js.map +1 -0
  121. package/dist/cli/runtime/default-roots.d.ts +27 -0
  122. package/dist/cli/runtime/default-roots.d.ts.map +1 -0
  123. package/dist/cli/runtime/default-roots.js +61 -0
  124. package/dist/cli/runtime/default-roots.js.map +1 -0
  125. package/dist/cli/runtime/diagnostics.d.ts +68 -0
  126. package/dist/cli/runtime/diagnostics.d.ts.map +1 -0
  127. package/dist/cli/runtime/diagnostics.js +1139 -0
  128. package/dist/cli/runtime/diagnostics.js.map +1 -0
  129. package/dist/cli/runtime/init-state.d.ts +20 -0
  130. package/dist/cli/runtime/init-state.d.ts.map +1 -0
  131. package/dist/cli/runtime/init-state.js +51 -0
  132. package/dist/cli/runtime/init-state.js.map +1 -0
  133. package/dist/cli/runtime/install-kind.d.ts +54 -0
  134. package/dist/cli/runtime/install-kind.d.ts.map +1 -0
  135. package/dist/cli/runtime/install-kind.js +164 -0
  136. package/dist/cli/runtime/install-kind.js.map +1 -0
  137. package/dist/cli/runtime/node-move-journal.d.ts +44 -0
  138. package/dist/cli/runtime/node-move-journal.d.ts.map +1 -0
  139. package/dist/cli/runtime/node-move-journal.js +48 -0
  140. package/dist/cli/runtime/node-move-journal.js.map +1 -0
  141. package/dist/cli/runtime/release-check.d.ts +94 -0
  142. package/dist/cli/runtime/release-check.d.ts.map +1 -0
  143. package/dist/cli/runtime/release-check.js +316 -0
  144. package/dist/cli/runtime/release-check.js.map +1 -0
  145. package/dist/cli/runtime/restore.d.ts +98 -0
  146. package/dist/cli/runtime/restore.d.ts.map +1 -0
  147. package/dist/cli/runtime/restore.js +756 -0
  148. package/dist/cli/runtime/restore.js.map +1 -0
  149. package/dist/cli/runtime/setup-page.d.ts +57 -0
  150. package/dist/cli/runtime/setup-page.d.ts.map +1 -0
  151. package/dist/cli/runtime/setup-page.js +266 -0
  152. package/dist/cli/runtime/setup-page.js.map +1 -0
  153. package/dist/cli/runtime/source-tools.d.ts +60 -0
  154. package/dist/cli/runtime/source-tools.d.ts.map +1 -0
  155. package/dist/cli/runtime/source-tools.js +170 -0
  156. package/dist/cli/runtime/source-tools.js.map +1 -0
  157. package/dist/cli/runtime/systemd-service.d.ts +13 -0
  158. package/dist/cli/runtime/systemd-service.d.ts.map +1 -0
  159. package/dist/cli/runtime/systemd-service.js +32 -0
  160. package/dist/cli/runtime/systemd-service.js.map +1 -0
  161. package/dist/cli/runtime/telegram-pairing.d.ts +73 -0
  162. package/dist/cli/runtime/telegram-pairing.d.ts.map +1 -0
  163. package/dist/cli/runtime/telegram-pairing.js +184 -0
  164. package/dist/cli/runtime/telegram-pairing.js.map +1 -0
  165. package/dist/cli/runtime/update-journal.d.ts +135 -0
  166. package/dist/cli/runtime/update-journal.d.ts.map +1 -0
  167. package/dist/cli/runtime/update-journal.js +144 -0
  168. package/dist/cli/runtime/update-journal.js.map +1 -0
  169. package/dist/cli/runtime/update-progress.d.ts +95 -0
  170. package/dist/cli/runtime/update-progress.d.ts.map +1 -0
  171. package/dist/cli/runtime/update-progress.js +154 -0
  172. package/dist/cli/runtime/update-progress.js.map +1 -0
  173. package/dist/cli/runtime/update-request.d.ts +58 -0
  174. package/dist/cli/runtime/update-request.d.ts.map +1 -0
  175. package/dist/cli/runtime/update-request.js +172 -0
  176. package/dist/cli/runtime/update-request.js.map +1 -0
  177. package/dist/connectors/calendar/index.d.ts +5 -1
  178. package/dist/connectors/calendar/index.d.ts.map +1 -1
  179. package/dist/connectors/calendar/index.js +19 -28
  180. package/dist/connectors/calendar/index.js.map +1 -1
  181. package/dist/connectors/chatwork/index.d.ts.map +1 -1
  182. package/dist/connectors/chatwork/index.js +7 -3
  183. package/dist/connectors/chatwork/index.js.map +1 -1
  184. package/dist/connectors/config-loader.d.ts +7 -1
  185. package/dist/connectors/config-loader.d.ts.map +1 -1
  186. package/dist/connectors/config-loader.js +11 -2
  187. package/dist/connectors/config-loader.js.map +1 -1
  188. package/dist/connectors/discord/index.d.ts.map +1 -1
  189. package/dist/connectors/discord/index.js +4 -3
  190. package/dist/connectors/discord/index.js.map +1 -1
  191. package/dist/connectors/drive/index.d.ts.map +1 -1
  192. package/dist/connectors/drive/index.js +15 -13
  193. package/dist/connectors/drive/index.js.map +1 -1
  194. package/dist/connectors/framework/gws-utils.d.ts +62 -0
  195. package/dist/connectors/framework/gws-utils.d.ts.map +1 -1
  196. package/dist/connectors/framework/gws-utils.js +133 -3
  197. package/dist/connectors/framework/gws-utils.js.map +1 -1
  198. package/dist/connectors/framework/polling-scheduler.d.ts.map +1 -1
  199. package/dist/connectors/framework/polling-scheduler.js +12 -11
  200. package/dist/connectors/framework/polling-scheduler.js.map +1 -1
  201. package/dist/connectors/framework/types.d.ts +24 -0
  202. package/dist/connectors/framework/types.d.ts.map +1 -1
  203. package/dist/connectors/framework/types.js +9 -0
  204. package/dist/connectors/framework/types.js.map +1 -1
  205. package/dist/connectors/gmail/index.d.ts.map +1 -1
  206. package/dist/connectors/gmail/index.js +14 -13
  207. package/dist/connectors/gmail/index.js.map +1 -1
  208. package/dist/connectors/imessage/index.d.ts.map +1 -1
  209. package/dist/connectors/imessage/index.js +2 -1
  210. package/dist/connectors/imessage/index.js.map +1 -1
  211. package/dist/connectors/index.d.ts +4 -4
  212. package/dist/connectors/index.d.ts.map +1 -1
  213. package/dist/connectors/index.js +4 -10
  214. package/dist/connectors/index.js.map +1 -1
  215. package/dist/connectors/notion/index.d.ts.map +1 -1
  216. package/dist/connectors/notion/index.js +5 -3
  217. package/dist/connectors/notion/index.js.map +1 -1
  218. package/dist/connectors/sheets/index.d.ts.map +1 -1
  219. package/dist/connectors/sheets/index.js +17 -12
  220. package/dist/connectors/sheets/index.js.map +1 -1
  221. package/dist/connectors/slack/index.d.ts.map +1 -1
  222. package/dist/connectors/slack/index.js +9 -3
  223. package/dist/connectors/slack/index.js.map +1 -1
  224. package/dist/connectors/telegram/index.d.ts.map +1 -1
  225. package/dist/connectors/telegram/index.js +4 -3
  226. package/dist/connectors/telegram/index.js.map +1 -1
  227. package/dist/connectors/trello/index.d.ts +1 -1
  228. package/dist/connectors/trello/index.d.ts.map +1 -1
  229. package/dist/connectors/trello/index.js +10 -5
  230. package/dist/connectors/trello/index.js.map +1 -1
  231. package/dist/gateways/discord.d.ts +6 -0
  232. package/dist/gateways/discord.d.ts.map +1 -1
  233. package/dist/gateways/discord.js +38 -27
  234. package/dist/gateways/discord.js.map +1 -1
  235. package/dist/gateways/slack.d.ts +6 -0
  236. package/dist/gateways/slack.d.ts.map +1 -1
  237. package/dist/gateways/slack.js +38 -27
  238. package/dist/gateways/slack.js.map +1 -1
  239. package/dist/gateways/telegram-commands.d.ts +124 -0
  240. package/dist/gateways/telegram-commands.d.ts.map +1 -0
  241. package/dist/gateways/telegram-commands.js +131 -0
  242. package/dist/gateways/telegram-commands.js.map +1 -0
  243. package/dist/gateways/telegram.d.ts +20 -0
  244. package/dist/gateways/telegram.d.ts.map +1 -1
  245. package/dist/gateways/telegram.js +138 -34
  246. package/dist/gateways/telegram.js.map +1 -1
  247. package/dist/gateways/turn-contract.d.ts +11 -0
  248. package/dist/gateways/turn-contract.d.ts.map +1 -1
  249. package/dist/runtime/action-surface.d.ts +1 -1
  250. package/dist/runtime/action-surface.d.ts.map +1 -1
  251. package/dist/runtime/action-surface.js +10 -0
  252. package/dist/runtime/action-surface.js.map +1 -1
  253. package/dist/runtime/backend-security.d.ts +26 -2
  254. package/dist/runtime/backend-security.d.ts.map +1 -1
  255. package/dist/runtime/backend-security.js +63 -10
  256. package/dist/runtime/backend-security.js.map +1 -1
  257. package/dist/runtime/config.d.ts +3 -0
  258. package/dist/runtime/config.d.ts.map +1 -1
  259. package/dist/runtime/config.js +4 -4
  260. package/dist/runtime/config.js.map +1 -1
  261. package/dist/runtime/connectors.d.ts +21 -1
  262. package/dist/runtime/connectors.d.ts.map +1 -1
  263. package/dist/runtime/connectors.js +28 -17
  264. package/dist/runtime/connectors.js.map +1 -1
  265. package/dist/runtime/core-db.d.ts.map +1 -1
  266. package/dist/runtime/core-db.js +2 -0
  267. package/dist/runtime/core-db.js.map +1 -1
  268. package/dist/runtime/member-paths.d.ts +15 -7
  269. package/dist/runtime/member-paths.d.ts.map +1 -1
  270. package/dist/runtime/member-paths.js +64 -12
  271. package/dist/runtime/member-paths.js.map +1 -1
  272. package/dist/runtime/member-session.d.ts +4 -0
  273. package/dist/runtime/member-session.d.ts.map +1 -1
  274. package/dist/runtime/member-session.js +23 -2
  275. package/dist/runtime/member-session.js.map +1 -1
  276. package/dist/runtime/native-session.d.ts +2 -0
  277. package/dist/runtime/native-session.d.ts.map +1 -1
  278. package/dist/runtime/native-session.js +1 -0
  279. package/dist/runtime/native-session.js.map +1 -1
  280. package/dist/runtime/owner-runtime.d.ts +63 -1
  281. package/dist/runtime/owner-runtime.d.ts.map +1 -1
  282. package/dist/runtime/owner-runtime.js +180 -3
  283. package/dist/runtime/owner-runtime.js.map +1 -1
  284. package/dist/runtime/owner-system-prompt.d.ts.map +1 -1
  285. package/dist/runtime/owner-system-prompt.js +6 -5
  286. package/dist/runtime/owner-system-prompt.js.map +1 -1
  287. package/dist/runtime/principal-access.d.ts +2 -0
  288. package/dist/runtime/principal-access.d.ts.map +1 -1
  289. package/dist/runtime/principal-access.js +7 -0
  290. package/dist/runtime/principal-access.js.map +1 -1
  291. package/dist/runtime/principal-sessions.d.ts.map +1 -1
  292. package/dist/runtime/principal-sessions.js +8 -1
  293. package/dist/runtime/principal-sessions.js.map +1 -1
  294. package/dist/runtime/record-orders.d.ts.map +1 -1
  295. package/dist/runtime/record-orders.js +3 -29
  296. package/dist/runtime/record-orders.js.map +1 -1
  297. package/dist/runtime/report-scheduler.d.ts +9 -2
  298. package/dist/runtime/report-scheduler.d.ts.map +1 -1
  299. package/dist/runtime/report-scheduler.js +37 -10
  300. package/dist/runtime/report-scheduler.js.map +1 -1
  301. package/dist/runtime/rotating-log.d.ts +44 -0
  302. package/dist/runtime/rotating-log.d.ts.map +1 -0
  303. package/dist/runtime/rotating-log.js +124 -0
  304. package/dist/runtime/rotating-log.js.map +1 -0
  305. package/dist/runtime/stimulus-delivery.d.ts +3 -0
  306. package/dist/runtime/stimulus-delivery.d.ts.map +1 -1
  307. package/dist/runtime/stimulus-delivery.js +19 -3
  308. package/dist/runtime/stimulus-delivery.js.map +1 -1
  309. package/dist/runtime/tools-paths.d.ts +7 -0
  310. package/dist/runtime/tools-paths.d.ts.map +1 -1
  311. package/dist/runtime/tools-paths.js +11 -5
  312. package/dist/runtime/tools-paths.js.map +1 -1
  313. package/dist/runtime/upkeep-close.d.ts +17 -0
  314. package/dist/runtime/upkeep-close.d.ts.map +1 -0
  315. package/dist/runtime/upkeep-close.js +127 -0
  316. package/dist/runtime/upkeep-close.js.map +1 -0
  317. package/dist/runtime/upkeep-orders.d.ts +124 -0
  318. package/dist/runtime/upkeep-orders.d.ts.map +1 -0
  319. package/dist/runtime/upkeep-orders.js +310 -0
  320. package/dist/runtime/upkeep-orders.js.map +1 -0
  321. package/dist/runtime/upkeep-reconcile.d.ts +25 -0
  322. package/dist/runtime/upkeep-reconcile.d.ts.map +1 -0
  323. package/dist/runtime/upkeep-reconcile.js +231 -0
  324. package/dist/runtime/upkeep-reconcile.js.map +1 -0
  325. package/dist/runtime/upkeep-writeback.d.ts +22 -0
  326. package/dist/runtime/upkeep-writeback.d.ts.map +1 -0
  327. package/dist/runtime/upkeep-writeback.js +203 -0
  328. package/dist/runtime/upkeep-writeback.js.map +1 -0
  329. package/dist/tools/document-toolkit.d.ts +2 -0
  330. package/dist/tools/document-toolkit.d.ts.map +1 -1
  331. package/dist/tools/document-toolkit.js +2 -0
  332. package/dist/tools/document-toolkit.js.map +1 -1
  333. package/dist/utils/untrusted-content.d.ts.map +1 -1
  334. package/dist/utils/untrusted-content.js +8 -1
  335. package/dist/utils/untrusted-content.js.map +1 -1
  336. package/install/install.sh +457 -0
  337. package/install/node.json +9 -0
  338. package/package.json +5 -5
@@ -1,8 +1,22 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UPDATE_JOB_LABEL = exports.SERVICE_STOP_SECONDS = exports.CRASH_LOG_CAP_BYTES = exports.CRASH_LOG_NAME = exports.TOOL_DIRECTORIES = exports.UPDATE_HOLD_LINE = exports.START_SCRIPT_MARKER = void 0;
3
4
  exports.findExecutable = findExecutable;
5
+ exports.mamaCommand = mamaCommand;
6
+ exports.findIn = findIn;
7
+ exports.stableNodePath = stableNodePath;
8
+ exports.versionedNodePath = versionedNodePath;
4
9
  exports.startScript = startScript;
10
+ exports.startPathEntries = startPathEntries;
5
11
  exports.launchAgent = launchAgent;
12
+ exports.updateAgent = updateAgent;
13
+ exports.updateScript = updateScript;
14
+ exports.systemdUnit = systemdUnit;
15
+ exports.shellWords = shellWords;
16
+ exports.startPathValue = startPathValue;
17
+ exports.startScriptPath = startScriptPath;
18
+ exports.startExports = startExports;
19
+ exports.readStartScript = readStartScript;
6
20
  const node_fs_1 = require("node:fs");
7
21
  const node_path_1 = require("node:path");
8
22
  const secrets_js_1 = require("./secrets.js");
@@ -21,32 +35,92 @@ function findExecutable(name) {
21
35
  }
22
36
  return undefined;
23
37
  }
38
+ /**
39
+ * The command the person's agent runs for this install: the wrapper the install command makes in
40
+ * the MAMA home, by its path (the agent's shell may find another `mama`), or else `mama`.
41
+ */
42
+ function mamaCommand(root) {
43
+ return (0, node_fs_1.existsSync)((0, node_path_1.join)(root, 'bin', 'mama')) ? '~/.mama/bin/mama' : 'mama';
44
+ }
45
+ /** The first of `dirs` that holds `name`, as a service whose PATH is `dirs` finds it. */
46
+ function findIn(name, dirs) {
47
+ for (const dir of dirs) {
48
+ const path = (0, node_path_1.join)(dir, name);
49
+ if ((0, node_fs_1.existsSync)(path))
50
+ return path;
51
+ }
52
+ return undefined;
53
+ }
54
+ /**
55
+ * A Node path that survives an upgrade. Homebrew removes a version's Cellar folder when it
56
+ * upgrades, but keeps `<prefix>/opt/<formula>` (and `<prefix>/bin/node` for `node`) pointing at
57
+ * the current one, so the launch files use those when the running Node lives in the Cellar.
58
+ */
59
+ function stableNodePath(execPath, exists = node_fs_1.existsSync) {
60
+ const brew = /^(.*)\/Cellar\/(node(?:@\d+)?)\/[^/]+\/bin\/node$/.exec(execPath);
61
+ if (!brew)
62
+ return execPath;
63
+ const [, prefix, formula] = brew;
64
+ const candidates = [
65
+ (0, node_path_1.join)(prefix, 'opt', formula, 'bin', 'node'),
66
+ ...(formula === 'node' ? [(0, node_path_1.join)(prefix, 'bin', 'node')] : []),
67
+ ];
68
+ return candidates.find((candidate) => exists(candidate)) ?? execPath;
69
+ }
70
+ /** A Node path that a version manager or an upgrade removes (I6). */
71
+ function versionedNodePath(path) {
72
+ return /\/Cellar\/node(@\d+)?\/|\/\.nvm\/versions\/node\/|\/\.volta\/tools\/image\/node\/|\/fnm\/node-versions\//.test(path);
73
+ }
74
+ /** The first comment line of every start.sh that mama writes. */
75
+ exports.START_SCRIPT_MARKER = '# Written by mama init or mama service install; mama service install rewrites it.';
76
+ /**
77
+ * While `mama update` swaps or rolls back the package, start.sh exits at once and cleanly, so a
78
+ * service manager (or a reboot) starts nothing on a half-switched install and does not restart it
79
+ * (docs/development/work/update.md, steps 8 and 13). Relative to the `cd` before it.
80
+ */
81
+ exports.UPDATE_HOLD_LINE = '[ -f runtime/update.hold ] && exit 0';
24
82
  function startScript(options) {
25
83
  const root = (0, node_path_1.join)(options.home, '.mama');
26
- const path = [
27
- ...new Set([
28
- (0, node_path_1.dirname)(options.nodePath),
29
- ...options.executablePaths.map(node_path_1.dirname),
30
- '/usr/bin',
31
- '/bin',
32
- '/usr/sbin',
33
- '/sbin',
34
- ]),
35
- ].join(':');
36
84
  return [
37
85
  '#!/bin/sh',
86
+ exports.START_SCRIPT_MARKER,
38
87
  'set -eu',
39
88
  'umask 077',
40
- `export PATH=${(0, secrets_js_1.shellQuote)(path)}`,
89
+ `export PATH=${(0, secrets_js_1.shellQuote)(startPathEntries(options).join(':'))}`,
41
90
  `cd ${(0, secrets_js_1.shellQuote)(root)}`,
91
+ exports.UPDATE_HOLD_LINE,
42
92
  'set -a',
43
93
  `. ${(0, secrets_js_1.shellQuote)((0, node_path_1.join)(root, 'auth.env'))}`,
44
94
  'set +a',
95
+ `export MAMA_LOG_LEVEL=${(0, secrets_js_1.shellQuote)(options.logLevel.toUpperCase())}`,
45
96
  ...Object.entries(options.viewer).map(([name, value]) => `export ${name}=${(0, secrets_js_1.shellQuote)(value)}`),
46
- `exec ${(0, secrets_js_1.shellQuote)(options.nodePath)} ${(0, secrets_js_1.shellQuote)(options.cliPath)} daemon >> ${(0, secrets_js_1.shellQuote)((0, node_path_1.join)(root, 'logs', 'daemon.log'))} 2>&1`,
97
+ ...(options.carried ?? []),
98
+ ...crashLogLines(root),
99
+ `exec ${(0, secrets_js_1.shellQuote)(options.nodePath)} ${(0, secrets_js_1.shellQuote)(options.cliPath)} daemon >> "$crash" 2>&1`,
47
100
  '',
48
101
  ].join('\n');
49
102
  }
103
+ /**
104
+ * Where a package manager installs the owner's command-line tools: Homebrew on Apple silicon
105
+ * (/opt/homebrew) and on Intel Macs and most Linux installs (/usr/local). The agent's shell runs
106
+ * those tools (python3 with its packages, sqlite3) and expects them ahead of the system's own, as
107
+ * in the owner's terminal.
108
+ */
109
+ exports.TOOL_DIRECTORIES = ['/opt/homebrew/bin', '/usr/local/bin'];
110
+ /**
111
+ * The PATH a generated start.sh sets: Node's folder, the backend's and gws's, the package
112
+ * manager's folders that exist on this machine, then the system's.
113
+ */
114
+ function startPathEntries(options) {
115
+ const exists = options.exists ?? node_fs_1.existsSync;
116
+ const system = ['/usr/bin', '/bin', '/usr/sbin', '/sbin'];
117
+ // A Node or backend in a system folder (/usr/bin/node on Linux) keeps the system's place, after
118
+ // the tool folders; start.sh runs Node by its full path either way.
119
+ const own = [(0, node_path_1.dirname)(options.nodePath), ...options.executablePaths.map(node_path_1.dirname)].filter((directory) => !system.includes(directory));
120
+ return [
121
+ ...new Set([...own, ...exports.TOOL_DIRECTORIES.filter((directory) => exists(directory)), ...system]),
122
+ ];
123
+ }
50
124
  function xml(value) {
51
125
  return value
52
126
  .replace(/&/g, '&amp;')
@@ -55,6 +129,31 @@ function xml(value) {
55
129
  .replace(/"/g, '&quot;')
56
130
  .replace(/'/g, '&apos;');
57
131
  }
132
+ /**
133
+ * What the service manager captures before the daemon writes its own rotated log (daemon.log):
134
+ * start.sh's own messages, a crash while Node loads, a fatal error, a native library's writes.
135
+ */
136
+ exports.CRASH_LOG_NAME = 'crash.log';
137
+ /** start.sh empties the crash log at start once it is past this size. */
138
+ exports.CRASH_LOG_CAP_BYTES = 1024 * 1024;
139
+ /**
140
+ * start.sh's crash log: only what comes before the daemon takes over its own output lands there;
141
+ * it is made owner-only and emptied at start once past the cap.
142
+ */
143
+ function crashLogLines(root) {
144
+ return [
145
+ `crash=${(0, secrets_js_1.shellQuote)((0, node_path_1.join)(root, 'logs', exports.CRASH_LOG_NAME))}`,
146
+ // launchd creates the file it redirects to before this script's umask applies.
147
+ `if [ -f "$crash" ]; then chmod 600 "$crash"; fi`,
148
+ `if [ -f "$crash" ] && [ "$(wc -c < "$crash")" -gt ${exports.CRASH_LOG_CAP_BYTES} ]; then : > "$crash"; fi`,
149
+ ];
150
+ }
151
+ /** Seconds a service manager waits for a stopping daemon before it kills it. */
152
+ exports.SERVICE_STOP_SECONDS = 60;
153
+ /**
154
+ * The LaunchAgent restarts the daemon only after a failure: a clean exit (a stop, or a refusal
155
+ * because another process holds the install) leaves it stopped.
156
+ */
58
157
  function launchAgent(home) {
59
158
  const root = (0, node_path_1.join)(home, '.mama');
60
159
  return `<?xml version="1.0" encoding="UTF-8"?>
@@ -65,10 +164,220 @@ function launchAgent(home) {
65
164
  <key>WorkingDirectory</key><string>${xml(root)}</string>
66
165
  <key>EnvironmentVariables</key><dict><key>HOME</key><string>${xml(home)}</string></dict>
67
166
  <key>RunAtLoad</key><true/>
68
- <key>KeepAlive</key><true/>
69
- <key>StandardOutPath</key><string>${xml((0, node_path_1.join)(root, 'logs', 'daemon.log'))}</string>
70
- <key>StandardErrorPath</key><string>${xml((0, node_path_1.join)(root, 'logs', 'daemon.log'))}</string>
167
+ <key>KeepAlive</key><dict><key>SuccessfulExit</key><false/></dict>
168
+ <key>ExitTimeOut</key><integer>${exports.SERVICE_STOP_SECONDS}</integer>
169
+ <key>StandardOutPath</key><string>${xml((0, node_path_1.join)(root, 'logs', exports.CRASH_LOG_NAME))}</string>
170
+ <key>StandardErrorPath</key><string>${xml((0, node_path_1.join)(root, 'logs', exports.CRASH_LOG_NAME))}</string>
171
+ </dict></plist>
172
+ `;
173
+ }
174
+ /** The update job /update starts (docs/development/work/update.md, PR 4). */
175
+ exports.UPDATE_JOB_LABEL = 'com.mama.update';
176
+ /**
177
+ * The update job's LaunchAgent: launchd's own job, so stopping the daemon's service does not end
178
+ * it (checks.md, W2.3 Step 0). It runs once: no KeepAlive, and it is loaded from runtime/, not
179
+ * ~/Library/LaunchAgents, so a login does not start it again.
180
+ */
181
+ function updateAgent(home) {
182
+ const root = (0, node_path_1.join)(home, '.mama');
183
+ const log = xml((0, node_path_1.join)(root, 'logs', 'update.log'));
184
+ return `<?xml version="1.0" encoding="UTF-8"?>
185
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
186
+ <plist version="1.0"><dict>
187
+ <key>Label</key><string>${exports.UPDATE_JOB_LABEL}</string>
188
+ <key>ProgramArguments</key><array><string>${xml((0, node_path_1.join)(root, 'runtime', 'update.sh'))}</string></array>
189
+ <key>WorkingDirectory</key><string>${xml(root)}</string>
190
+ <key>EnvironmentVariables</key><dict><key>HOME</key><string>${xml(home)}</string></dict>
191
+ <key>RunAtLoad</key><true/>
192
+ <key>StandardOutPath</key><string>${log}</string>
193
+ <key>StandardErrorPath</key><string>${log}</string>
71
194
  </dict></plist>
72
195
  `;
73
196
  }
197
+ /**
198
+ * The update job's script: start.sh's PATH and `cd` and its pinned Node and MAMA command, and
199
+ * nothing of auth.env, so the job holds no credential; the progress sink reads the bot token
200
+ * alone from auth.env when it sends. `MAMA_UPDATE_PROGRESS` reaches the new version's
201
+ * `update --continue` and a rollback's CLI through the environment they inherit.
202
+ */
203
+ function updateScript(options) {
204
+ const root = (0, node_path_1.join)(options.home, '.mama');
205
+ const reading = readStartScript(options.start, options.home);
206
+ if (reading.path === null)
207
+ throw new Error('start.sh sets no PATH; mama service install rewrites it');
208
+ const log = (0, node_path_1.join)('logs', 'update.log');
209
+ return [
210
+ '#!/bin/sh',
211
+ "# Written by MAMA's /update for the update job it starts; each /update rewrites it.",
212
+ 'set -eu',
213
+ 'umask 077',
214
+ `export PATH=${reading.path}`,
215
+ `cd ${(0, secrets_js_1.shellQuote)(root)}`,
216
+ // launchd creates the file it redirects to before this script's umask applies.
217
+ `if [ -f ${log} ]; then chmod 600 ${log}; fi`,
218
+ 'export MAMA_UPDATE_PROGRESS=telegram',
219
+ `exec ${(0, secrets_js_1.shellQuote)(options.nodePath)} ${(0, secrets_js_1.shellQuote)(options.cliPath)} update`,
220
+ '',
221
+ ].join('\n');
222
+ }
223
+ /**
224
+ * The systemd user unit, with the same restart policy as the LaunchAgent. `%h` is the home folder,
225
+ * expanded by systemd per argument, so a path with spaces stays one argument. KillMode=mixed sends
226
+ * the stop signal to the daemon alone, which stops its children in order; anything left is killed
227
+ * when the stop times out.
228
+ */
229
+ function systemdUnit() {
230
+ return [
231
+ '[Unit]',
232
+ 'Description=MAMA OS daemon',
233
+ '',
234
+ '[Service]',
235
+ 'Type=simple',
236
+ 'WorkingDirectory=%h/.mama',
237
+ 'ExecStart="%h/.mama/start.sh"',
238
+ 'Restart=on-failure',
239
+ 'RestartSec=10',
240
+ `TimeoutStopSec=${exports.SERVICE_STOP_SECONDS}`,
241
+ 'KillMode=mixed',
242
+ '',
243
+ '[Install]',
244
+ 'WantedBy=default.target',
245
+ '',
246
+ ].join('\n');
247
+ }
248
+ /**
249
+ * Split a start.sh line into words as sh does before expansion: a `#` starting a word ends the
250
+ * line, single quotes are literal, double
251
+ * quotes keep their text (a backslash escapes `"`, `\\`, `$` and a backtick), and a backslash
252
+ * outside quotes escapes the next character. Variables stay as written.
253
+ */
254
+ function shellWords(line) {
255
+ const words = [];
256
+ let word = null;
257
+ for (let index = 0; index < line.length; index += 1) {
258
+ const char = line[index];
259
+ if (char === "'") {
260
+ const end = line.indexOf("'", index + 1);
261
+ if (end < 0)
262
+ throw new Error('unterminated single quote');
263
+ word = (word ?? '') + line.slice(index + 1, end);
264
+ index = end;
265
+ }
266
+ else if (char === '"') {
267
+ let text = '';
268
+ index += 1;
269
+ while (index < line.length && line[index] !== '"') {
270
+ if (line[index] === '\\' && '"\\$`'.includes(line[index + 1] ?? ''))
271
+ index += 1;
272
+ text += line[index];
273
+ index += 1;
274
+ }
275
+ if (index >= line.length)
276
+ throw new Error('unterminated double quote');
277
+ word = (word ?? '') + text;
278
+ }
279
+ else if (char === '\\') {
280
+ word = (word ?? '') + (line[index + 1] ?? '');
281
+ index += 1;
282
+ }
283
+ else if (/\s/.test(char)) {
284
+ if (word !== null)
285
+ words.push(word);
286
+ word = null;
287
+ }
288
+ else if (char === '#' && word === null) {
289
+ // A # that starts a word starts a comment.
290
+ break;
291
+ }
292
+ else {
293
+ word = (word ?? '') + char;
294
+ }
295
+ }
296
+ if (word !== null)
297
+ words.push(word);
298
+ return words;
299
+ }
300
+ /** The PATH entries an `export PATH=` value names, with `$HOME` and `~` read as `home`. */
301
+ function startPathValue(value, home) {
302
+ return (shellWords(value)[0] ?? '')
303
+ .split(':')
304
+ .map((entry) => entry.replace(/^(\$HOME|\$\{HOME\}|~)(?=\/|$)/, home))
305
+ .filter((entry) => entry !== '' && entry !== '$PATH' && entry !== '${PATH}');
306
+ }
307
+ /** The PATH a service manager gives a unit that does not set one ($PATH in start.sh). */
308
+ const SERVICE_DEFAULT_PATH = {
309
+ darwin: ['/usr/bin', '/bin', '/usr/sbin', '/sbin'],
310
+ linux: ['/usr/local/sbin', '/usr/local/bin', '/usr/sbin', '/usr/bin', '/sbin', '/bin'],
311
+ };
312
+ /** The folders the service's commands are found in: start.sh's PATH, or the manager's own. */
313
+ function startScriptPath(reading, home, platform) {
314
+ const inherited = SERVICE_DEFAULT_PATH[platform] ?? [];
315
+ if (reading === null || reading.path === null)
316
+ return inherited;
317
+ return [
318
+ ...startPathValue(reading.path, home),
319
+ ...(/\$\{?PATH\}?/.test(reading.path) ? inherited : []),
320
+ ];
321
+ }
322
+ /** The values a start.sh's carried `export` lines set, unquoted. */
323
+ function startExports(reading) {
324
+ return Object.fromEntries(reading.carried.flatMap((line) => {
325
+ const match = /^export\s+([A-Za-z_][A-Za-z0-9_]*)=(.*)$/.exec(line);
326
+ return match ? [[match[1], shellWords(match[2])[0] ?? '']] : [];
327
+ }));
328
+ }
329
+ /**
330
+ * Read a start.sh against what this install's generated one holds. Only exact generated lines
331
+ * count as reproduced: a changed `cd` or a different sourced file is reported, not dropped.
332
+ */
333
+ function readStartScript(script, home) {
334
+ const root = (0, node_path_1.join)(home, '.mama');
335
+ const generatedLines = new Set([
336
+ 'set -eu',
337
+ 'set -a',
338
+ 'set +a',
339
+ 'umask 077',
340
+ `cd ${(0, secrets_js_1.shellQuote)(root)}`,
341
+ exports.UPDATE_HOLD_LINE,
342
+ `. ${(0, secrets_js_1.shellQuote)((0, node_path_1.join)(root, 'auth.env'))}`,
343
+ ...crashLogLines(root),
344
+ ]);
345
+ const carried = [];
346
+ const notReproduced = [];
347
+ let path = null;
348
+ let logLevel = null;
349
+ let exec = null;
350
+ for (const raw of script.split('\n')) {
351
+ const line = raw.trim();
352
+ if (line === '')
353
+ continue;
354
+ const exported = /^export\s+([A-Za-z_][A-Za-z0-9_]*)=(.*)$/.exec(line);
355
+ if (exported) {
356
+ if (exported[1] === 'PATH')
357
+ path = exported[2];
358
+ else if (exported[1] === 'MAMA_LOG_LEVEL')
359
+ logLevel = exported[2];
360
+ else
361
+ carried.push(line);
362
+ continue;
363
+ }
364
+ if (/^exec\s/.test(line)) {
365
+ exec = line;
366
+ continue;
367
+ }
368
+ if (line.startsWith('#') || generatedLines.has(line))
369
+ continue;
370
+ notReproduced.push(line);
371
+ }
372
+ const authLine = `. ${(0, secrets_js_1.shellQuote)((0, node_path_1.join)(root, 'auth.env'))}`;
373
+ return {
374
+ generated: script.includes(exports.START_SCRIPT_MARKER),
375
+ loadsAuthEnv: script.split('\n').some((line) => line.trim() === authLine),
376
+ carried,
377
+ path,
378
+ logLevel,
379
+ exec,
380
+ notReproduced,
381
+ };
382
+ }
74
383
  //# sourceMappingURL=launch-files.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"launch-files.js","sourceRoot":"","sources":["../../src/cli/launch-files.ts"],"names":[],"mappings":";;AAIA,wCAYC;AAED,kCA+BC;AAWD,kCAeC;AA3ED,qCAAgD;AAChD,yCAAiE;AACjE,6CAA0C;AAE1C,SAAgB,cAAc,CAAC,IAAY;IACzC,KAAK,MAAM,SAAS,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,qBAAS,CAAC,EAAE,CAAC;QAClE,IAAI,CAAC,IAAA,sBAAU,EAAC,SAAS,CAAC;YAAE,SAAS;QACrC,MAAM,IAAI,GAAG,IAAA,gBAAI,EAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC;YACH,IAAA,oBAAU,EAAC,IAAI,EAAE,mBAAS,CAAC,IAAI,CAAC,CAAC;YACjC,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,8BAA8B;QAChC,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAgB,WAAW,CAAC,OAM3B;IACC,MAAM,IAAI,GAAG,IAAA,gBAAI,EAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG;QACX,GAAG,IAAI,GAAG,CAAC;YACT,IAAA,mBAAO,EAAC,OAAO,CAAC,QAAQ,CAAC;YACzB,GAAG,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,mBAAO,CAAC;YACvC,UAAU;YACV,MAAM;YACN,WAAW;YACX,OAAO;SACR,CAAC;KACH,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACZ,OAAO;QACL,WAAW;QACX,SAAS;QACT,WAAW;QACX,eAAe,IAAA,uBAAU,EAAC,IAAI,CAAC,EAAE;QACjC,MAAM,IAAA,uBAAU,EAAC,IAAI,CAAC,EAAE;QACxB,QAAQ;QACR,KAAK,IAAA,uBAAU,EAAC,IAAA,gBAAI,EAAC,IAAI,EAAE,UAAU,CAAC,CAAC,EAAE;QACzC,QAAQ;QACR,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,UAAU,IAAI,IAAI,IAAA,uBAAU,EAAC,KAAK,CAAC,EAAE,CAAC;QAC/F,QAAQ,IAAA,uBAAU,EAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAA,uBAAU,EAAC,OAAO,CAAC,OAAO,CAAC,cAAc,IAAA,uBAAU,EAAC,IAAA,gBAAI,EAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,OAAO;QACpI,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,SAAS,GAAG,CAAC,KAAa;IACxB,OAAO,KAAK;SACT,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7B,CAAC;AAED,SAAgB,WAAW,CAAC,IAAY;IACtC,MAAM,IAAI,GAAG,IAAA,gBAAI,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACjC,OAAO;;;;8CAIqC,GAAG,CAAC,IAAA,gBAAI,EAAC,IAAI,EAAE,UAAU,CAAC,CAAC;uCAClC,GAAG,CAAC,IAAI,CAAC;gEACgB,GAAG,CAAC,IAAI,CAAC;;;sCAGnC,GAAG,CAAC,IAAA,gBAAI,EAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;wCACnC,GAAG,CAAC,IAAA,gBAAI,EAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;;CAE5E,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"launch-files.js","sourceRoot":"","sources":["../../src/cli/launch-files.ts"],"names":[],"mappings":";;;AAIA,wCAYC;AAMD,kCAEC;AAGD,wBAMC;AAOD,wCAYC;AAGD,8CAIC;AAaD,kCAgCC;AAcD,4CAgBC;AAuCD,kCAgBC;AAUD,kCAeC;AAQD,oCAyBC;AAQD,kCAkBC;AAuBD,gCAmCC;AAGD,wCAKC;AASD,0CAWC;AAGD,oCAOC;AAMD,0CA4CC;AAnaD,qCAA4D;AAC5D,yCAAiE;AACjE,6CAA0C;AAE1C,SAAgB,cAAc,CAAC,IAAY;IACzC,KAAK,MAAM,SAAS,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,qBAAS,CAAC,EAAE,CAAC;QAClE,IAAI,CAAC,IAAA,sBAAU,EAAC,SAAS,CAAC;YAAE,SAAS;QACrC,MAAM,IAAI,GAAG,IAAA,gBAAI,EAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC;YACH,IAAA,oBAAU,EAAC,IAAI,EAAE,mBAAS,CAAC,IAAI,CAAC,CAAC;YACjC,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,8BAA8B;QAChC,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,SAAgB,WAAW,CAAC,IAAY;IACtC,OAAO,IAAA,oBAAU,EAAC,IAAA,gBAAI,EAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC;AAC7E,CAAC;AAED,yFAAyF;AACzF,SAAgB,MAAM,CAAC,IAAY,EAAE,IAAuB;IAC1D,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,IAAA,gBAAI,EAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC7B,IAAI,IAAA,oBAAU,EAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;IACpC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,SAAgB,cAAc,CAC5B,QAAgB,EAChB,SAAoC,oBAAU;IAE9C,MAAM,IAAI,GAAG,mDAAmD,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChF,IAAI,CAAC,IAAI;QAAE,OAAO,QAAQ,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACjC,MAAM,UAAU,GAAG;QACjB,IAAA,gBAAI,EAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC;QAC3C,GAAG,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,IAAA,gBAAI,EAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KAC7D,CAAC;IACF,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,QAAQ,CAAC;AACvE,CAAC;AAED,qEAAqE;AACrE,SAAgB,iBAAiB,CAAC,IAAY;IAC5C,OAAO,0GAA0G,CAAC,IAAI,CACpH,IAAI,CACL,CAAC;AACJ,CAAC;AAED,iEAAiE;AACpD,QAAA,mBAAmB,GAC9B,mFAAmF,CAAC;AAEtF;;;;GAIG;AACU,QAAA,gBAAgB,GAAG,sCAAsC,CAAC;AAEvE,SAAgB,WAAW,CAAC,OAY3B;IACC,MAAM,IAAI,GAAG,IAAA,gBAAI,EAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACzC,OAAO;QACL,WAAW;QACX,2BAAmB;QACnB,SAAS;QACT,WAAW;QACX,eAAe,IAAA,uBAAU,EAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE;QAChE,MAAM,IAAA,uBAAU,EAAC,IAAI,CAAC,EAAE;QACxB,wBAAgB;QAChB,QAAQ;QACR,KAAK,IAAA,uBAAU,EAAC,IAAA,gBAAI,EAAC,IAAI,EAAE,UAAU,CAAC,CAAC,EAAE;QACzC,QAAQ;QACR,yBAAyB,IAAA,uBAAU,EAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE;QACrE,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,UAAU,IAAI,IAAI,IAAA,uBAAU,EAAC,KAAK,CAAC,EAAE,CAAC;QAC/F,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;QAC1B,GAAG,aAAa,CAAC,IAAI,CAAC;QACtB,QAAQ,IAAA,uBAAU,EAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAA,uBAAU,EAAC,OAAO,CAAC,OAAO,CAAC,0BAA0B;QAC7F,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACU,QAAA,gBAAgB,GAAG,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,CAAC;AAExE;;;GAGG;AACH,SAAgB,gBAAgB,CAAC,OAKhC;IACC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,oBAAU,CAAC;IAC5C,MAAM,MAAM,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;IAC1D,gGAAgG;IAChG,oEAAoE;IACpE,MAAM,GAAG,GAAG,CAAC,IAAA,mBAAO,EAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,mBAAO,CAAC,CAAC,CAAC,MAAM,CACrF,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAC3C,CAAC;IACF,OAAO;QACL,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,wBAAgB,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC;KAC9F,CAAC;AACJ,CAAC;AAED,SAAS,GAAG,CAAC,KAAa;IACxB,OAAO,KAAK;SACT,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACU,QAAA,cAAc,GAAG,WAAW,CAAC;AAC1C,yEAAyE;AAC5D,QAAA,mBAAmB,GAAG,IAAI,GAAG,IAAI,CAAC;AAE/C;;;GAGG;AACH,SAAS,aAAa,CAAC,IAAY;IACjC,OAAO;QACL,SAAS,IAAA,uBAAU,EAAC,IAAA,gBAAI,EAAC,IAAI,EAAE,MAAM,EAAE,sBAAc,CAAC,CAAC,EAAE;QACzD,+EAA+E;QAC/E,iDAAiD;QACjD,qDAAqD,2BAAmB,2BAA2B;KACpG,CAAC;AACJ,CAAC;AAED,gFAAgF;AACnE,QAAA,oBAAoB,GAAG,EAAE,CAAC;AAEvC;;;GAGG;AACH,SAAgB,WAAW,CAAC,IAAY;IACtC,MAAM,IAAI,GAAG,IAAA,gBAAI,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACjC,OAAO;;;;8CAIqC,GAAG,CAAC,IAAA,gBAAI,EAAC,IAAI,EAAE,UAAU,CAAC,CAAC;uCAClC,GAAG,CAAC,IAAI,CAAC;gEACgB,GAAG,CAAC,IAAI,CAAC;;;mCAGtC,4BAAoB;sCACjB,GAAG,CAAC,IAAA,gBAAI,EAAC,IAAI,EAAE,MAAM,EAAE,sBAAc,CAAC,CAAC;wCACrC,GAAG,CAAC,IAAA,gBAAI,EAAC,IAAI,EAAE,MAAM,EAAE,sBAAc,CAAC,CAAC;;CAE9E,CAAC;AACF,CAAC;AAED,6EAA6E;AAChE,QAAA,gBAAgB,GAAG,iBAAiB,CAAC;AAElD;;;;GAIG;AACH,SAAgB,WAAW,CAAC,IAAY;IACtC,MAAM,IAAI,GAAG,IAAA,gBAAI,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACjC,MAAM,GAAG,GAAG,GAAG,CAAC,IAAA,gBAAI,EAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;IAClD,OAAO;;;4BAGmB,wBAAgB;8CACE,GAAG,CAAC,IAAA,gBAAI,EAAC,IAAI,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;uCAC9C,GAAG,CAAC,IAAI,CAAC;gEACgB,GAAG,CAAC,IAAI,CAAC;;sCAEnC,GAAG;wCACD,GAAG;;CAE1C,CAAC;AACF,CAAC;AAED;;;;;GAKG;AACH,SAAgB,YAAY,CAAC,OAM5B;IACC,MAAM,IAAI,GAAG,IAAA,gBAAI,EAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI;QACvB,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,MAAM,GAAG,GAAG,IAAA,gBAAI,EAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACvC,OAAO;QACL,WAAW;QACX,qFAAqF;QACrF,SAAS;QACT,WAAW;QACX,eAAe,OAAO,CAAC,IAAI,EAAE;QAC7B,MAAM,IAAA,uBAAU,EAAC,IAAI,CAAC,EAAE;QACxB,+EAA+E;QAC/E,WAAW,GAAG,sBAAsB,GAAG,MAAM;QAC7C,sCAAsC;QACtC,QAAQ,IAAA,uBAAU,EAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAA,uBAAU,EAAC,OAAO,CAAC,OAAO,CAAC,SAAS;QAC5E,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,SAAgB,WAAW;IACzB,OAAO;QACL,QAAQ;QACR,4BAA4B;QAC5B,EAAE;QACF,WAAW;QACX,aAAa;QACb,2BAA2B;QAC3B,+BAA+B;QAC/B,oBAAoB;QACpB,eAAe;QACf,kBAAkB,4BAAoB,EAAE;QACxC,gBAAgB;QAChB,EAAE;QACF,WAAW;QACX,yBAAyB;QACzB,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAiBD;;;;;GAKG;AACH,SAAgB,UAAU,CAAC,IAAY;IACrC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,IAAI,GAAkB,IAAI,CAAC;IAC/B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;YACzC,IAAI,GAAG,GAAG,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC1D,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;YACjD,KAAK,GAAG,GAAG,CAAC;QACd,CAAC;aAAM,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACxB,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,KAAK,IAAI,CAAC,CAAC;YACX,OAAO,KAAK,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;gBAClD,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;oBAAE,KAAK,IAAI,CAAC,CAAC;gBAChF,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;gBACpB,KAAK,IAAI,CAAC,CAAC;YACb,CAAC;YACD,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;YACvE,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;QAC7B,CAAC;aAAM,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YACzB,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9C,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,IAAI,IAAI,KAAK,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,GAAG,IAAI,CAAC;QACd,CAAC;aAAM,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YACzC,2CAA2C;YAC3C,MAAM;QACR,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;QAC7B,CAAC;IACH,CAAC;IACD,IAAI,IAAI,KAAK,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,2FAA2F;AAC3F,SAAgB,cAAc,CAAC,KAAa,EAAE,IAAY;IACxD,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SAChC,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,gCAAgC,EAAE,IAAI,CAAC,CAAC;SACrE,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,SAAS,CAAC,CAAC;AACjF,CAAC;AAED,yFAAyF;AACzF,MAAM,oBAAoB,GAA6B;IACrD,MAAM,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC;IAClD,KAAK,EAAE,CAAC,iBAAiB,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC;CACvF,CAAC;AAEF,8FAA8F;AAC9F,SAAgB,eAAe,CAC7B,OAAkC,EAClC,IAAY,EACZ,QAAyB;IAEzB,MAAM,SAAS,GAAG,oBAAoB,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IACvD,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAChE,OAAO;QACL,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;QACrC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;KACxD,CAAC;AACJ,CAAC;AAED,oEAAoE;AACpE,SAAgB,YAAY,CAAC,OAA2B;IACtD,OAAO,MAAM,CAAC,WAAW,CACvB,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAC/B,MAAM,KAAK,GAAG,0CAA0C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAClE,CAAC,CAAC,CACH,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAgB,eAAe,CAAC,MAAc,EAAE,IAAY;IAC1D,MAAM,IAAI,GAAG,IAAA,gBAAI,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACjC,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC;QAC7B,SAAS;QACT,QAAQ;QACR,QAAQ;QACR,WAAW;QACX,MAAM,IAAA,uBAAU,EAAC,IAAI,CAAC,EAAE;QACxB,wBAAgB;QAChB,KAAK,IAAA,uBAAU,EAAC,IAAA,gBAAI,EAAC,IAAI,EAAE,UAAU,CAAC,CAAC,EAAE;QACzC,GAAG,aAAa,CAAC,IAAI,CAAC;KACvB,CAAC,CAAC;IACH,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,aAAa,GAAa,EAAE,CAAC;IACnC,IAAI,IAAI,GAAkB,IAAI,CAAC;IAC/B,IAAI,QAAQ,GAAkB,IAAI,CAAC;IACnC,IAAI,IAAI,GAAkB,IAAI,CAAC;IAC/B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QACxB,IAAI,IAAI,KAAK,EAAE;YAAE,SAAS;QAC1B,MAAM,QAAQ,GAAG,0CAA0C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvE,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,MAAM;gBAAE,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;iBAC1C,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,gBAAgB;gBAAE,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;;gBAC7D,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxB,SAAS;QACX,CAAC;QACD,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,IAAI,GAAG,IAAI,CAAC;YACZ,SAAS;QACX,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAS;QAC/D,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,IAAA,uBAAU,EAAC,IAAA,gBAAI,EAAC,IAAI,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC;IAC3D,OAAO;QACL,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,2BAAmB,CAAC;QAC/C,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,QAAQ,CAAC;QACzE,OAAO;QACP,IAAI;QACJ,QAAQ;QACR,IAAI;QACJ,aAAa;KACd,CAAC;AACJ,CAAC"}
@@ -4,7 +4,8 @@ export declare class CliInputError extends Error {
4
4
  export interface PromptAdapter {
5
5
  readonly stdinIsTTY: boolean;
6
6
  readonly stdoutIsTTY: boolean;
7
- text(label: string): Promise<string>;
7
+ /** An aborted signal ends the question as cancelled. */
8
+ text(label: string, signal?: AbortSignal): Promise<string>;
8
9
  secret(label: string): Promise<string>;
9
10
  write(line: string): void;
10
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/cli/prompt.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAExD,qBAAa,aAAc,SAAQ,KAAK;CAAG;AAE3C,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACvC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAMtD;AAED,kGAAkG;AAClG,wBAAgB,oBAAoB,CAClC,KAAK,GAAE,UAA0B,EACjC,MAAM,GAAE,WAA4B,GACnC,aAAa,CAmCf;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQlD"}
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/cli/prompt.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAExD,qBAAa,aAAc,SAAQ,KAAK;CAAG;AAE3C,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,wDAAwD;IACxD,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3D,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACvC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAMtD;AAED,kGAAkG;AAClG,wBAAgB,oBAAoB,CAClC,KAAK,GAAE,UAA0B,EACjC,MAAM,GAAE,WAA4B,GACnC,aAAa,CAyCf;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQlD"}
@@ -16,7 +16,7 @@ function requireTTY(prompt) {
16
16
  }
17
17
  /** readline disables terminal echo in raw mode; hidden output is discarded, including redraws. */
18
18
  function createTerminalPrompt(input = process.stdin, output = process.stdout) {
19
- const question = async (label, hidden) => {
19
+ const question = async (label, hidden, signal) => {
20
20
  requireTTY(adapter);
21
21
  const wasRaw = input.isRaw;
22
22
  const muted = new node_stream_1.Writable({ write: (_chunk, _encoding, done) => done() });
@@ -32,6 +32,9 @@ function createTerminalPrompt(input = process.stdin, output = process.stdout) {
32
32
  return await new Promise((resolve, reject) => {
33
33
  rl.once('close', () => reject(new CliInputError('Input cancelled; no value saved.')));
34
34
  rl.once('SIGINT', () => rl.close());
35
+ if (signal?.aborted)
36
+ rl.close();
37
+ signal?.addEventListener('abort', () => rl.close(), { once: true });
35
38
  rl.question(hidden ? '' : `${label}: `, resolve);
36
39
  });
37
40
  }
@@ -46,7 +49,7 @@ function createTerminalPrompt(input = process.stdin, output = process.stdout) {
46
49
  const adapter = {
47
50
  stdinIsTTY: input.isTTY === true,
48
51
  stdoutIsTTY: output.isTTY === true,
49
- text: (label) => question(label, false),
52
+ text: (label, signal) => question(label, false, signal),
50
53
  secret: (label) => question(label, true),
51
54
  write: (line) => {
52
55
  output.write(`${line}\n`);
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/cli/prompt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/cli/prompt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { type SpawnSyncReturns } from 'node:child_process';
2
+ /**
3
+ * The oldest backend CLI versions a MAMA release was verified on. MAMA depends on their sandbox,
4
+ * hook, settings and permission behaviour, so an older CLI is refused; raise these only after
5
+ * verifying a newer one.
6
+ */
7
+ export declare const MINIMUM_BACKEND_VERSIONS: {
8
+ readonly claude: "2.1.299";
9
+ readonly codex: "0.160.1";
10
+ };
11
+ export type BackendName = keyof typeof MINIMUM_BACKEND_VERSIONS;
12
+ export type ProbeRun = (command: string, args: string[], env?: NodeJS.ProcessEnv) => SpawnSyncReturns<string>;
13
+ export declare function defaultProbeRun(command: string, args: string[], env?: NodeJS.ProcessEnv): SpawnSyncReturns<string>;
14
+ /** Compare dotted numeric versions; a missing part counts as 0. */
15
+ export declare function compareVersions(left: string, right: string): number;
16
+ export interface BackendProbe {
17
+ readonly version: string | null;
18
+ readonly minimum: string;
19
+ readonly versionOk: boolean;
20
+ readonly loggedIn: boolean;
21
+ /** Why the version or the login could not be read; never a credential. */
22
+ readonly problem: string | null;
23
+ }
24
+ /**
25
+ * Read a backend CLI's version and whether it is signed in, without printing anything the CLI
26
+ * says about the account. `env` is the environment the daemon gives the backend, so a login that
27
+ * only this shell's variables provide does not count; Codex is asked about the managed home.
28
+ */
29
+ export declare function probeBackend(backend: BackendName, executable: string, options?: {
30
+ codexHome?: string;
31
+ run?: ProbeRun;
32
+ env?: NodeJS.ProcessEnv;
33
+ }): BackendProbe;
34
+ //# sourceMappingURL=backend-probe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend-probe.d.ts","sourceRoot":"","sources":["../../../src/cli/runtime/backend-probe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtE;;;;GAIG;AACH,eAAO,MAAM,wBAAwB;;;CAG3B,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,MAAM,OAAO,wBAAwB,CAAC;AAEhE,MAAM,MAAM,QAAQ,GAAG,CACrB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,KACpB,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAE9B,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GACtB,gBAAgB,CAAC,MAAM,CAAC,CAE1B;AAED,mEAAmE;AACnE,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAQnE;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,0EAA0E;IAC1E,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,WAAW,EACpB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,QAAQ,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;CAAO,GAC5E,YAAY,CA6Cd"}
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MINIMUM_BACKEND_VERSIONS = void 0;
4
+ exports.defaultProbeRun = defaultProbeRun;
5
+ exports.compareVersions = compareVersions;
6
+ exports.probeBackend = probeBackend;
7
+ const node_child_process_1 = require("node:child_process");
8
+ /**
9
+ * The oldest backend CLI versions a MAMA release was verified on. MAMA depends on their sandbox,
10
+ * hook, settings and permission behaviour, so an older CLI is refused; raise these only after
11
+ * verifying a newer one.
12
+ */
13
+ exports.MINIMUM_BACKEND_VERSIONS = {
14
+ claude: '2.1.299',
15
+ codex: '0.160.1',
16
+ };
17
+ function defaultProbeRun(command, args, env) {
18
+ return (0, node_child_process_1.spawnSync)(command, args, { encoding: 'utf8', timeout: 20_000, env: env ?? process.env });
19
+ }
20
+ /** Compare dotted numeric versions; a missing part counts as 0. */
21
+ function compareVersions(left, right) {
22
+ const a = left.split('.').map((part) => Number.parseInt(part, 10) || 0);
23
+ const b = right.split('.').map((part) => Number.parseInt(part, 10) || 0);
24
+ for (let index = 0; index < Math.max(a.length, b.length); index += 1) {
25
+ const difference = (a[index] ?? 0) - (b[index] ?? 0);
26
+ if (difference !== 0)
27
+ return difference;
28
+ }
29
+ return 0;
30
+ }
31
+ /**
32
+ * Read a backend CLI's version and whether it is signed in, without printing anything the CLI
33
+ * says about the account. `env` is the environment the daemon gives the backend, so a login that
34
+ * only this shell's variables provide does not count; Codex is asked about the managed home.
35
+ */
36
+ function probeBackend(backend, executable, options = {}) {
37
+ const run = options.run ?? defaultProbeRun;
38
+ const env = options.env ?? process.env;
39
+ const minimum = exports.MINIMUM_BACKEND_VERSIONS[backend];
40
+ const versionRun = run(executable, ['--version'], env);
41
+ const version = versionRun.error
42
+ ? null
43
+ : (/(\d+\.\d+\.\d+)/.exec(`${versionRun.stdout ?? ''}`)?.[1] ?? null);
44
+ if (version === null) {
45
+ return {
46
+ version: null,
47
+ minimum,
48
+ versionOk: false,
49
+ loggedIn: false,
50
+ problem: `${backend} --version printed no version`,
51
+ };
52
+ }
53
+ const versionOk = compareVersions(version, minimum) >= 0;
54
+ if (backend === 'claude') {
55
+ const status = run(executable, ['auth', 'status', '--json'], env);
56
+ let loggedIn = false;
57
+ try {
58
+ loggedIn = JSON.parse(`${status.stdout ?? ''}`).loggedIn === true;
59
+ }
60
+ catch {
61
+ return {
62
+ version,
63
+ minimum,
64
+ versionOk,
65
+ loggedIn: false,
66
+ problem: 'claude auth status did not answer in JSON',
67
+ };
68
+ }
69
+ return { version, minimum, versionOk, loggedIn, problem: null };
70
+ }
71
+ const status = run(executable, ['login', 'status'], {
72
+ ...env,
73
+ ...(options.codexHome ? { CODEX_HOME: options.codexHome } : {}),
74
+ });
75
+ return {
76
+ version,
77
+ minimum,
78
+ versionOk,
79
+ loggedIn: !status.error && status.status === 0,
80
+ problem: null,
81
+ };
82
+ }
83
+ //# sourceMappingURL=backend-probe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend-probe.js","sourceRoot":"","sources":["../../../src/cli/runtime/backend-probe.ts"],"names":[],"mappings":"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"}