@withbuddi/buddi 0.1.0-pre.39 → 0.1.0-pre.41

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 (241) hide show
  1. package/extension/manifest.json +2 -2
  2. package/node_modules/@buddi/cli/dist/.tsbuildinfo +1 -1
  3. package/node_modules/@buddi/cli/dist/args.d.ts +2 -0
  4. package/node_modules/@buddi/cli/dist/args.d.ts.map +1 -1
  5. package/node_modules/@buddi/cli/dist/args.js +11 -2
  6. package/node_modules/@buddi/cli/dist/args.js.map +1 -1
  7. package/node_modules/@buddi/cli/dist/backup/index.d.ts +3 -1
  8. package/node_modules/@buddi/cli/dist/backup/index.d.ts.map +1 -1
  9. package/node_modules/@buddi/cli/dist/backup/index.js +16 -1
  10. package/node_modules/@buddi/cli/dist/backup/index.js.map +1 -1
  11. package/node_modules/@buddi/cli/dist/commands.d.ts.map +1 -1
  12. package/node_modules/@buddi/cli/dist/commands.js +5 -3
  13. package/node_modules/@buddi/cli/dist/commands.js.map +1 -1
  14. package/node_modules/@buddi/cli/dist/main.d.ts +4 -1
  15. package/node_modules/@buddi/cli/dist/main.d.ts.map +1 -1
  16. package/node_modules/@buddi/cli/dist/main.js +41 -3
  17. package/node_modules/@buddi/cli/dist/main.js.map +1 -1
  18. package/node_modules/@buddi/cli/dist/mode.d.ts +41 -0
  19. package/node_modules/@buddi/cli/dist/mode.d.ts.map +1 -0
  20. package/node_modules/@buddi/cli/dist/mode.js +103 -0
  21. package/node_modules/@buddi/cli/dist/mode.js.map +1 -0
  22. package/node_modules/@buddi/cli/dist/paths.d.ts +13 -1
  23. package/node_modules/@buddi/cli/dist/paths.d.ts.map +1 -1
  24. package/node_modules/@buddi/cli/dist/paths.js +23 -2
  25. package/node_modules/@buddi/cli/dist/paths.js.map +1 -1
  26. package/node_modules/@buddi/cli/dist/uninstall-cmd.d.ts +12 -2
  27. package/node_modules/@buddi/cli/dist/uninstall-cmd.d.ts.map +1 -1
  28. package/node_modules/@buddi/cli/dist/uninstall-cmd.js +63 -12
  29. package/node_modules/@buddi/cli/dist/uninstall-cmd.js.map +1 -1
  30. package/node_modules/@buddi/cli/dist/vault-cmd.d.ts +3 -0
  31. package/node_modules/@buddi/cli/dist/vault-cmd.d.ts.map +1 -1
  32. package/node_modules/@buddi/cli/dist/vault-cmd.js +26 -5
  33. package/node_modules/@buddi/cli/dist/vault-cmd.js.map +1 -1
  34. package/node_modules/@buddi/core/dist/.tsbuildinfo +1 -1
  35. package/node_modules/@buddi/core/dist/uninstall.d.ts +18 -0
  36. package/node_modules/@buddi/core/dist/uninstall.d.ts.map +1 -1
  37. package/node_modules/@buddi/core/dist/uninstall.js +47 -0
  38. package/node_modules/@buddi/core/dist/uninstall.js.map +1 -1
  39. package/node_modules/@buddi/gateway/dist/.tsbuildinfo +1 -1
  40. package/node_modules/@buddi/gateway/dist/codex-accounts.d.ts +2 -0
  41. package/node_modules/@buddi/gateway/dist/codex-accounts.d.ts.map +1 -1
  42. package/node_modules/@buddi/gateway/dist/codex-accounts.js +4 -4
  43. package/node_modules/@buddi/gateway/dist/codex-accounts.js.map +1 -1
  44. package/node_modules/@buddi/gateway/dist/serve.d.ts.map +1 -1
  45. package/node_modules/@buddi/gateway/dist/serve.js +31 -0
  46. package/node_modules/@buddi/gateway/dist/serve.js.map +1 -1
  47. package/node_modules/@buddi/gateway/dist/web/api-routes.d.ts.map +1 -1
  48. package/node_modules/@buddi/gateway/dist/web/api-routes.js +20 -2
  49. package/node_modules/@buddi/gateway/dist/web/api-routes.js.map +1 -1
  50. package/node_modules/@buddi/gateway/dist/web/cli-tool.d.ts +11 -0
  51. package/node_modules/@buddi/gateway/dist/web/cli-tool.d.ts.map +1 -0
  52. package/node_modules/@buddi/gateway/dist/web/cli-tool.js +27 -0
  53. package/node_modules/@buddi/gateway/dist/web/cli-tool.js.map +1 -0
  54. package/node_modules/@buddi/gateway/dist/web/extension.d.ts +14 -0
  55. package/node_modules/@buddi/gateway/dist/web/extension.d.ts.map +1 -1
  56. package/node_modules/@buddi/gateway/dist/web/extension.js +22 -1
  57. package/node_modules/@buddi/gateway/dist/web/extension.js.map +1 -1
  58. package/node_modules/@buddi/gateway/dist/web/lock.d.ts +12 -0
  59. package/node_modules/@buddi/gateway/dist/web/lock.d.ts.map +1 -1
  60. package/node_modules/@buddi/gateway/dist/web/lock.js +13 -0
  61. package/node_modules/@buddi/gateway/dist/web/lock.js.map +1 -1
  62. package/node_modules/@buddi/gateway/dist/web/onboarding.d.ts +41 -6
  63. package/node_modules/@buddi/gateway/dist/web/onboarding.d.ts.map +1 -1
  64. package/node_modules/@buddi/gateway/dist/web/onboarding.js +91 -15
  65. package/node_modules/@buddi/gateway/dist/web/onboarding.js.map +1 -1
  66. package/node_modules/@buddi/gateway/dist/web/passphrase-notice.d.ts +64 -0
  67. package/node_modules/@buddi/gateway/dist/web/passphrase-notice.d.ts.map +1 -0
  68. package/node_modules/@buddi/gateway/dist/web/passphrase-notice.js +112 -0
  69. package/node_modules/@buddi/gateway/dist/web/passphrase-notice.js.map +1 -0
  70. package/node_modules/@buddi/gateway/dist/web/server.d.ts.map +1 -1
  71. package/node_modules/@buddi/gateway/dist/web/server.js +78 -9
  72. package/node_modules/@buddi/gateway/dist/web/server.js.map +1 -1
  73. package/node_modules/@buddi/gateway/dist/web/take-on.d.ts +28 -3
  74. package/node_modules/@buddi/gateway/dist/web/take-on.d.ts.map +1 -1
  75. package/node_modules/@buddi/gateway/dist/web/take-on.js +48 -3
  76. package/node_modules/@buddi/gateway/dist/web/take-on.js.map +1 -1
  77. package/node_modules/@buddi/gateway/dist/web/uninstall.d.ts +36 -0
  78. package/node_modules/@buddi/gateway/dist/web/uninstall.d.ts.map +1 -0
  79. package/node_modules/@buddi/gateway/dist/web/uninstall.js +116 -0
  80. package/node_modules/@buddi/gateway/dist/web/uninstall.js.map +1 -0
  81. package/node_modules/@buddi/install/dist/.tsbuildinfo +1 -1
  82. package/node_modules/@buddi/install/dist/app-layout.d.ts +4 -0
  83. package/node_modules/@buddi/install/dist/app-layout.d.ts.map +1 -1
  84. package/node_modules/@buddi/install/dist/app-layout.js +6 -0
  85. package/node_modules/@buddi/install/dist/app-layout.js.map +1 -1
  86. package/node_modules/@buddi/install/dist/cli-shim.d.ts +76 -0
  87. package/node_modules/@buddi/install/dist/cli-shim.d.ts.map +1 -0
  88. package/node_modules/@buddi/install/dist/cli-shim.js +215 -0
  89. package/node_modules/@buddi/install/dist/cli-shim.js.map +1 -0
  90. package/node_modules/@buddi/install/dist/environment.d.ts +90 -1
  91. package/node_modules/@buddi/install/dist/environment.d.ts.map +1 -1
  92. package/node_modules/@buddi/install/dist/environment.js +216 -3
  93. package/node_modules/@buddi/install/dist/environment.js.map +1 -1
  94. package/node_modules/@buddi/install/dist/launcher.d.ts.map +1 -1
  95. package/node_modules/@buddi/install/dist/launcher.js +140 -5
  96. package/node_modules/@buddi/install/dist/launcher.js.map +1 -1
  97. package/node_modules/@buddi/install/dist/product-uninstall.d.ts +86 -0
  98. package/node_modules/@buddi/install/dist/product-uninstall.d.ts.map +1 -0
  99. package/node_modules/@buddi/install/dist/product-uninstall.js +150 -0
  100. package/node_modules/@buddi/install/dist/product-uninstall.js.map +1 -0
  101. package/node_modules/@buddi/install/dist/supervisor.d.ts +16 -1
  102. package/node_modules/@buddi/install/dist/supervisor.d.ts.map +1 -1
  103. package/node_modules/@buddi/install/dist/supervisor.js +191 -10
  104. package/node_modules/@buddi/install/dist/supervisor.js.map +1 -1
  105. package/node_modules/@buddi/install/dist/uninstall.d.ts +20 -1
  106. package/node_modules/@buddi/install/dist/uninstall.d.ts.map +1 -1
  107. package/node_modules/@buddi/install/dist/uninstall.js +84 -13
  108. package/node_modules/@buddi/install/dist/uninstall.js.map +1 -1
  109. package/node_modules/@buddi/runtime/dist/.tsbuildinfo +1 -1
  110. package/node_modules/@buddi/runtime/dist/codex-oauth.d.ts +6 -0
  111. package/node_modules/@buddi/runtime/dist/codex-oauth.d.ts.map +1 -1
  112. package/node_modules/@buddi/runtime/dist/codex-oauth.js +15 -0
  113. package/node_modules/@buddi/runtime/dist/codex-oauth.js.map +1 -1
  114. package/node_modules/@buddi/runtime/dist/openai.d.ts +9 -2
  115. package/node_modules/@buddi/runtime/dist/openai.d.ts.map +1 -1
  116. package/node_modules/@buddi/runtime/dist/openai.js +117 -16
  117. package/node_modules/@buddi/runtime/dist/openai.js.map +1 -1
  118. package/package.json +2 -2
  119. package/packages/cli/dist/.tsbuildinfo +1 -1
  120. package/packages/cli/dist/args.d.ts +2 -0
  121. package/packages/cli/dist/args.d.ts.map +1 -1
  122. package/packages/cli/dist/args.js +11 -2
  123. package/packages/cli/dist/args.js.map +1 -1
  124. package/packages/cli/dist/backup/index.d.ts +3 -1
  125. package/packages/cli/dist/backup/index.d.ts.map +1 -1
  126. package/packages/cli/dist/backup/index.js +16 -1
  127. package/packages/cli/dist/backup/index.js.map +1 -1
  128. package/packages/cli/dist/commands.d.ts.map +1 -1
  129. package/packages/cli/dist/commands.js +5 -3
  130. package/packages/cli/dist/commands.js.map +1 -1
  131. package/packages/cli/dist/main.d.ts +4 -1
  132. package/packages/cli/dist/main.d.ts.map +1 -1
  133. package/packages/cli/dist/main.js +41 -3
  134. package/packages/cli/dist/main.js.map +1 -1
  135. package/packages/cli/dist/mode.d.ts +41 -0
  136. package/packages/cli/dist/mode.d.ts.map +1 -0
  137. package/packages/cli/dist/mode.js +103 -0
  138. package/packages/cli/dist/mode.js.map +1 -0
  139. package/packages/cli/dist/paths.d.ts +13 -1
  140. package/packages/cli/dist/paths.d.ts.map +1 -1
  141. package/packages/cli/dist/paths.js +23 -2
  142. package/packages/cli/dist/paths.js.map +1 -1
  143. package/packages/cli/dist/uninstall-cmd.d.ts +12 -2
  144. package/packages/cli/dist/uninstall-cmd.d.ts.map +1 -1
  145. package/packages/cli/dist/uninstall-cmd.js +63 -12
  146. package/packages/cli/dist/uninstall-cmd.js.map +1 -1
  147. package/packages/cli/dist/vault-cmd.d.ts +3 -0
  148. package/packages/cli/dist/vault-cmd.d.ts.map +1 -1
  149. package/packages/cli/dist/vault-cmd.js +26 -5
  150. package/packages/cli/dist/vault-cmd.js.map +1 -1
  151. package/packages/core/dist/.tsbuildinfo +1 -1
  152. package/packages/core/dist/uninstall.d.ts +18 -0
  153. package/packages/core/dist/uninstall.d.ts.map +1 -1
  154. package/packages/core/dist/uninstall.js +47 -0
  155. package/packages/core/dist/uninstall.js.map +1 -1
  156. package/packages/gateway/dist/.tsbuildinfo +1 -1
  157. package/packages/gateway/dist/codex-accounts.d.ts +2 -0
  158. package/packages/gateway/dist/codex-accounts.d.ts.map +1 -1
  159. package/packages/gateway/dist/codex-accounts.js +4 -4
  160. package/packages/gateway/dist/codex-accounts.js.map +1 -1
  161. package/packages/gateway/dist/serve.d.ts.map +1 -1
  162. package/packages/gateway/dist/serve.js +31 -0
  163. package/packages/gateway/dist/serve.js.map +1 -1
  164. package/packages/gateway/dist/web/api-routes.d.ts.map +1 -1
  165. package/packages/gateway/dist/web/api-routes.js +20 -2
  166. package/packages/gateway/dist/web/api-routes.js.map +1 -1
  167. package/packages/gateway/dist/web/cli-tool.d.ts +11 -0
  168. package/packages/gateway/dist/web/cli-tool.d.ts.map +1 -0
  169. package/packages/gateway/dist/web/cli-tool.js +27 -0
  170. package/packages/gateway/dist/web/cli-tool.js.map +1 -0
  171. package/packages/gateway/dist/web/extension.d.ts +14 -0
  172. package/packages/gateway/dist/web/extension.d.ts.map +1 -1
  173. package/packages/gateway/dist/web/extension.js +22 -1
  174. package/packages/gateway/dist/web/extension.js.map +1 -1
  175. package/packages/gateway/dist/web/lock.d.ts +12 -0
  176. package/packages/gateway/dist/web/lock.d.ts.map +1 -1
  177. package/packages/gateway/dist/web/lock.js +13 -0
  178. package/packages/gateway/dist/web/lock.js.map +1 -1
  179. package/packages/gateway/dist/web/onboarding.d.ts +41 -6
  180. package/packages/gateway/dist/web/onboarding.d.ts.map +1 -1
  181. package/packages/gateway/dist/web/onboarding.js +91 -15
  182. package/packages/gateway/dist/web/onboarding.js.map +1 -1
  183. package/packages/gateway/dist/web/passphrase-notice.d.ts +64 -0
  184. package/packages/gateway/dist/web/passphrase-notice.d.ts.map +1 -0
  185. package/packages/gateway/dist/web/passphrase-notice.js +112 -0
  186. package/packages/gateway/dist/web/passphrase-notice.js.map +1 -0
  187. package/packages/gateway/dist/web/server.d.ts.map +1 -1
  188. package/packages/gateway/dist/web/server.js +78 -9
  189. package/packages/gateway/dist/web/server.js.map +1 -1
  190. package/packages/gateway/dist/web/take-on.d.ts +28 -3
  191. package/packages/gateway/dist/web/take-on.d.ts.map +1 -1
  192. package/packages/gateway/dist/web/take-on.js +48 -3
  193. package/packages/gateway/dist/web/take-on.js.map +1 -1
  194. package/packages/gateway/dist/web/uninstall.d.ts +36 -0
  195. package/packages/gateway/dist/web/uninstall.d.ts.map +1 -0
  196. package/packages/gateway/dist/web/uninstall.js +116 -0
  197. package/packages/gateway/dist/web/uninstall.js.map +1 -0
  198. package/packages/install/dist/.tsbuildinfo +1 -1
  199. package/packages/install/dist/app-layout.d.ts +4 -0
  200. package/packages/install/dist/app-layout.d.ts.map +1 -1
  201. package/packages/install/dist/app-layout.js +6 -0
  202. package/packages/install/dist/app-layout.js.map +1 -1
  203. package/packages/install/dist/cli-shim.d.ts +76 -0
  204. package/packages/install/dist/cli-shim.d.ts.map +1 -0
  205. package/packages/install/dist/cli-shim.js +215 -0
  206. package/packages/install/dist/cli-shim.js.map +1 -0
  207. package/packages/install/dist/environment.d.ts +90 -1
  208. package/packages/install/dist/environment.d.ts.map +1 -1
  209. package/packages/install/dist/environment.js +216 -3
  210. package/packages/install/dist/environment.js.map +1 -1
  211. package/packages/install/dist/launcher.d.ts.map +1 -1
  212. package/packages/install/dist/launcher.js +140 -5
  213. package/packages/install/dist/launcher.js.map +1 -1
  214. package/packages/install/dist/product-uninstall.d.ts +86 -0
  215. package/packages/install/dist/product-uninstall.d.ts.map +1 -0
  216. package/packages/install/dist/product-uninstall.js +150 -0
  217. package/packages/install/dist/product-uninstall.js.map +1 -0
  218. package/packages/install/dist/supervisor.d.ts +16 -1
  219. package/packages/install/dist/supervisor.d.ts.map +1 -1
  220. package/packages/install/dist/supervisor.js +191 -10
  221. package/packages/install/dist/supervisor.js.map +1 -1
  222. package/packages/install/dist/uninstall.d.ts +20 -1
  223. package/packages/install/dist/uninstall.d.ts.map +1 -1
  224. package/packages/install/dist/uninstall.js +84 -13
  225. package/packages/install/dist/uninstall.js.map +1 -1
  226. package/packages/runtime/dist/.tsbuildinfo +1 -1
  227. package/packages/runtime/dist/codex-oauth.d.ts +6 -0
  228. package/packages/runtime/dist/codex-oauth.d.ts.map +1 -1
  229. package/packages/runtime/dist/codex-oauth.js +15 -0
  230. package/packages/runtime/dist/codex-oauth.js.map +1 -1
  231. package/packages/runtime/dist/openai.d.ts +9 -2
  232. package/packages/runtime/dist/openai.d.ts.map +1 -1
  233. package/packages/runtime/dist/openai.js +117 -16
  234. package/packages/runtime/dist/openai.js.map +1 -1
  235. package/packages/web/dist/assets/index-BkxHX_8g.js +146 -0
  236. package/packages/web/dist/assets/{index-DYfeUW-0.css → index-D2rOodlH.css} +1 -1
  237. package/packages/web/dist/assets/{lottie_light-BFAMYgLA.js → lottie_light-D-P1tn3V.js} +1 -1
  238. package/packages/web/dist/build.json +1 -1
  239. package/packages/web/dist/index.html +2 -2
  240. package/packages/web/dist/precache.json +4 -4
  241. package/packages/web/dist/assets/index-vpc904_b.js +0 -146
@@ -0,0 +1,112 @@
1
+ /**
2
+ * The backup passphrase, shown to the owner once, when it starts to matter.
3
+ *
4
+ * It is not part of first run: nothing is locked with it until the first
5
+ * backup. Once an encrypted backup exists (scheduled or taken by hand), Home
6
+ * shows the six words in a card that stays until the owner presses "I saved
7
+ * it", and the same words go once to Telegram when a phone is paired, with
8
+ * the advice to delete the message once they are saved. After that the words
9
+ * are behind Settings → Backup's Reveal (and the PIN, when there is one).
10
+ *
11
+ * What was said and acknowledged is one dashboard setting; the words
12
+ * themselves are never written anywhere but the vault and that one message.
13
+ */
14
+ import { readWebSetting } from '@buddi/core';
15
+ export const PASSPHRASE_NOTICE_KEY = 'backup.passphraseNotice';
16
+ /** The message Telegram gets, once. */
17
+ export function passphraseTelegramText(phrase) {
18
+ return [
19
+ 'buddi took its first backup. These six words open your backups, and only you have them:',
20
+ '',
21
+ phrase,
22
+ '',
23
+ 'Write them down somewhere safe, then delete this message.',
24
+ ].join('\n');
25
+ }
26
+ export async function readNoticeState(pool) {
27
+ const value = await readWebSetting(pool, PASSPHRASE_NOTICE_KEY);
28
+ return value !== null && typeof value === 'object' ? value : {};
29
+ }
30
+ /**
31
+ * Merge `patch` into the stored state in one statement, so "I saved it" and
32
+ * the Telegram delivery (which waits on a send in between) never write back
33
+ * a stale copy of each other's fields. `keep: true` lets a field already
34
+ * stored win (the first acknowledgement stays the one recorded).
35
+ */
36
+ async function mergeNoticeState(pool, patch, options = {}) {
37
+ const stored = `(case when jsonb_typeof(core.web_settings.value) = 'object' then core.web_settings.value else '{}'::jsonb end)`;
38
+ const merged = options.keep ? `excluded.value || ${stored}` : `${stored} || excluded.value`;
39
+ const { rows } = await pool.query(`insert into core.web_settings (key, value, updated_at)
40
+ values ($1, $2::jsonb, now())
41
+ on conflict (key) do update set value = ${merged}, updated_at = now()
42
+ returning value`, [PASSPHRASE_NOTICE_KEY, JSON.stringify(patch)]);
43
+ const value = rows[0]?.value;
44
+ return value !== null && typeof value === 'object' ? value : patch;
45
+ }
46
+ /** Is there a backup locked with the passphrase yet? */
47
+ async function hasEncryptedBackup(deps) {
48
+ const listed = await deps.listBackups().catch(() => null);
49
+ if (listed?.status !== 200)
50
+ return false;
51
+ const archives = listed.body.archives ?? [];
52
+ return archives.some((archive) => archive.encrypted === true || (typeof archive.name === 'string' && archive.name.endsWith('.age')));
53
+ }
54
+ async function words(deps) {
55
+ const reply = await deps.passphrase().catch(() => null);
56
+ const phrase = reply?.status === 200 ? reply.body.passphrase : undefined;
57
+ return typeof phrase === 'string' && phrase.trim() !== '' ? phrase : undefined;
58
+ }
59
+ /**
60
+ * What Home's card shows: the words, until they are acknowledged. With
61
+ * `words: false` (a PIN is set) the card is due but the words are not sent:
62
+ * it asks for the PIN and reveals them through POST …/passphrase/reveal.
63
+ */
64
+ export async function passphraseNotice(deps, options = {}) {
65
+ const state = await readNoticeState(deps.pool);
66
+ if (state.acknowledgedAt !== undefined)
67
+ return { show: false };
68
+ if (!(await hasEncryptedBackup(deps)))
69
+ return { show: false };
70
+ const phrase = await words(deps);
71
+ if (phrase === undefined)
72
+ return { show: false };
73
+ return options.words === false ? { show: true, needsPin: true } : { show: true, passphrase: phrase };
74
+ }
75
+ /** "I saved it": the card goes, for good. */
76
+ export async function acknowledgePassphrase(deps) {
77
+ return await mergeNoticeState(deps.pool, { acknowledgedAt: (deps.now ?? (() => new Date()))().toISOString() }, { keep: true });
78
+ }
79
+ /**
80
+ * The Telegram message, once: after the first encrypted backup, to the paired
81
+ * phone. Nothing paired then means nothing is sent later either (the words
82
+ * are on Home and in Settings → Backup). A send that failed is tried again on
83
+ * the next pass. Returns what it did.
84
+ */
85
+ export async function telegramPassphraseOnce(deps) {
86
+ const state = await readNoticeState(deps.pool);
87
+ if (state.telegramAt !== undefined && state.telegram !== 'failed')
88
+ return 'done';
89
+ if (!(await hasEncryptedBackup(deps)))
90
+ return 'waiting';
91
+ const at = (deps.now ?? (() => new Date()))().toISOString();
92
+ if (!deps.sendTelegram) {
93
+ await mergeNoticeState(deps.pool, { telegramAt: at, telegram: 'not-paired' });
94
+ return 'not-paired';
95
+ }
96
+ const phrase = await words(deps);
97
+ if (phrase === undefined)
98
+ return 'waiting';
99
+ try {
100
+ await deps.sendTelegram(passphraseTelegramText(phrase));
101
+ await mergeNoticeState(deps.pool, { telegramAt: at, telegram: 'sent' });
102
+ return 'sent';
103
+ }
104
+ catch (error) {
105
+ const notPaired = error?.code === 'owner-not-paired' || error?.code === 'telegram-not-configured';
106
+ await mergeNoticeState(deps.pool, { telegramAt: at, telegram: notPaired ? 'not-paired' : 'failed' });
107
+ if (!notPaired)
108
+ deps.log?.(`backup passphrase: the Telegram message did not go: ${error instanceof Error ? error.message : String(error)}`);
109
+ return notPaired ? 'not-paired' : 'failed';
110
+ }
111
+ }
112
+ //# sourceMappingURL=passphrase-notice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"passphrase-notice.js","sourceRoot":"","sources":["../../src/web/passphrase-notice.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"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"}
@@ -60,8 +60,8 @@ import { agentSearchPath, EXAMPLES_AGENTS_DIR } from '../agents/catalog.js';
60
60
  import { setDelegatesFromWeb } from './write.js';
61
61
  import { mlxhBaseUrl, probeMlxh } from '../mlxh.js';
62
62
  import { PullRefusal, createOllamaPulls, ollamaMachine } from '../ollama-local.js';
63
- import { OnboardingRefusal, WEB_ONBOARDING_STEPS, WEB_ONBOARDING_SURFACE, claimOpeningTurn, createFirstAgent, OLLAMA_BASE_URL, probeOllama, readOnboarding, rebindBrain, updateFirstAgent, withFirstRunFacts, readFirstAgentPersona } from './onboarding.js';
64
- import { TakeOnRefusal, readTakeOn, startTakeOn } from './take-on.js';
63
+ import { OnboardingRefusal, hasOwnerAgent, WEB_ONBOARDING_STEPS, WEB_ONBOARDING_SURFACE, claimOpeningTurn, createFirstAgent, OLLAMA_BASE_URL, probeOllama, readOnboarding, rebindBrain, updateFirstAgent, withFirstRunFacts, readFirstAgentPersona } from './onboarding.js';
64
+ import { TakeOnRefusal, readTakeOn, readTakeOnOffers, startTakeOn } from './take-on.js';
65
65
  import { TelegramWebError, saveTelegramToken, telegramBot, telegramDevices, telegramPairing, telegramStatus, unpairTelegramDevice, } from './telegram.js';
66
66
  import { PAGE_ROUTE, sendPageFile, actOnPage, actRateLimited, listPageDescriptors, runPageQuery, } from './pages.js';
67
67
  import { listSecrets, ownerLoginKey, ownerLoginNames, ownerLoginStore, secretUses, secretsAct } from './secrets.js';
@@ -136,6 +136,9 @@ import { StreamBudget, frame, resumeCursor, streamConversation } from './stream.
136
136
  import { ensureWebToken, verifyTicket } from './token.js';
137
137
  import { MAX_UPLOAD_BYTES, readUpload } from './upload.js';
138
138
  import { LOCKED_BODY, LockUnavailable, allowedWhileLocked, clientOf, createLock } from './lock.js';
139
+ import { acknowledgePassphrase, passphraseNotice } from './passphrase-notice.js';
140
+ import { cliToolRoute } from './cli-tool.js';
141
+ import { createTokenStore, uninstallBackupRoute, uninstallJobRoute, uninstallPlanRoute, uninstallRoute as removeBuddiRoute, withoutPassphrase } from './uninstall.js';
139
142
  import { matchApiRoute, TOKEN_REFUSALS } from './api-routes.js';
140
143
  import { QUIET_UNAVAILABLE_TEXT, pluginCommands } from './composer.js';
141
144
  import { createEngagementHooks } from '../missions/engagement.js';
@@ -370,6 +373,8 @@ export function createWebApp(deps) {
370
373
  },
371
374
  recoveryActive: () => inRecovery(deps.pool),
372
375
  });
376
+ /** Remove buddi from this Mac: the token its plan mints (web/uninstall.ts). */
377
+ const uninstallTokens = createTokenStore();
373
378
  const lock = createLock({ pool: deps.pool, sessions, now: deps.now, get timezone() { return deps.timezone; }, widgets, needsYou, log });
374
379
  const openStreams = new Map();
375
380
  /*
@@ -1214,12 +1219,21 @@ export function createWebApp(deps) {
1214
1219
  examplesDir: EXAMPLES_AGENTS_DIR,
1215
1220
  reload: () => deps.catalog.reload?.(),
1216
1221
  registry: deps.registry,
1222
+ offers: (opts) => readTakeOnOffers({ env: deps.env ?? process.env, log }, opts),
1217
1223
  });
1218
1224
  /** What the backup routes need: the environment, and somewhere to log. */
1219
1225
  const backupDeps = () => ({
1220
1226
  env: deps.env ?? process.env,
1221
1227
  log,
1222
1228
  });
1229
+ /** Home's passphrase card: the backups, the words, and where "I saved it" is kept. */
1230
+ const noticeDeps = () => ({
1231
+ pool: deps.pool,
1232
+ listBackups: () => listBackups(backupDeps()),
1233
+ passphrase: () => passphraseRoute(backupDeps(), 'GET'),
1234
+ now: deps.now,
1235
+ log,
1236
+ });
1223
1237
  /** What the plugin page routes need: the registry, and the owner's context. */
1224
1238
  const pagesDeps = () => ({ registry: deps.registry, ctx: deps.ctx, now: deps.now, log });
1225
1239
  const agentOffersDeps = () => ({
@@ -1320,7 +1334,9 @@ export function createWebApp(deps) {
1320
1334
  if (view.state !== 'pending') {
1321
1335
  return { status: 409, message: 'This buddi has already been set up. Restore from Settings, where it asks you to confirm.' };
1322
1336
  }
1323
- if (!view.needs.agent) {
1337
+ // Any agent of the owner's, a teammate a plugin proposed included: it is
1338
+ // a private file a restore would overwrite. Wider than `needs.agent`.
1339
+ if (hasOwnerAgent(deps.catalog)) {
1324
1340
  return { status: 409, message: 'This buddi already has an agent. Restore from Settings, where it asks you to confirm.' };
1325
1341
  }
1326
1342
  return null;
@@ -1928,8 +1944,21 @@ export function createWebApp(deps) {
1928
1944
  return reply(res, await listBackups(backupDeps()));
1929
1945
  case '/api/backups/schedule':
1930
1946
  return reply(res, await scheduleRoute(backupDeps(), 'GET'));
1931
- case '/api/backups/passphrase':
1947
+ case '/api/backups/passphrase': {
1948
+ // Behind the PIN when there is one: Settings → Backup reveals it with POST …/reveal.
1949
+ const allowed = await lock.verify(undefined);
1950
+ if (!allowed.ok)
1951
+ return sendJson(res, 403, { error: 'Type your PIN to see the passphrase.', needsPin: true });
1932
1952
  return reply(res, await passphraseRoute(backupDeps(), 'GET'));
1953
+ }
1954
+ /* Home's card after the first encrypted backup, until "I saved it" (web/passphrase-notice.ts). */
1955
+ /* The words, so from this computer only, and behind the PIN when there is one (the card then reveals with POST …/reveal). */
1956
+ case '/api/backups/passphrase/notice': {
1957
+ if (session.via !== 'local')
1958
+ return sendJson(res, 403, { error: 'The passphrase shows on the computer buddi runs on.' });
1959
+ const allowed = await lock.verify(undefined);
1960
+ return sendJson(res, 200, await passphraseNotice(noticeDeps(), { words: allowed.ok }));
1961
+ }
1933
1962
  /*
1934
1963
  * Plugins: what is installed, what is staged and waiting to be read,
1935
1964
  * and the trust sentence the page shows above the install field. A
@@ -1972,7 +2001,7 @@ export function createWebApp(deps) {
1972
2001
  case '/api/secrets/uses':
1973
2002
  return reply(res, await secretUses(secretsDeps(), url));
1974
2003
  case '/api/onboarding':
1975
- return sendJson(res, 200, await readOnboarding(onboardingDeps()));
2004
+ return sendJson(res, 200, await readOnboarding(onboardingDeps(), { withOffers: true }));
1976
2005
  /*
1977
2006
  * Is Ollama running on this machine? Asked from here, never from the
1978
2007
  * page: the dashboard bundle reaches no host but its own, and the
@@ -2051,10 +2080,28 @@ export function createWebApp(deps) {
2051
2080
  }
2052
2081
  const upgradeJob = /^\/api\/upgrade\/jobs\/([0-9a-f-]{36})$/i.exec(path);
2053
2082
  if (upgradeJob)
2054
- return reply(res, await upgradeJobRoute(versionDeps(), upgradeJob[1]));
2083
+ return reply(res, withoutPassphrase(await upgradeJobRoute(versionDeps(), upgradeJob[1])));
2055
2084
  const backupJob = /^\/api\/backups\/jobs\/([0-9a-f-]{36})$/i.exec(path);
2056
2085
  if (backupJob)
2057
- return reply(res, await backupJobRoute(backupDeps(), backupJob[1]));
2086
+ return reply(res, withoutPassphrase(await backupJobRoute(backupDeps(), backupJob[1])));
2087
+ /* buddi.app's command line tool: whether it is installed, from this computer only. */
2088
+ if (path === '/api/system/cli') {
2089
+ if (session.via !== 'local')
2090
+ return sendJson(res, 403, { error: 'Change this from the computer buddi runs on.' });
2091
+ return reply(res, await cliToolRoute(deps.env ?? process.env, 'GET'));
2092
+ }
2093
+ /* Remove buddi from this Mac: the plan (with its token) and the last backup's job, from this computer only. */
2094
+ if (path === '/api/system/uninstall') {
2095
+ if (session.via !== 'local')
2096
+ return sendJson(res, 403, { error: 'Remove buddi from the computer it runs on.' });
2097
+ return reply(res, await uninstallPlanRoute({ env: deps.env ?? process.env, now: deps.now }, uninstallTokens));
2098
+ }
2099
+ const uninstallJob = /^\/api\/system\/uninstall\/jobs\/([0-9a-f-]{36})$/i.exec(path);
2100
+ if (uninstallJob) {
2101
+ if (session.via !== 'local')
2102
+ return sendJson(res, 403, { error: 'Remove buddi from the computer it runs on.' });
2103
+ return reply(res, await uninstallJobRoute({ env: deps.env ?? process.env }, uninstallJob[1]));
2104
+ }
2058
2105
  const catalogueJob = /^\/api\/catalogue\/jobs\/([0-9a-f-]{36})$/i.exec(path);
2059
2106
  if (catalogueJob)
2060
2107
  return reply(res, catalogueJobRoute(catalogueJob[1]));
@@ -3351,6 +3398,27 @@ export function createWebApp(deps) {
3351
3398
  return reply(res, await upgradeRoute(versionDeps(), body));
3352
3399
  if (path === '/api/backups')
3353
3400
  return reply(res, await createBackupRoute(backupDeps(), body));
3401
+ if (path === '/api/backups/passphrase/notice')
3402
+ return sendJson(res, 200, await acknowledgePassphrase({ pool: deps.pool, now: deps.now }));
3403
+ if (path === '/api/system/cli') {
3404
+ if (session.via !== 'local')
3405
+ return sendJson(res, 403, { error: 'Change this from the computer buddi runs on.' });
3406
+ return reply(res, await cliToolRoute(deps.env ?? process.env, 'POST'));
3407
+ }
3408
+ if (path === '/api/system/uninstall/backup' || path === '/api/system/uninstall') {
3409
+ if (session.via !== 'local')
3410
+ return sendJson(res, 403, { error: 'Remove buddi from the computer it runs on.' });
3411
+ const uninstallDeps = { env: deps.env ?? process.env, now: deps.now };
3412
+ return reply(res, path === '/api/system/uninstall/backup'
3413
+ ? await uninstallBackupRoute(uninstallDeps, uninstallTokens, body)
3414
+ : await removeBuddiRoute(uninstallDeps, uninstallTokens, body));
3415
+ }
3416
+ if (path === '/api/backups/passphrase/reveal') {
3417
+ const allowed = await lock.verify(body.pin);
3418
+ if (!allowed.ok)
3419
+ return sendJson(res, allowed.status, allowed.body);
3420
+ return reply(res, await passphraseRoute(backupDeps(), 'GET'));
3421
+ }
3354
3422
  if (path === '/api/backups/verify')
3355
3423
  return reply(res, await verifyBackupRoute(backupDeps(), body));
3356
3424
  if (path === '/api/backups/restore') {
@@ -3650,8 +3718,9 @@ export function createWebApp(deps) {
3650
3718
  });
3651
3719
  }
3652
3720
  catch (error) {
3653
- if (error instanceof OnboardingRefusal)
3654
- return sendJson(res, error.status, { error: error.message });
3721
+ if (error instanceof OnboardingRefusal) {
3722
+ return sendJson(res, error.status, { error: error.message, ...(error.code ? { code: error.code } : {}) });
3723
+ }
3655
3724
  return sendJson(res, 500, { error: error instanceof Error ? error.message : 'The agent could not be written.' });
3656
3725
  }
3657
3726
  }