@withbuddi/buddi 0.1.0-pre.50 → 0.1.0-pre.52
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.
- package/extension/background.js +1604 -847
- package/extension/manifest.json +3 -3
- package/extension/popup.css +91 -3
- package/extension/popup.html +49 -32
- package/extension/popup.js +215 -123
- package/node_modules/@buddi/cli/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/cli/dist/commands.d.ts.map +1 -1
- package/node_modules/@buddi/cli/dist/commands.js +11 -1
- package/node_modules/@buddi/cli/dist/commands.js.map +1 -1
- package/node_modules/@buddi/core/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/core/dist/plugin/index.d.ts +1 -1
- package/node_modules/@buddi/core/dist/plugin/index.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/plugin/index.js.map +1 -1
- package/node_modules/@buddi/core/dist/questions/store.d.ts +3 -1
- package/node_modules/@buddi/core/dist/questions/store.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/questions/store.js +3 -3
- package/node_modules/@buddi/core/dist/questions/store.js.map +1 -1
- package/node_modules/@buddi/core/dist/questions/types.d.ts +46 -1
- package/node_modules/@buddi/core/dist/questions/types.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/questions/types.js +2 -1
- package/node_modules/@buddi/core/dist/questions/types.js.map +1 -1
- package/node_modules/@buddi/core/dist/registry.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/registry.js +11 -2
- package/node_modules/@buddi/core/dist/registry.js.map +1 -1
- package/node_modules/@buddi/core/dist/scheduler/index.d.ts +1 -0
- package/node_modules/@buddi/core/dist/scheduler/index.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/scheduler/index.js +1 -0
- package/node_modules/@buddi/core/dist/scheduler/index.js.map +1 -1
- package/node_modules/@buddi/core/dist/scheduler/manual.d.ts +50 -0
- package/node_modules/@buddi/core/dist/scheduler/manual.d.ts.map +1 -0
- package/node_modules/@buddi/core/dist/scheduler/manual.js +73 -0
- package/node_modules/@buddi/core/dist/scheduler/manual.js.map +1 -0
- package/node_modules/@buddi/core/dist/secrets/approval.d.ts +54 -0
- package/node_modules/@buddi/core/dist/secrets/approval.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/secrets/approval.js +58 -1
- package/node_modules/@buddi/core/dist/secrets/approval.js.map +1 -1
- package/node_modules/@buddi/core/dist/secrets/settings.d.ts +178 -0
- package/node_modules/@buddi/core/dist/secrets/settings.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/secrets/settings.js +63 -6
- package/node_modules/@buddi/core/dist/secrets/settings.js.map +1 -1
- package/node_modules/@buddi/core/dist/secrets/store.d.ts +31 -0
- package/node_modules/@buddi/core/dist/secrets/store.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/secrets/store.js +75 -0
- package/node_modules/@buddi/core/dist/secrets/store.js.map +1 -1
- package/node_modules/@buddi/core/dist/secrets/use.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/secrets/use.js +68 -3
- package/node_modules/@buddi/core/dist/secrets/use.js.map +1 -1
- package/node_modules/@buddi/core/dist/tools.d.ts +22 -0
- package/node_modules/@buddi/core/dist/tools.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/tools.js.map +1 -1
- package/node_modules/@buddi/core/migrations/080_secret_requests.sql +14 -0
- package/node_modules/@buddi/gateway/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/gateway/dist/chat/session.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/chat/session.js +2 -1
- package/node_modules/@buddi/gateway/dist/chat/session.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/mcp/requests.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/mcp/requests.js +9 -1
- package/node_modules/@buddi/gateway/dist/mcp/requests.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/execute.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/execute.js +3 -1
- package/node_modules/@buddi/gateway/dist/missions/execute.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/reminders.d.ts +7 -2
- package/node_modules/@buddi/gateway/dist/missions/reminders.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/reminders.js +27 -9
- package/node_modules/@buddi/gateway/dist/missions/reminders.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/run-now.d.ts +38 -0
- package/node_modules/@buddi/gateway/dist/missions/run-now.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/missions/run-now.js +62 -0
- package/node_modules/@buddi/gateway/dist/missions/run-now.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/missions-cli.d.ts +1 -1
- package/node_modules/@buddi/gateway/dist/missions-cli.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions-cli.js +21 -10
- package/node_modules/@buddi/gateway/dist/missions-cli.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/serve.d.ts +3 -12
- package/node_modules/@buddi/gateway/dist/serve.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/serve.js +2 -21
- package/node_modules/@buddi/gateway/dist/serve.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/surfaces/browser-cards.d.ts +15 -3
- package/node_modules/@buddi/gateway/dist/surfaces/browser-cards.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/surfaces/browser-cards.js +34 -7
- package/node_modules/@buddi/gateway/dist/surfaces/browser-cards.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/surfaces/offered-actions.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/surfaces/offered-actions.js +8 -2
- package/node_modules/@buddi/gateway/dist/surfaces/offered-actions.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/surfaces/pending-question.d.ts +3 -1
- package/node_modules/@buddi/gateway/dist/surfaces/pending-question.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/surfaces/pending-question.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/surfaces/secret-request.d.ts +173 -0
- package/node_modules/@buddi/gateway/dist/surfaces/secret-request.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/surfaces/secret-request.js +332 -0
- package/node_modules/@buddi/gateway/dist/surfaces/secret-request.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/system-context.js +1 -1
- package/node_modules/@buddi/gateway/dist/system-context.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/main.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/main.js +14 -3
- package/node_modules/@buddi/gateway/dist/telegram/main.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/surface.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/surface.js +4 -1
- package/node_modules/@buddi/gateway/dist/telegram/surface.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/api-routes.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/api-routes.js +16 -1
- package/node_modules/@buddi/gateway/dist/web/api-routes.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/approval-ask.js +2 -2
- package/node_modules/@buddi/gateway/dist/web/approval-ask.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/browser-capture.d.ts +13 -0
- package/node_modules/@buddi/gateway/dist/web/browser-capture.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/browser-capture.js +24 -0
- package/node_modules/@buddi/gateway/dist/web/browser-capture.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/chat.d.ts +26 -0
- package/node_modules/@buddi/gateway/dist/web/chat.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/chat.js +87 -2
- package/node_modules/@buddi/gateway/dist/web/chat.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/extension.d.ts +30 -0
- package/node_modules/@buddi/gateway/dist/web/extension.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/extension.js +86 -6
- package/node_modules/@buddi/gateway/dist/web/extension.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/onboarding.js +1 -1
- package/node_modules/@buddi/gateway/dist/web/onboarding.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/read.d.ts +2 -0
- package/node_modules/@buddi/gateway/dist/web/read.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/read.js +2 -1
- package/node_modules/@buddi/gateway/dist/web/read.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/remote-hand.d.ts +26 -2
- package/node_modules/@buddi/gateway/dist/web/remote-hand.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/remote-hand.js +89 -28
- package/node_modules/@buddi/gateway/dist/web/remote-hand.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/secret-request.d.ts +54 -0
- package/node_modules/@buddi/gateway/dist/web/secret-request.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/secret-request.js +264 -0
- package/node_modules/@buddi/gateway/dist/web/secret-request.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/secrets.d.ts +1 -0
- package/node_modules/@buddi/gateway/dist/web/secrets.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/secrets.js +1 -1
- package/node_modules/@buddi/gateway/dist/web/secrets.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/server.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/server.js +76 -4
- package/node_modules/@buddi/gateway/dist/web/server.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/write.d.ts +14 -0
- package/node_modules/@buddi/gateway/dist/web/write.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/write.js +21 -0
- package/node_modules/@buddi/gateway/dist/web/write.js.map +1 -1
- package/node_modules/@buddi/install/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/runtime/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/runtime/dist/anthropic.d.ts +7 -0
- package/node_modules/@buddi/runtime/dist/anthropic.d.ts.map +1 -1
- package/node_modules/@buddi/runtime/dist/anthropic.js +19 -1
- package/node_modules/@buddi/runtime/dist/anthropic.js.map +1 -1
- package/node_modules/@buddi/runtime/dist/codex-direct.d.ts +1 -1
- package/node_modules/@buddi/runtime/dist/codex-direct.js +1 -1
- package/node_modules/@buddi/tool-artifacts/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-browser/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-browser/dist/controller.d.ts +16 -1
- package/node_modules/@buddi/tool-browser/dist/controller.d.ts.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/controller.js +59 -5
- package/node_modules/@buddi/tool-browser/dist/controller.js.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/driver.d.ts +12 -0
- package/node_modules/@buddi/tool-browser/dist/driver.d.ts.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/driver.js +41 -2
- package/node_modules/@buddi/tool-browser/dist/driver.js.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/extension.d.ts +49 -9
- package/node_modules/@buddi/tool-browser/dist/extension.d.ts.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/extension.js +145 -21
- package/node_modules/@buddi/tool-browser/dist/extension.js.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/index.d.ts +10 -6
- package/node_modules/@buddi/tool-browser/dist/index.d.ts.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/index.js +22 -8
- package/node_modules/@buddi/tool-browser/dist/index.js.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/routes.d.ts +10 -1
- package/node_modules/@buddi/tool-browser/dist/routes.d.ts.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/routes.js +24 -0
- package/node_modules/@buddi/tool-browser/dist/routes.js.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/service.d.ts +48 -1
- package/node_modules/@buddi/tool-browser/dist/service.d.ts.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/service.js +114 -11
- package/node_modules/@buddi/tool-browser/dist/service.js.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/types.d.ts +54 -3
- package/node_modules/@buddi/tool-browser/dist/types.d.ts.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/types.js +17 -1
- package/node_modules/@buddi/tool-browser/dist/types.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-host/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-mcp/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-memory/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-web/dist/.tsbuildinfo +1 -1
- package/node_modules/imapflow/CHANGELOG.md +30 -0
- package/node_modules/imapflow/dist/cjs/commands/authenticate.js +15 -4
- package/node_modules/imapflow/dist/cjs/commands/enable.js +6 -0
- package/node_modules/imapflow/dist/cjs/commands/fetch.js +22 -5
- package/node_modules/imapflow/dist/cjs/commands/select.d.ts +3 -14
- package/node_modules/imapflow/dist/cjs/commands/select.js +1 -4
- package/node_modules/imapflow/dist/cjs/commands/store.js +7 -6
- package/node_modules/imapflow/dist/cjs/download.js +139 -5
- package/node_modules/imapflow/dist/cjs/imap-flow.d.ts +2 -2
- package/node_modules/imapflow/dist/cjs/imap-flow.js +51 -12
- package/node_modules/imapflow/dist/cjs/package-info.d.ts +1 -1
- package/node_modules/imapflow/dist/cjs/package-info.js +1 -1
- package/node_modules/imapflow/dist/cjs/search-compiler.js +6 -3
- package/node_modules/imapflow/dist/cjs/tools.d.ts +14 -3
- package/node_modules/imapflow/dist/cjs/tools.js +68 -6
- package/node_modules/imapflow/dist/cjs/types.d.ts +9 -1
- package/node_modules/imapflow/dist/esm/commands/authenticate.js +15 -4
- package/node_modules/imapflow/dist/esm/commands/enable.js +6 -0
- package/node_modules/imapflow/dist/esm/commands/fetch.js +22 -5
- package/node_modules/imapflow/dist/esm/commands/select.d.ts +3 -14
- package/node_modules/imapflow/dist/esm/commands/select.js +1 -4
- package/node_modules/imapflow/dist/esm/commands/store.js +8 -7
- package/node_modules/imapflow/dist/esm/download.js +139 -5
- package/node_modules/imapflow/dist/esm/imap-flow.d.ts +2 -2
- package/node_modules/imapflow/dist/esm/imap-flow.js +52 -13
- package/node_modules/imapflow/dist/esm/package-info.d.ts +1 -1
- package/node_modules/imapflow/dist/esm/package-info.js +1 -1
- package/node_modules/imapflow/dist/esm/search-compiler.js +6 -3
- package/node_modules/imapflow/dist/esm/tools.d.ts +14 -3
- package/node_modules/imapflow/dist/esm/tools.js +67 -6
- package/node_modules/imapflow/dist/esm/types.d.ts +9 -1
- package/node_modules/imapflow/package.json +5 -3
- package/node_modules/playwright/README.md +4 -4
- package/node_modules/playwright/lib/agents/playwright-test-generator.agent.md +1 -1
- package/node_modules/playwright/lib/cli/testActions.js +8 -5
- package/node_modules/playwright/lib/common/index.js +37 -23
- package/node_modules/playwright/lib/common/index.js.txt +8 -9
- package/node_modules/playwright/lib/index.js +16 -4
- package/node_modules/playwright/lib/matchers/expect.js +13 -7
- package/node_modules/playwright/lib/matchers/expect.js.txt +4 -4
- package/node_modules/playwright/lib/program.js +2 -1
- package/node_modules/playwright/lib/runner/index.js +438 -244
- package/node_modules/playwright/lib/runner/index.js.txt +12 -11
- package/node_modules/playwright/lib/transform/babelBundle.js +2612 -2396
- package/node_modules/playwright/lib/transform/babelBundle.js.LICENSE +15 -15
- package/node_modules/playwright/lib/transform/babelBundle.js.txt +14 -11
- package/node_modules/playwright/lib/transform/esmLoader.js +17 -5
- package/node_modules/playwright/lib/transform/esmLoader.js.txt +3 -3
- package/node_modules/playwright/lib/worker/workerProcessEntry.js +17 -18
- package/node_modules/playwright/package.json +2 -7
- package/node_modules/playwright/types/test.d.ts +156 -39
- package/node_modules/playwright-core/browsers.json +9 -9
- package/node_modules/playwright-core/cli.js +1 -0
- package/node_modules/playwright-core/lib/bootstrap.js +61 -0
- package/node_modules/playwright-core/lib/coreBundle.js +6393 -4170
- package/node_modules/playwright-core/lib/server/electron/loader.js +4 -0
- package/node_modules/playwright-core/lib/tools/cli-client/cli.js +2 -1
- package/node_modules/playwright-core/lib/tools/cli-client/help.json +99 -12
- package/node_modules/playwright-core/lib/tools/cli-client/output.js +17 -16
- package/node_modules/playwright-core/lib/tools/cli-client/program.js +8 -4
- package/node_modules/playwright-core/lib/tools/cli-client/session.js +2 -0
- package/node_modules/playwright-core/lib/tools/skills/playwright-cli/SKILL.md +71 -3
- package/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/pr-attachments.md +60 -0
- package/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/running-code.md +4 -0
- package/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/session-management.md +2 -0
- package/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/test-generation.md +1 -1
- package/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/video-recording.md +76 -3
- package/node_modules/playwright-core/lib/tools/skills/playwright-trace/SKILL.md +1 -1
- package/node_modules/playwright-core/lib/utilsBundle.js +948 -227
- package/node_modules/playwright-core/lib/utilsBundle.js.LICENSE +6 -6
- package/node_modules/playwright-core/lib/vite/htmlReport/report.js +1 -1
- package/node_modules/playwright-core/lib/vite/recorder/assets/{codeMirrorModule-CVQWJZAA.js → codeMirrorModule-DK72OMRi.js} +1 -1
- package/node_modules/playwright-core/lib/vite/recorder/assets/index-Cn0mmDuv.js +129 -0
- package/node_modules/playwright-core/lib/vite/recorder/index.html +1 -1
- package/node_modules/playwright-core/lib/vite/traceViewer/assets/{codeMirrorModule-BbkfBe3n.js → codeMirrorModule-BEB2e8M3.js} +1 -1
- package/node_modules/playwright-core/lib/vite/traceViewer/assets/defaultSettingsView-D-g2vrvf.js +184 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/assets/{xtermModule-DywYcAf8.js → xtermModule-B794rD2Z.js} +1 -1
- package/node_modules/playwright-core/lib/vite/traceViewer/{defaultSettingsView.Bqk9acqE.css → defaultSettingsView.C8BeHuxd.css} +1 -1
- package/node_modules/playwright-core/lib/vite/traceViewer/{index.B4cLoZK3.js → index.7-c5LSTW.js} +1 -1
- package/node_modules/playwright-core/lib/vite/traceViewer/index.html +3 -3
- package/node_modules/playwright-core/lib/vite/traceViewer/sw.bundle.js +3 -3
- package/node_modules/playwright-core/lib/vite/traceViewer/{uiMode.CU5KtEkS.js → uiMode.CYwC_gH1.js} +4 -4
- package/node_modules/playwright-core/lib/vite/traceViewer/uiMode.html +3 -3
- package/node_modules/playwright-core/package.json +1 -1
- package/node_modules/playwright-core/types/protocol.d.ts +468 -337
- package/node_modules/playwright-core/types/types.d.ts +572 -37
- package/package.json +2 -2
- package/packages/cli/dist/.tsbuildinfo +1 -1
- package/packages/cli/dist/commands.d.ts.map +1 -1
- package/packages/cli/dist/commands.js +11 -1
- package/packages/cli/dist/commands.js.map +1 -1
- package/packages/core/dist/.tsbuildinfo +1 -1
- package/packages/core/dist/plugin/index.d.ts +1 -1
- package/packages/core/dist/plugin/index.d.ts.map +1 -1
- package/packages/core/dist/plugin/index.js.map +1 -1
- package/packages/core/dist/questions/store.d.ts +3 -1
- package/packages/core/dist/questions/store.d.ts.map +1 -1
- package/packages/core/dist/questions/store.js +3 -3
- package/packages/core/dist/questions/store.js.map +1 -1
- package/packages/core/dist/questions/types.d.ts +46 -1
- package/packages/core/dist/questions/types.d.ts.map +1 -1
- package/packages/core/dist/questions/types.js +2 -1
- package/packages/core/dist/questions/types.js.map +1 -1
- package/packages/core/dist/registry.d.ts.map +1 -1
- package/packages/core/dist/registry.js +11 -2
- package/packages/core/dist/registry.js.map +1 -1
- package/packages/core/dist/scheduler/index.d.ts +1 -0
- package/packages/core/dist/scheduler/index.d.ts.map +1 -1
- package/packages/core/dist/scheduler/index.js +1 -0
- package/packages/core/dist/scheduler/index.js.map +1 -1
- package/packages/core/dist/scheduler/manual.d.ts +50 -0
- package/packages/core/dist/scheduler/manual.d.ts.map +1 -0
- package/packages/core/dist/scheduler/manual.js +73 -0
- package/packages/core/dist/scheduler/manual.js.map +1 -0
- package/packages/core/dist/secrets/approval.d.ts +54 -0
- package/packages/core/dist/secrets/approval.d.ts.map +1 -1
- package/packages/core/dist/secrets/approval.js +58 -1
- package/packages/core/dist/secrets/approval.js.map +1 -1
- package/packages/core/dist/secrets/settings.d.ts +178 -0
- package/packages/core/dist/secrets/settings.d.ts.map +1 -1
- package/packages/core/dist/secrets/settings.js +63 -6
- package/packages/core/dist/secrets/settings.js.map +1 -1
- package/packages/core/dist/secrets/store.d.ts +31 -0
- package/packages/core/dist/secrets/store.d.ts.map +1 -1
- package/packages/core/dist/secrets/store.js +75 -0
- package/packages/core/dist/secrets/store.js.map +1 -1
- package/packages/core/dist/secrets/use.d.ts.map +1 -1
- package/packages/core/dist/secrets/use.js +68 -3
- package/packages/core/dist/secrets/use.js.map +1 -1
- package/packages/core/dist/tools.d.ts +22 -0
- package/packages/core/dist/tools.d.ts.map +1 -1
- package/packages/core/dist/tools.js.map +1 -1
- package/packages/core/migrations/080_secret_requests.sql +14 -0
- package/packages/gateway/dist/.tsbuildinfo +1 -1
- package/packages/gateway/dist/chat/session.d.ts.map +1 -1
- package/packages/gateway/dist/chat/session.js +2 -1
- package/packages/gateway/dist/chat/session.js.map +1 -1
- package/packages/gateway/dist/mcp/requests.d.ts.map +1 -1
- package/packages/gateway/dist/mcp/requests.js +9 -1
- package/packages/gateway/dist/mcp/requests.js.map +1 -1
- package/packages/gateway/dist/missions/execute.d.ts.map +1 -1
- package/packages/gateway/dist/missions/execute.js +3 -1
- package/packages/gateway/dist/missions/execute.js.map +1 -1
- package/packages/gateway/dist/missions/reminders.d.ts +7 -2
- package/packages/gateway/dist/missions/reminders.d.ts.map +1 -1
- package/packages/gateway/dist/missions/reminders.js +27 -9
- package/packages/gateway/dist/missions/reminders.js.map +1 -1
- package/packages/gateway/dist/missions/run-now.d.ts +38 -0
- package/packages/gateway/dist/missions/run-now.d.ts.map +1 -0
- package/packages/gateway/dist/missions/run-now.js +62 -0
- package/packages/gateway/dist/missions/run-now.js.map +1 -0
- package/packages/gateway/dist/missions-cli.d.ts +1 -1
- package/packages/gateway/dist/missions-cli.d.ts.map +1 -1
- package/packages/gateway/dist/missions-cli.js +21 -10
- package/packages/gateway/dist/missions-cli.js.map +1 -1
- package/packages/gateway/dist/serve.d.ts +3 -12
- package/packages/gateway/dist/serve.d.ts.map +1 -1
- package/packages/gateway/dist/serve.js +2 -21
- package/packages/gateway/dist/serve.js.map +1 -1
- package/packages/gateway/dist/surfaces/browser-cards.d.ts +15 -3
- package/packages/gateway/dist/surfaces/browser-cards.d.ts.map +1 -1
- package/packages/gateway/dist/surfaces/browser-cards.js +34 -7
- package/packages/gateway/dist/surfaces/browser-cards.js.map +1 -1
- package/packages/gateway/dist/surfaces/offered-actions.d.ts.map +1 -1
- package/packages/gateway/dist/surfaces/offered-actions.js +8 -2
- package/packages/gateway/dist/surfaces/offered-actions.js.map +1 -1
- package/packages/gateway/dist/surfaces/pending-question.d.ts +3 -1
- package/packages/gateway/dist/surfaces/pending-question.d.ts.map +1 -1
- package/packages/gateway/dist/surfaces/pending-question.js.map +1 -1
- package/packages/gateway/dist/surfaces/secret-request.d.ts +173 -0
- package/packages/gateway/dist/surfaces/secret-request.d.ts.map +1 -0
- package/packages/gateway/dist/surfaces/secret-request.js +332 -0
- package/packages/gateway/dist/surfaces/secret-request.js.map +1 -0
- package/packages/gateway/dist/system-context.js +1 -1
- package/packages/gateway/dist/system-context.js.map +1 -1
- package/packages/gateway/dist/telegram/main.d.ts.map +1 -1
- package/packages/gateway/dist/telegram/main.js +14 -3
- package/packages/gateway/dist/telegram/main.js.map +1 -1
- package/packages/gateway/dist/telegram/surface.d.ts.map +1 -1
- package/packages/gateway/dist/telegram/surface.js +4 -1
- package/packages/gateway/dist/telegram/surface.js.map +1 -1
- package/packages/gateway/dist/web/api-routes.d.ts.map +1 -1
- package/packages/gateway/dist/web/api-routes.js +16 -1
- package/packages/gateway/dist/web/api-routes.js.map +1 -1
- package/packages/gateway/dist/web/approval-ask.js +2 -2
- package/packages/gateway/dist/web/approval-ask.js.map +1 -1
- package/packages/gateway/dist/web/browser-capture.d.ts +13 -0
- package/packages/gateway/dist/web/browser-capture.d.ts.map +1 -0
- package/packages/gateway/dist/web/browser-capture.js +24 -0
- package/packages/gateway/dist/web/browser-capture.js.map +1 -0
- package/packages/gateway/dist/web/chat.d.ts +26 -0
- package/packages/gateway/dist/web/chat.d.ts.map +1 -1
- package/packages/gateway/dist/web/chat.js +87 -2
- package/packages/gateway/dist/web/chat.js.map +1 -1
- package/packages/gateway/dist/web/extension.d.ts +30 -0
- package/packages/gateway/dist/web/extension.d.ts.map +1 -1
- package/packages/gateway/dist/web/extension.js +86 -6
- package/packages/gateway/dist/web/extension.js.map +1 -1
- package/packages/gateway/dist/web/onboarding.js +1 -1
- package/packages/gateway/dist/web/onboarding.js.map +1 -1
- package/packages/gateway/dist/web/read.d.ts +2 -0
- package/packages/gateway/dist/web/read.d.ts.map +1 -1
- package/packages/gateway/dist/web/read.js +2 -1
- package/packages/gateway/dist/web/read.js.map +1 -1
- package/packages/gateway/dist/web/remote-hand.d.ts +26 -2
- package/packages/gateway/dist/web/remote-hand.d.ts.map +1 -1
- package/packages/gateway/dist/web/remote-hand.js +89 -28
- package/packages/gateway/dist/web/remote-hand.js.map +1 -1
- package/packages/gateway/dist/web/secret-request.d.ts +54 -0
- package/packages/gateway/dist/web/secret-request.d.ts.map +1 -0
- package/packages/gateway/dist/web/secret-request.js +264 -0
- package/packages/gateway/dist/web/secret-request.js.map +1 -0
- package/packages/gateway/dist/web/secrets.d.ts +1 -0
- package/packages/gateway/dist/web/secrets.d.ts.map +1 -1
- package/packages/gateway/dist/web/secrets.js +1 -1
- package/packages/gateway/dist/web/secrets.js.map +1 -1
- package/packages/gateway/dist/web/server.d.ts.map +1 -1
- package/packages/gateway/dist/web/server.js +76 -4
- package/packages/gateway/dist/web/server.js.map +1 -1
- package/packages/gateway/dist/web/write.d.ts +14 -0
- package/packages/gateway/dist/web/write.d.ts.map +1 -1
- package/packages/gateway/dist/web/write.js +21 -0
- package/packages/gateway/dist/web/write.js.map +1 -1
- package/packages/install/dist/.tsbuildinfo +1 -1
- package/packages/runtime/dist/.tsbuildinfo +1 -1
- package/packages/runtime/dist/anthropic.d.ts +7 -0
- package/packages/runtime/dist/anthropic.d.ts.map +1 -1
- package/packages/runtime/dist/anthropic.js +19 -1
- package/packages/runtime/dist/anthropic.js.map +1 -1
- package/packages/runtime/dist/codex-direct.d.ts +1 -1
- package/packages/runtime/dist/codex-direct.js +1 -1
- package/packages/tools/artifacts/dist/.tsbuildinfo +1 -1
- package/packages/tools/browser/dist/.tsbuildinfo +1 -1
- package/packages/tools/browser/dist/controller.d.ts +16 -1
- package/packages/tools/browser/dist/controller.d.ts.map +1 -1
- package/packages/tools/browser/dist/controller.js +59 -5
- package/packages/tools/browser/dist/controller.js.map +1 -1
- package/packages/tools/browser/dist/driver.d.ts +12 -0
- package/packages/tools/browser/dist/driver.d.ts.map +1 -1
- package/packages/tools/browser/dist/driver.js +41 -2
- package/packages/tools/browser/dist/driver.js.map +1 -1
- package/packages/tools/browser/dist/extension.d.ts +49 -9
- package/packages/tools/browser/dist/extension.d.ts.map +1 -1
- package/packages/tools/browser/dist/extension.js +145 -21
- package/packages/tools/browser/dist/extension.js.map +1 -1
- package/packages/tools/browser/dist/index.d.ts +10 -6
- package/packages/tools/browser/dist/index.d.ts.map +1 -1
- package/packages/tools/browser/dist/index.js +22 -8
- package/packages/tools/browser/dist/index.js.map +1 -1
- package/packages/tools/browser/dist/routes.d.ts +10 -1
- package/packages/tools/browser/dist/routes.d.ts.map +1 -1
- package/packages/tools/browser/dist/routes.js +24 -0
- package/packages/tools/browser/dist/routes.js.map +1 -1
- package/packages/tools/browser/dist/service.d.ts +48 -1
- package/packages/tools/browser/dist/service.d.ts.map +1 -1
- package/packages/tools/browser/dist/service.js +114 -11
- package/packages/tools/browser/dist/service.js.map +1 -1
- package/packages/tools/browser/dist/types.d.ts +54 -3
- package/packages/tools/browser/dist/types.d.ts.map +1 -1
- package/packages/tools/browser/dist/types.js +17 -1
- package/packages/tools/browser/dist/types.js.map +1 -1
- package/packages/tools/email/dist/.tsbuildinfo +1 -1
- package/packages/tools/host/dist/.tsbuildinfo +1 -1
- package/packages/tools/mcp/dist/.tsbuildinfo +1 -1
- package/packages/tools/memory/dist/.tsbuildinfo +1 -1
- package/packages/tools/web/dist/.tsbuildinfo +1 -1
- package/packages/web/dist/assets/index-oxmxR39o.js +155 -0
- package/packages/web/dist/assets/index-rMRjibNI.css +1 -0
- package/packages/web/dist/assets/{lottie_light-BJaxbmZQ.js → lottie_light-DROBTM6Y.js} +1 -1
- package/packages/web/dist/build.json +1 -1
- package/packages/web/dist/index.html +2 -2
- package/packages/web/dist/precache.json +4 -4
- package/node_modules/playwright/jsx-runtime.js +0 -42
- package/node_modules/playwright/jsx-runtime.mjs +0 -21
- package/node_modules/playwright-core/lib/vite/recorder/assets/index-hrlLqLtq.js +0 -129
- package/node_modules/playwright-core/lib/vite/traceViewer/assets/defaultSettingsView-Ds6CBOo0.js +0 -182
- package/packages/web/dist/assets/index-DBVZzTau.css +0 -1
- package/packages/web/dist/assets/index-DqoP9iYJ.js +0 -155
package/extension/manifest.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"manifest_version": 3,
|
|
3
3
|
"name": "buddi",
|
|
4
|
-
"version": "0.1.0.
|
|
5
|
-
"description": "Lets
|
|
4
|
+
"version": "0.1.0.52",
|
|
5
|
+
"description": "Lets the buddis on this computer work in background tabs of this browser, opening only the sites you ask them for.",
|
|
6
6
|
"minimum_chrome_version": "116",
|
|
7
7
|
"key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwR4JT/OlKKPcZQ33euO9mSv7RrSIWNVanldhT2Uzc9YfzF/X0lg5NfXLc+G/UGFjB8v+uMCbpMhRBZ2SVwDHQH3buv3VEUzuOIDTPHgv99T5lq5imZrDxmIE+EL/fWrsjhcXaIB4e4fn0tJqw6ivJUGmYpG5XhWn65nlLniHfFBKMpZ/y7bVnvfzAgMQUa13qTAVxPTpMRtNl/flQq4Q/vWYm28H7W7OzygDV+/4X2azUrB8yPk67QsipbdDLxiX2GMxjXuKK6iD5CQiytoxTsAqUzB886HbOZsxJfQpRIjrUgBmGjLyaKuz617ZGJW9zS23LmnlL6mkX3+ggca1AQIDAQAB",
|
|
8
8
|
"permissions": [
|
|
@@ -45,5 +45,5 @@
|
|
|
45
45
|
"48": "icons/48.png",
|
|
46
46
|
"128": "icons/128.png"
|
|
47
47
|
},
|
|
48
|
-
"version_name": "0.1.0-pre.
|
|
48
|
+
"version_name": "0.1.0-pre.52"
|
|
49
49
|
}
|
package/extension/popup.css
CHANGED
|
@@ -107,6 +107,22 @@
|
|
|
107
107
|
|
|
108
108
|
--focus-ring: #2b6fe6;
|
|
109
109
|
|
|
110
|
+
/* Chrome's own tab-group colours, so a buddi's swatch matches its group. */
|
|
111
|
+
--group-grey: #5f6368;
|
|
112
|
+
--group-blue: #1a73e8;
|
|
113
|
+
--group-red: #d93025;
|
|
114
|
+
--group-yellow: #f9ab00;
|
|
115
|
+
--group-green: #188038;
|
|
116
|
+
--group-pink: #d01884;
|
|
117
|
+
--group-purple: #a142f4;
|
|
118
|
+
--group-cyan: #007b83;
|
|
119
|
+
--group-orange: #fa903e;
|
|
120
|
+
|
|
121
|
+
--swatch: 10px;
|
|
122
|
+
--switch-w: 30px;
|
|
123
|
+
--switch-h: 18px;
|
|
124
|
+
--switch-knob: 14px;
|
|
125
|
+
|
|
110
126
|
color-scheme: light;
|
|
111
127
|
}
|
|
112
128
|
|
|
@@ -211,7 +227,8 @@ p { margin: 0; }
|
|
|
211
227
|
@keyframes view-in { from { opacity: 0; } to { opacity: 1; } }
|
|
212
228
|
|
|
213
229
|
@media (prefers-reduced-motion: reduce) {
|
|
214
|
-
.view { animation: none; }
|
|
230
|
+
.view, .buddi, .add { animation: none; }
|
|
231
|
+
.switch-track, .switch-track::after { transition: none; }
|
|
215
232
|
.btn { transition: none; }
|
|
216
233
|
}
|
|
217
234
|
|
|
@@ -312,7 +329,78 @@ p { margin: 0; }
|
|
|
312
329
|
.fact { font-size: var(--text-base); font-weight: var(--weight-medium); overflow-wrap: anywhere; }
|
|
313
330
|
|
|
314
331
|
.foot {
|
|
315
|
-
|
|
316
|
-
|
|
332
|
+
display: flex;
|
|
333
|
+
flex-direction: column;
|
|
334
|
+
gap: var(--space-2);
|
|
335
|
+
padding: var(--space-3) var(--space-4);
|
|
336
|
+
border-top: 1px solid var(--line);
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
.btn[data-variant='ghost'] { border-color: transparent; background: none; }
|
|
340
|
+
|
|
341
|
+
/* ---- the buddis: one row each, a hairline between them ---- */
|
|
342
|
+
|
|
343
|
+
.buddis { margin: 0; padding: 0; list-style: none; }
|
|
344
|
+
.buddi {
|
|
345
|
+
display: flex;
|
|
346
|
+
flex-direction: column;
|
|
347
|
+
gap: var(--space-2);
|
|
348
|
+
padding: var(--space-3) var(--space-4);
|
|
349
|
+
animation: view-in var(--dur-view) var(--ease);
|
|
350
|
+
}
|
|
351
|
+
.buddi + .buddi { border-top: 1px solid var(--line); }
|
|
352
|
+
.buddi[data-enabled='false'] .buddi-who { opacity: 0.55; }
|
|
353
|
+
|
|
354
|
+
.buddi-head { display: flex; align-items: center; gap: var(--space-2); }
|
|
355
|
+
.buddi-who { display: flex; flex-direction: column; min-width: 0; flex: 1; }
|
|
356
|
+
.buddi-name { font-size: var(--text-base); font-weight: var(--weight-semibold); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
357
|
+
.buddi-address { font-family: var(--font-mono); font-size: var(--text-xs); color: var(--text-faint); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
358
|
+
.buddi-pill { margin-left: 0; }
|
|
359
|
+
.buddi-body { display: flex; flex-direction: column; gap: var(--space-2); }
|
|
360
|
+
.buddi-body:empty { display: none; }
|
|
361
|
+
.actions-gap { flex: 1; }
|
|
362
|
+
|
|
363
|
+
.swatch { width: var(--swatch); height: var(--swatch); flex: none; border-radius: 50%; background: var(--group-grey); }
|
|
364
|
+
.buddi[data-colour='blue'] .swatch { background: var(--group-blue); }
|
|
365
|
+
.buddi[data-colour='red'] .swatch { background: var(--group-red); }
|
|
366
|
+
.buddi[data-colour='yellow'] .swatch { background: var(--group-yellow); }
|
|
367
|
+
.buddi[data-colour='green'] .swatch { background: var(--group-green); }
|
|
368
|
+
.buddi[data-colour='pink'] .swatch { background: var(--group-pink); }
|
|
369
|
+
.buddi[data-colour='purple'] .swatch { background: var(--group-purple); }
|
|
370
|
+
.buddi[data-colour='cyan'] .swatch { background: var(--group-cyan); }
|
|
371
|
+
.buddi[data-colour='orange'] .swatch { background: var(--group-orange); }
|
|
372
|
+
|
|
373
|
+
/* The switch: a checkbox underneath, so the keyboard and a screen reader get one for free. */
|
|
374
|
+
.switch { position: relative; display: inline-flex; flex: none; cursor: pointer; }
|
|
375
|
+
.switch input { position: absolute; inset: 0; margin: 0; opacity: 0; cursor: pointer; }
|
|
376
|
+
.switch-track {
|
|
377
|
+
position: relative;
|
|
378
|
+
width: var(--switch-w);
|
|
379
|
+
height: var(--switch-h);
|
|
380
|
+
border-radius: var(--radius-pill);
|
|
381
|
+
background: var(--line-strong);
|
|
382
|
+
transition: background-color var(--dur-fast) ease;
|
|
383
|
+
}
|
|
384
|
+
.switch-track::after {
|
|
385
|
+
content: '';
|
|
386
|
+
position: absolute;
|
|
387
|
+
top: calc((var(--switch-h) - var(--switch-knob)) / 2);
|
|
388
|
+
left: calc((var(--switch-h) - var(--switch-knob)) / 2);
|
|
389
|
+
width: var(--switch-knob);
|
|
390
|
+
height: var(--switch-knob);
|
|
391
|
+
border-radius: 50%;
|
|
392
|
+
background: var(--surface);
|
|
393
|
+
transition: transform var(--dur-fast) var(--ease);
|
|
394
|
+
}
|
|
395
|
+
.switch input:checked + .switch-track { background: var(--accent); }
|
|
396
|
+
.switch input:checked + .switch-track::after { transform: translateX(calc(var(--switch-w) - var(--switch-h))); }
|
|
397
|
+
.switch input:focus-visible + .switch-track { outline: 2px solid var(--focus-ring); outline-offset: 1px; }
|
|
398
|
+
|
|
399
|
+
.add {
|
|
400
|
+
display: flex;
|
|
401
|
+
flex-direction: column;
|
|
402
|
+
gap: var(--space-3);
|
|
403
|
+
padding: var(--space-3) var(--space-4);
|
|
317
404
|
border-top: 1px solid var(--line);
|
|
405
|
+
animation: view-in var(--dur-view) var(--ease);
|
|
318
406
|
}
|
package/extension/popup.html
CHANGED
|
@@ -6,57 +6,74 @@
|
|
|
6
6
|
<title>buddi</title>
|
|
7
7
|
<link rel="stylesheet" href="popup.css" />
|
|
8
8
|
</head>
|
|
9
|
-
<body
|
|
9
|
+
<body>
|
|
10
10
|
<header class="head">
|
|
11
11
|
<img class="blob" src="blob.png" alt="" width="28" height="28" />
|
|
12
12
|
<span class="wordmark">buddi</span>
|
|
13
13
|
<span class="pill" id="pill" data-tone="idle" role="status">Not connected</span>
|
|
14
14
|
</header>
|
|
15
15
|
|
|
16
|
-
<!--
|
|
17
|
-
<
|
|
16
|
+
<!-- Every buddi this browser knows, one row each: its name, its address, how it stands, and its switch. -->
|
|
17
|
+
<ul class="buddis" id="buddis" aria-label="Your buddis"></ul>
|
|
18
|
+
|
|
19
|
+
<!-- Add a buddi: the address of another buddi on this machine. -->
|
|
20
|
+
<section class="add" id="add" hidden>
|
|
18
21
|
<div class="field-group">
|
|
19
|
-
<label class="label" for="gateway">
|
|
22
|
+
<label class="label" for="gateway">Address of the buddi to add</label>
|
|
20
23
|
<input class="field" id="gateway" type="url" value="http://127.0.0.1:4317" placeholder="http://127.0.0.1:4317" spellcheck="false" autocomplete="off" />
|
|
21
|
-
<p class="hint" id="hint">
|
|
24
|
+
<p class="hint" id="hint">A buddi running on this machine. Each buddi you add gets its own tab group.</p>
|
|
22
25
|
</div>
|
|
23
26
|
<p class="notice" id="notice" data-tone="critical" role="alert" hidden></p>
|
|
24
|
-
<
|
|
25
|
-
|
|
27
|
+
<div class="actions">
|
|
28
|
+
<button class="btn" data-variant="ghost" id="add-cancel" type="button">Cancel</button>
|
|
26
29
|
<button class="btn" data-variant="accent" id="connect" type="button">Connect</button>
|
|
27
30
|
</div>
|
|
28
31
|
</section>
|
|
29
32
|
|
|
30
|
-
|
|
31
|
-
<section class="view" id="view-pairing" data-view="pairing" hidden>
|
|
32
|
-
<div class="code-tile">
|
|
33
|
-
<p class="code" id="code" aria-label="Pairing code"></p>
|
|
34
|
-
<button class="btn" data-size="sm" id="copy" type="button">Copy</button>
|
|
35
|
-
</div>
|
|
36
|
-
<p class="hint">Type it into buddi under Settings → Browser & apps, within five minutes. Open buddi settings may open buddi.app: if Chrome asks, allow it.</p>
|
|
37
|
-
<div class="actions actions-split">
|
|
38
|
-
<button class="link" id="not-this" type="button">Not this buddi</button>
|
|
39
|
-
<button class="btn" id="open-settings" type="button">Open buddi settings</button>
|
|
40
|
-
</div>
|
|
41
|
-
</section>
|
|
42
|
-
|
|
43
|
-
<!-- Connected: which buddi, and what it is doing here. -->
|
|
44
|
-
<section class="view" id="view-paired" data-view="paired" hidden>
|
|
45
|
-
<div class="facts">
|
|
46
|
-
<p class="fact" id="paired-to"></p>
|
|
47
|
-
<p class="quiet" id="working">Nothing open right now.</p>
|
|
48
|
-
</div>
|
|
33
|
+
<footer class="foot">
|
|
49
34
|
<div class="facts" id="downloads-box" hidden>
|
|
50
35
|
<p class="quiet" id="downloads-note">Let agents hand buddi the files they download in your Chrome, like a bank statement. Only downloads an agent's click starts are read; yours are never touched.</p>
|
|
51
36
|
</div>
|
|
52
37
|
<div class="actions">
|
|
53
|
-
<button class="btn" id="allow-downloads" type="button" hidden>Allow downloads</button>
|
|
54
|
-
<button class="btn" id="open
|
|
38
|
+
<button class="btn" data-size="sm" id="allow-downloads" type="button" hidden>Allow downloads</button>
|
|
39
|
+
<button class="btn" data-size="sm" id="add-open" type="button">Add a buddi</button>
|
|
55
40
|
</div>
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
41
|
+
</footer>
|
|
42
|
+
|
|
43
|
+
<!-- One buddi. Filled with textContent only: names and codes come from a socket. -->
|
|
44
|
+
<template id="buddi-row">
|
|
45
|
+
<li class="buddi" data-state="offline">
|
|
46
|
+
<div class="buddi-head">
|
|
47
|
+
<span class="swatch" aria-hidden="true"></span>
|
|
48
|
+
<span class="buddi-who">
|
|
49
|
+
<span class="buddi-name"></span>
|
|
50
|
+
<span class="buddi-address"></span>
|
|
51
|
+
</span>
|
|
52
|
+
<span class="pill buddi-pill" data-tone="idle"></span>
|
|
53
|
+
<label class="switch">
|
|
54
|
+
<input class="buddi-switch" type="checkbox" role="switch" />
|
|
55
|
+
<span class="switch-track" aria-hidden="true"></span>
|
|
56
|
+
</label>
|
|
57
|
+
</div>
|
|
58
|
+
<div class="buddi-body">
|
|
59
|
+
<div class="code-tile buddi-pairing" hidden>
|
|
60
|
+
<p class="code" aria-label="Pairing code"></p>
|
|
61
|
+
<button class="btn buddi-copy" data-size="sm" type="button">Copy</button>
|
|
62
|
+
</div>
|
|
63
|
+
<p class="hint buddi-pairing-hint" hidden>Type it into this buddi under Settings → Browser & apps, within five minutes. Open buddi settings may open buddi.app: if Chrome asks, allow it.</p>
|
|
64
|
+
<p class="quiet buddi-asking" hidden>Asking this buddi for a code…</p>
|
|
65
|
+
<p class="quiet buddi-working" hidden></p>
|
|
66
|
+
<p class="notice buddi-error" data-tone="critical" role="alert" hidden></p>
|
|
67
|
+
<div class="actions">
|
|
68
|
+
<button class="link buddi-remove" type="button">Remove</button>
|
|
69
|
+
<span class="actions-gap"></span>
|
|
70
|
+
<button class="btn buddi-retry" data-size="sm" type="button" hidden>Try again</button>
|
|
71
|
+
<button class="btn buddi-settings" data-size="sm" type="button" hidden>Open buddi settings</button>
|
|
72
|
+
<button class="btn buddi-open" data-size="sm" type="button" hidden>Open buddi</button>
|
|
73
|
+
</div>
|
|
74
|
+
</div>
|
|
75
|
+
</li>
|
|
76
|
+
</template>
|
|
60
77
|
|
|
61
78
|
<script src="popup.js" type="module"></script>
|
|
62
79
|
</body>
|
package/extension/popup.js
CHANGED
|
@@ -4,17 +4,30 @@ var DOWNLOADS_PERMISSION = "downloads";
|
|
|
4
4
|
// src/popup.ts
|
|
5
5
|
var SETTINGS_HASH = "#/settings/computer";
|
|
6
6
|
var PILL = {
|
|
7
|
-
|
|
7
|
+
off: { word: "Off", tone: "idle" },
|
|
8
|
+
address: { word: "Not connected", tone: "idle" },
|
|
8
9
|
connecting: { word: "Connecting\u2026", tone: "waiting" },
|
|
9
|
-
pairing: { word: "
|
|
10
|
+
pairing: { word: "Needs pairing", tone: "waiting" },
|
|
10
11
|
paired: { word: "Connected", tone: "good" }
|
|
11
12
|
};
|
|
12
|
-
function
|
|
13
|
-
|
|
13
|
+
function rowView(entry) {
|
|
14
|
+
if (!entry.enabled) return "off";
|
|
15
|
+
const { connection, code } = entry.state;
|
|
14
16
|
if (connection === "paired") return "paired";
|
|
15
|
-
if (connection === "pairing" && code
|
|
17
|
+
if (connection === "pairing" && code) return "pairing";
|
|
18
|
+
if (connection === "connecting" || connection === "pairing") return "connecting";
|
|
16
19
|
return "address";
|
|
17
20
|
}
|
|
21
|
+
function summary(pairings) {
|
|
22
|
+
const views = pairings.map(rowView);
|
|
23
|
+
const connected = views.filter((view) => view === "paired").length;
|
|
24
|
+
if (connected > 1) return { word: `${connected} connected`, tone: "good" };
|
|
25
|
+
if (connected === 1) return PILL.paired;
|
|
26
|
+
if (views.includes("pairing")) return PILL.pairing;
|
|
27
|
+
if (views.includes("connecting")) return PILL.connecting;
|
|
28
|
+
const failed = pairings.some((entry) => entry.enabled && entry.state.connection === "offline" && entry.state.error);
|
|
29
|
+
return { word: "Not connected", tone: failed ? "bad" : "idle" };
|
|
30
|
+
}
|
|
18
31
|
function dashboardUrl(gateway, hash = "") {
|
|
19
32
|
try {
|
|
20
33
|
const url = new URL(gateway);
|
|
@@ -40,28 +53,65 @@ function workingLine(tabs) {
|
|
|
40
53
|
return tabs === 1 ? "Working in 1 tab" : `Working in ${tabs} tabs`;
|
|
41
54
|
}
|
|
42
55
|
var byId = (doc, id) => doc.getElementById(id);
|
|
56
|
+
var part = (row, name) => row.querySelector(`.${name}`);
|
|
43
57
|
function render(model, doc = document) {
|
|
44
|
-
const { state } = model;
|
|
45
|
-
const view = viewOf(model);
|
|
46
58
|
const pill = byId(doc, "pill");
|
|
47
|
-
const { word, tone } =
|
|
48
|
-
const failure = model.refused ?? (state.connection === "offline" ? state.error : null);
|
|
59
|
+
const { word, tone } = summary(model.pairings);
|
|
49
60
|
pill.textContent = word;
|
|
50
|
-
pill.dataset["tone"] =
|
|
51
|
-
|
|
52
|
-
doc
|
|
53
|
-
const
|
|
54
|
-
const
|
|
55
|
-
|
|
61
|
+
pill.dataset["tone"] = tone;
|
|
62
|
+
const list = byId(doc, "buddis");
|
|
63
|
+
const template = byId(doc, "buddi-row");
|
|
64
|
+
const existing = new Map([...list.querySelectorAll(".buddi")].map((row) => [row.dataset["id"] ?? "", row]));
|
|
65
|
+
const wanted = new Set(model.pairings.map((entry) => entry.id));
|
|
66
|
+
for (const [id, row] of existing) if (!wanted.has(id)) row.remove();
|
|
67
|
+
for (const entry of model.pairings) {
|
|
68
|
+
let row = existing.get(entry.id);
|
|
69
|
+
if (!row) {
|
|
70
|
+
row = template.content.firstElementChild.cloneNode(true);
|
|
71
|
+
row.dataset["id"] = entry.id;
|
|
72
|
+
}
|
|
73
|
+
list.appendChild(row);
|
|
74
|
+
drawRow(row, entry);
|
|
75
|
+
}
|
|
76
|
+
list.hidden = model.pairings.length === 0;
|
|
77
|
+
const adding = model.adding || model.pairings.length === 0;
|
|
78
|
+
byId(doc, "add").hidden = !adding;
|
|
79
|
+
byId(doc, "add-open").hidden = adding;
|
|
80
|
+
byId(doc, "add-cancel").hidden = model.pairings.length === 0;
|
|
56
81
|
const notice = byId(doc, "notice");
|
|
57
|
-
notice.hidden = !
|
|
58
|
-
notice.textContent =
|
|
59
|
-
byId(doc, "
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
82
|
+
notice.hidden = !model.refused;
|
|
83
|
+
notice.textContent = model.refused ?? "";
|
|
84
|
+
byId(doc, "hint").textContent = model.asked ? `The buddi at ${hostOf(model.asked)} asked to be added. Each buddi you add gets its own tab group.` : "A buddi running on this machine. Each buddi you add gets its own tab group.";
|
|
85
|
+
}
|
|
86
|
+
function drawRow(row, entry) {
|
|
87
|
+
const view = rowView(entry);
|
|
88
|
+
row.dataset["state"] = view;
|
|
89
|
+
row.dataset["enabled"] = entry.enabled ? "true" : "false";
|
|
90
|
+
row.dataset["colour"] = entry.colour;
|
|
91
|
+
part(row, "buddi-name").textContent = entry.name;
|
|
92
|
+
const address = part(row, "buddi-address");
|
|
93
|
+
address.textContent = hostOf(entry.origin);
|
|
94
|
+
address.hidden = entry.name === hostOf(entry.origin);
|
|
95
|
+
const failure = view === "address" ? entry.state.error : null;
|
|
96
|
+
const pill = part(row, "buddi-pill");
|
|
97
|
+
pill.textContent = PILL[view].word;
|
|
98
|
+
pill.dataset["tone"] = failure ? "bad" : PILL[view].tone;
|
|
99
|
+
const toggle = part(row, "buddi-switch");
|
|
100
|
+
toggle.checked = entry.enabled;
|
|
101
|
+
toggle.setAttribute("aria-label", `Work for ${entry.name}`);
|
|
102
|
+
part(row, "buddi-pairing").hidden = view !== "pairing";
|
|
103
|
+
part(row, "code").textContent = view === "pairing" ? groupCode(entry.state.code ?? "") : "";
|
|
104
|
+
part(row, "buddi-pairing-hint").hidden = view !== "pairing";
|
|
105
|
+
part(row, "buddi-asking").hidden = view !== "connecting";
|
|
106
|
+
const working = part(row, "buddi-working");
|
|
107
|
+
working.hidden = view !== "paired";
|
|
108
|
+
working.textContent = view === "paired" ? entry.state.older ? `${workingLine(entry.tabs).replace(/\.$/, "")} \xB7 older buddi: live view off` : workingLine(entry.tabs) : "";
|
|
109
|
+
const error = part(row, "buddi-error");
|
|
110
|
+
error.hidden = !failure;
|
|
111
|
+
error.textContent = failure ?? "";
|
|
112
|
+
part(row, "buddi-retry").hidden = view !== "address";
|
|
113
|
+
part(row, "buddi-settings").hidden = view !== "pairing";
|
|
114
|
+
part(row, "buddi-open").hidden = view !== "paired";
|
|
65
115
|
}
|
|
66
116
|
var APP_WAIT_MS = 1500;
|
|
67
117
|
function digitsOf(code) {
|
|
@@ -110,23 +160,25 @@ function openSettings(options) {
|
|
|
110
160
|
});
|
|
111
161
|
}
|
|
112
162
|
var COPIED_FOR = 2e3;
|
|
163
|
+
var restores = /* @__PURE__ */ new WeakMap();
|
|
164
|
+
function copyInto(button, read) {
|
|
165
|
+
void (async () => {
|
|
166
|
+
try {
|
|
167
|
+
await navigator.clipboard.writeText(read());
|
|
168
|
+
} catch {
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
button.textContent = "Copied";
|
|
172
|
+
const pending = restores.get(button);
|
|
173
|
+
if (pending) clearTimeout(pending);
|
|
174
|
+
restores.set(button, setTimeout(() => {
|
|
175
|
+
button.textContent = "Copy";
|
|
176
|
+
restores.delete(button);
|
|
177
|
+
}, COPIED_FOR));
|
|
178
|
+
})();
|
|
179
|
+
}
|
|
113
180
|
function wireCopy(button, read) {
|
|
114
|
-
|
|
115
|
-
button.addEventListener("click", () => {
|
|
116
|
-
void (async () => {
|
|
117
|
-
try {
|
|
118
|
-
await navigator.clipboard.writeText(read());
|
|
119
|
-
} catch {
|
|
120
|
-
return;
|
|
121
|
-
}
|
|
122
|
-
button.textContent = "Copied";
|
|
123
|
-
if (restore) clearTimeout(restore);
|
|
124
|
-
restore = setTimeout(() => {
|
|
125
|
-
button.textContent = "Copy";
|
|
126
|
-
restore = void 0;
|
|
127
|
-
}, COPIED_FOR);
|
|
128
|
-
})();
|
|
129
|
-
});
|
|
181
|
+
button.addEventListener("click", () => copyInto(button, read));
|
|
130
182
|
}
|
|
131
183
|
async function wireDownloads(doc, permissions) {
|
|
132
184
|
const box = byId(doc, "downloads-box");
|
|
@@ -141,14 +193,25 @@ async function wireDownloads(doc, permissions) {
|
|
|
141
193
|
void permissions.request({ permissions: [DOWNLOADS_PERMISSION] }).then(show, () => void 0);
|
|
142
194
|
});
|
|
143
195
|
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
196
|
+
var REDRAW_MS = 1e3;
|
|
197
|
+
function throttle(run, ms, clock = { now: () => Date.now(), later: (fn, wait) => setTimeout(fn, wait) }) {
|
|
198
|
+
let last = -Infinity;
|
|
199
|
+
let waiting = false;
|
|
200
|
+
return () => {
|
|
201
|
+
const now = clock.now();
|
|
202
|
+
if (now - last >= ms && !waiting) {
|
|
203
|
+
last = now;
|
|
204
|
+
run();
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
if (waiting) return;
|
|
208
|
+
waiting = true;
|
|
209
|
+
clock.later(() => {
|
|
210
|
+
waiting = false;
|
|
211
|
+
last = clock.now();
|
|
212
|
+
run();
|
|
213
|
+
}, Math.max(0, ms - (now - last)));
|
|
214
|
+
};
|
|
152
215
|
}
|
|
153
216
|
async function ask(message) {
|
|
154
217
|
try {
|
|
@@ -157,118 +220,147 @@ async function ask(message) {
|
|
|
157
220
|
return void 0;
|
|
158
221
|
}
|
|
159
222
|
}
|
|
223
|
+
function rowOf(target, model) {
|
|
224
|
+
const row = target?.closest?.(".buddi");
|
|
225
|
+
const entry = row ? model.pairings.find((candidate) => candidate.id === row.dataset["id"]) : void 0;
|
|
226
|
+
return row && entry ? { row, entry } : null;
|
|
227
|
+
}
|
|
160
228
|
async function main() {
|
|
161
229
|
const field = byId(document, "gateway");
|
|
162
|
-
const model = {
|
|
163
|
-
state: { connection: "offline", code: null, installation: null, error: null },
|
|
164
|
-
gateway: field.value,
|
|
165
|
-
editing: false,
|
|
166
|
-
tabs: null,
|
|
167
|
-
refused: null
|
|
168
|
-
};
|
|
230
|
+
const model = { pairings: [], adding: false, asked: null, refused: null };
|
|
169
231
|
const draw = () => render(model, document);
|
|
170
|
-
const
|
|
171
|
-
if (
|
|
172
|
-
model.
|
|
232
|
+
const take = (answer) => {
|
|
233
|
+
if (!answer) return;
|
|
234
|
+
if (answer.pairings) model.pairings = answer.pairings;
|
|
235
|
+
if (answer.asked !== void 0) model.asked = answer.asked;
|
|
236
|
+
if (model.asked && !model.adding && document.activeElement !== field) field.value = model.asked;
|
|
237
|
+
};
|
|
238
|
+
const refresh = async () => {
|
|
239
|
+
take(await ask({ type: "buddi-get-state" }));
|
|
173
240
|
draw();
|
|
174
241
|
};
|
|
175
|
-
const
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
const current = await ask({ type: "buddi-get-state" });
|
|
181
|
-
if (current?.state) model.state = current.state;
|
|
242
|
+
const pushed = throttle(() => {
|
|
243
|
+
void refresh();
|
|
244
|
+
}, REDRAW_MS);
|
|
245
|
+
await refresh();
|
|
246
|
+
if (model.asked) model.adding = true;
|
|
182
247
|
draw();
|
|
183
|
-
void recount();
|
|
184
248
|
chrome.runtime.onMessage.addListener((message) => {
|
|
185
|
-
|
|
186
|
-
if (frame?.type !== "buddi-state" || !frame.state) return;
|
|
187
|
-
model.state = frame.state;
|
|
188
|
-
draw();
|
|
189
|
-
void recount();
|
|
249
|
+
if (message?.type === "buddi-state") pushed();
|
|
190
250
|
});
|
|
191
251
|
setInterval(() => {
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
252
|
+
pushed();
|
|
253
|
+
}, 3e3);
|
|
254
|
+
const list = byId(document, "buddis");
|
|
255
|
+
list.addEventListener("change", (event) => {
|
|
256
|
+
const hit = rowOf(event.target, model);
|
|
257
|
+
if (!hit || !event.target.classList.contains("buddi-switch")) return;
|
|
258
|
+
void ask({ type: "buddi-enable", id: hit.entry.id, enabled: event.target.checked }).then((answer) => {
|
|
259
|
+
take(answer);
|
|
195
260
|
draw();
|
|
196
|
-
void recount();
|
|
197
261
|
});
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
const
|
|
262
|
+
});
|
|
263
|
+
list.addEventListener("click", (event) => {
|
|
264
|
+
const hit = rowOf(event.target, model);
|
|
265
|
+
const button = event.target?.closest?.("button");
|
|
266
|
+
if (!hit || !button) return;
|
|
267
|
+
const { entry, row } = hit;
|
|
268
|
+
if (button.classList.contains("buddi-copy")) {
|
|
269
|
+
copyInto(button, () => part(row, "code").textContent ?? "");
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
if (button.classList.contains("buddi-retry")) {
|
|
273
|
+
void ask({ type: "buddi-retry", id: entry.id }).then((answer) => {
|
|
274
|
+
take(answer);
|
|
275
|
+
draw();
|
|
276
|
+
});
|
|
277
|
+
return;
|
|
278
|
+
}
|
|
279
|
+
if (button.classList.contains("buddi-remove")) {
|
|
280
|
+
void ask({ type: "buddi-remove", id: entry.id }).then((answer) => {
|
|
281
|
+
take(answer);
|
|
282
|
+
draw();
|
|
283
|
+
});
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
286
|
+
if (button.classList.contains("buddi-open")) {
|
|
287
|
+
const url = dashboardUrl(entry.origin);
|
|
288
|
+
if (url) void chrome.tabs.create({ url });
|
|
289
|
+
return;
|
|
290
|
+
}
|
|
291
|
+
if (button.classList.contains("buddi-settings")) {
|
|
292
|
+
let lost = false;
|
|
293
|
+
const away = () => {
|
|
294
|
+
lost = true;
|
|
295
|
+
};
|
|
296
|
+
window.addEventListener("blur", away, { once: true });
|
|
297
|
+
document.addEventListener("visibilitychange", away, { once: true });
|
|
298
|
+
openSettings({
|
|
299
|
+
gateway: entry.origin,
|
|
300
|
+
code: entry.state.connection === "pairing" ? entry.state.code : null,
|
|
301
|
+
userAgent: navigator.userAgent,
|
|
302
|
+
// A link clicked in this page: Chrome hands buddi:// to the app registered for it, or does nothing.
|
|
303
|
+
launch: (url) => {
|
|
304
|
+
const link = document.createElement("a");
|
|
305
|
+
link.href = url;
|
|
306
|
+
link.rel = "noopener";
|
|
307
|
+
link.click();
|
|
308
|
+
},
|
|
309
|
+
openTab: (url) => {
|
|
310
|
+
void chrome.tabs.create({ url });
|
|
311
|
+
},
|
|
312
|
+
focusLost: () => lost || !document.hasFocus()
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
});
|
|
316
|
+
const connect = async () => {
|
|
202
317
|
model.refused = null;
|
|
203
|
-
|
|
204
|
-
const answer = await ask({ type: "buddi-connect", gateway });
|
|
318
|
+
const answer = await ask({ type: "buddi-add", gateway: field.value.trim() });
|
|
205
319
|
if (answer?.error) model.refused = answer.error;
|
|
206
|
-
else
|
|
207
|
-
|
|
320
|
+
else {
|
|
321
|
+
model.adding = false;
|
|
322
|
+
model.asked = null;
|
|
323
|
+
}
|
|
324
|
+
take(answer);
|
|
208
325
|
draw();
|
|
326
|
+
};
|
|
327
|
+
byId(document, "connect").addEventListener("click", () => {
|
|
328
|
+
void connect();
|
|
209
329
|
});
|
|
210
330
|
field.addEventListener("keydown", (event) => {
|
|
211
|
-
if (event.key === "Enter")
|
|
331
|
+
if (event.key === "Enter") void connect();
|
|
212
332
|
});
|
|
213
|
-
byId(document, "
|
|
214
|
-
model.
|
|
333
|
+
byId(document, "add-open").addEventListener("click", () => {
|
|
334
|
+
model.adding = true;
|
|
335
|
+
model.refused = null;
|
|
215
336
|
draw();
|
|
216
337
|
field.focus();
|
|
217
338
|
field.select();
|
|
218
339
|
});
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
byId(document, "open-settings").addEventListener("click", () => {
|
|
224
|
-
let lost = false;
|
|
225
|
-
const away = () => {
|
|
226
|
-
lost = true;
|
|
227
|
-
};
|
|
228
|
-
window.addEventListener("blur", away, { once: true });
|
|
229
|
-
document.addEventListener("visibilitychange", away, { once: true });
|
|
230
|
-
openSettings({
|
|
231
|
-
gateway: model.gateway,
|
|
232
|
-
code: model.state.connection === "pairing" ? model.state.code : null,
|
|
233
|
-
userAgent: navigator.userAgent,
|
|
234
|
-
// A link clicked in this page: Chrome hands buddi:// to the app registered for it, or does nothing.
|
|
235
|
-
launch: (url) => {
|
|
236
|
-
const link = document.createElement("a");
|
|
237
|
-
link.href = url;
|
|
238
|
-
link.rel = "noopener";
|
|
239
|
-
link.click();
|
|
240
|
-
},
|
|
241
|
-
openTab: (url) => {
|
|
242
|
-
void chrome.tabs.create({ url });
|
|
243
|
-
},
|
|
244
|
-
focusLost: () => lost || !document.hasFocus()
|
|
245
|
-
});
|
|
340
|
+
byId(document, "add-cancel").addEventListener("click", () => {
|
|
341
|
+
model.adding = false;
|
|
342
|
+
model.refused = null;
|
|
343
|
+
draw();
|
|
246
344
|
});
|
|
247
|
-
byId(document, "open-buddi").addEventListener("click", () => open(""));
|
|
248
345
|
void wireDownloads(document, chrome.permissions);
|
|
249
|
-
byId(document, "forget").addEventListener("click", async () => {
|
|
250
|
-
const answer = await ask({ type: "buddi-forget" });
|
|
251
|
-
if (answer?.state) {
|
|
252
|
-
model.state = answer.state;
|
|
253
|
-
model.tabs = null;
|
|
254
|
-
draw();
|
|
255
|
-
}
|
|
256
|
-
});
|
|
257
346
|
}
|
|
258
347
|
if (typeof chrome !== "undefined" && chrome?.runtime?.onMessage) void main();
|
|
259
348
|
export {
|
|
260
349
|
APP_WAIT_MS,
|
|
261
350
|
COPIED_FOR,
|
|
351
|
+
REDRAW_MS,
|
|
262
352
|
SETTINGS_HASH,
|
|
263
353
|
appSettingsLink,
|
|
264
|
-
|
|
354
|
+
copyInto,
|
|
265
355
|
dashboardUrl,
|
|
266
356
|
groupCode,
|
|
267
357
|
openSettings,
|
|
268
358
|
render,
|
|
359
|
+
rowView,
|
|
269
360
|
settingsWebUrl,
|
|
361
|
+
summary,
|
|
362
|
+
throttle,
|
|
270
363
|
triesApp,
|
|
271
|
-
viewOf,
|
|
272
364
|
wireCopy,
|
|
273
365
|
wireDownloads,
|
|
274
366
|
workingLine
|